From f4281208908bb7a71f5d91eccecfd492c7725973 Mon Sep 17 00:00:00 2001 From: wenbei <569063716@qq.com> Date: Thu, 24 Jun 2021 17:34:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=AF=B9=E5=AF=BC=E5=87=BA=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=95=B4=E8=A1=8C=E6=88=96=E6=95=B4=E5=88=97?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=A0=B7=E5=BC=8F=20fix:=E5=8E=9Fse?= =?UTF-8?q?tRowStyle=20setColumnStyle=E4=BC=9A=E4=BD=BF=E6=97=A0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9A=84cell=E4=B9=9F=E6=9C=89=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=B8=94=E6=9C=89=E6=95=B0=E6=8D=AE=E7=9A=84cell=E7=9A=84?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E4=BC=9A=E8=A2=ABStyleSet=E7=9A=84=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E8=A6=86=E7=9B=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/poi/excel/ExcelWriter.java | 49 +++++++++++++++++++ .../cn/hutool/poi/excel/ExcelWriteTest.java | 38 ++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java index 80c59d1a9..28e462376 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java @@ -1091,6 +1091,28 @@ public class ExcelWriter extends ExcelBase { return this; } + /** + * 对数据行整行加自定义样式 write后调用 + * + * {@link cn.hutool.poi.excel.ExcelWriter#setRowStyle(int, org.apache.poi.ss.usermodel.CellStyle)} + * 这个方法加的样式会使整行没有数据的单元格也有样式 + * 特别是加背景色时很不美观 且有数据的单元格样式会被StyleSet中的样式覆盖掉 + * @param y 行坐标 + * @param style 自定义的样式 + * @return + * @since + */ + public ExcelWriter setRowStyleIfRowData(int y, CellStyle style) { + if(y < 0) { + throw new IllegalArgumentException("Invalid row number (" + y + ")"); + } + int columnCount = this.getColumnCount(); + for(int i=0;i { return this; } + /** + * 设置整个列的样式 write后调用 + * + * {@link cn.hutool.poi.excel.ExcelWriter#setColumnStyle(int, org.apache.poi.ss.usermodel.CellStyle)} + * 这个方法加的样式会使整列没有数据的单元格也有样式 + * 特别是加背景色时很不美观 且有数据的单元格样式会被StyleSet中的样式覆盖掉 + * @param x 列的索引 + * @param y 行的索引 + * @param style + * @return + * @since + */ + public ExcelWriter setColumnStyleIfColumnDate(int x,int y, CellStyle style) { + if(x < 0) { + throw new IllegalArgumentException("Invalid column number (" + x + ")"); + } + if(y < 0) { + throw new IllegalArgumentException("Invalid row number (" + y + ")"); + } + int rowCount = this.getRowCount(); + int i = y; + for(;i row1 = CollUtil.newArrayList("aaaaa", "bb", "cc", "dd", DateUtil.date(), 3.22676575765); + List row2 = CollUtil.newArrayList("aa1", "bb1", "cc1", "dd1", DateUtil.date(), 250.7676); + List row3 = CollUtil.newArrayList("aa2", "bb2", "cc2", "dd2", DateUtil.date(), 0.111); + List row4 = CollUtil.newArrayList("aa3", "bb3", "cc3", "dd3", DateUtil.date(), 35); + List row5 = CollUtil.newArrayList("aa4", "bb4", "cc4", "dd4", DateUtil.date(), 28.00); + + List> rows = CollUtil.newArrayList(row1, row2, row3, row4, row5); + BigExcelWriter overtimeWriter = ExcelUtil.getBigWriter("e:/excel/single_line.xlsx"); + + overtimeWriter.write(rows,true); + + CellStyle cellStyle = overtimeWriter.getWorkbook().createCellStyle(); + StyleUtil.setBorder(cellStyle, BorderStyle.THIN, IndexedColors.BLACK); + cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + cellStyle.setFillForegroundColor((short)13); + cellStyle.setDataFormat((short)22);//时间格式 + cellStyle.setAlignment(HorizontalAlignment.CENTER); + cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + + //给第三行加背景色 + overtimeWriter.setRowStyleIfRowData(2,cellStyle); + //给第二列加背景色 从第一行开始加(用于控制有表头时) + overtimeWriter.setColumnStyleIfColumnDate(1,0,cellStyle); + + CellStyle cellStyle1 = overtimeWriter.getWorkbook().createCellStyle(); + StyleUtil.setBorder(cellStyle1, BorderStyle.THIN, IndexedColors.BLACK); + cellStyle1.setFillPattern(FillPatternType.SOLID_FOREGROUND); + cellStyle1.setFillForegroundColor((short)13); + cellStyle1.setDataFormat((short)2);//小数保留两位 + cellStyle1.setAlignment(HorizontalAlignment.CENTER); + cellStyle1.setVerticalAlignment(VerticalAlignment.CENTER); + overtimeWriter.setStyle(cellStyle1,5,2);//由于第6列是数字 上面应用了日期格式会错乱,这里单独设置下第六列的格式 + + overtimeWriter.close(); + } @Test @Ignore From 5267a02467e2f506e034444c6cc3f7e1134ee776 Mon Sep 17 00:00:00 2001 From: wenbei <569063716@qq.com> Date: Thu, 24 Jun 2021 19:38:02 +0800 Subject: [PATCH 2/2] =?UTF-8?q?modify=20method=20name=EF=BC=8Cupdate=20des?= =?UTF-8?q?c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/poi/excel/ExcelWriter.java | 6 +++--- .../test/java/cn/hutool/poi/excel/ExcelWriteTest.java | 9 +++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java index 28e462376..dde414500 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelWriter.java @@ -1092,7 +1092,7 @@ public class ExcelWriter extends ExcelBase { } /** - * 对数据行整行加自定义样式 write后调用 + * 对数据行整行加自定义样式 仅对数据单元格设置 write后调用 * * {@link cn.hutool.poi.excel.ExcelWriter#setRowStyle(int, org.apache.poi.ss.usermodel.CellStyle)} * 这个方法加的样式会使整行没有数据的单元格也有样式 @@ -1127,7 +1127,7 @@ public class ExcelWriter extends ExcelBase { } /** - * 设置整个列的样式 write后调用 + * 设置整个列的样式 仅对数据单元格设置 write后调用 * * {@link cn.hutool.poi.excel.ExcelWriter#setColumnStyle(int, org.apache.poi.ss.usermodel.CellStyle)} * 这个方法加的样式会使整列没有数据的单元格也有样式 @@ -1138,7 +1138,7 @@ public class ExcelWriter extends ExcelBase { * @return * @since */ - public ExcelWriter setColumnStyleIfColumnDate(int x,int y, CellStyle style) { + public ExcelWriter setColumnStyleIfColumnData(int x,int y, CellStyle style) { if(x < 0) { throw new IllegalArgumentException("Invalid column number (" + x + ")"); } diff --git a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelWriteTest.java b/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelWriteTest.java index 5bfd90b0d..2f1210893 100644 --- a/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelWriteTest.java +++ b/hutool-poi/src/test/java/cn/hutool/poi/excel/ExcelWriteTest.java @@ -39,7 +39,7 @@ import java.util.TreeMap; */ public class ExcelWriteTest { @Test - @Ignore +// @Ignore public void testRowOrColumnCellStyle(){ List row1 = CollUtil.newArrayList("aaaaa", "bb", "cc", "dd", DateUtil.date(), 3.22676575765); List row2 = CollUtil.newArrayList("aa1", "bb1", "cc1", "dd1", DateUtil.date(), 250.7676); @@ -60,10 +60,15 @@ public class ExcelWriteTest { cellStyle.setAlignment(HorizontalAlignment.CENTER); cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + //原设置行、列样式的方法 +// overtimeWriter.setRowStyle(2,cellStyle); +// overtimeWriter.setColumnStyle(1,cellStyle); + + //现增加的设置行、列样式的方法 //给第三行加背景色 overtimeWriter.setRowStyleIfRowData(2,cellStyle); //给第二列加背景色 从第一行开始加(用于控制有表头时) - overtimeWriter.setColumnStyleIfColumnDate(1,0,cellStyle); + overtimeWriter.setColumnStyleIfColumnData(1,0,cellStyle); CellStyle cellStyle1 = overtimeWriter.getWorkbook().createCellStyle(); StyleUtil.setBorder(cellStyle1, BorderStyle.THIN, IndexedColors.BLACK);