java jxls_java使用jxls导出Excel

jxls是基于POI的Excel模板导出导入框架。通过使用类似于jstl的标签,有效较少导出Excel的代码量。

1.pom

net.sf.jxls

jxls-core

1.0.3

2.模板样式

e593f8a8b50659ecbf1e370f9b0fc4e5.png

一般数据直接绑定跟 jstl比较像,直接${name}

循环就是 

3.代码演示

@Testpublic void method1() throwsException {//循环数据

List list = new ArrayList<>();for (int i = 0; i < 100; i++) {

Map data = new HashMap<>();

data.put("a1", (int)(Math.random()*100) );

data.put("a2", (int)(Math.random()*100) );

data.put("a3", (int)(Math.random()*100) );

data.put("a4", (int)(Math.random()*100) );

data.put("a5", (int)(Math.random()*100) );

list.add(data);

}//表格使用的数据

Map map = newHashMap();

map.put("data",list);

map.put("title","java基于模板导出excel表格");

map.put("val","演示合并单元格的数据显示");//获取模板文件

InputStream is = this.getClass().getClassLoader().getResourceAsStream("x1.xls");//实例化 XLSTransformer 对象

XLSTransformer xlsTransformer = newXLSTransformer();//获取 Workbook ,传入 模板 和 数据

Workbook workbook =xlsTransformer.transformXLS(is,map);//写出文件

OutputStream os = new BufferedOutputStream(new FileOutputStream("D://temp.xls"));//输出

workbook.write(os);//关闭和刷新管道,不然可能会出现表格数据不齐,打不开之类的问题

is.close();

os.flush();

os.close();

}

4.导出效果

6222680825c0bf29f0d9a25135b90f2d.png

5.web环境下跑

web环境下跑和上面的代码基本上一样,不一样的就是  OutputStream 的地方换成了  response.getOutputStream()

然后  response 设置一下文件名, response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("报表.xls" ,"UTF-8"));

如果这一步不懂得可以参考我得另一篇文章:https://blog.csdn.net/yali_aini/article/details/81745883

代码:

importnet.sf.jxls.transformer.XLSTransformer;importorg.apache.poi.ss.usermodel.Workbook;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.BufferedOutputStream;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.URLEncoder;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;

@Controllerpublic classReportController {

@RequestMapping("/report")public voidreport(HttpServletRequest request , HttpServletResponse response){try{//循环数据

List list = new ArrayList<>();for (int i = 0; i < 100; i++) {

Map data = new HashMap<>();

data.put("a1", (int)(Math.random()*100) );

data.put("a2", (int)(Math.random()*100) );

data.put("a3", (int)(Math.random()*100) );

data.put("a4", (int)(Math.random()*100) );

data.put("a5", (int)(Math.random()*100) );

list.add(data);

}//表格使用的数据

Map map = newHashMap();

map.put("data",list);

map.put("title","java基于模板导出excel表格");

map.put("val","演示合并单元格的数据显示");//获取模板文件

InputStream is = this.getClass().getClassLoader().getResourceAsStream("x1.xls");//实例化 XLSTransformer 对象

XLSTransformer xlsTransformer = newXLSTransformer();//获取 Workbook ,传入 模板 和 数据

Workbook workbook =xlsTransformer.transformXLS(is,map);//设置文件名

response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode("报表.xls" ,"UTF-8"));//写出文件

OutputStream os = newBufferedOutputStream( response.getOutputStream() );//输出

workbook.write(os);//关闭和刷新管道,不然可能会出现表格数据不齐,打不开之类的问题

is.close();

os.flush();

os.close();

}catch(Exception e){

}

}

}

07ece7d778442ab2964f5cc5ae1204b2.png

访问 /report/ 连接时就直接下载文件了,打开看和刚才测试跑的是一样的。

————————————————

版权声明:本文为CSDN博主「临窗,听雨声」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/yali_aini/article/details/85804466

Jxls是一个基于Apache POI的Java库,它允许你通过简单的模板文件(如Excel表格)动态生成复杂的Excel报表。当需要在导出Excel中合并单元格时,Jxls提供了一个`setCellMerge()`方法。 使用Jxls合并单元格的一般步骤如下: 1. 创建一个Excel模板(例如`.xls`或`.xlsx`),在其中指定你要合并的单元格范围。 2. 在你的Java代码中,加载这个模板,并获取`TemplateContext`对象。 3. 使用`TemplateContext`设置数据,包括合并的单元格信息。你可以创建一个`org.apache.poi.ss.usermodel.RichTextString`对象来存储合并单元格的内容。 4. 调用`setCellMerge()`方法,传入合并的起始行、起始列、结束行和结束列。 5. 最后,将处理后的`TemplateContext`转换成`HSSFWorkbook`,然后保存到文件或返回给用户。 示例代码大致如下: ```java // 加载模板 XlsTemplate template = new XlsTemplate(new File("template.xls")); // 获取上下文 TemplateContext context = new TemplateContext(); // 设置数据,包括合并的单元格 Row row = template.getRow(0); cell = row.createCell(0); RichTextString text = new RichTextString("合并内容"); text.setFormat(template.getFormat("bold")); // 格式化选项 context.put("mergedCell", cell.mergeCells(CellRangeAddress.ofA1Notation("A1:D4")); // A1-D4表示合并范围 // 应用合并并导出 Workbook workbook = template.process(context); FileOutputStream outputStream = new FileOutputStream("output.xls"); workbook.write(outputStream); outputStream.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值