项目中用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是在Office 2007中推出的一种新的文件存储标准,它以XML为基础,取代了旧的二进制文件格式。在POI 3.5之前,项目主要处理老式的BIFF(Binary Interchange File Format)格式,用于Excel,以及WordDocument格式...
OOXML是一种XML格式,取代了原来的二进制格式,使得文件更易于解析和生成。 3. **poi-ooxml-schemas-3.9-20121203.jar**:这个库包含了处理OOXML文件所必需的XML模式定义。这些模式用于验证生成或解析的数据是否...
而jxl则是早期用于读写Excel文件的Java库,现在已经被更强大的Apache POI所取代。 Apache POI是Apache软件基金会的一个开源项目,提供了一组API,用于在Java应用程序中创建、修改和读取Microsoft Office格式的文件...
传统实地勘察访问的方式逐渐被基于网络爬虫技术的大规模餐饮POI数据获取所取代,成为新的重要数据源。 3. POI数据的重要性:POI(Point of Interest,兴趣点)数据因其与地理位置紧密相关,对研究餐饮空间格局特征...
在Android平台上,开发人员经常需要处理数据的存储和读取,其中就包括写入和读取Excel文件。Excel文件通常用于存储...同时,随着技术发展,现代的Excel文件格式xlsx已逐渐取代xls,开发者也应关注xlsx文件的处理方法。
- JXL包:虽然已逐渐被POI取代,但在处理.xls格式文件时,仍可作为备选方案。 综上所述,这些`jar`包是Java开发中常见的依赖库,它们为程序提供了丰富的功能,包括日志记录、数据库操作和Excel文件处理,是构建企业...
它取代了早期的 Selenium RC,提供了更直接的浏览器控制。WebDriver 支持的语言包括 Java、Python、C#、Ruby 等,可以实现自动化测试脚本的灵活编写。 1. **安装与配置**:首先,需要根据使用的编程语言选择相应的 ...
- 《史记》的记载表明,秦朝时期主要的书写材料是竹木简,而在之后,纸逐渐取代了这些传统的书写材料。 5. **医学与科技的应用**: - 《伤寒杂病论》的完成时间晚于华佗被杀,但华佗对这本书的赞赏表明,他在生前...
此外,JXL也是一个早期被广泛应用的库,但随着技术的发展,它逐渐被Apache POI所取代。 #### Apache POI与JXL比较 1. **兼容性**: - **POI**:支持JDK 1.5及以上版本,且在WebSphere等应用服务器上表现良好。 -...
- 注意,自Java 8起,永久代已经被元空间所取代。 - **示例**: - 对于1G内存的服务器,可以设置如下参数: ``` JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=...
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缓存库,用于实现分布式缓存,...
随着车辆通信技术的发展,CAN(Controller Area Network)网络逐渐取代了以往的集中式车身控制系统,成为了汽车通信的主流技术。随着技术的变革,测试过程中生成DBC数据库的工作也变得尤为关键。DBC数据库是基于CAN...
另一个库,JExcelApi,虽然对较旧的.xls格式支持良好,但对.xlsx格式支持有限,所以现在更多地被Apache POI取代。 为了在Maven项目中使用这个Excel工具类jar包,我们需要将其作为项目的依赖添加到pom.xml文件中。...
- **JExcelAPI**:早期的Java Excel API,但已被Apache POI取代。 本案例中,作者使用了自定义的`Export2XLS`类,这可能是一个封装了上述库功能的自定义实现,以便更好地适应特定的业务逻辑和性能需求。 ##### 2. ...