前台使用Ext JS,后台框架为SSH,使用Apache的POI组件来实现导出Excel功能。

Apache POI是Apache软件基金会的开放源码函数库,POI提供API给Java程序对Microsoft Office格式文档进行读写的功能。本项目的各管理模块中用到的导出Excel功能都是调用POI库在服务器端先生成Excel文件,然后提供给前端进行下载的。

首先,导入apache的POI库文件。初始化一个workbook,并创建新的sheet,然后逐行生成并插入row,即可生成一个Excel文件。最后将workbook写入ByteArrayInputStream流传输到前台。进行适当的配置之后,浏览器就能识别出Excel文件。

配置文件中,需指定相应Action的返回结果的类型为excel文件流,并且以附件的形式打开,还要指定文件的名字,例如:

<action name="expWarnHisAction" class="SearchWarning" method="searchForExport"> <result name="success" type="stream"> <param name="contentType">application/vnd.ms-excel</param> <param name="contentDisposition">attachment;filename="${downloadFileName}"</param> <param name="inputName">bais</param> </result> </action>
配置好之后,前端用Javascript函数window.open()打开相应的Action,并附上查询条件作为请求参数,即可打开一个新的浏览器窗口进行导出。Action核心代码如下,需要考虑的一个问题是,Office的Excel文件(03版之前)中,每一个工作表最多能有65536行,所以如果超过65536行数据,需要进行特殊处理,创建多个工作表(sheet): HSSFWorkbook workbook = new HSSFWorkbook(); //NearEast 2012-03-23 考虑单sheet中记录数不能超过65536;且认为总数不会超过int的表示范围 int total = warningService.getTotalWarnings(ab); int s = 0;//每65535条记录新开一个sheet int cnt = total/65535 + 1; HSSFSheet[] sheet = new HSSFSheet[cnt]; HSSFRow row = null; for(int i=0; i<cnt; i++){ sheet[i] = workbook.createSheet("sheet" + i); row = sheet[i].createRow(0); row.createCell(0).setCellValue("预警时间"); row.createCell(1).setCellValue("车牌号"); row.createCell(2).setCellValue("预警类型"); row.createCell(3).setCellValue("当前速度"); row.createCell(4).setCellValue("当时预警"); row.createCell(5).setCellValue("驾驶员"); row.createCell(6).setCellValue("所属单位"); } for (int i = 0; i < warnings.size(); i++) { row = sheet[i/65535].createRow(i%65535 + 1); ab = (WarnerBean) warnings.get(i); row.createCell(0).setCellValue(ab.getStartTime()); row.createCell(1).setCellValue(ab.getIdnumber()); row.createCell(2).setCellValue(ab.getWarnerTypeStr()); row.createCell(3).setCellValue(ab.getSpeed()); row.createCell(4).setCellValue(ab.getComparedValue()); row.createCell(5).setCellValue(ab.getDriver()); row.createCell(6).setCellValue(ab.getDepartment()); } ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { workbook.write(baos); } catch (IOException e) { e.printStackTrace(); } byte[] ba = baos.toByteArray(); setBais(new ByteArrayInputStream(ba)); warnings = null;
辅助函数: public String getDownloadFileName(){ String name = null; try { name = new String("导出历史预警.xls".getBytes(), "ISO8859-1"); } catch (UnsupportedEncodingException e) { name = "warnings.xls"; e.printStackTrace(); } return name; }
Struts的配置文件中,可以指定上传文件的大小限制,此处限制为16兆: <struts> <constant name="struts.multipart.maxSize" value="16777216"/> </struts>

转载于:https://www.cnblogs.com/JPAORM/archive/2012/04/05/2509773.html

J2EE代码存档--导出Excel相关推荐

  1. EasyOffice-.NetCore一行代码导入导出Excel,生成Word

    Excel和Word操作在开发过程中经常需要使用,这类工作不涉及到核心业务,但又往往不可缺少.以往的开发方式在业务代码中直接引入NPOI.Aspose或者其他第三方库,工作繁琐,耗时多,扩展性差--比 ...

  2. java代码实现导出Excel表格、工具ssm框架、maven、idea

    第一步.导入依赖 <!--生成excel文件--><dependency><groupId>org.apache.poi</groupId><ar ...

  3. js导出excel单元格内换行符代码_javascript导出excel或者csv如何让单元格内容换行?...

    尝试过使用n,效果变成整行换行了,如何让某个单元格里的内容换行? 使用a标签方式将json导出csv文件 导出 function tableToExcel(){ //要导出的json数据 const ...

  4. asp.net导出excel示例代码

    asp.net导出excel示例代码 asp.net导出excel的简单方法. excel的操作,最常用的就是导出和导入. 本例使用NPOI实现. 代码:/// <summary>     ...

  5. ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)

    要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...

  6. django excel 导出页面_Django Admin中增加导出Excel功能过程解析

    在使用Django Admin时, 对于列表我们有时需要提供数据导出功能, 如下图: 增加导出Excel功能 在Django Admin中每个模型的Admin类(继承至admin.ModelAdmin ...

  7. Extjs 从grid中导出Excel表格。后台为C#(绝对好用)(按照自己的需求修改版本)...

    最近生成Excel表格,稍微得到一点新的体会,特此更新自己开发时候的版本. 开发工具:VS2005 数据库:oracle10.1 浏览器:firefox3.5.9 第一步,web层aspx文件 需要载 ...

  8. Flex导出Excel

    Flex代码: /**** * 导出excel的方法 * */ private function exportExcel():void{ ExportExcel.loadDGInExcel(this. ...

  9. java io导出excel表格_Java IO 导入导出Excel表格

    1.将excel导入到内存 1. 调用工作簿Workbook的静态方法getWorkbook(),获得工作簿Workbook对象 InputStream in = new FileInputStrea ...

最新文章

  1. java在td中怎么用if_不在Java中使用if语句
  2. Flume监听文件夹中的文件变化,并把文件下沉到hdfs
  3. 搜索引擎反作弊之:链接作弊与隐藏作弊
  4. Ajax入门总结--Ajax跨域请求
  5. 如何看云服务器性能,从存储速度看云服务器性能测试
  6. 在Eclipse中高效运行HTTP / REST集成测试
  7. 《The Art of Readable Code》学习笔记(一)
  8. 其实没有啥好说的公司组织去清远漂流
  9. laravel-admin grid中使用的switch必须form中同时具有switch才能生效的解决方案
  10. java中线程的优先级别
  11. Xcode 12 to build a single binary with both 32-bit and 64-bit support
  12. solr 忽略大小写
  13. laravel 事件及监听
  14. Atitit 计算机通信技术概要 目录 1. OSI参考模型将整个协议垂直地分为7个层次 : 1 1.1. 通信类别 2 2. 传输方式 计算机通信可分为直接式和间接式两种。 2 2.1. 1)直
  15. [问题探讨]ECharts实现带钓鱼岛和南海诸岛的中国(China)地图
  16. windows域与工作组概念
  17. 三轴加速度传感器角度值转换原理
  18. python安装报错:User installations are disabled via policy on the machine. 0x80070643
  19. 打造高效研发团队 (1) —— 组织架构篇
  20. 机器人兴趣班奖状_美术兴趣班奖状称号

热门文章

  1. 【轻院热身赛】级数求和、进制转换、candy
  2. dede站怎么在首页调用单页的内容?
  3. HDOJ 2642 HDU 2642 Stars ACM 2642 IN HDU
  4. flex4 BlazeDS 入门及配置
  5. 【jQuery笔记Part1】04-webstorm定义活动模板
  6. GET XXX net::ERR_CONNECTION_REFUSED
  7. 10张架构图详解数据中台,附全套数据中台PPT
  8. 【实例解析】大型服装集团BI决策系统的分析主题模块
  9. flexgdsgen
  10. 读书笔记--云边有个小卖部