首页 > 学院 > 开发设计 > 正文

用Apache POI读取Excel并下载

2019-11-08 03:01:20
字体:
来源:转载
供稿:网友

POI提供API给java程序对Microsoft Office格式档案读和写的功能。今天写个读取execl并下载的demo。

Demo

//使用POI,将数据转换生成Excel(.xls格式)//1.创建一个新的空白工作簿ExcelHSSFWorkbook hssfWorkbook = new HSSFWorkbook();//2.在工作簿中创建一个新的工作表HSSFSheet sheet = hssfWorkbook.createSheet();//3.在工作表中创建第一行,作为标题行HSSFRow headRow = sheet.createRow(0);//给标题行的每一格写入数据headRow.createCell(0).setCellValue("分区编号");headRow.createCell(1).setCellValue("区域编码");headRow.createCell(2).setCellValue("关键字");headRow.createCell(3).setCellValue("起始号");headRow.createCell(4).setCellValue("结束号");headRow.createCell(5).setCellValue("单双号");headRow.createCell(6).setCellValue("位置信息");//4.在工作表中写入其他数据行,每一个分区对应一行数据for (Subarea subarea : subareaList) { HSSFRow subareaRow = sheet.createRow(sheet.getLastRowNum()+1);//从第二行开始写入 subareaRow.createCell(0).setCellValue(subarea.getId()); subareaRow.createCell(1).setCellValue(subarea.getRegion().getId()); subareaRow.createCell(2).setCellValue(subarea.getAddresskey()); subareaRow.createCell(3).setCellValue(subarea.getStartnum()); subareaRow.createCell(4).setCellValue(subarea.getEndnum()); subareaRow.createCell(5).setCellValue(subarea.getSingle().toString()); subareaRow.createCell(6).setCellValue(subarea.getPosition());}//设置客户端浏览器用于识别附件的两个参数Content-Type和Content-Disposition//文件名String downloadFileName = "分区数据.xls";//获取文件的MIME类型:String mimeType = ServletActionContext.getServletContext().getMimeType(downloadFileName);//将MIME类型放入响应ServletActionContext.getResponse().setContentType(mimeType);//浏览器类型String agent = ServletActionContext.getRequest().getHeader("user-agent");//附件名编码,解决中文乱码问题(用工具类)downloadFileName = FileUtils.encodeDownloadFilename(downloadFileName, agent);//获取附件的名字和下载方式String contentDisposition = "attachment;filename="+downloadFileName;//将附件名字和下载方式放入响应头信息中ServletActionContext.getResponse().setHeader("Content-Disposition", contentDisposition);//将Excel的文件流写入到客户端响应中hssfWorkbook.write(ServletActionContext.getResponse().getOutputStream());

解决浏览器兼容工具类

public class FileUtils { /** * 下载文件时,针对不同浏览器,进行附件名的编码 * * @param filename * 下载文件名 * @param agent * 客户端浏览器 * @return 编码后的下载附件名 * @throws IOException */ public static String encodeDownloadFilename(String filename, String agent) throws IOException { if (agent.contains("Firefox")) { // 火狐浏览器 filename = "=?UTF-8?B?" + new BASE64Encoder().encode(filename.getBytes("utf-8")) + "?="; filename = filename.replaceAll("/r/n", ""); } else { // IE及其他浏览器 filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+"," "); } return filename; }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表