java 导出excel插件_Java无模板导出Excel,Apache-POI插件实现

packagecom.wayne.utils;

​importcom.alibaba.fastjson.JSON;importcom.google.common.collect.Lists;importcom.wayne.common.exception.ServiceException;import org.apache.poi.hssf.usermodel.*;

​importjava.io.File;importjava.io.FileOutputStream;importjava.util.List;importjava.util.Map;

​/*** 文件导出工具类

*@authorWayne

* @date 2019/5/15*/

public classExportUtil {

​/*** 无模块导出Excel方法,

* 参数data格式: [

* {

* "姓名": "张三";

* "年龄": "23";

* "性别": "男"

* },

* {

* "姓名": "李四";

* "年龄": "24";

* "性别": "男"

* }

* ]

*

*@paramdata 需要导出的数据

*@paramfileName 导出后保存到本地的文件名

*@return创建好的Excel文件,用于前端下载

*@throwsServiceException 自定义RunTimeException子类异常*/

public static HSSFWorkbook exportExcel(List> data, String fileName) throwsServiceException {//从参数data中解析出打印的每列标题,放入title中

List title =Lists.newArrayList();for(Map.Entry entry : data.get(0).entrySet()) {

title.add(entry.getKey());

}//新建一个Excel文件

HSSFWorkbook wb = newHSSFWorkbook();//Excel中的sheet

HSSFSheet sheet =wb.createSheet();//sheet中的行,0表示第一行

HSSFRow row = sheet.createRow(0);//设置标题居中

HSSFCellStyle cellStyle =wb.createCellStyle();

cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//sheet中的单元格

HSSFCell cell = null;

​//给第一行赋值,值为我们从参数中解析出的标题,因此需要我们在传参的时候需要严格按照约定

for(int i = 0; i < title.size(); i++) {

cell=row.createCell(i);

cell.setCellValue(title.get(i));

cell.setCellStyle(cellStyle);

}

​//根据参数内容数量,创建表格行数

for(int i = 0; i < data.size(); i++) {

row= sheet.createRow(i + 1);

Map values =data.get(i);

​//将参数插入每一个单元格

for(int k = 0; k < title.size(); k++) {

Object value=values.get(title.get(k));if(null ==value) {

value= "";

}

String val=JSON.toJSONString(value);

row.createCell(k).setCellValue(val);

}

}

​//将文件写到硬盘中,将来根据需求,或写到服务器中,因此在实际开发中,最好将"E:/Temp/"配置在.properties配置文件中,仪表项目上线事更换方便

try{

FileOutputStream fileOutputStream= new FileOutputStream(new File("E:/Temp/" +fileName));

wb.write(fileOutputStream);

fileOutputStream.flush();

fileOutputStream.close();

}catch(Exception e) {throw new ServiceException("文件导出失败");

}returnwb;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值