-
Notifications
You must be signed in to change notification settings - Fork 325
Frequently Asked Questions
MyExcel所有版本均只支持jdk8+
版本1.4.1以及之后,请使用AttachmentExportUtil\FileExportUtil工具类导出,无需关心后缀以及中文问题; 其他版本请如下设置Response流:
response.setCharacterEncoding(CharEncoding.UTF_8);
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, CharEncoding.UTF_8));
如不指定workbookType,则文件的默认格式为.xlsx,也建议使用.xlsx格式
目前默认支持的模板引擎有:Freemarker、Beetl、Groovy、Thymeleaf template engine,使用上述默认ExcelBuilder创建Excel时,模板文件只能放在classpath下,如resources下
第三代酷睿i5,双核,8G内存环境下复杂布局(单元格合并、背景色、边框等等)3万单元格数据处理约3秒,因本工具主要是针对复杂布局的excel(包含样式等)导出,因此性能上会缺失些,在非复杂布局情况下使用DefaultExcelBuilder导出,上述环境下200万单元格3秒左右。
MyExcel在实际生产环境中运用,对于海量数据(千万级别)支持良好,内存稳定占用100~200兆内,相比EasyExcel内存占用甚至更低,请放心使用。
Set Excel sheet name:Add <caption>sheet名称</caption>
to Table
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<table>
<caption>sheet名称</caption>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</body>
</html>
Excel版本 | 最大行数 | 最大列数 |
---|---|---|
Excel 2013 | 1,048,576 行 | 16,384 列 |
Excel 2010 | 1,048,576 行 | 16,384 列 |
Excel 2007 | 1,048,576 行 | 16,384 列 |
Excel 97-2003 | 65,536 行 | 256 列 |
在POI较低版本高并发生成Excel时可能会出现如下错误:
Caused by: java.io.IOException: Could not create temporary directory '/home/admin/dio2o/.default/temp/poifiles'
at org.apache.poi.util.DefaultTempFileCreationStrategy.createTempDirectory(DefaultTempFileCreationStrategy.java:93) ~[poi-3.15.jar:3.15]
at org.apache.poi.util.DefaultTempFileCreationStrategy.createPOIFilesDirectory(DefaultTempFileCreationStrategy.java:82) ~[poi-3.15.jar:3.15]
对应的源代码如下:
private void createTempDirectory(File directory) throws IOException {
if (!(directory.exists() || directory.mkdirs()) || !directory.isDirectory()) {
throw new IOException("Could not create temporary directory '" + directory + "'");
}
}
MyExcel采用的POI版本已修复了该问题,请放心使用,修改后对应的源代码如下:
private synchronized void createTempDirectory(File directory) throws IOException {
boolean dirExists = directory.exists() || directory.mkdirs();
if (!dirExists) {
throw new IOException("Could not create temporary directory '" + directory + "'");
} else if (!directory.isDirectory()) {
throw new IOException("Could not create temporary directory. '" + directory + "' exists but is not a directory.");
}
}
针对.xls文件,POI预定义了56种颜色,如需自定义颜色,需要覆盖56种颜色,目前解决方案暂未确定,因此,目前建议有自定义颜色需求用户使用.xlsx,如只能使用.xls文件,目前只能使用预定义的56种颜色,颜色列表请参照:颜色索引
使用方式:
以HSSFColor.OLIVE_GREEN
为例,设置样式时,设置为style="background-color:olivegreen"
即可。
在部分场景下使用readThen接口会出现以下错误提示:
Error:(210, 62) java: 对readThen的引用不明确
com.github.liaochong.myexcel.core.DefaultExcelReader 中的方法 readThen(java.io.InputStream,java.util.function.Consumer<T>) 和 com.github.liaochong.myexcel.core.DefaultExcelReader 中的方法 readThen(java.io.InputStream,java.util.function.Function<T,java.lang.Boolean>) 都匹配
为解决该问题,请在方法执行体中增加大括号"{",如下:
readThen(file,data->{System.out.println(data.name);})
Postman测试下载,需要选择Send and download
,否则可能出现如下异常:
java.lang.RuntimeException: java.io.IOException: This archive contains unclosed entries.
使用SaxExcelReader读取excel时,可能会出现原本是9.5的值,导入确成为9.50000000007,该问题的出现是excel实际存储就是9.50000000007,非程序原因,解决该问题,可使用text函数,将数值改为文本即可,切记,不能简单的将单元格设置为文本,这种方式实际并不能改变单元格格式。
在使用FreemarkerExcelBuilder导出Excel时,如果有较大的数值输出,大于1000,可能会有如下错误:
实际数值:1018,28002929687 渲染后结果:1 01828
可使用${x?c}
进行文本输出。
-
Overview
概述 -
FAQ
常见问题 -
Dependency adding
依赖添加 -
Excel/Csv import
Excel/Csv导入 - 一对多导入
-
Excel default export
默认导出 -
Excel streaming export
流式导出 -
Dynamic export
动态导出 -
Excel template build
模板构建 -
CSV export
csv导出 -
Multiple sheet import
多sheet导入 -
Multiple sheet export
多sheet导出 - 聚合列&聚合导出
-
Custom style
自定义样式 -
Multilevel header
多级表头 -
Wrap within cell
单元格内换行 -
Image export
图片导出 -
Image import
图片导入 -
Hyperlink
链接 - 读取链接
-
Template row height setting
模板行高度设置 -
Drop-down-list
下拉列表 -
Custom convert
写入自定义转化 -
Formula usage
公式使用 -
Template cell setting
单元格设置 -
Header freeze
区域冻结 - 提示
-
Style support
样式支持 - 添加水印
- 按列读取
- 单元格斜线绘制
- 设置批注
- 版本日志