导出文件的列,将每一列都包装成一个List然后返回一个大List
private static List<List<String>> getHeadList(List<String> headList, List<String> customerVirable, LinkedHashMap<String, String> headerMap) {
List<List<String>> list = new ArrayList<>();
for (String s : headList) {
// 根据传递过来的s,找到他对应的中文表头
List<String> strings = new ArrayList<>();
strings.add(headerMap.get(s));
list.add(strings);
}
// 将自定义字段添加进来
for (String str : customerVirable) {
List<String> strings = new ArrayList<>();
strings.add(str);
list.add(strings);
}
return list;
}
被导出的数据,这里的数据可以是实体也可以是集合,注意lists和list的位置!
private List<List<String>> getLists(List<String> newHead, List<AccountVO> newList) {
List<List<String>> lists = new ArrayList<>();
for (AccountVO demoData : newList) {
List<String> list = new ArrayList<>();
// 在遍历的时候要严格按照表头的顺序来
for (String str : newHead) {
Object o = valueMap.get(str);
if (Objects.isNull(o)) {
list.add(StrUtil.EMPTY);
} else {
list.add(String.valueOf(o));
}
}
lists.add(list);
}
return lists;
}
导出并上传
// 行数据,需要将自定义的字段也添加进来
List<AccountVO> newList = getNewList(content, systemExportFieldList);
// 将要被导出的数据,先看看有多少个属性,然后再决定要遍历多少次,每次遍历都要把每一个实体的相同属性取出来
List<List<String>> lists = getLists(newHead, newList);
// 开始执行导出,同时设置样式
ByteArrayOutputStream out = new ByteArrayOutputStream();
EasyExcelFactory.write(out)
.registerWriteHandler(new CommentWriteHandler(TOTAL_COUNT,
queryAccountPageRequest.getUserId(), mdcLogId, jobLogByJobInstanceId, socketIOService))
.registerWriteHandler(excelWidthStyleStrategy)
.excelType(ExcelTypeEnum.XLSX)
.head(head)
.sheet()
.doWrite(lists);
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(out.toByteArray());
// 开始上传到oss
try {
String baseName = DateUtil.format(new Date(), "yyyyMMddHHmmss");
String upload = objectStorageHelper.upload(OssKeyCenter.getExcelOssFileKey(PREFIX_NAME,
queryAccountPageRequest.getTenantId(), queryAccountPageRequest.getUserId(), baseName), byteArrayInputStream);
} catch (Exception e) {
log.error("上传报错", e);
}