博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态生成Excel到客户端
阅读量:4364 次
发布时间:2019-06-07

本文共 2248 字,大约阅读时间需要 7 分钟。

    /**	 * 生成文件	 * @param tempList  数据源	 * @param title    Excel第一行表头	 * @param fileName 文件名称	 * @param hm	 * @throws Exception	 */	public static void tempExcel(List
tempList , String title[], String filename, HttpServletResponse response) throws Exception { String oldFileName = filename; filename = new String(filename.getBytes(), "ISO8859-1"); //此处不转码页面弹出的下载框就会乱码 try {              //页面弹出下载框               response.reset();// 清空输出流   response.setContentType("application/vnd.ms-excel");// 定义输出类型  response.addHeader("Content-Disposition", "attachment;filename="+ filename+".xls"); //设定输出文件头   // 创建Excel工作薄 OutputStream os = response.getOutputStream();// 取得输出流  WritableWorkbook wwb = Workbook.createWorkbook(os);// 建立excel文件   // 添加第一个工作表并设置第一个Sheet的名字 int count = (tempList.size() / 60000) + 1; //一张sheet最多存储65536条数据(2^16) for (int j = 1; j <= count; j++) { WritableSheet sheet = wwb.createSheet(oldFileName.trim() + String.valueOf(j), j - 1); Label label; // Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z for (int i = 0; i < title.length; i++) { // 在Label对象的子对象中指明单元格的位置和内容 label = new Label(i, 0, title[i]); // 将定义好的单元格添加到工作表中 sheet.addCell(label); } int formRow = (j - 1) * 60000 + 1; int toRow = j * 60000; if (count == j) { toRow = tempList.size() % 60000; } for (int r = formRow; r <= toRow; r++) { Object[] obj = tempList.get(r - 1); for (int c = 0; c < obj.length; c++) { if (obj != null) { String centent = String.valueOf(obj[c]); label = new Label(c, r, centent); sheet.addCell(label); } } } } // 写入数据 wwb.write(); // 关闭文件 wwb.close(); response.flushBuffer(); } catch (Exception e) { System.out.println("生成Excel时出错:"); e.printStackTrace(); } }

  需要导入jxl.jar

  1. 页面需要导入的包

    import java.io.OutputStream;

    import java.util.List;

    import javax.servlet.http.HttpServletResponse;

    import jxl.Workbook;

    import jxl.write.Label;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook; 

  2. 把生成的excel数据输出到response的OutputStream
     wwb.write();
       wwb.close();
       response.flushBuffer();

参考资料:http://www.blogjava.net/netnova/archive/2009/07/28/146776.html

 

转载于:https://www.cnblogs.com/Jenny-sider/p/4026231.html

你可能感兴趣的文章
CentOS Vi编辑器
查看>>
Vue.Draggable 文档总结
查看>>
LSMW应用
查看>>
每天一个Linux命令(7):pwd命令
查看>>
第三周
查看>>
Java中的堆和栈
查看>>
区域赛前立FLAG
查看>>
nginx防DOS攻击
查看>>
【BZOJ-4261】建设游乐场 最大费用最大流
查看>>
UML与软件建模:第一次作业(用例图绘制)
查看>>
PHP调用mysql函数整理
查看>>
通俗易懂系列 | 设计模式(五):策略模式
查看>>
三核CPU XP系统终极安装SQL 2005
查看>>
SQL语句查询优化续集
查看>>
(四)ServletConfig
查看>>
连接数据库修改篇
查看>>
说说面向对象
查看>>
mybatis学习笔记
查看>>
zabbix 乱码的问题
查看>>
Swift 学习之二十一:?和 !(详解)
查看>>