完整项目 : https://github.com/Dr-Water/springboot-jxls
一、 jxls 实现
jxls的maven依赖
<!-- jxls依赖 --> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls</artifactId> <version>2.4.6</version> </dependency> <dependency> <groupId>org.jxls</groupId> <artifactId>jxls-poi</artifactId> <version>1.0.15</version> </dependency>
- java代码
import java.io.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.jxls.common.Context; import org.jxls.util.JxlsHelper; /** * 简单表格--动态列的数据以及列的字段类型 */ public class T1 { public static void main(String[] args) throws Exception { //构造集合数据 List<List<Object>> dataList = new ArrayList<List<Object>>(); List<Object> data1 = new ArrayList<Object>(); data1.add("chendd");data1.add("男");data1.add(25); dataList.add(data1); List<Object> data2 = new ArrayList<Object>(); data2.add("jiangjj");data2.add("男");data2.add(26); dataList.add(data2); List<Object> data3 = new ArrayList<Object>(); data3.add("zengxr");data3.add("男");data3.add(27); dataList.add(data3); //载入模板 //InputStream is = T1.class.getClass().getResourceAsStream("/cn/chendd/examples/templates/simpleGrid.xls"); FileInputStream is = new FileInputStream(new File("F:\\templates\\竖列模板.xlsx")); Context context = new Context(); context.putVar("headers", Arrays.asList("姓名" , "性别" , "年龄")); context.putVar("dataList", dataList); OutputStream os = new FileOutputStream(new File("F:\\templates\\result3.xlsx")); //指定Sheet文件解析 JxlsHelper.getInstance().processTemplate(is, os, context); os.flush(); os.close(); is.close(); } }
- excel模板(模板在 https://github.com/Dr-Water/springboot-jxls/blob/master/src/main/resources/templates/竖列模板.xlsx)
如果需要不需要展示第一列(隐藏标题 人员信息表),在模板中隐藏即可,目前还不能直接取消这个标题头,,否则jxls无法解析填充excel,具体怎么隐藏列,自行百度。(参考链接:jxls去掉行标题
)如果这种方式满足不了需求,可以参考方法二:使用easypoi进行动态组装列导出
二、easypoi实现
导入easypoi的maven坐标
<!--阿里easypoi--> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.7</version> </dependency>
import com.alibaba.excel.EasyExcelFactory; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.metadata.Sheet; import com.alibaba.excel.metadata.Table; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; public class SimpleWrite { public static void main(String[] args) { // 文件输出位置 String outPath = "F:\\templates\\result4.xlsx"; try { // 所有行的集合 List<List<Object>> list = new ArrayList<List<Object>>(); for (int i = 1; i <= 10; i++) { // 第 n 行的数据 List<Object> row = new ArrayList<Object>(); row.add("第" + i + "单元格"); row.add("第" + i + "单元格"); list.add(row); } ExcelWriter excelWriter = EasyExcelFactory.getWriter(new FileOutputStream(outPath)); // 表单 Sheet sheet = new Sheet(1, 0); sheet.setSheetName("第一个Sheet"); // 创建一个表格 Table table = new Table(1); // 动态添加 表头 headList --> 所有表头行集合 List<List<String>> headList = new ArrayList<List<String>>(); // 第 n 行 的表头 List<String> headTitle0 = new ArrayList<String>(); List<String> headTitle1 = new ArrayList<String>(); List<String> headTitle2 = new ArrayList<String>(); headTitle0.add("最顶部-1"); headTitle0.add("标题1"); headTitle1.add("最顶部-1"); headTitle1.add("标题2"); headTitle2.add("最顶部-1"); headTitle2.add("标题3"); headList.add(headTitle0); headList.add(headTitle1); headList.add(headTitle2); table.setHead(headList); excelWriter.write1(list, sheet, table); // 记得 释放资源 excelWriter.finish(); System.out.println("ok"); } catch (FileNotFoundException e) { e.printStackTrace(); } } }