Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
不停的脚步
easyexcel
提交
665f1e2f
E
easyexcel
项目概览
不停的脚步
/
easyexcel
与 Fork 源项目一致
从无法访问的项目Fork
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
easyexcel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
665f1e2f
编写于
3月 23, 2020
作者:
庄家钜
提交者:
GitHub
3月 23, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1178 from alibaba/developing
Developing
上级
bed023b9
da7b7879
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
91 addition
and
53 deletion
+91
-53
pom.xml
pom.xml
+1
-1
src/main/java/com/alibaba/excel/ExcelReader.java
src/main/java/com/alibaba/excel/ExcelReader.java
+3
-1
src/main/java/com/alibaba/excel/ExcelWriter.java
src/main/java/com/alibaba/excel/ExcelWriter.java
+3
-1
src/main/java/com/alibaba/excel/write/ExcelBuilder.java
src/main/java/com/alibaba/excel/write/ExcelBuilder.java
+0
-9
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
+0
-27
src/main/java/com/alibaba/excel/write/executor/ExcelWriteAddExecutor.java
...m/alibaba/excel/write/executor/ExcelWriteAddExecutor.java
+4
-2
src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java
...te/style/column/LongestMatchColumnWidthStyleStrategy.java
+3
-3
src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java
...t/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java
+2
-2
src/test/java/com/alibaba/easyexcel/test/demo/read/NoModelDataListener.java
...alibaba/easyexcel/test/demo/read/NoModelDataListener.java
+2
-2
src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java
...t/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java
+7
-3
src/test/java/com/alibaba/easyexcel/test/demo/write/CommentWriteHandler.java
...libaba/easyexcel/test/demo/write/CommentWriteHandler.java
+37
-0
src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
...java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
+24
-2
update.md
update.md
+5
-0
未找到文件。
pom.xml
浏览文件 @
665f1e2f
...
...
@@ -4,7 +4,7 @@
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.alibaba
</groupId>
<artifactId>
easyexcel
</artifactId>
<version>
2.2.0-beta
1
</version>
<version>
2.2.0-beta
2
</version>
<packaging>
jar
</packaging>
<name>
easyexcel
</name>
...
...
src/main/java/com/alibaba/excel/ExcelReader.java
浏览文件 @
665f1e2f
...
...
@@ -274,7 +274,9 @@ public class ExcelReader {
* Complete the entire read file.Release the cache and close stream.
*/
public
void
finish
()
{
excelAnalyser
.
finish
();
if
(
excelAnalyser
!=
null
)
{
excelAnalyser
.
finish
();
}
}
/**
...
...
src/main/java/com/alibaba/excel/ExcelWriter.java
浏览文件 @
665f1e2f
...
...
@@ -325,7 +325,9 @@ public class ExcelWriter {
* Close IO
*/
public
void
finish
()
{
excelBuilder
.
finish
(
false
);
if
(
excelBuilder
!=
null
)
{
excelBuilder
.
finish
(
false
);
}
}
/**
...
...
src/main/java/com/alibaba/excel/write/ExcelBuilder.java
浏览文件 @
665f1e2f
...
...
@@ -76,13 +76,4 @@ public interface ExcelBuilder {
*/
void
finish
(
boolean
onException
);
/**
* add password
*
* @param data
* @param writeSheet
* @param writeTable
* @param password
*/
void
addContent
(
List
data
,
WriteSheet
writeSheet
,
WriteTable
writeTable
,
String
password
);
}
src/main/java/com/alibaba/excel/write/ExcelBuilderImpl.java
浏览文件 @
665f1e2f
...
...
@@ -50,9 +50,6 @@ public class ExcelBuilderImpl implements ExcelBuilder {
@Override
public
void
addContent
(
List
data
,
WriteSheet
writeSheet
,
WriteTable
writeTable
)
{
try
{
if
(
data
==
null
)
{
return
;
}
context
.
currentSheet
(
writeSheet
,
WriteTypeEnum
.
ADD
);
context
.
currentTable
(
writeTable
);
if
(
excelWriteAddExecutor
==
null
)
{
...
...
@@ -71,9 +68,6 @@ public class ExcelBuilderImpl implements ExcelBuilder {
@Override
public
void
fill
(
Object
data
,
FillConfig
fillConfig
,
WriteSheet
writeSheet
)
{
try
{
if
(
data
==
null
)
{
return
;
}
if
(
context
.
writeWorkbookHolder
().
getTempTemplateInputStream
()
==
null
)
{
throw
new
ExcelGenerateException
(
"Calling the 'fill' method must use a template."
);
}
...
...
@@ -102,27 +96,6 @@ public class ExcelBuilderImpl implements ExcelBuilder {
}
}
@Override
public
void
addContent
(
List
data
,
WriteSheet
writeSheet
,
WriteTable
writeTable
,
String
password
)
{
try
{
if
(
data
==
null
)
{
return
;
}
context
.
currentSheet
(
writeSheet
,
WriteTypeEnum
.
ADD
);
context
.
currentTable
(
writeTable
);
if
(
excelWriteAddExecutor
==
null
)
{
excelWriteAddExecutor
=
new
ExcelWriteAddExecutor
(
context
);
}
excelWriteAddExecutor
.
add
(
data
);
}
catch
(
RuntimeException
e
)
{
finishOnException
();
throw
e
;
}
catch
(
Throwable
e
)
{
finishOnException
();
throw
new
ExcelGenerateException
(
e
);
}
}
@Override
public
void
merge
(
int
firstRow
,
int
lastRow
,
int
firstCol
,
int
lastCol
)
{
CellRangeAddress
cra
=
new
CellRangeAddress
(
firstRow
,
lastRow
,
firstCol
,
lastCol
);
...
...
src/main/java/com/alibaba/excel/write/executor/ExcelWriteAddExecutor.java
浏览文件 @
665f1e2f
...
...
@@ -46,9 +46,11 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor {
}
// BeanMap is out of order,so use fieldList
List
<
Field
>
fieldList
=
new
ArrayList
<
Field
>();
for
(
int
relativeRowIndex
=
0
;
relativeRowIndex
<
data
.
size
();
relativeRowIndex
++)
{
int
relativeRowIndex
=
0
;
for
(
Object
oneRowData
:
data
){
int
n
=
relativeRowIndex
+
newRowIndex
;
addOneRowOfDataToExcel
(
data
.
get
(
relativeRowIndex
),
n
,
relativeRowIndex
,
fieldList
);
addOneRowOfDataToExcel
(
oneRowData
,
n
,
relativeRowIndex
,
fieldList
);
relativeRowIndex
++;
}
}
...
...
src/main/java/com/alibaba/excel/write/style/column/LongestMatchColumnWidthStyleStrategy.java
浏览文件 @
665f1e2f
...
...
@@ -24,7 +24,7 @@ public class LongestMatchColumnWidthStyleStrategy extends AbstractColumnWidthSty
private
static
final
int
MAX_COLUMN_WIDTH
=
255
;
private
static
final
Map
<
Integer
,
Map
<
Integer
,
Integer
>>
CACHE
=
new
HashMap
<
Integer
,
Map
<
Integer
,
Integer
>>(
8
);
private
Map
<
Integer
,
Map
<
Integer
,
Integer
>>
cache
=
new
HashMap
<
Integer
,
Map
<
Integer
,
Integer
>>(
8
);
@Override
protected
void
setColumnWidth
(
WriteSheetHolder
writeSheetHolder
,
List
<
CellData
>
cellDataList
,
Cell
cell
,
Head
head
,
...
...
@@ -33,10 +33,10 @@ public class LongestMatchColumnWidthStyleStrategy extends AbstractColumnWidthSty
if
(!
needSetWidth
)
{
return
;
}
Map
<
Integer
,
Integer
>
maxColumnWidthMap
=
CACHE
.
get
(
writeSheetHolder
.
getSheetNo
());
Map
<
Integer
,
Integer
>
maxColumnWidthMap
=
cache
.
get
(
writeSheetHolder
.
getSheetNo
());
if
(
maxColumnWidthMap
==
null
)
{
maxColumnWidthMap
=
new
HashMap
<
Integer
,
Integer
>(
16
);
CACHE
.
put
(
writeSheetHolder
.
getSheetNo
(),
maxColumnWidthMap
);
cache
.
put
(
writeSheetHolder
.
getSheetNo
(),
maxColumnWidthMap
);
}
Integer
columnWidth
=
dataLength
(
cellDataList
,
cell
,
isHead
);
if
(
columnWidth
<
0
)
{
...
...
src/test/java/com/alibaba/easyexcel/test/demo/fill/FillTest.java
浏览文件 @
665f1e2f
...
...
@@ -181,9 +181,9 @@ public class FillTest {
}
/**
* 组合填充填充
*
多列表
组合填充填充
*
* @since 2.2.0
* @since 2.2.0
-beta1
*/
@Test
public
void
compositeFill
()
{
...
...
src/test/java/com/alibaba/easyexcel/test/demo/read/NoMod
le
DataListener.java
→
src/test/java/com/alibaba/easyexcel/test/demo/read/NoMod
el
DataListener.java
浏览文件 @
665f1e2f
...
...
@@ -16,8 +16,8 @@ import com.alibaba.fastjson.JSON;
*
* @author Jiaju Zhuang
*/
public
class
NoMod
le
DataListener
extends
AnalysisEventListener
<
Map
<
Integer
,
String
>>
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
NoMod
le
DataListener
.
class
);
public
class
NoMod
el
DataListener
extends
AnalysisEventListener
<
Map
<
Integer
,
String
>>
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
NoMod
el
DataListener
.
class
);
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
...
...
src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java
浏览文件 @
665f1e2f
...
...
@@ -173,6 +173,8 @@ public class ReadTest {
* 2. 由于默认异步读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoExtraListener}
* <p>
* 3. 直接读即可
*
* @since 2.2.0-beat1
*/
@Test
public
void
extraRead
()
{
...
...
@@ -191,11 +193,13 @@ public class ReadTest {
* 读取公式和单元格类型
*
* <p>
* 1. 创建excel对应的实体对象 参照{@link DemoData}
* 1. 创建excel对应的实体对象 参照{@link
CellDataRead
DemoData}
* <p>
* 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoHeadDataListener}
* <p>
* 3. 直接读即可
*
* @since 2.2.0-beat1
*/
@Test
public
void
cellDataRead
()
{
...
...
@@ -245,9 +249,9 @@ public class ReadTest {
* 不创建对象的读
*/
@Test
public
void
noMod
le
Read
()
{
public
void
noMod
el
Read
()
{
String
fileName
=
TestFileUtil
.
getPath
()
+
"demo"
+
File
.
separator
+
"demo.xlsx"
;
// 这里 只要,然后读取第一个sheet 同步读取会自动finish
EasyExcel
.
read
(
fileName
,
new
NoMod
le
DataListener
()).
sheet
().
doRead
();
EasyExcel
.
read
(
fileName
,
new
NoMod
el
DataListener
()).
sheet
().
doRead
();
}
}
src/test/java/com/alibaba/easyexcel/test/demo/write/CommentWriteHandler.java
0 → 100644
浏览文件 @
665f1e2f
package
com.alibaba.easyexcel.test.demo.write
;
import
org.apache.poi.ss.usermodel.Comment
;
import
org.apache.poi.ss.usermodel.Drawing
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.xssf.usermodel.XSSFClientAnchor
;
import
org.apache.poi.xssf.usermodel.XSSFRichTextString
;
import
com.alibaba.excel.write.handler.AbstractRowWriteHandler
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
/**
* 自定义拦截器.新增注释,第一行头加批注
*
* @author Jiaju Zhuang
*/
public
class
CommentWriteHandler
extends
AbstractRowWriteHandler
{
@Override
public
void
afterRowDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Row
row
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
if
(
isHead
)
{
Sheet
sheet
=
writeSheetHolder
.
getSheet
();
Drawing
<?>
drawingPatriarch
=
sheet
.
createDrawingPatriarch
();
// 在第一行 第二列创建一个批注
Comment
comment
=
drawingPatriarch
.
createCellComment
(
new
XSSFClientAnchor
(
0
,
0
,
0
,
0
,
(
short
)
1
,
0
,
(
short
)
2
,
1
));
// 输入批注信息
comment
.
setString
(
new
XSSFRichTextString
(
"创建批注!"
));
// 将批注添加到单元格对象中
sheet
.
getRow
(
0
).
getCell
(
1
).
setCellComment
(
comment
);
}
}
}
src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
浏览文件 @
665f1e2f
...
...
@@ -275,6 +275,8 @@ public class WriteTest {
* 1. 创建excel对应的实体对象 参照{@link DemoStyleData}
* <p>
* 3. 直接写即可
*
* @since 2.2.0-beta1
*/
@Test
public
void
annotationStyleWrite
()
{
...
...
@@ -329,6 +331,8 @@ public class WriteTest {
* 2. 创建一个merge策略 并注册
* <p>
* 3. 直接写即可
*
* @since 2.2.0-beta1
*/
@Test
public
void
mergeWrite
()
{
...
...
@@ -435,6 +439,24 @@ public class WriteTest {
.
registerWriteHandler
(
new
CustomCellWriteHandler
()).
sheet
(
"模板"
).
doWrite
(
data
());
}
/**
* 插入批注
* <p>
* 1. 创建excel对应的实体对象 参照{@link DemoData}
* <p>
* 2. 注册拦截器 {@link CommentWriteHandler}
* <p>
* 2. 直接写即可
*/
@Test
public
void
commentWrite
()
{
String
fileName
=
TestFileUtil
.
getPath
()
+
"commentWrite"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
// 这里要注意inMemory 要设置为true,才能支持批注。目前没有好的办法解决 不在内存处理批注。这个需要自己选择。
EasyExcel
.
write
(
fileName
,
DemoData
.
class
).
inMemory
(
Boolean
.
TRUE
).
registerWriteHandler
(
new
CommentWriteHandler
())
.
sheet
(
"模板"
).
doWrite
(
data
());
}
/**
* 可变标题处理(包括标题国际化等)
* <p>
...
...
@@ -456,9 +478,9 @@ public class WriteTest {
* 不创建对象的写
*/
@Test
public
void
noMod
le
Write
()
{
public
void
noMod
el
Write
()
{
// 写法1
String
fileName
=
TestFileUtil
.
getPath
()
+
"noMod
le
Write"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
String
fileName
=
TestFileUtil
.
getPath
()
+
"noMod
el
Write"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
EasyExcel
.
write
(
fileName
).
head
(
head
()).
sheet
(
"模板"
).
doWrite
(
dataList
());
}
...
...
update.md
浏览文件 @
665f1e2f
# 2.2.0-beta2
*
修复最长匹配策略不同表格会有影响的bug
[
Issue #1010
](
https://github.com/alibaba/easyexcel/issues/1010
)
*
`LinkedList`
写入的性能问题 #1121
*
修复在某些情况下可能出现不必要的
`warn`
日志
# 2.2.0-beta1
*
重写主流程,代码更加优雅
*
修复用String接收日期、数字和excel显示不一致的bug(不是完美修复,但是大部分情况已经兼容)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录