XSSFWorkbook实现导出excel
1.pom.xml中加入poi依赖:
<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.10-FINAL</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
2.创建导出excel文件模板;

3.controller层实现代码:
@PostMapping("/excelCarrierOrder")
public ResponseEntity<Resource> excelCarrierOrder(@RequestBody Map<String,Object> params,HttpServletResponse response) throws IOException{
//列表数据
XSSFWorkbook workbook = carrierOrderService.excelCarrierOrder(params);
ByteArrayOutputStream os = new ByteArrayOutputStream();
workbook.write(os);
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "0");
response.setHeader("charset", "utf-8");
// 当前日期,用于导出文件名称
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String name =sdf.format(new Date()) + ".xlsx";
response.setHeader("Content-Disposition", "attachment;filename=\"" + URLEncoder.encode(name, "UTF-8") + "\"");
workbook.write(response.getOutputStream());
if (null != os) {
os.close();
}
return new ResponseEntity<Resource>(null, null, HttpStatus.OK);
}
4.service实现类实现代码:
@Override
public XSSFWorkbook excelCarrierOrder(Map<String, Object> params) throws IOException {
//模板路径
String path = "/templates/excel/订单列表.xlsx";
XSSFWorkbook workboot = new XSSFWorkbook(this.getClass().getResourceAsStream(path));
//sheet页(默认sheet1页),也可通过workboot.createSheet("订单列表")创建sheet页
XSSFSheet sheetAt = workboot.getSheetAt(0);
//订单基本表数据
List<CarrierOrderPojo> list = mapper.getExcelCarrierOrder(params);
//开始创建行和表格并且加入数据
//行
XSSFRow row;
int i = 0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
if(null != list && !list.isEmpty()) {
for (CarrierOrderPojo dto : list) {
//根据订单id查询车辆信息
List<CarrierOrderTruck> truckList = truckMapper.getTruckList(dto.getId());
//根据订单id查询装卸车费用
List<CarrierOrderServe> serveList = serveMapper.getServeList(dto.getId());
//根据订单id查询采购详情
List<CarrierOrderDetail> detailList = detailMapper.getCarrierOrderDetailList(dto.getId());
String purchaseOrderNumber = "";
i += 1;
//创建行
row = sheetAt.createRow(i);
//承运商
if(null != dto.getCarrierName()) {
row.createCell(0).setCellValue(dto.getCarrierName());
}else {
row.createCell(0).setCellValue("");
}
//物流单号
if(null != dto.getLogisticsNumber()) {
row.createCell(1).setCellValue(dto.getLogisticsNumber());
}else {
row.createCell(1).setCellValue("");
}
//采购单号
if(null != detailList && !detailList.isEmpty()) {
for (CarrierOrderDetail detaildto : detailList) {
purchaseOrderNumber += detaildto.getPurchaseOrderNumber()+",";
}
row.createCell(2).setCellValue(purchaseOrderNumber.substring(0, purchaseOrderNumber.length()-1));
}else {
row.createCell(2).setCellValue("");
}
//发货时间
if(null != dto.getTakingDate()) {
row.createCell(3).setCellValue(sdf.format(dto.getTakingDate()));
}else {
row.createCell(3).setCellValue("");
}
//到货时间
if(null != dto.getDeliveryDate()) {
row.createCell(4).setCellValue(sdf.format(dto.getDeliveryDate()));
}else {
row.createCell(4).setCellValue("");
}
//总体积
if(null != dto.getTotalAllVolume()) {
row.createCell(5).setCellValue(dto.getTotalAllVolume()+"m³");
}else {
row.createCell(5).setCellValue("");
}
//箱型
if(null != truckList && !truckList.isEmpty()) {
for (CarrierOrderTruck truckdto : truckList) {
if("面包车".equals(truckdto.getTruckType())) {
row.createCell(6).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("金杯车".equals(truckdto.getTruckType())){
row.createCell(7).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("2米7平板".equals(truckdto.getTruckType())){
row.createCell(8).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("3米8平板".equals(truckdto.getTruckType())){
row.createCell(9).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("4米2平板".equals(truckdto.getTruckType())){
row.createCell(10).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("4米2厢车".equals(truckdto.getTruckType())){
row.createCell(11).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("4米2高栏".equals(truckdto.getTruckType())){
row.createCell(12).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("6米8厢车".equals(truckdto.getTruckType())){
row.createCell(13).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("6米8高栏".equals(truckdto.getTruckType())){
row.createCell(14).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("7米6厢车".equals(truckdto.getTruckType())){
row.createCell(15).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("9米6厢车".equals(truckdto.getTruckType())){
row.createCell(16).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("9米6高栏".equals(truckdto.getTruckType())){
row.createCell(17).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("12米5厢车".equals(truckdto.getTruckType())){
row.createCell(18).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("13米高栏".equals(truckdto.getTruckType())){
row.createCell(19).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("16米5厢车".equals(truckdto.getTruckType())){
row.createCell(20).setCellValue(truckdto.getTruckNumber()+"辆");
}else if("17米5厢车".equals(truckdto.getTruckType())){
row.createCell(21).setCellValue(truckdto.getTruckNumber()+"辆");
}
}
}
//送货距离
if(null != dto.getDistance()) {
row.createCell(22).setCellValue(dto.getDistance()+"km");
}else {
row.createCell(22).setCellValue("");
}
//运输费用
if(null != dto.getFreight()) {
row.createCell(23).setCellValue(dto.getFreight()+"元");
}else {
row.createCell(23).setCellValue("");
}
//装货费用,卸货费用
if(null != serveList && !serveList.isEmpty()) {
for (CarrierOrderServe servedto : serveList) {
if("装货".equals(servedto.getServiceType())) {
row.createCell(24).setCellValue(servedto.getPrice()+"元");
}else if("卸货".equals(servedto.getServiceType())){
row.createCell(25).setCellValue(servedto.getPrice()+"元");
}
}
}
//异常费用
if(null != dto.getOtherCost()) {
row.createCell(26).setCellValue(dto.getOtherCost()+"元");
}else {
row.createCell(26).setCellValue("");
}
//合计
if(null != dto.getTotalCost()) {
row.createCell(27).setCellValue(dto.getTotalCost()+"元");
}else {
row.createCell(27).setCellValue("");
}
//备注
if(null != dto.getCarrierRemark()) {
row.createCell(28).setCellValue(dto.getCarrierRemark());
}else {
row.createCell(28).setCellValue("");
}
}
}
return workboot;
}
5.项目中引入第2步创建的模板,要与Service实现类中path路径对应:

6.效果:

7.XSSFWorkbook 做导出也可以不引入模板,通过workboot.createSheet("订单列表")创建sheet页,并设定表格样式,可实现相同的效果。但是我觉得导入模板比较简单,容易上手。
如有错误,请指出,谢谢!
XSSFWorkbook实现导出excel的更多相关文章
- 关于poi导出excel方式HSSFWorkbook(xls).XSSFWorkbook(xlsx).SXSSFWorkbook.csv的总结
1.HSSFWorkbook(xls) import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermo ...
- .net使用NPOI的XSSFWorkbook进行web开发中导出Excel
之前也使用过NPOI导出excel,这次是因为在导出的excel里新增了几个列,正好超出了255的限制,所以又要改了. 今天主要出了4个问题: 1. Invalid column index (256 ...
- JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案
现在很多系统都有导出excel的功能,总结一下自己之前写的,希望能帮到其他人,这里我用的是XSSFWorkbook,我们项目在winsang 用的Tomcat,LInux上用的weblogic服务器, ...
- Java导出excel
一.介绍 常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际的开发中,很多时候需要实现导入.导出Excel的应用. ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续篇)
上周六我发表的文章<分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility>受到了大家的热烈支持与推荐,再此表示感谢,该ExcelUtility ...
- C# NPOI导出Excel和EPPlus导出Excel比较
系统中经常会使用导出Excel的功能. 之前使用的是NPOI,但是导出数据行数多就报内存溢出. 最近看到EPPlus可以用来导出Excel,就自己测了下两者导出上的差异. NPIO官网地址:http: ...
- ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)
要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...
- .NET NPOI导出Excel详解
NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, ...
- Java POI导入导出Excel
1.异常java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException 解决方法: 使用的poi的相关jar ...
随机推荐
- Linux实战教学笔记14:用户管理初级(上)
第十四节 用户管理初级(上) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,账号管理 1.1 管理用户命令汇总 命令 注释说明(特殊颜色的必须掌握) useradd增 ...
- SQLSERVER2012误删数据恢复过程
由于长时间从事企业应用系统开发,前往用户现场升级.调试系统是比较常做的事情,但是就在周一,由于同事的失误在毫无知觉的情况下误删了生产数据库几乎所有的数据.当我发现的那一刻,感觉头发都立起来了,心想这他 ...
- C++版修真小说
终有一天我手中的编译器将成为我灵魂的一部分,这世界在我的眼中将被代码重构,我将看到山川无尽银河无垠都汇成二进制的数字河流,过往英雄都在我脑海眼前一一浮现,而我听到无数码农跪倒在我的程序面前呼喊. 他们 ...
- hdu1710-Binary Tree Traversals (由二叉树的先序序列和中序序列求后序序列)
http://acm.hdu.edu.cn/showproblem.php?pid=1710 Binary Tree Traversals Time Limit: 1000/1000 MS (Java ...
- 高性能Web服务器Nginx的配置与部署研究(9)核心模块之HTTP模块基本常用指令
一.HTTP模块的作用是什么? Nginx的HTTP模块用于控制Nginx的HTTP进程. 二.指令 1. alias 含义:指定location使用的路径,与root类似,但不改变文件的跟路径,仅适 ...
- 解剖Nginx·模块开发篇(1)跑起你的 Hello World 模块!
1 学习 Nginx 模块开发需要有哪些准备? 需要的预备知识不多,有如下几点: 有过一些 C 语言的编程经历: 知道 Nginx 是干嘛的,并有过编写或改写 Nginx 的配置文件的经历. OK,就 ...
- python-nmap模块常用方法说明
一.模块常用方法说明 本节介绍python-nmap模块的两个常用类,一个为PortScanner()类,实现一个nmap工具的端口扫描功能封装:另一个为PortScannerHostDict()类, ...
- sqlserver镜像相关资料
本文出处:http://blog.csdn.net/dba_huangzj/article/details/35995083 镜像(Mirroring) SQL Server镜像简介 计划搭建SQL ...
- 初学者教程之命名空间,范围解析及LEDB规则
2014年5月12日 Sebastian Raschka编写 这是一篇关于采用LEGB规则实现Python变量命名空间及范围解析的简短教程.下面章节将会提供简短的可以说明问题的示例代码块来简要阐述问题 ...
- Python获取服务器的厂商和型号信息-乾颐堂
Python获取服务器的厂商和型号信息,在RHEHL6下,需要系统预装python-dmidecode这个包(貌似默认就已经装过了) 脚本内容如下 [root@linuxidc tmp]# cat t ...