Доработать код - Java

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

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

Помогите пожалуйста доработать код. Есть код экспорта jtable в excel. Экспорт проходит хорошо, когда у таблицы одно строчный заголовок, а когда заголовок многострочный то заголовок экспортируется не полностью. на скриншотах показаны заголовки таблиц. вот код
Листинг программы
  1. package javaapplication120;
  2. import java.io.*;
  3. import javax.swing.table.TableModel;
  4. import javax.swing.*;
  5. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  6. import org.apache.poi.hssf.util.CellRangeAddress;
  7. import org.apache.poi.ss.usermodel.Cell;
  8. import org.apache.poi.ss.usermodel.CellStyle;
  9. import org.apache.poi.ss.usermodel.Row;
  10. import org.apache.poi.ss.usermodel.Sheet;
  11. import org.apache.poi.ss.usermodel.Workbook;
  12. import org.apache.poi.ss.util.RegionUtil;
  13. public class ExcelExporter {
  14. ExcelExporter() {
  15. }
  16. public void exportTable(JTable jTable1, File file) throws IOException {
  17. FileOutputStream out = null;
  18. Workbook wb = new HSSFWorkbook();
  19. Sheet sheet = wb.createSheet("new sheet");
  20. int colCount = jTable1.getColumnCount();
  21. int colRow = jTable1.getRowCount();
  22. Row row = null;
  23. Cell cell = null;
  24. TableModel model = jTable1.getModel();
  25. out = new FileOutputStream(file);
  26. //экспорт заголовка таблицы
  27. for (int j = 0; j <= jTable1.getRowCount(); j++) {
  28. row = sheet.createRow(j);
  29. for (int i = 0; i < model.getColumnCount(); i++) {
  30. cell = row.createCell(i);
  31. cell.setCellValue(model.getColumnName(i).toString());
  32. }
  33. }
  34. //экспорт данных из таблицы в ексель
  35. for (int i = 0; i < jTable1.getRowCount(); i++) {
  36. row = sheet.createRow(i + 1);
  37. int f = jTable1.getColumnCount();
  38. for (int j = 0; j < jTable1.getColumnCount(); j++) {
  39. cell = row.createCell(j);
  40. cell.setCellValue(jTable1.getValueAt(i, j).toString());
  41. }
  42. }
  43. //прорисовка границ в ексель
  44. for (int y = 0; y <= colRow; y++) {
  45. for (int x = 0; x < colCount; x++) {
  46. CellRangeAddress range = new CellRangeAddress(y, y, x, x);
  47. RegionUtil.setBorderTop(CellStyle.BORDER_THIN, range, sheet, wb);
  48. RegionUtil.setBorderRight(CellStyle.BORDER_THIN, range, sheet, wb);
  49. RegionUtil.setBorderBottom(CellStyle.BORDER_THIN, range, sheet, wb);
  50. RegionUtil.setBorderLeft(CellStyle.BORDER_THIN, range, sheet, wb);
  51. }
  52. }
  53. for (int i = 0; i < colCount - 1; i++) {
  54. setBorder(colRow, colCount);
  55. sheet.autoSizeColumn(i);
  56. }
  57. wb.write(out);
  58. out.close();
  59. }
  60. private void setBorder(int i, int j) {
  61. Workbook wb = new HSSFWorkbook();
  62. Sheet sheet = wb.createSheet("new sheet");
  63. for (int y = 0; y <= i; y++) {
  64. for (int x = 0; x < j; x++) {
  65. CellRangeAddress range = new CellRangeAddress(y, y, x, x);
  66. RegionUtil.setBorderTop(CellStyle.BORDER_THIN, range, sheet,
  67. wb);
  68. RegionUtil.setBorderRight(CellStyle.BORDER_THIN, range, sheet,
  69. wb);
  70. RegionUtil.setBorderBottom(CellStyle.BORDER_THIN, range, sheet,
  71. wb);
  72. RegionUtil.setBorderLeft(CellStyle.BORDER_THIN, range, sheet,
  73. wb);
  74. }
  75. }
  76. }
  77. }
помогите пожалуйста.

Решение задачи: «Доработать код»

textual
Листинг программы
  1. package javaapplication120;
  2.  
  3. import java.io.*;
  4. import javax.swing.table.TableModel;
  5. import javax.swing.*;
  6. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  7. import org.apache.poi.hssf.util.CellRangeAddress;
  8. import org.apache.poi.ss.usermodel.Cell;
  9. import org.apache.poi.ss.usermodel.CellStyle;
  10. import org.apache.poi.ss.usermodel.Row;
  11. import org.apache.poi.ss.usermodel.Sheet;
  12. import org.apache.poi.ss.usermodel.Workbook;
  13. import org.apache.poi.ss.util.RegionUtil;
  14.  
  15. public class ExcelExporter {
  16.  
  17.     ExcelExporter() {
  18.     }
  19.  
  20.     public void exportTable(JTable jTable1, File file) throws IOException {
  21.         FileOutputStream out = null;
  22.         Workbook wb = new HSSFWorkbook();
  23.         Sheet sheet = wb.createSheet("new sheet");
  24.         int colCount = jTable1.getColumnCount();
  25.         int colRow = jTable1.getRowCount();
  26.         Row row = null;
  27.         Cell cell = null;
  28.         TableModel model = jTable1.getModel();
  29.         out = new FileOutputStream(file);
  30.         String a[] = {"Наименование", "ед.изм"};
  31.         //экспорт заголовка таблицы
  32.         sheet.shiftRows(0, jTable1.getColumnCount(), 1);
  33.         sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));
  34.         sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1));
  35.  
  36.         for (int j = 0; j <= jTable1.getRowCount(); j++) {
  37.             row = sheet.createRow(j);
  38.             for (int i = 0; i < model.getColumnCount(); i++) {
  39.                 cell = row.createCell(i);
  40.                 cell.setCellValue(model.getColumnName(i).toString());
  41.             }
  42.         }
  43.         sheet.addMergedRegion(new CellRangeAddress(0, 0, 2, 3));
  44.         sheet.addMergedRegion(new CellRangeAddress(0, 0, 4, 5));
  45.         sheet.addMergedRegion(new CellRangeAddress(0, 0, 6, 7));
  46.         sheet.addMergedRegion(new CellRangeAddress(0, 0, 8, 9));
  47.         //экспорт данных из таблицы в ексель    
  48.         for (int i = 0; i < jTable1.getRowCount(); i++) {
  49.             row = sheet.createRow(i + 2);
  50.             int f = jTable1.getColumnCount();
  51.             for (int j = 0; j < jTable1.getColumnCount(); j++) {
  52.                 cell = row.createCell(j);
  53.                 cell.setCellValue(jTable1.getValueAt(i, j).toString());
  54.  
  55.             }
  56.         }
  57.         for (int k = 0; k < 1; k++) {
  58.             row = sheet.createRow(k);
  59.             for (int j = 0; j < 12; j++) {
  60.                 if (j < 2) {
  61.                     cell = row.createCell(j);
  62.                     cell.setCellValue(a[j].toString());
  63.                 } else {
  64.                     cell = row.createCell(j);
  65.                     switch (j) {
  66.                         case 2:
  67.                             cell.setCellValue("Остаток");
  68.                             break;
  69.                         case 4:
  70.                             cell.setCellValue("Приход(ДТ)");
  71.                             break;
  72.                         case 6:
  73.                             cell.setCellValue("Расход(КТ)");
  74.                             break;
  75.                         case 8:
  76.                             cell.setCellValue("Остаток");
  77.                             break;
  78.                         default:
  79.                             break;
  80.                     }
  81.                 }
  82.             }
  83.         }
  84.         //прорисовка границ в ексель
  85.         for (int y = 0; y <= colRow + 1; y++) {
  86.             for (int x = 0; x < colCount; x++) {
  87.                 CellRangeAddress range = new CellRangeAddress(y, y, x, x);
  88.                 RegionUtil.setBorderTop(CellStyle.BORDER_THIN, range, sheet, wb);
  89.                 RegionUtil.setBorderRight(CellStyle.BORDER_THIN, range, sheet, wb);
  90.                 RegionUtil.setBorderBottom(CellStyle.BORDER_THIN, range, sheet, wb);
  91.                 RegionUtil.setBorderLeft(CellStyle.BORDER_THIN, range, sheet, wb);
  92.             }
  93.         }
  94.         for (int i = 0; i < colCount - 1; i++) {
  95.             setBorder(colRow, colCount);
  96.             sheet.autoSizeColumn(i);
  97.         }
  98.         sheet.setColumnWidth(0, 4000);
  99.         sheet.setVerticallyCenter(Boolean.TRUE);
  100.         wb.write(out);
  101.         out.close();
  102.     }
  103.  
  104.     private void setBorder(int i, int j) {
  105.         Workbook wb = new HSSFWorkbook();
  106.         Sheet sheet = wb.createSheet("new sheet");
  107.         for (int y = 0; y <= i; y++) {
  108.             for (int x = 0; x < j; x++) {
  109.                 CellRangeAddress range = new CellRangeAddress(y, y, x, x);
  110.                 RegionUtil.setBorderTop(CellStyle.BORDER_THIN, range, sheet,
  111.                         wb);
  112.                 RegionUtil.setBorderRight(CellStyle.BORDER_THIN, range, sheet,
  113.                         wb);
  114.                 RegionUtil.setBorderBottom(CellStyle.BORDER_THIN, range, sheet,
  115.                         wb);
  116.                 RegionUtil.setBorderLeft(CellStyle.BORDER_THIN, range, sheet,
  117.                         wb);
  118.             }
  119.         }
  120.     }
  121. }

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


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

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

9   голосов , оценка 3.889 из 5

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

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

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