Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Administrator
/
framework-tools
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 36047cad
authored
Jul 14, 2024
by
henry
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
删除多余的工具类
1 parent
53140e32
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
0 additions
and
569 deletions
framework-base/src/main/java/org/arch/base/utils/EasyExcelUtil.java
framework-base/src/main/java/org/arch/base/utils/EasyExcelUtils.java
framework-base/src/main/java/org/arch/base/utils/ExcelListener.java
framework-base/src/main/java/org/arch/base/utils/EasyExcelUtil.java
deleted
100644 → 0
View file @
53140e3
package
org
.
arch
.
base
.
utils
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.write.builder.ExcelWriterSheetBuilder
;
import
com.alibaba.excel.write.handler.RowWriteHandler
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.metadata.holder.WriteTableHolder
;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
import
com.alibaba.excel.write.style.HorizontalCellStyleStrategy
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.apache.poi.ss.usermodel.*
;
import
org.apache.poi.ss.util.CellRangeAddress
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.net.URLEncoder
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 导出excel 表格 工具类
*/
public
class
EasyExcelUtil
implements
RowWriteHandler
{
private
int
mergeRowIndex
;
//从哪一行开始合并
private
int
[]
mergeColumnIndex
;
//excel合并的列
private
int
[]
signNum
;
//合并的唯一标识
private
int
total
;
//总行数
private
int
lastRow
;
private
int
firstCol
;
private
int
lastCol
;
private
int
firstRow
;
private
int
mergeCount
=
1
;
private
EasyExcelUtil
(){}
private
EasyExcelUtil
(
int
mergeRowIndex
,
int
[]
mergeColumnIndex
,
int
[]
signNum
,
int
total
)
{
this
.
mergeRowIndex
=
mergeRowIndex
;
this
.
mergeColumnIndex
=
mergeColumnIndex
;
this
.
signNum
=
signNum
;
this
.
total
=
total
;
}
/**
* 导出excel
* @param response
* @param fileName 文件名称
* @param exportList 导出数据
* @param clazz 导出实体bean class对象
* @param <T>
* @throws IOException
*/
public
static
<
T
>
void
createExcel
(
HttpServletResponse
response
,
String
fileName
,
List
<
T
>
exportList
,
Class
<
T
>
clazz
)
throws
IOException
{
createExcel
(
response
,
fileName
,
exportList
,
clazz
,
null
);
}
/**
* 导出excel
* @param response
* @param fileName 文件名称
* @param exportList 导出数据
* @param clazz 导出实体bean class对象
* @param cellMerge 单元格合并规则
* @param <T>
* @throws IOException
*/
public
static
<
T
>
void
createExcel
(
HttpServletResponse
response
,
String
fileName
,
List
<
T
>
exportList
,
Class
<
T
>
clazz
,
CellMerge
cellMerge
)
throws
IOException
{
// 设置下载信息
response
.
setContentType
(
"application/vnd.ms-excel"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
fileName
=
URLEncoder
.
encode
(
fileName
,
"UTF-8"
);
response
.
setHeader
(
"Content-disposition"
,
"attachment;filename="
+
fileName
+
".xlsx"
);
//定义ExcelWriterSheetBuilder
ExcelWriterSheetBuilder
excelWriterSheetBuilder
=
EasyExcel
.
write
(
response
.
getOutputStream
(),
clazz
)
.
sheet
(
fileName
);
//合并单元格
if
(
cellMerge
!=
null
)
{
// 从那一行开始合并
int
mergeRowIndex
=
1
;
EasyExcelUtil
excelMergeRowByRowStrategy
=
new
EasyExcelUtil
(
mergeRowIndex
,
cellMerge
.
getMergeColumIndex
(),
cellMerge
.
getMergeRuleColumIndex
(),
exportList
.
size
());
excelWriterSheetBuilder
.
registerWriteHandler
(
excelMergeRowByRowStrategy
);
}
//设置头样式
WriteCellStyle
headWriteCellStyle
=
new
WriteCellStyle
();
//设置内容格式
WriteCellStyle
contentWriteCellStyle
=
new
WriteCellStyle
();
HorizontalCellStyleStrategy
horizontalCellStyleStrategy
=
new
HorizontalCellStyleStrategy
(
headWriteCellStyle
,
contentWriteCellStyle
);
//设计内容居中
contentWriteCellStyle
.
setHorizontalAlignment
(
HorizontalAlignment
.
CENTER
);
contentWriteCellStyle
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
//设置内容自动换行
contentWriteCellStyle
.
setWrapped
(
true
);
excelWriterSheetBuilder
.
registerWriteHandler
(
horizontalCellStyleStrategy
);
//调用doWrite方法
excelWriterSheetBuilder
.
doWrite
(
exportList
);
}
@Override
public
void
beforeRowCreate
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Integer
integer
,
Integer
integer1
,
Boolean
aBoolean
)
{
}
@Override
public
void
afterRowCreate
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Row
row
,
Integer
integer
,
Boolean
aBoolean
)
{
}
@Override
public
void
afterRowDispose
(
WriteSheetHolder
writeSheetHolder
,
WriteTableHolder
writeTableHolder
,
Row
row
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
//当前行
int
curRowIndex
=
row
.
getRowNum
();
//每一行的最大列数
short
lastCellNum
=
row
.
getLastCellNum
();
if
(
curRowIndex
==
1
)
{
//赋初值 第一行
firstRow
=
curRowIndex
;
}
//开始合并位置
if
(
curRowIndex
>
mergeRowIndex
&&
!
row
.
getCell
(
0
).
getStringCellValue
().
equals
(
""
))
{
for
(
int
i
=
0
;
i
<
lastCellNum
;
i
++)
{
if
(
i
==
mergeColumnIndex
[
i
])
{
//当前行号 当前行对象 合并的标识位
mergeWithPrevAnyRow
(
writeSheetHolder
.
getSheet
(),
curRowIndex
,
row
,
signNum
);
break
;
//已经进入到合并单元格操作里面了,执行一次就行
}
}
}
}
public
void
mergeWithPrevAnyRow
(
Sheet
sheet
,
int
curRowIndex
,
Row
row
,
int
[]
signNum
)
{
Row
preRow
=
row
.
getSheet
().
getRow
(
curRowIndex
-
1
);
List
<
String
>
rowDataList
=
new
ArrayList
<>();
List
<
String
>
preDataList
=
new
ArrayList
<>();
for
(
int
i
:
signNum
)
{
Object
currentData
=
row
.
getCell
(
i
).
getCellTypeEnum
()
==
CellType
.
STRING
?
row
.
getCell
(
i
).
getStringCellValue
()
:
row
.
getCell
(
i
).
getNumericCellValue
();
Object
preData
=
preRow
.
getCell
(
i
).
getCellTypeEnum
()
==
CellType
.
STRING
?
preRow
.
getCell
(
i
).
getStringCellValue
()
:
preRow
.
getCell
(
i
).
getNumericCellValue
();
rowDataList
.
add
(
String
.
valueOf
(
currentData
));
preDataList
.
add
(
String
.
valueOf
(
preData
));
}
String
rowDataStr
=
String
.
join
(
","
,
rowDataList
);
String
preDataStr
=
String
.
join
(
","
,
preDataList
);
//判断是否合并单元格
boolean
curEqualsPre
=
rowDataStr
.
equals
(
preDataStr
);
//判断前一个和后一个相同 并且 标识位相同
if
(
curEqualsPre
)
{
lastRow
=
curRowIndex
;
mergeCount
++;
}
//excel过程中合并
if
(!
curEqualsPre
&&
mergeCount
>
1
)
{
mergeSheet
(
firstRow
,
lastRow
,
mergeColumnIndex
,
sheet
);
mergeCount
=
1
;
}
//excel结尾处合并
if
(
mergeCount
>
1
&&
total
==
curRowIndex
)
{
mergeSheet
(
firstRow
,
lastRow
,
mergeColumnIndex
,
sheet
);
mergeCount
=
1
;
}
if
(!
curEqualsPre
)
{
firstRow
=
curRowIndex
;
}
}
private
void
mergeSheet
(
int
firstRow
,
int
lastRow
,
int
[]
mergeColumnIndex
,
Sheet
sheet
)
{
for
(
int
colNum
:
mergeColumnIndex
)
{
firstCol
=
colNum
;
lastCol
=
colNum
;
CellRangeAddress
cellRangeAddress
=
new
CellRangeAddress
(
firstRow
,
lastRow
,
firstCol
,
lastCol
);
sheet
.
addMergedRegion
(
cellRangeAddress
);
}
}
/**
* 单元格合并类
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
CellMerge
{
private
int
[]
mergeColumIndex
;
private
int
[]
mergeRuleColumIndex
;
}
/**
* 设置单元格合并规则
* @param mergeColumIndex
* @param mergeRuleColumIndex
* @return
*/
public
static
CellMerge
setCellMerge
(
int
[]
mergeColumIndex
,
int
[]
mergeRuleColumIndex
){
EasyExcelUtil
excelUtil
=
new
EasyExcelUtil
();
CellMerge
cellMerge
=
excelUtil
.
new
CellMerge
();
cellMerge
.
setMergeColumIndex
(
mergeColumIndex
);
cellMerge
.
setMergeRuleColumIndex
(
mergeRuleColumIndex
);
return
cellMerge
;
}
}
framework-base/src/main/java/org/arch/base/utils/EasyExcelUtils.java
deleted
100644 → 0
View file @
53140e3
package
org
.
arch
.
base
.
utils
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.ExcelReader
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
com.alibaba.excel.read.metadata.ReadSheet
;
import
com.alibaba.excel.support.ExcelTypeEnum
;
import
com.alibaba.excel.support.cglib.proxy.InvocationHandler
;
import
com.alibaba.excel.support.cglib.proxy.Proxy
;
import
com.alibaba.excel.write.builder.ExcelWriterBuilder
;
import
com.alibaba.excel.write.builder.ExcelWriterSheetBuilder
;
import
com.alibaba.excel.write.metadata.WriteSheet
;
import
com.alibaba.excel.write.metadata.style.WriteCellStyle
;
import
com.alibaba.excel.write.metadata.style.WriteFont
;
import
com.alibaba.excel.write.style.HorizontalCellStyleStrategy
;
import
com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.poi.ss.usermodel.BorderStyle
;
import
org.apache.poi.ss.usermodel.HorizontalAlignment
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
org.apache.poi.ss.usermodel.VerticalAlignment
;
import
org.arch.base.Result
;
import
org.springframework.util.StringUtils
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.lang.reflect.Field
;
import
java.net.URLEncoder
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
/**
* Excel模版读取工具类(easyEcel技术)
*/
@Slf4j
public
class
EasyExcelUtils
{
// private static final Log log = LogFactory.getLog(EasyExcelUtils.class);
/**
* 单sheet版本Excel读取
* 从Excel中读取文件,读取的文件是一个DTO类
*
* @param inputStream 文件流
* @param clazz 行数据类型
*/
public
static
<
T
>
List
<
T
>
readExcelOneSheet
(
InputStream
inputStream
,
final
Class
<?>
clazz
)
{
// 1.创建监听类
ExcelListener
<
T
>
listener
=
new
ExcelListener
<>();
// 2.构建工作簿对象的输入流
ExcelReader
excelReader
=
EasyExcel
.
read
(
inputStream
,
clazz
,
listener
).
build
();
// 3.构建工作表对象的输入流,默认是第一张工作表
ReadSheet
readSheet
=
EasyExcel
.
readSheet
(
0
).
build
();
// 4.读取信息,每读取一行都会调用监听类的 invoke 方法
excelReader
.
read
(
readSheet
);
// 5.关闭流,如果不关闭,读的时候会创建临时文件,到时磁盘会崩的
excelReader
.
finish
();
return
listener
.
getDataList
();
}
/**
* 多sheet版本Excel读取
*
* @param <T> 行数据的类型
* @param filePath 文件路径
* @param clazz 行数据的类型
* @return 所有信息
*/
public
static
<
T
>
List
<
T
>
readExcelAllSheet
(
String
filePath
,
final
Class
<?>
clazz
)
{
ExcelListener
<
T
>
listener
=
new
ExcelListener
<>();
// 读取全部sheet
// 这里需要注意 ExcelListener的doAfterAllAnalysed 会在每个sheet读取完毕后调用一次。然后所有sheet都会往同一个DemoDataListener里面写
EasyExcel
.
read
(
filePath
,
clazz
,
listener
).
doReadAll
();
return
listener
.
getDataList
();
}
/**
* 网页上的下载导出,只有一个工作表
*
* @param fileName 文件名
* @param clazz 类的字节码文件,行数据的类型
* @param dataList 导出的数据
* @param sheetName 工作表名
* @param response 响应体
* @throws IOException 异常对象
*/
public
static
void
writeWeb
(
String
fileName
,
final
Class
<?>
clazz
,
List
<?>
dataList
,
String
sheetName
,
HttpServletResponse
response
)
throws
IOException
{
// 1.指定响应体内容类型
response
.
setContentType
(
"application/vnd.ms-excel"
);
// 2.指定编码方式
response
.
setCharacterEncoding
(
"utf-8"
);
// 3.URLEncoder.encode可以防止中文乱码:import java.net.URLEncoder
fileName
=
URLEncoder
.
encode
(
fileName
,
"UTF-8"
);
// 4.指定响应标头
response
.
setHeader
(
"Content-Disposition"
,
"attachment; filename*=UTF-8''"
+
fileName
+
".xlsx"
);
// 5.获取工作簿对象的输出流
ExcelWriter
excelWriter
=
EasyExcel
.
write
(
response
.
getOutputStream
()).
build
();
// 6.设置工作表的名称
if
(!
StringUtils
.
hasText
(
sheetName
))
{
sheetName
=
"sheet1"
;
}
// 7.指定写用哪个class去写
WriteSheet
writeSheet
=
EasyExcel
.
writerSheet
(
0
,
sheetName
).
head
(
clazz
).
build
();
// 8.将 dataList 中的数据逐行写入工作表中
excelWriter
.
write
(
dataList
,
writeSheet
);
// excelWriter.write(dataList, writeSheet);
// 9.finish关闭流
excelWriter
.
finish
();
// 10.关闭流
response
.
getOutputStream
().
close
();
}
public
static
<
T
>
void
writeExcelList
(
HttpServletResponse
response
,
List
<
List
<
T
>>
data
,
String
fileName
,
Class
<?>
clazz
,
String
sheetName
)
throws
Exception
{
OutputStream
out
=
getOutputStream
(
fileName
,
response
);
ExcelWriterBuilder
excelWriterBuilder
=
EasyExcel
.
write
(
out
,
clazz
).
excelType
(
ExcelTypeEnum
.
XLSX
).
registerWriteHandler
(
getDefaultHorizontalCellStyleStrategy
());
ExcelWriter
excelWriter
=
excelWriterBuilder
.
build
();
ExcelWriterSheetBuilder
excelWriterSheetBuilder
;
WriteSheet
writeSheet
;
for
(
int
i
=
1
;
i
<=
data
.
size
();
i
++)
{
excelWriterSheetBuilder
=
new
ExcelWriterSheetBuilder
(
excelWriter
);
excelWriterSheetBuilder
.
sheetNo
(
i
);
excelWriterSheetBuilder
.
sheetName
(
sheetName
+
i
);
writeSheet
=
excelWriterSheetBuilder
.
build
();
excelWriter
.
write
(
data
.
get
(
i
-
1
),
writeSheet
);
}
excelWriter
.
finish
();
out
.
close
();
}
private
static
OutputStream
getOutputStream
(
String
fileName
,
HttpServletResponse
response
)
throws
Exception
{
fileName
=
URLEncoder
.
encode
(
fileName
,
"UTF-8"
);
// response.setContentType("application/vnd.ms-excel"); // .xls
// .xlsx
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf8"
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment; filename*=UTF-8''"
+
fileName
+
".xlsx"
);
return
response
.
getOutputStream
();
}
/**
* 获取默认表头内容的样式
*
* @return
*/
private
static
HorizontalCellStyleStrategy
getDefaultHorizontalCellStyleStrategy
()
{
/** 表头样式 **/
WriteCellStyle
headWriteCellStyle
=
new
WriteCellStyle
();
// 背景色(浅灰色)
// 可以参考:https://www.cnblogs.com/vofill/p/11230387.html
headWriteCellStyle
.
setFillForegroundColor
(
IndexedColors
.
GREY_25_PERCENT
.
getIndex
());
// 字体大小
WriteFont
headWriteFont
=
new
WriteFont
();
headWriteFont
.
setFontHeightInPoints
((
short
)
10
);
headWriteCellStyle
.
setWriteFont
(
headWriteFont
);
//设置表头居中对齐
headWriteCellStyle
.
setHorizontalAlignment
(
HorizontalAlignment
.
CENTER
);
/** 内容样式 **/
WriteCellStyle
contentWriteCellStyle
=
new
WriteCellStyle
();
// 内容字体样式(名称、大小)
WriteFont
contentWriteFont
=
new
WriteFont
();
contentWriteFont
.
setFontName
(
"宋体"
);
contentWriteFont
.
setFontHeightInPoints
((
short
)
10
);
contentWriteCellStyle
.
setWriteFont
(
contentWriteFont
);
// //设置内容垂直居中对齐
// contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// //设置内容水平居中对齐
// contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置边框样式
contentWriteCellStyle
.
setBorderLeft
(
BorderStyle
.
THIN
);
contentWriteCellStyle
.
setBorderTop
(
BorderStyle
.
THIN
);
contentWriteCellStyle
.
setBorderRight
(
BorderStyle
.
THIN
);
contentWriteCellStyle
.
setBorderBottom
(
BorderStyle
.
THIN
);
// 头样式与内容样式合并
return
new
HorizontalCellStyleStrategy
(
headWriteCellStyle
,
contentWriteCellStyle
);
}
/**
* 导出 Excel到指定目录 :单个 sheet,带表头,
*
* @param tableData
* @param fileName 导出的路径+文件名 例如: file/test.xlsx
* @param sheetName 导入文件的 sheet 名
* @throws Exception
*/
public
static
void
writeExcelAutoColumnWidth
(
String
fileName
,
List
<?>
tableData
,
String
sheetName
,
Class
<?>
clazz
)
throws
Exception
{
// 根据用户传入字段 假设我们要忽略 date
EasyExcel
.
write
(
fileName
,
clazz
)
.
sheet
(
sheetName
)
.
registerWriteHandler
(
new
LongestMatchColumnWidthStyleStrategy
())
.
doWrite
(
tableData
);
}
/**
* 导出 Excel到指定目录 :单个 sheet,带表头,
*
* @param fileName 导出的路径+文件名 例如: file/test.xlsx
* @param tableData
*/
public
static
void
writeExcelWithOneSheet1
(
String
fileName
,
List
<?>
tableData
,
String
sheetName
,
Class
<?>
clazz
,
Set
<
String
>
excludeColumnFiledNames
)
{
// 根据用户传入字段 假设我们要忽略 date
EasyExcel
.
write
(
fileName
,
clazz
)
.
excludeColumnFiledNames
(
excludeColumnFiledNames
)
.
sheet
(
sheetName
)
.
registerWriteHandler
(
styleWrite
(
false
))
.
doWrite
(
tableData
);
}
public
static
HorizontalCellStyleStrategy
styleWrite
(
boolean
isWrapped
)
{
// 头的策略
WriteCellStyle
headWriteCellStyle
=
new
WriteCellStyle
();
// 背景设置为红色
// headWriteCellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
WriteFont
headWriteFont
=
new
WriteFont
();
headWriteFont
.
setFontHeightInPoints
((
short
)
18
);
headWriteCellStyle
.
setWriteFont
(
headWriteFont
);
// 内容的策略
WriteCellStyle
contentWriteCellStyle
=
new
WriteCellStyle
();
// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
//contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
// 背景绿色
//contentWriteCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());
WriteFont
contentWriteFont
=
new
WriteFont
();
// 字体大小
contentWriteFont
.
setFontHeightInPoints
((
short
)
11
);
//设置 自动换行
contentWriteCellStyle
.
setWrapped
(
isWrapped
);
//设置 垂直居中
contentWriteCellStyle
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
contentWriteCellStyle
.
setWriteFont
(
contentWriteFont
);
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
return
new
HorizontalCellStyleStrategy
(
headWriteCellStyle
,
contentWriteCellStyle
);
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
//EasyExcel.write(fileName, DemoData.class).registerWriteHandler(horizontalCellStyleStrategy).sheet("模板")
// .doWrite(data());
}
/**
* 响应给浏览器的excel文件
* @param response servlet响应对象
* @param fileName 设置文件明
* @param list 数据列表
* @param clazz 响应类
* @param <T>
* @throws IOException
*/
public
static
<
T
>
void
writerExcel
(
HttpServletResponse
response
,
String
fileName
,
List
<
T
>
list
,
Class
<
T
>
clazz
)
throws
IOException
{
try
{
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"UTF-8"
);
// 这里URLEncoder.encode可以防止中文乱码 当然和easyExcel没有关系
String
encode
=
URLEncoder
.
encode
(
fileName
,
"UTF-8"
).
replaceAll
(
"\\+"
,
"%20"
);
response
.
setHeader
(
"Content-disposition"
,
"attachment;filename*=utf-8''"
+
encode
+
".xlsx"
);
EasyExcel
.
write
(
response
.
getOutputStream
(),
clazz
)
//设置不自动关闭流
.
autoCloseStream
(
Boolean
.
FALSE
)
.
sheet
(
fileName
)
.
doWrite
(
list
);
}
catch
(
Exception
e
)
{
//重置response
response
.
reset
();
response
.
setContentType
(
"application/json"
);
response
.
setCharacterEncoding
(
"utf-8"
);
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
map
.
put
(
"status"
,
"failure"
);
map
.
put
(
"message"
,
"下载文件失败"
+
e
.
getMessage
());
response
.
getWriter
().
println
(
Result
.
error
(
map
));
}
}
/**
* 获取修改ExcelProperty的value值的class,用于导出
* @param t 类对象
* @param keys key为修改的字段和value为它对应表头值
* @return
*/
public
static
<
T
>
Class
<
T
>
getClassNew
(
T
t
,
Map
<
String
,
String
>
keys
){
if
(
t
==
null
){
return
null
;
}
try
{
for
(
String
key:
keys
.
keySet
())
{
Field
value
=
t
.
getClass
().
getDeclaredField
(
key
);
value
.
setAccessible
(
true
);
ExcelProperty
property
=
value
.
getAnnotation
(
ExcelProperty
.
class
);
InvocationHandler
invocationHandler
=
Proxy
.
getInvocationHandler
(
property
);
Field
memberValues
=
invocationHandler
.
getClass
().
getDeclaredField
(
"memberValues"
);
memberValues
.
setAccessible
(
true
);
Map
<
String
,
Object
>
values
=
(
Map
<
String
,
Object
>)
memberValues
.
get
(
invocationHandler
);
values
.
put
(
"value"
,
new
String
[]{
keys
.
get
(
key
)});
}
}
catch
(
Exception
e
){
e
.
printStackTrace
();
}
return
(
Class
<
T
>)
t
.
getClass
();
}
}
framework-base/src/main/java/org/arch/base/utils/ExcelListener.java
deleted
100644 → 0
View file @
53140e3
package
org
.
arch
.
base
.
utils
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
lombok.Getter
;
import
lombok.NoArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.List
;
@Slf4j
@Getter
@NoArgsConstructor
public
class
ExcelListener
<
T
>
extends
AnalysisEventListener
<
T
>
{
/**
* 自定义用于暂时存储data 可以通过实例获取该值
*/
private
final
List
<
T
>
dataList
=
new
ArrayList
<>();
@Override
public
void
invoke
(
T
data
,
AnalysisContext
context
)
{
dataList
.
add
(
data
);
log
.
info
(
"读取的一条信息:{}"
,
data
);
}
@Override
public
void
doAfterAllAnalysed
(
AnalysisContext
context
)
{
log
.
info
(
"{}条数据,解析完成"
,
dataList
.
size
());
}
}
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment