在项目需求中,经常会遇到导出Excel,一般没有模板的Excel很容易导出,那如果遇到格式很复杂的Excel怎么处理呢
例如下面这种:
我们使用 aspose很容易实现 需要jar包aspose-cells-8.5.2.jar
工具类
public class AsposeUtil {
/**
* @param head 单个对象,将对象作为此参数传入。如没有,传入null
* @param list 多个对象时,将对象作为此参数传入。如没有,传入null
* @param templateName 模板所在的位置,如:E:/template/studentTemplate.xlsx
* @param resultFilePath 生成后的文件所存放的文件夹,如:E:/data/
* @return 生成后的文件路径及文件名,如:E:/data/student.xlsx
*/
public static <H> String exportExcelByAsposeWithTemplate(H head, List list, String templateName, String resultFilePath) {
// 校验许可证
if(!checkLicense()) {
return null;
}
// 生成后文件名
long time = System.currentTimeMillis();
String resultFile = resultFilePath + File.separator + time + ".xlsx";
try {
// 加载模板
Workbook wb = new Workbook(templateName);
// 加载设计器
WorkbookDesigner designer = new WorkbookDesigner();
designer.setWorkbook(wb);
// 单个对象和集合区分(在模板中定义方式不同)
if(null != head) {
designer.setDataSource("Head", head);
}
if(null != list) {
designer.setDataSource("List", list);
}
designer.process();
wb.save(resultFile);
wb.dispose();
} catch (Exception e) {
e.printStackTrace();
}
return time + ".xlsx";
}
/**
* 校验Aspose的License
*/
private static Boolean checkLicense() {
try {
InputStream license = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml");
License aposeLic = new License();
aposeLic.setLicense(license);
} catch (Exception e) {
e.printStackTrace();
}
return License.isLicenseSet();
}
}
controller
@RequestMapping(value = {"/export"},method = {RequestMethod.POST})
@ResponseBody
public Object export(String transferFlow, HttpServletRequest request){
if(StringUtil.isNotBlank(transferFlow)){
SkillAssetTransferExt transferExt = assetTransferBiz.getAssetTransferExt(transferFlow);
SkillAssetTransfer transfer = transferExt;
List<SkillAssetTransferDetail> list = transferExt.getTransferDetailList();
String path = request.getSession().getServletContext().getRealPath("/");
String templateName = path +"upload"+ File.separator +"资产转移template.xlsx";
String resultFilePath = InitConfig.getSysCfg("upload_base_dir");
String resultFileName = AsposeUtil.exportExcelByAsposeWithTemplate(transfer, list, templateName, resultFilePath);
assert null != resultFileName;
String httpUrl = InitConfig.getSysCfg("upload_base_url");
return ReusltData(httpUrl+"/"+resultFileName);
}
return ReusltDataThrow("数据异常");
}
编辑模板
导出效果如下