将List导出到excel

3 篇文章 0 订阅

有的时候因为我们需要将页面上的表格数据导出到Excel表。我们可以写一个导出的java接口。

这个接口先在服务器上写一份Excel文件,然后再写一份到用户这。至于为什么要现在服务器上先写一份,可能是为了备份啥的把。。。

这个接口需要的参数有:

1.查询需要导出的List数据的条件参数

2.HttpServletRequest

3.HttpServletResponse

下面是逻辑

String filename = new RandomGUID.getUUID32() + ".xls";
//在服务器上创建一个exportexcel文件夹(如果这个exportexcel文件夹不存在的话)
String dirpath = request.getSession().getServletContext().getRealPath("/") + "exportexcel";
File dir = new File(dirpath);
if(!dir.exists)
    dir.mkdirs();//如果目标文件夹不存在则创建新的文件夹
String fileuri = dirpath + File.separator + filename;
//假设我们已经通过接口的第一个参数获取到要导出的List数据了,这里暂定list
//设置表头
String btList[] = {"编号", "姓名", "年龄"};
//第一步,创建一个webbook,对应一个Excel文件
HSSWorkbook wb = new HSSWorkbook();
//第二步,在webook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet();
//第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow row = sheet.createRow((int) 0);
//第四步,创建单元格,并设置表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//创建一个居中格式
for(short i = 0; i < (short) btList.length; i++){
    HSSFCell cell = row.createCell((short) i);
    cell.setCellValue(btList[i]);
    cell.setCellStyle(style);
}
//设置背景颜色
style.setFillBackGroundColor(Font.COLOR_NORMAL);
int j = 1;//记录行数
//下面遍历list,将数据写在每一列上
for(int i = 0; i < list.size(); i++){
    //创建一行
    HSSFRow datarow = sheet.createRow((int) j);
    //创建这行的一格
    HSSFCell cell0 = datarow.createCell(0);
    //将值写入这一格
    cell0.setCellValue(写表头里面第一个字段也就是编号的值);
    cell0.setCellStyle(style);//设置该单元格的格式
    //写这一行的其他格子同理
    ...
    j++;
}
//将webbook的内容写入服务器那个文件里
FileOutputStream fout = new FileOutputStream(fileuri);
wb.write(fout);
fout.close();
/**到这里,数据已经导出到服务器上的fileuri路径下了**/
/**下面做的就是相当于把服务器上的文件下载下来**/
//设置下载的文件名字以及编码格式
String name = new String("信息.xls".getBytes("UTF-8"), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment:filename=" + name);
InputStream in = new FileInputStream(new File(fileuri));
OutputStream out = response.getOutputStream();
int b;
while((b = in.read() != -1){
    out.write(b);
}
in.close();
out.close();

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值