项目中用POI来生成excel导出查询的结果, 会有如下问题。
1, 内存溢出 经过测试,如果tomcat采用默认的JVM大小64M, 当数据大于4w条就会OOM,
2, 当数据为1W条, 连续点击,会出现 socket write error。 以下是HP的主要代码
3, 【主要原因】 Excel样式会依赖与POI的API, 不方便修改。
如果是用jsp来生成的话, 样式可以有html来控制, 而html和xls之间是可以通过EXCEL互相转化的。
Action
fileName = response.encodeURL(new String(ExportPRAction.SUMMARY_XLS.getBytes(), "UTF-8"));
response.setHeader("Content-Disposition", "attachment; filename=\""
+ fileName + "\"");
ServletOutputStream out = response.getOutputStream();
export.exportFileBeansToExcel(bean.getFileBeans(), out);
response.setStatus(HttpServletResponse.SC_OK);
response.flushBuffer();
out.close();
ExcelExporter
public void exportFileBeansToExcel(List<FileBean> beans, OutputStream out)
throws Exception {
if ((null == beans) || beans.isEmpty() || (null == out)) {
logger.info(BEAN_OR_OUT_IS_NULL);
throw new InvalidParameterException(BEAN_OR_OUT_IS_NULL);
}
Workbook workBook = new HSSFWorkbook();
Sheet sheet = workBook.createSheet(SHEET_NAME);
createHeader(workBook, sheet);
createContents(workBook, sheet, beans);
setSizeAutoFit(sheet);
workBook.write(out);
}
JSP生成Excel的方式
<%@ page contentType="application/vnd.ms-excel; charset=UTF-8"%>
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page language="java"
import="com.hp.ucmdb.adapter.bean.SummaryPRBean"%>
<%@ page language="java" import="com.hp.ucmdb.adapter.bean.FileBean"%>
<%@ page language="java" import="java.util.ArrayList"%>
<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic"%>
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>
<%
String filename = new String("Table");
response.addHeader("Content-Disposition", "filename=" + filename
+ ".xls");
%>
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content="Microsoft Excel 12">
</head>
<body link=blue vlink=purple>
<table border=0 cellpadding=0 cellspacing=0 width=1321
style='border-collapse: collapse; table-layout: fixed; width: 991pt'>
<col width=33
style='mso-width-source: userset; mso-width-alt: 1206; width: 25pt'>
<col width=307
style='mso-width-source: userset; mso-width-alt: 11227; width: 230pt'>
<col width=92
style='mso-width-source: userset; mso-width-alt: 3364; width: 69pt'>
<col width=131
style='mso-width-source: userset; mso-width-alt: 4790; width: 98pt'>
<col width=137 span=2
style='mso-width-source: userset; mso-width-alt: 5010; width: 103pt'>
<col width=103
style='mso-width-source: userset; mso-width-alt: 3766; width: 77pt'>
<col width=76
style='mso-width-source: userset; mso-width-alt: 2779; width: 57pt'>
<col width=143
style='mso-width-source: userset; mso-width-alt: 5229; width: 107pt'>
<col width=110
style='mso-width-source: userset; mso-width-alt: 4022; width: 83pt'>
<col width=52
style='mso-width-source: userset; mso-width-alt: 1901; width: 39pt'>
<tr bgcolor="blue" height=19 style='height: 14.25pt'>
<td align="center" height=19 class=xl65 width=33
style='height: 14.25pt; width: 25pt'>#</td>
<td align="center" class=xl65 width=307 style='width: 230pt'>File
Name</td>
<td align="center" class=xl65 width=92 style='width: 69pt'>Data
Source</td>
<td align="center" class=xl65 width=131 style='width: 98pt'>File
Modified Date</td>
<td align="center" class=xl65 width=137 style='width: 103pt'>Process
Start Date</td>
<td align="center" class=xl65 width=137 style='width: 103pt'>Process
End Date</td>
<td align="center" class=xl65 width=103 style='width: 77pt'>Total
Records</td>
<td align="center" class=xl65 width=76 style='width: 57pt'>Status</td>
<td align="center" class=xl65 width=143 style='width: 107pt'>Successful
Records</td>
<td align="center" class=xl65 width=110 style='width: 83pt'>Failed
Records</td>
<td align="center" class=xl65 width=52 style='width: 39pt'>CI/min</td>
</tr>
<logic:iterate id="li" name="fileBeans" indexId="index">
<tr height=17 style='height: 12.75pt'>
<td align="center"><%=index.intValue() + 1%></td>
<td align="center"><bean:write name="li" property="fileName" /></td>
<td align="center"><logic:empty
name="<bean:write name='li' property='fileDataSource'/>">N/A</logic:empty>
<logic:notEmpty
name="<bean:write name='li' property='fileDataSource'/>">
<bean:write name='li' property='fileDataSource' />
</logic:notEmpty></td>
<td align="center"><bean:write name="li" property="submitDate" /></td>
<td align="center"><bean:write name="li"
property="processStartDate" /></td>
<td align="center"><bean:write name="li"
property="processEndDate" /></td>
<td align="center"><bean:write name="li" property="recordCount" /></td>
<td align="center"><bean:write name="li" property="fileStatus" /></td>
<td align="center"><logic:empty
name="<bean:write name='li' property='recordsProcessed'/>">N/A</logic:empty>
<logic:notEmpty
name="<bean:write name='li' property='recordsProcessed'/>">
<bean:write name='li' property='recordsProcessed' />
</logic:notEmpty></td>
<td align="center"><logic:empty
name="<bean:write name='li' property='recordsInError'/>">N/A</logic:empty>
<logic:notEmpty
name="<bean:write name='li' property='recordsInError'/>">
<bean:write name='li' property='recordsInError' />
</logic:notEmpty></td>
<td align="center"><bean:write name="li"
property="ciNumbersPerMinute" /></td>
</tr>
</logic:iterate>
</table>
</body>
</html>
分享到:
相关推荐
尽管Apache POI已经取代了jxl,但在某些旧项目中可能仍会使用到jxl.jar。 Apache POI的操作主要包括以下几个方面: 1. **创建Excel文件**:可以使用HSSFWorkbook(适用于XLS格式)或XSSFWorkbook(适用于XLSX格式...
开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一...jxl 由于其小巧 易用的特点, 逐渐已经取代了 POI-excel的地位, 成为了越来越多的java开发人员生成excel文件的首选。
- "jxl":JXL是早期的一个Java Excel API,现在已被POI取代,因为POI提供了更全面的支持和性能优化。 4. **压缩包子文件的文件名称解析** - `poi-3.5-FINAL-20090928.jar`:这是Apache POI的核心库,包含了处理...
OOXML是Microsoft推出的一种新的XML文件格式,用于替代传统的二进制文件格式,例如.xlsx和.xlsm取代了老版本的.xls。Apache POI的OOXML Schemas模块提供了对这些新格式的支持,使得开发者可以无需依赖于Microsoft ...
OOXML是一种XML格式,取代了原来的二进制格式,使得文件更易于解析和生成。 3. **poi-ooxml-schemas-3.9-20121203.jar**:这个库包含了处理OOXML文件所必需的XML模式定义。这些模式用于验证生成或解析的数据是否...
而jxl则是早期用于读写Excel文件的Java库,现在已经被更强大的Apache POI所取代。 Apache POI是Apache软件基金会的一个开源项目,提供了一组API,用于在Java应用程序中创建、修改和读取Microsoft Office格式的文件...
在Android平台上,开发人员经常需要处理数据的存储和读取,其中就包括写入和读取Excel文件。Excel文件通常用于存储...同时,随着技术发展,现代的Excel文件格式xlsx已逐渐取代xls,开发者也应关注xlsx文件的处理方法。
- JXL包:虽然已逐渐被POI取代,但在处理.xls格式文件时,仍可作为备选方案。 综上所述,这些`jar`包是Java开发中常见的依赖库,它们为程序提供了丰富的功能,包括日志记录、数据库操作和Excel文件处理,是构建企业...
7. **JXL**:一个早期的Java Excel库,尽管现在已被POI取代,但它仍是一个轻量级的选择,适用于简单的Excel操作。 8. **xlsxwriter**:Python库,主要用于创建新的Excel xlsx/xlsm文件,不支持读取已有文件,但提供...
6. **struts.jar** - 这可能是Struts1的库文件,是一个早期的MVC框架,尽管已被Struts2取代,但在一些遗留系统中仍可能被使用。 7. **javassist.jar** - Javaassist是一个用于操作字节码的库,常用于动态代理和AOP...
- `poi-ooxml-schemas-3.7-20101029.jar`和`poi-3.7-20101029.jar`是Apache POI库,用于读写Microsoft Office格式的文件,如Excel。 - `jbosscache-core-3.1.0.GA.jar`可能是JBOSS缓存库,用于实现分布式缓存,...
另一个库,JExcelApi,虽然对较旧的.xls格式支持良好,但对.xlsx格式支持有限,所以现在更多地被Apache POI取代。 为了在Maven项目中使用这个Excel工具类jar包,我们需要将其作为项目的依赖添加到pom.xml文件中。...
2. `toplink-essentials.jar`:Oracle的TopLink Essentials,也是JPA的一个实现,之前是开源版本,现在已被EclipseLink取代。 3. `jruby.jar`:JRuby,是Ruby语言的Java实现,允许在Java项目中使用Ruby代码。 4. `...
这个库是Java Excel API(JExcel API)的一部分,由薄荷开源软件公司(薄荷开源,现已被Apache POI项目取代)提供。本文将详细介绍如何使用`jxl.jar`进行Excel操作,并探讨其核心功能和用法。 首先,`jxl.jar`支持...
该引擎采用了六种时空数据模型,可以适应不同类型的时空数据,如POI分布、交通路网、天气/空气质量、站点数据、交通流量数据以及车联网络用户签到数据等。 JUST-DB作为时空数据的核心,其技术框架包括新的存储模式...
这些库文件可能包括解析EPUB文件的解析器(如ZXing用于条形码扫描,或者Apache POI用于处理EPUB内的XML文档),字体渲染引擎(如HarfBuzz用于支持多种语言的排版),以及UI组件和动画库(用于实现翻页效果)。...
“CGCS2000”是中国大地坐标系统2000,它是中国自2008年起采用的新一代国家坐标系统,取代了旧的北京54和西安80坐标系统。CGCS2000基于国际地球参考框架(ITRF),确保了与全球定位系统(GPS)和其他国际地心坐标...
对于文档解析,可能需要用到像Apache POI(处理Microsoft Office格式)或PDFBox(处理PDF)这样的库。格式转换则可能涉及将不同格式的内容(如.doc, .ppt, .txt等)转换为SWF或PDF所需的中间格式。内容渲染可能需要...
然而,随着技术的发展,Wince逐渐被更先进的操作系统如Android所取代,尽管如此,仍有一部分车辆使用Wince系统进行导航和信息娱乐。 悬浮菜单在车载导航系统中是一个实用的设计,它允许用户在不中断导航的情况下...
8. **Apache Ant**:早期的Java构建工具,虽然现在已被Maven和Gradle取代,但在某些场景下仍被使用,用于自动化构建过程。 9. **Apache Nifi**:数据流处理平台,用于自动化数据的获取、转换和分发,适用于大数据和...