JTable экспорт в excel - Java

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, подскажите кто знает как экспортировать пустые ячейки JTable в Excel, т.е. у меня есть таблица в которой заполнены не все ячейки, при экспорте такой таблицы появляется ошибка
Листинг программы
  1. java.lang.NullPointerException
  2. at javaapplication120.ExcelExporterProduction.exportTable(ExcelExporterProduction.java:63)
  3. at javaapplication120.DIpp.jMenuItem1ActionPerformed(DIpp .java:3044)
  4. at javaapplication120.DIpp.access$3000(DIpp .java:44)
  5. at javaapplication120.DIpp$39.actionPerformed(DIpp .java:1212)
  6. at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
  7. at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
  8. at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
  9. at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
  10. at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
  11. at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
  12. at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
  13. at java.awt.Component.processMouseEvent(Component.java:6533)
  14. at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
  15. at java.awt.Component.processEvent(Component.java:6298)
  16. at java.awt.Container.processEvent(Container.java:2236)
  17. at java.awt.Component.dispatchEventImpl(Component.java:4889)
  18. at java.awt.Container.dispatchEventImpl(Container.java:2294)
  19. at java.awt.Component.dispatchEvent(Component.java:4711)
  20. at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
  21. at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
  22. at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
  23. at java.awt.Container.dispatchEventImpl(Container.java:2280)
  24. at java.awt.Window.dispatchEventImpl(Window.java:2746)
  25. at java.awt.Component.dispatchEvent(Component.java:4711)
  26. at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
  27. at java.awt.EventQueue.access$500(EventQueue.java:97)
  28. at java.awt.EventQueue$3.run(EventQueue.java:709)
  29. at java.awt.EventQueue$3.run(EventQueue.java:703)
  30. at java.security.AccessController.doPrivileged(Native Method)
  31. at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
  32. at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
  33. at java.awt.EventQueue$4.run(EventQueue.java:731)
  34. at java.awt.EventQueue$4.run(EventQueue.java:729)
  35. at java.security.AccessController.doPrivileged(Native Method)
  36. at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
  37. at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
  38. at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
  39. at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
  40. at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
  41. at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
  42. at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
  43. at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
соответственно ругается на то что не вся таблица заполнена. А добавлять в каждую ячейку нули и потом их удалять в excel не очень то и охота. вот сам код экспорта
Листинг программы
  1. /*
  2. * To change this template, choose Tools | Templates
  3. * and open the template in the editor.
  4. */
  5. package javaapplication120;
  6. import java.io.File;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import javax.swing.JTable;
  10. import javax.swing.table.TableModel;
  11. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  12. import org.apache.poi.ss.util.CellRangeAddress;
  13. import org.apache.poi.ss.usermodel.Cell;
  14. import org.apache.poi.ss.usermodel.CellStyle;
  15. import org.apache.poi.ss.usermodel.Row;
  16. import org.apache.poi.ss.usermodel.Sheet;
  17. import org.apache.poi.ss.usermodel.Workbook;
  18. import org.apache.poi.ss.util.RegionUtil;
  19. /**
  20. *
  21. * @author admin
  22. */
  23. class ExcelExporterProduction {
  24. ExcelExporterProduction() {
  25. }
  26. public void exportTable(JTable jTable1, File file) throws IOException {
  27. FileOutputStream out = null;
  28. Workbook wb = new HSSFWorkbook();
  29. Sheet sheet = wb.createSheet("new sheet");
  30. int colCount = jTable1.getColumnCount();
  31. int colRow = jTable1.getRowCount();
  32. Row row = null;
  33. Cell cell = null;
  34. TableModel model = jTable1.getModel();
  35. out = new FileOutputStream(file);
  36. String a[] = {"Наименование", "ед.изм"};
  37. //экспорт заголовка таблицы
  38. sheet.shiftRows(0, jTable1.getColumnCount(), 1);
  39. sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));
  40. sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1));
  41. for (int j = 0; j <= jTable1.getRowCount(); j++) {
  42. row = sheet.createRow(j);
  43. for (int i = 0; i < model.getColumnCount(); i++) {
  44. cell = row.createCell(i);
  45. cell.setCellValue(model.getColumnName(i).toString());
  46. }
  47. }
  48. sheet.addMergedRegion(new CellRangeAddress(0, 0, 2, 3));
  49. sheet.addMergedRegion(new CellRangeAddress(0, 0, 4, 5));
  50. sheet.addMergedRegion(new CellRangeAddress(0, 0, 6, 7));
  51. sheet.addMergedRegion(new CellRangeAddress(0, 0, 8, 9));
  52. //экспорт данных из таблицы в ексель
  53. for (int i = 0; i < jTable1.getRowCount(); i++) {
  54. row = sheet.createRow(i + 2);
  55. int f = jTable1.getColumnCount();
  56. for (int j = 0; j < jTable1.getColumnCount(); j++) {
  57. cell = row.createCell(j);
  58. cell.setCellValue(jTable1.getValueAt(i, j).toString());
  59. }
  60. }
  61. for (int k = 0; k < 1; k++) {
  62. row = sheet.createRow(k);
  63. for (int j = 0; j < 12; j++) {
  64. if (j < 2) {
  65. cell = row.createCell(j);
  66. cell.setCellValue(a[j].toString());
  67. } else {
  68. cell = row.createCell(j);
  69. switch (j) {
  70. case 2:
  71. cell.setCellValue("Остаток");
  72. break;
  73. case 4:
  74. cell.setCellValue("Приход(ДТ)");
  75. break;
  76. case 6:
  77. cell.setCellValue("Расход(КТ)");
  78. break;
  79. case 8:
  80. cell.setCellValue("Остаток");
  81. break;
  82. default:
  83. break;
  84. }
  85. }
  86. }
  87. }
  88. //прорисовка границ в ексель
  89. for (int y = 0; y <= colRow + 1; y++) {
  90. for (int x = 0; x < colCount; x++) {
  91. CellRangeAddress range = new CellRangeAddress(y, y, x, x);
  92. RegionUtil.setBorderTop(CellStyle.BORDER_THIN, range, sheet, wb);
  93. RegionUtil.setBorderRight(CellStyle.BORDER_THIN, range, sheet, wb);
  94. RegionUtil.setBorderBottom(CellStyle.BORDER_THIN, range, sheet, wb);
  95. RegionUtil.setBorderLeft(CellStyle.BORDER_THIN, range, sheet, wb);
  96. }
  97. }
  98. for (int i = 0; i < colCount - 1; i++) {
  99. setBorder(colRow, colCount);
  100. sheet.autoSizeColumn(i);
  101. }
  102. sheet.setColumnWidth(0, 4000);
  103. sheet.setVerticallyCenter(Boolean.TRUE);
  104. wb.write(out);
  105. out.close();
  106. }
  107. private void setBorder(int i, int j) {
  108. Workbook wb = new HSSFWorkbook();
  109. Sheet sheet = wb.createSheet("new sheet");
  110. for (int y = 0; y <= i; y++) {
  111. for (int x = 0; x < j; x++) {
  112. CellRangeAddress range = new CellRangeAddress(y, y, x, x);
  113. RegionUtil.setBorderTop(CellStyle.BORDER_THIN, range, sheet,
  114. wb);
  115. RegionUtil.setBorderRight(CellStyle.BORDER_THIN, range, sheet,
  116. wb);
  117. RegionUtil.setBorderBottom(CellStyle.BORDER_THIN, range, sheet,
  118. wb);
  119. RegionUtil.setBorderLeft(CellStyle.BORDER_THIN, range, sheet,
  120. wb);
  121. }
  122. }
  123. }
  124. }
и метод который вызывает этот класс
Листинг программы
  1. try {
  2. JFileChooser fileChooser = new JFileChooser();
  3. int retval = fileChooser.showSaveDialog(jButton1);
  4. if (retval == JFileChooser.APPROVE_OPTION) {
  5. File file = fileChooser.getSelectedFile();
  6. if (file != null) {
  7. if (!file.getName().toLowerCase().endsWith(".xls")) {
  8. file = new File(file.getParentFile(), file.getName() + ".xls");
  9. }
  10. try {
  11. ExcelExporterProduction exp = new ExcelExporterProduction();
  12. exp.exportTable(jTable2, file);
  13. } catch (UnsupportedEncodingException e) {
  14. e.printStackTrace();
  15. } catch (FileNotFoundException e) {
  16. e.printStackTrace();
  17. System.out.println("not found");
  18. } catch (IOException e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. }
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }

Решение задачи: «JTable экспорт в excel»

textual
Листинг программы
  1.    cell.setCellValue(jTable1.getValueAt(i, j).toString());

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы