diff --git a/img/readme/quickstart/write/longestMatchColumnWidthWrite.png b/img/readme/quickstart/write/longestMatchColumnWidthWrite.png new file mode 100644 index 0000000..c8a0604 Binary files /dev/null and b/img/readme/quickstart/write/longestMatchColumnWidthWrite.png differ diff --git a/quickstart.md b/quickstart.md index 4b2d4ac..3a7fd41 100644 --- a/quickstart.md +++ b/quickstart.md @@ -22,6 +22,7 @@ DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/ja * [合并单元格](#mergeWrite) * [使用table去写入](#tableWrite) * [动态头,实时生成头写入](#dynamicHeadWrite) +* [自动列宽(不太精确)](#longestMatchColumnWidthWrite) * [web中的写](#webWrite) ## 读excel样例 @@ -739,6 +740,56 @@ public class WidthAndHeightData { } ``` +### 自动列宽(不太精确) +##### excel示例 +![img](img/readme/quickstart/write/longestMatchColumnWidthWrite.png) +##### 对象 +```java +@Data +public class LongestMatchColumnWidthData { + @ExcelProperty("字符串标题") + private String string; + @ExcelProperty("日期标题很长日期标题很长日期标题很长很长") + private Date date; + @ExcelProperty("数字") + private Double doubleData; +} +``` +##### 代码 +```java + /** + * 自动列宽(不太精确) + *

+ * 这个目前不是很好用,比如有数字就会导致换行。而且长度也不是刚好和实际长度一致。 所以需要精确到刚好列宽的慎用。 当然也可以自己参照 + * {@link LongestMatchColumnWidthStyleStrategy}重新实现. + *

+ * poi 自带{@link SXSSFSheet#autoSizeColumn(int)} 对中文支持也不太好。目前没找到很好的算法。 有的话可以推荐下。 + * + *

  • 1. 创建excel对应的实体对象 参照{@link DemoData} + *
  • 3. 注册策略{@link LongestMatchColumnWidthStyleStrategy} + *
  • 2. 直接写即可 + */ + @Test + public void longestMatchColumnWidthWrite() { + String fileName = + TestFileUtil.getPath() + "longestMatchColumnWidthWrite" + System.currentTimeMillis() + ".xlsx"; + // 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 + EasyExcelFactory.write(fileName, LongestMatchColumnWidthData.class).sheet("模板").doWrite(dataLong()); + } + + private List dataLong() { + List list = new ArrayList(); + for (int i = 0; i < 10; i++) { + LongestMatchColumnWidthData data = new LongestMatchColumnWidthData(); + data.setString("测试很长的字符串测试很长的字符串测试很长的字符串" + i); + data.setDate(new Date()); + data.setDoubleData(1000000000000.0); + list.add(data); + } + return list; + } +``` + ### web中的写 ##### 示例代码 DEMO代码地址:[https://github.com/alibaba/easyexcel/blob/master/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java](/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java) diff --git a/src/main/java/com/alibaba/excel/context/WriteContextImpl.java b/src/main/java/com/alibaba/excel/context/WriteContextImpl.java index 1833130..ff2215e 100644 --- a/src/main/java/com/alibaba/excel/context/WriteContextImpl.java +++ b/src/main/java/com/alibaba/excel/context/WriteContextImpl.java @@ -117,7 +117,9 @@ public class WriteContextImpl implements WriteContext { throw new IllegalArgumentException("Sheet argument cannot be null"); } if (writeSheet.getSheetNo() == null || writeSheet.getSheetNo() <= 0) { - LOGGER.info("Sheet number is null"); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Sheet number is null"); + } writeSheet.setSheetNo(0); } if (writeWorkbookHolder.getHasBeenInitializedSheet().containsKey(writeSheet.getSheetNo())) { diff --git a/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java b/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java index d105fb7..8b5fae8 100644 --- a/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java @@ -7,6 +7,7 @@ import java.util.List; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.xssf.streaming.SXSSFSheet; import org.junit.Ignore; import org.junit.Test; @@ -243,6 +244,8 @@ public class WriteTest { *

    * 这个目前不是很好用,比如有数字就会导致换行。而且长度也不是刚好和实际长度一致。 所以需要精确到刚好列宽的慎用。 当然也可以自己参照 * {@link LongestMatchColumnWidthStyleStrategy}重新实现. + *

    + * poi 自带{@link SXSSFSheet#autoSizeColumn(int)} 对中文支持也不太好。目前没找到很好的算法。 有的话可以推荐下。 * *

  • 1. 创建excel对应的实体对象 参照{@link DemoData} *
  • 3. 注册策略{@link LongestMatchColumnWidthStyleStrategy}