diff --git a/README.md b/README.md index a4ccea5e5579c8b7c3596d2805b78476fb1b2665..1b88c7b98c06a3c937cce2acddf94c1efe918d96 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
-

Apache POI Export

+

Apache POI Export

Static Badge Static Badge Static Badge @@ -154,7 +154,7 @@ Exporter就建立在这一条基础假设之上来保证表格设计的功能完 输入图片说明 -##### 策略类 +##### 策略类起步 你需要编写自己的策略类,然后实现这个接口: @@ -184,12 +184,39 @@ public class MyStrategy implements BuildStrategy { sheet.input("测试数据2", "B1"); sheet.input(3.14, "D5"); sheet.input(1024, "E14"); - + /*上面是写死的一些数据,也可以在data中拿*/ } } ``` +##### 链式编程(代码示例) +```java +public class MyStrategy implements BuildStrategy { + public void build(XSheet sheet, List data){ + sheet.getCell("A1") + .setBold() + .setAlignment(1) + .setBkColor("#00FFBB") + .setBorder().apply(); + /*最后记得带上.apply()*/ + } +} +``` + +所有针对于单元格样式的链式编程方法表格如下: + +| 方法名 | 参数 | 作用 | +| :--------------: | :-------------: | :-------------------------------------------------: | +| **setFontColor** | String hexColor | *设置字体颜色* | +| **setFontSize** | short size | *设置字体大小* | +| **setBold** | 无 | *设置字体加粗* | +| **setWrapText** | 无 | *设置文本自动换行* | +| **setAlignment** | int mode | *0:水平和垂直都居中,1:仅水平居中,2:仅垂直居中* | +| **setBorder** | 无 | *设置单元格四周边框为细线* | +| **setBkColor** | String hexColor | *设置单元格背景颜色* | + +详细文档教程:[📖 Exporter参考文档](./参考文档.md) #### 如何部署到本地? 可从Intellij IDEA中创建项目,选择Project form Version Control,填写Git仓库地址: diff --git a/poi-export-core/pom.xml b/poi-export-core/pom.xml index 456f29223b97d3742a52c78abd79fbe66d1346de..e595c678b815098f7d4fb705e34974cbaf57aa9d 100644 --- a/poi-export-core/pom.xml +++ b/poi-export-core/pom.xml @@ -42,6 +42,18 @@ 10.1.44 compile + + junit + junit + 4.13.2 + test + + + org.junit.jupiter + junit-jupiter-params + 5.12.2 + test + diff --git a/poi-export-core/src/main/java/com/gitee/carbon/service/XCell.java b/poi-export-core/src/main/java/com/gitee/carbon/service/XCell.java index e12ade572e2fcd468a8b58fe8f74fd5202932a7c..15fb1a530c207f1aca6fd78b7986b696c9fddaf1 100644 --- a/poi-export-core/src/main/java/com/gitee/carbon/service/XCell.java +++ b/poi-export-core/src/main/java/com/gitee/carbon/service/XCell.java @@ -44,6 +44,32 @@ public class XCell { return this; } + /** + * 设置字体颜色(使用十六进制颜色值) + * + * @param hexColor 十六进制颜色字符串(如 "#FF0000") + * @return 返回当前 XCell 实例,支持链式调用 + */ + public XCell setFontColor(String hexColor) { + // 移除可能的#前缀 + String cleanHexColor = hexColor.replace("#", ""); + + // 判断是否为 XSSFCellStyle(Excel 2007+格式),如果是则使用 XSSFColor 设置 RGB 颜色 + if (font instanceof org.apache.poi.xssf.usermodel.XSSFFont) { + byte[] rgb = new byte[3]; + rgb[0] = (byte) ((Integer.parseInt(cleanHexColor.substring(0, 2), 16)) & 0xFF); // 红色分量 + rgb[1] = (byte) ((Integer.parseInt(cleanHexColor.substring(2, 4), 16)) & 0xFF); // 绿色分量 + rgb[2] = (byte) ((Integer.parseInt(cleanHexColor.substring(4, 6), 16)) & 0xFF); // 蓝色分量 + XSSFColor xssfColor = new XSSFColor(rgb); + ((org.apache.poi.xssf.usermodel.XSSFFont) font).setColor(xssfColor); + } else { + // 对于 HSSF(Excel 97-2003格式)可以使用 IndexedColors 或其他方式处理 + // 这里可以根据需要添加回退逻辑 + } + + return this; + } + /** * 设置字体大小 * diff --git a/poi-export-core/src/main/java/com/gitee/carbon/utils/CellIndex.java b/poi-export-core/src/main/java/com/gitee/carbon/utils/CellIndex.java index d817d7c8923e364a615d7226d05486181d0f34bc..dc985517fe83f1d6761731223ac9f1c00027d702 100644 --- a/poi-export-core/src/main/java/com/gitee/carbon/utils/CellIndex.java +++ b/poi-export-core/src/main/java/com/gitee/carbon/utils/CellIndex.java @@ -19,4 +19,9 @@ public class CellIndex { public Integer getCol() { return col; } + + @Override + public String toString() { + return "CellIndex [row=" + row + ", col=" + col + "]"; + } } diff --git a/poi-export-core/src/test/java/com/gitee/carbon/service/XCellTest.java b/poi-export-core/src/test/java/com/gitee/carbon/service/XCellTest.java new file mode 100644 index 0000000000000000000000000000000000000000..57b20f9c8538aeabfb757565b98e57a5f18d3a3f --- /dev/null +++ b/poi-export-core/src/test/java/com/gitee/carbon/service/XCellTest.java @@ -0,0 +1,4 @@ +package com.gitee.carbon.service; + +public class XCellTest { +} diff --git a/poi-export-core/src/test/java/com/gitee/carbon/utils/CellIndexTest.java b/poi-export-core/src/test/java/com/gitee/carbon/utils/CellIndexTest.java new file mode 100644 index 0000000000000000000000000000000000000000..009c8e5faadfa8f3a0112d27232424eff1728e77 --- /dev/null +++ b/poi-export-core/src/test/java/com/gitee/carbon/utils/CellIndexTest.java @@ -0,0 +1,4 @@ +package com.gitee.carbon.utils; + +public class CellIndexTest { +} diff --git a/poi-export-core/src/test/java/com/gitee/carbon/utils/CoordinateTest.java b/poi-export-core/src/test/java/com/gitee/carbon/utils/CoordinateTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6a4b537df6072f8b83e862eac7aa1326ffcdcff4 --- /dev/null +++ b/poi-export-core/src/test/java/com/gitee/carbon/utils/CoordinateTest.java @@ -0,0 +1,19 @@ +package com.gitee.carbon.utils; + +import org.junit.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +public class CoordinateTest { + @ParameterizedTest + @ValueSource(strings = { + "A1", "B2", "C3", "D4", "E5", + "F6", "G7", "H8", "I9", "J10", + "K11", "L12", "M13", "N14", "O15", + "P16", "Q17", "R18", "S19", "T20", + "U21", "V22"}) + + public void testParseCoordinate(String excelCoordinate) { + System.out.println(Coordinate.parseCoordinate(excelCoordinate)); + } +} diff --git "a/\345\217\202\350\200\203\346\226\207\346\241\243.md" "b/\345\217\202\350\200\203\346\226\207\346\241\243.md" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391