mirror of
https://gitee.com/dromara/hutool.git
synced 2025-05-02 20:02:49 +08:00
add style for columns and rows
This commit is contained in:
parent
04e0e10fc4
commit
ae16121e46
@ -9,6 +9,7 @@
|
||||
* 【core 】 增加Convert.toSet方法(issue#I3XFG2@Gitee)
|
||||
* 【core 】 CsvWriter增加writeBeans方法(pr#345@Gitee)
|
||||
* 【core 】 新增JAXBUtil(pr#346@Gitee)
|
||||
* 【poi 】 ExcelWriter新增setColumnStyleIfHasData和setRowStyleIfHasData(pr#347@Gitee)
|
||||
|
||||
### 🐞Bug修复
|
||||
* 【json 】 修复XML转义字符的问题(issue#I3XH09@Gitee)
|
||||
|
@ -1093,21 +1093,22 @@ public class ExcelWriter extends ExcelBase<ExcelWriter> {
|
||||
|
||||
/**
|
||||
* 对数据行整行加自定义样式 仅对数据单元格设置 write后调用
|
||||
*
|
||||
* <p>
|
||||
* {@link cn.hutool.poi.excel.ExcelWriter#setRowStyle(int, org.apache.poi.ss.usermodel.CellStyle)}
|
||||
* 这个方法加的样式会使整行没有数据的单元格也有样式
|
||||
* 特别是加背景色时很不美观 且有数据的单元格样式会被StyleSet中的样式覆盖掉
|
||||
* @param y 行坐标
|
||||
*
|
||||
* @param y 行坐标
|
||||
* @param style 自定义的样式
|
||||
* @return
|
||||
* @since
|
||||
* @return this
|
||||
* @since 5.7.3
|
||||
*/
|
||||
public ExcelWriter setRowStyleIfRowData(int y, CellStyle style) {
|
||||
if(y < 0) {
|
||||
public ExcelWriter setRowStyleIfHasData(int y, CellStyle style) {
|
||||
if (y < 0) {
|
||||
throw new IllegalArgumentException("Invalid row number (" + y + ")");
|
||||
}
|
||||
int columnCount = this.getColumnCount();
|
||||
for(int i=0;i<columnCount;i++){
|
||||
for (int i = 0; i < columnCount; i++) {
|
||||
this.setStyle(style, i, y);
|
||||
}
|
||||
return this;
|
||||
@ -1128,26 +1129,26 @@ public class ExcelWriter extends ExcelBase<ExcelWriter> {
|
||||
|
||||
/**
|
||||
* 设置整个列的样式 仅对数据单元格设置 write后调用
|
||||
*
|
||||
* <p>
|
||||
* {@link cn.hutool.poi.excel.ExcelWriter#setColumnStyle(int, org.apache.poi.ss.usermodel.CellStyle)}
|
||||
* 这个方法加的样式会使整列没有数据的单元格也有样式
|
||||
* 特别是加背景色时很不美观 且有数据的单元格样式会被StyleSet中的样式覆盖掉
|
||||
* @param x 列的索引
|
||||
* @param y 行的索引
|
||||
* @param style
|
||||
* @return
|
||||
* @since
|
||||
*
|
||||
* @param x 列的索引
|
||||
* @param y 起始行
|
||||
* @param style 样式
|
||||
* @return this
|
||||
* @since 5.7.3
|
||||
*/
|
||||
public ExcelWriter setColumnStyleIfColumnData(int x,int y, CellStyle style) {
|
||||
if(x < 0) {
|
||||
public ExcelWriter setColumnStyleIfHasData(int x, int y, CellStyle style) {
|
||||
if (x < 0) {
|
||||
throw new IllegalArgumentException("Invalid column number (" + x + ")");
|
||||
}
|
||||
if(y < 0) {
|
||||
if (y < 0) {
|
||||
throw new IllegalArgumentException("Invalid row number (" + y + ")");
|
||||
}
|
||||
int rowCount = this.getRowCount();
|
||||
int i = y;
|
||||
for(;i<rowCount;i++){
|
||||
for (int i = y; i < rowCount; i++) {
|
||||
this.setStyle(style, x, i);
|
||||
}
|
||||
return this;
|
||||
|
@ -38,9 +38,10 @@ import java.util.TreeMap;
|
||||
* @author looly
|
||||
*/
|
||||
public class ExcelWriteTest {
|
||||
|
||||
@Test
|
||||
// @Ignore
|
||||
public void testRowOrColumnCellStyle(){
|
||||
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);
|
||||
List<?> row3 = CollUtil.newArrayList("aa2", "bb2", "cc2", "dd2", DateUtil.date(), 0.111);
|
||||
@ -48,15 +49,15 @@ public class ExcelWriteTest {
|
||||
List<?> row5 = CollUtil.newArrayList("aa4", "bb4", "cc4", "dd4", DateUtil.date(), 28.00);
|
||||
|
||||
List<List<?>> rows = CollUtil.newArrayList(row1, row2, row3, row4, row5);
|
||||
BigExcelWriter overtimeWriter = ExcelUtil.getBigWriter("e:/excel/single_line.xlsx");
|
||||
BigExcelWriter overtimeWriter = ExcelUtil.getBigWriter("d:/test/style_line.xlsx");
|
||||
|
||||
overtimeWriter.write(rows,true);
|
||||
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.setFillForegroundColor((short) 13);
|
||||
cellStyle.setDataFormat((short) 22);//时间格式
|
||||
cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
|
||||
@ -66,18 +67,18 @@ public class ExcelWriteTest {
|
||||
|
||||
//现增加的设置行、列样式的方法
|
||||
//给第三行加背景色
|
||||
overtimeWriter.setRowStyleIfRowData(2,cellStyle);
|
||||
overtimeWriter.setRowStyleIfHasData(2, cellStyle);
|
||||
//给第二列加背景色 从第一行开始加(用于控制有表头时)
|
||||
overtimeWriter.setColumnStyleIfColumnData(1,0,cellStyle);
|
||||
overtimeWriter.setColumnStyleIfHasData(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.setFillForegroundColor((short) 13);
|
||||
cellStyle1.setDataFormat((short) 2);//小数保留两位
|
||||
cellStyle1.setAlignment(HorizontalAlignment.CENTER);
|
||||
cellStyle1.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
overtimeWriter.setStyle(cellStyle1,5,2);//由于第6列是数字 上面应用了日期格式会错乱,这里单独设置下第六列的格式
|
||||
overtimeWriter.setStyle(cellStyle1, 5, 2);//由于第6列是数字 上面应用了日期格式会错乱,这里单独设置下第六列的格式
|
||||
|
||||
overtimeWriter.close();
|
||||
}
|
||||
@ -553,7 +554,7 @@ public class ExcelWriteTest {
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void formatTest(){
|
||||
public void formatTest() {
|
||||
final ExcelWriter writer = ExcelUtil.getWriter("d:/test/formatTest.xlsx");
|
||||
final CellStyle cellStyle = writer.createCellStyle(0, 0);
|
||||
cellStyle.setDataFormat(writer.getWorkbook().createDataFormat().getFormat("yyyy-mm-dd"));
|
||||
@ -562,7 +563,7 @@ public class ExcelWriteTest {
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void writeNumberFormatTest(){
|
||||
public void writeNumberFormatTest() {
|
||||
final ExcelWriter writer = ExcelUtil.getWriter("d:/test/formatTest.xlsx");
|
||||
writer.disableDefaultStyle();
|
||||
writer.writeRow(ListUtil.toList(51.33333333, 90.111111111));
|
||||
@ -574,11 +575,11 @@ public class ExcelWriteTest {
|
||||
@Test
|
||||
@Ignore
|
||||
public void writeSecHeadRowTest() {
|
||||
List<?> row1 = CollUtil.newArrayList(1,"aa", "bb", "cc", "dd", "ee");
|
||||
List<?> row2 = CollUtil.newArrayList(2,"aa1", "bb1", "cc1", "dd1", "ee1");
|
||||
List<?> row3 = CollUtil.newArrayList(3,"aa2", "bb2", "cc2", "dd2", "ee2");
|
||||
List<?> row4 = CollUtil.newArrayList(4,"aa3", "bb3", "cc3", "dd3", "ee3");
|
||||
List<?> row5 = CollUtil.newArrayList(5,"aa4", "bb4", "cc4", "dd4", "ee4");
|
||||
List<?> row1 = CollUtil.newArrayList(1, "aa", "bb", "cc", "dd", "ee");
|
||||
List<?> row2 = CollUtil.newArrayList(2, "aa1", "bb1", "cc1", "dd1", "ee1");
|
||||
List<?> row3 = CollUtil.newArrayList(3, "aa2", "bb2", "cc2", "dd2", "ee2");
|
||||
List<?> row4 = CollUtil.newArrayList(4, "aa3", "bb3", "cc3", "dd3", "ee3");
|
||||
List<?> row5 = CollUtil.newArrayList(5, "aa4", "bb4", "cc4", "dd4", "ee4");
|
||||
|
||||
List<List<?>> rows = CollUtil.newArrayList(row1, row2, row3, row4, row5);
|
||||
|
||||
@ -595,21 +596,21 @@ public class ExcelWriteTest {
|
||||
font.setFontHeightInPoints((short) 15);
|
||||
font.setFontName("Arial");
|
||||
//设置边框样式
|
||||
StyleUtil.setBorder(cellStyle,BorderStyle.THICK,IndexedColors.RED);
|
||||
StyleUtil.setBorder(cellStyle, BorderStyle.THICK, IndexedColors.RED);
|
||||
cellStyle.setFont(font);
|
||||
|
||||
// 合并单元格后的标题行,使用设置好的样式
|
||||
writer.merge(0,1,0,row1.size() - 1, "标题XXXXXXXX",cellStyle);
|
||||
writer.merge(0, 1, 0, row1.size() - 1, "标题XXXXXXXX", cellStyle);
|
||||
Console.log(writer.getCurrentRow());
|
||||
|
||||
//设置复杂表头
|
||||
writer.merge(2,3,0,0,"序号",true);
|
||||
writer.merge(2,2,1,2,"AABB",true);
|
||||
writer.merge(2,3,3,3,"CCCC",true);
|
||||
writer.merge(2,2,4,5,"DDEE",true);
|
||||
writer.merge(2, 3, 0, 0, "序号", true);
|
||||
writer.merge(2, 2, 1, 2, "AABB", true);
|
||||
writer.merge(2, 3, 3, 3, "CCCC", true);
|
||||
writer.merge(2, 2, 4, 5, "DDEE", true);
|
||||
writer.setCurrentRow(3);
|
||||
|
||||
List<String> sechead = CollUtil.newArrayList("AA","BB","DD","EE");
|
||||
List<String> sechead = CollUtil.newArrayList("AA", "BB", "DD", "EE");
|
||||
writer.writeSecHeadRow(sechead);
|
||||
// 一次性写出内容,使用默认样式
|
||||
writer.write(rows);
|
||||
@ -623,7 +624,7 @@ public class ExcelWriteTest {
|
||||
*/
|
||||
@Test
|
||||
@Ignore
|
||||
public void editTest(){
|
||||
public void editTest() {
|
||||
// 生成文件
|
||||
File file = new File("d:/test/100_.xlsx");
|
||||
FileUtil.del(file);
|
||||
|
Loading…
Reference in New Issue
Block a user