前言
官方文档: https://jxls.sourceforge.net/getting-started.html
JXLS是一个用于生成Excel文档的Java库。它提供了一种基于模板的方式来生成Excel文档,使得开发者可以在模板中定义样式、公式和数据绑定等内容,然后通过填充数据来生成最终的Excel文档。
使用JXLS,开发者可以通过简单的方式来生成复杂的Excel报表,而无需编写大量的代码。它支持各种常见的Excel功能,如合并单元格、设置边框、设置字体样式等,同时还支持数据绑定和公式计算等高级功能。
JXLS采用Apache POI作为底层的Excel处理库,提供了方便的API来操作Excel文档。它还提供了与Spring和Hibernate等常见Java框架的集成,使得在Java应用中生成Excel报表变得更加简单。
总的来说,JXLS是一个强大且易用的Java库,可以帮助开发者快速、简单地生成Excel文档。它广泛应用于各种需要生成Excel报表的场景,如数据分析、财务报表、销售报表等。JXLS是一个用于生成Excel文档的Java库。它提供了一种基于模板的方式来生成Excel文档,使得开发者可以在模板中定义样式、公式和数据绑定等内容,然后通过填充数据来生成最终的Excel文档。
使用JXLS,开发者可以通过简单的方式来生成复杂的Excel报表,而无需编写大量的代码。它支持各种常见的Excel功能,如合并单元格、设置边框、设置字体样式等,同时还支持数据绑定和公式计算等高级功能。
JXLS采用Apache POI作为底层的Excel处理库,提供了方便的API来操作Excel文档。它还提供了与Spring和Hibernate等常见Java框架的集成,使得在Java应用中生成Excel报表变得更加简单。
总的来说,JXLS是一个强大且易用的Java库,可以帮助开发者快速、简单地生成Excel文档。它广泛应用于各种需要生成Excel报表的场景,如数据分析、财务报表、销售报表等。
JXLS 入门使用
- 导入依赖
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--jxls的依赖-->
<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>
- 编写工具类
import org.apache.commons.jexl3.JexlBuilder;
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 java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
/**
* @Description 描述
* @Author 作者
* @Date 2024/3/4
* @return
*/
public class JxlsUtils {
public static void exportExcel(InputStream is, OutputStream os, Map<String, Object> model) throws IOException {
Context context = PoiTransformer.createInitialContext();
if (model != null) {
for (String key : model.keySet()) {
context.putVar(key, model.get(key));
}
}
JxlsHelper jxlsHelper = JxlsHelper.getInstance();
Transformer transformer = jxlsHelper.createTransformer(is, os);
JexlExpressionEvaluator evaluator = (JexlExpressionEvaluator) transformer.getTransformationConfig()
.getExpressionEvaluator();
Map<String, Object> funcs = new HashMap<String, Object>();
funcs.put("utils", new JxlsUtils()); // 添加自定义功能
evaluator.setJexlEngine(new JexlBuilder().namespaces(funcs).create());
jxlsHelper.processTemplate(context, transformer);
}
}
- 编写一个导出的controller
import com.ittest.jxls01.pojo.Goods;
import com.ittest.jxls01.util.JxlsUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URLEncoder;
import java.util.*;
@Controller
@RequestMapping("/jxlstest")
@Slf4j
public class JxlsTestController {
//导出示例Controller
@GetMapping("/export/exportTest")
public void export2(HttpServletRequest request, HttpServletResponse response) throws MalformedURLException, UnsupportedEncodingException {
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
String fileName = URLEncoder.encode("千果园报价单" + System.currentTimeMillis() + ".xlsx", "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
log.info("导出数据");
try {
List<Goods> list = new ArrayList<>();
list.add(new Goods("1", "苹果", "6.98", "2024-01-01 12:13:35"));
list.add(new Goods("2", "桔子", "3.98", "2024-01-01 12:16:45"));
list.add(new Goods("3", "葡萄", "15.98", "2024-01-02 12:16:45"));
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/goods.xlsx");
//excel模板内,数据组装
Map<String, Object> map = new HashMap<String, Object>();
map.put("goods", list);
map.put("year", "2024");
JxlsUtils.exportExcel(inputStream, response.getOutputStream(), map);
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 制作模板,存放在resoruces/templates目录下
创建一个模板文件xxx.xlsx,模板需要插入的批注见图
编辑批注,请见审阅> 编辑批注
声明jxls的解析区域,lastCell 是最右下角的最后一个需要解析的表达式的位置,小于最后一个表达式的位置,则无法正常解析或者解析显示的数据是空。如demo中最后一个表达式的位置为H3,如果小于此值则无法解析,必须大于等于此值
执行结果