瀏覽代碼

扩展tools-poi,ExcelWriter写入title时自动居中且按表头列数合并单元格

Signed-off-by: luoshi <luoshi@qmth.com.cn>
luoshi 1 年之前
父節點
當前提交
bb4193b6c8
共有 1 個文件被更改,包括 19 次插入10 次删除
  1. 19 10
      tools-poi/src/main/java/com/qmth/boot/tools/excel/ExcelWriter.java

+ 19 - 10
tools-poi/src/main/java/com/qmth/boot/tools/excel/ExcelWriter.java

@@ -9,10 +9,8 @@ import com.qmth.boot.tools.excel.model.ObjectParam;
 import com.qmth.boot.tools.excel.writer.XlsWriter;
 import com.qmth.boot.tools.excel.writer.XlsxWriter;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
 
 import java.io.IOException;
 import java.io.OutputStream;
@@ -50,7 +48,7 @@ public abstract class ExcelWriter {
         Sheet sheet = getWorkbook().createSheet(sheetName);
         AtomicInteger rowIndex = new AtomicInteger(0);
         //生成标题
-        writeTitle(sheet, rowIndex, titles);
+        writeTitle(sheet, rowIndex, titles, columnNames.length);
         //生成表头
         writeColumnName(sheet, rowIndex, columnNames);
         //生成数据
@@ -71,7 +69,7 @@ public abstract class ExcelWriter {
         Sheet sheet = getWorkbook().createSheet(sheetName);
         AtomicInteger rowIndex = new AtomicInteger(0);
         //生成标题
-        writeTitle(sheet, rowIndex, titles);
+        writeTitle(sheet, rowIndex, titles, columnNames.length);
         //生成表头
         writeColumnName(sheet, rowIndex, columnNames);
         //生成数据
@@ -92,10 +90,10 @@ public abstract class ExcelWriter {
     public <E> void writeObjects(String sheetName, String[] titles, Class<E> objectType, Iterator<E> objectIterator) {
         Sheet sheet = getWorkbook().createSheet(sheetName);
         AtomicInteger rowIndex = new AtomicInteger(0);
+        ObjectParam objectParam = ObjectParam.get(objectType);
         //生成标题
-        writeTitle(sheet, rowIndex, titles);
+        writeTitle(sheet, rowIndex, titles, objectParam.getColumnNames().length);
         //生成表头
-        ObjectParam objectParam = ObjectParam.get(objectType);
         writeColumnName(sheet, rowIndex, objectParam.getColumnNames());
         //生成数据
         while (objectIterator.hasNext()) {
@@ -103,12 +101,19 @@ public abstract class ExcelWriter {
         }
     }
 
-    private void writeTitle(Sheet sheet, AtomicInteger rowIndex, String[] titles) {
+    private void writeTitle(Sheet sheet, AtomicInteger rowIndex, String[] titles, int columnCount) {
         if (titles != null && titles.length > 0) {
             for (String title : titles) {
                 Row row = sheet.createRow(rowIndex.getAndIncrement());
                 Cell cell = row.createCell(0);
                 cell.setCellValue(title);
+                CellStyle style = getWorkbook().createCellStyle();
+                style.setAlignment(HorizontalAlignment.CENTER);
+                cell.setCellStyle(style);
+                //根据表头宽度合并单元格
+                if (columnCount > 1) {
+                    sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), 0, columnCount - 1));
+                }
             }
         }
     }
@@ -166,7 +171,11 @@ public abstract class ExcelWriter {
         }
     }
 
-    public abstract Workbook getWorkbook();
+    protected abstract Workbook getWorkbook();
+
+    private CellStyle createCellStyle() {
+        return getWorkbook().createCellStyle();
+    }
 
     public void output(OutputStream ous) throws IOException {
         getWorkbook().write(ous);