說明:本文是jxls根據模板匯出Excel直接下載,
使用版本:jxls V2.10.0
excel模板版本:.xlsx格式
jxls官網地址:https://jxls.sourceforge.net/index.html
1、pom參考
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-jexcel</artifactId>
<version>1.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jexl</artifactId>
<version>2.1.1</version>
</dependency>
2、Controller呼叫方法
@PostMapping("/export")
public AjaxResult export(HttpServletResponse response, Data data) throws IOException {
String fileName = "test.xlsx";
Map<String, Object> model = dataService.getExportData(data,fileName);//拼接需要匯出的內容
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
return JxlsUtils.exportExcelWithOS(response.getOutputStream(),fileName, model);
}
3、拼接資料
public Map<String, Object> getExportData(Data data,String fileName) {
Map<String, Object> model = new HashMap<String, Object>(); // 系結資料
try {
//可系結單個引數,Excel模板中單元格直接用${test1}獲取
model.put("test1", "ttt");
//可系結list,使用${item.引數名}獲取,需在串列首個單元格中增加批注
List<Data1> taskItems = new ArrayList<Data1>();//Data1為某個資料類
for (int i=0;i<5;i++) {
Data1 d=new Data1;
//d.setA("111");
taskItems.add(d);
}
model.put("taskItems", taskItems);
}catch (Exception ex){
logger.error(ex.getMessage());
System.out.println(ex.getMessage());
}
return model;
}
4、Excel匯出方法
import org.apache.commons.jexl3.JexlBuilder;
import org.apache.commons.jexl3.JexlEngine;
import org.jxls.builder.xls.XlsCommentAreaBuilder;
import org.jxls.common.Context;
import org.jxls.expression.JexlExpressionEvaluator;
import org.jxls.transform.Transformer;
import org.jxls.transform.poi.PoiTransformer;
import org.jxls.util.JxlsHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class JxlsUtils {
static{
}
/**
* 根據模板生成檔案,直接下載
* @param os 流資料
* @param templateFileName 模板檔案名稱
* @param model 填充資料
* @throws IOException
*/
public static AjaxResult exportExcelWithOS(OutputStream os , String templateFileName, Map<String, Object> model) throws IOException{
// 獲取模板檔案
InputStream is = new FileInputStream(new File(模板檔案路徑地址 + templateFileName));
try {
// 輸出
Context context = PoiTransformer.createInitialContext();
if (model != null) {
for (String key : model.keySet()) {
context.putVar(key, model.get(key));
}
}
JxlsHelper.getInstance().setUseFastFormulaProcessor(false).setEvaluateFormulas(true).processTemplate(is, os, context);
}
catch (Exception ex){
System.out.println(ex.getMessage());
logger.error(ex.getMessage());
return AjaxResult.error(ex.getMessage());
}finally {
is.close();
}
return AjaxResult.success();
}
}
5、Excel模板,創建xlsx格式模板
添加批注,第一個單元格添加范圍批注,jx:area(lastCell="K3")
list串列增加jx:each(items="taskItems" var="item" lastCell="K3")

之前寫過另一種方法,先根據模板生成Excel,然后呼叫方法匯出,可參考:https://www.cnblogs.com/webttt/p/14283481.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/555670.html
標籤:其他
下一篇:返回列表
