`
Tristan_S
  • 浏览: 383502 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

取代 POI

阅读更多
项目中用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>



分享到:
评论

相关推荐

    java 通过poi操作excel jar包

    尽管Apache POI已经取代了jxl,但在某些旧项目中可能仍会使用到jxl.jar。 Apache POI的操作主要包括以下几个方面: 1. **创建Excel文件**:可以使用HSSFWorkbook(适用于XLS格式)或XSSFWorkbook(适用于XLSX格式...

    Anroid开发所需poi_jar包

    开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一...jxl 由于其小巧 易用的特点, 逐渐已经取代了 POI-excel的地位, 成为了越来越多的java开发人员生成excel文件的首选。

    poi包(用于导入导出数据)

    - "jxl":JXL是早期的一个Java Excel API,现在已被POI取代,因为POI提供了更全面的支持和性能优化。 4. **压缩包子文件的文件名称解析** - `poi-3.5-FINAL-20090928.jar`:这是Apache POI的核心库,包含了处理...

    org.apache.poi-ooxml-schemas-3.9 jar包

    OOXML是Microsoft推出的一种新的XML文件格式,用于替代传统的二进制文件格式,例如.xlsx和.xlsm取代了老版本的.xls。Apache POI的OOXML Schemas模块提供了对这些新格式的支持,使得开发者可以无需依赖于Microsoft ...

    poi-bin-3.5-beta4-20081128.zip_POI 3.5 beta_poi 3_poi-3_poi-bin-

    OOXML是在Office 2007中推出的一种新的文件存储标准,它以XML为基础,取代了旧的二进制文件格式。在POI 3.5之前,项目主要处理老式的BIFF(Binary Interchange File Format)格式,用于Excel,以及WordDocument格式...

    poi操作表格需要的所有包 包括操作xlsx

    OOXML是一种XML格式,取代了原来的二进制格式,使得文件更易于解析和生成。 3. **poi-ooxml-schemas-3.9-20121203.jar**:这个库包含了处理OOXML文件所必需的XML模式定义。这些模式用于验证生成或解析的数据是否...

    jxls报表生成利器,比起jxl,poi牛逼得很

    而jxl则是早期用于读写Excel文件的Java库,现在已经被更强大的Apache POI所取代。 Apache POI是Apache软件基金会的一个开源项目,提供了一组API,用于在Java应用程序中创建、修改和读取Microsoft Office格式的文件...

    基于POI大数据的沈阳餐饮空间格局分析.pdf

    传统实地勘察访问的方式逐渐被基于网络爬虫技术的大规模餐饮POI数据获取所取代,成为新的重要数据源。 3. POI数据的重要性:POI(Point of Interest,兴趣点)数据因其与地理位置紧密相关,对研究餐饮空间格局特征...

    Android写入xls文件

    在Android平台上,开发人员经常需要处理数据的存储和读取,其中就包括写入和读取Excel文件。Excel文件通常用于存储...同时,随着技术发展,现代的Excel文件格式xlsx已逐渐取代xls,开发者也应关注xlsx文件的处理方法。

    程序用到的jar包

    - JXL包:虽然已逐渐被POI取代,但在处理.xls格式文件时,仍可作为备选方案。 综上所述,这些`jar`包是Java开发中常见的依赖库,它们为程序提供了丰富的功能,包括日志记录、数据库操作和Excel文件处理,是构建企业...

    Selenium:Selenium WebDriver(Basics + Advance + Architect)-WebDriver,TestNG,POI等。

    它取代了早期的 Selenium RC,提供了更直接的浏览器控制。WebDriver 支持的语言包括 Java、Python、C#、Ruby 等,可以实现自动化测试脚本的灵活编写。 1. **安装与配置**:首先,需要根据使用的编程语言选择相应的 ...

    七年级历史上册 3.17《先进的科学技术》同步练习 北师大版.doc

    - 《史记》的记载表明,秦朝时期主要的书写材料是竹木简,而在之后,纸逐渐取代了这些传统的书写材料。 5. **医学与科技的应用**: - 《伤寒杂病论》的完成时间晚于华佗被杀,但华佗对这本书的赞赏表明,他在生前...

    java操作excel

    此外,JXL也是一个早期被广泛应用的库,但随着技术的发展,它逐渐被Apache POI所取代。 #### Apache POI与JXL比较 1. **兼容性**: - **POI**:支持JDK 1.5及以上版本,且在WebSphere等应用服务器上表现良好。 -...

    apache服务器出现内存溢出的解决方法.doc

    - 注意,自Java 8起,永久代已经被元空间所取代。 - **示例**: - 对于1G内存的服务器,可以设置如下参数: ``` JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=...

    excel相关工具类

    7. **JXL**:一个早期的Java Excel库,尽管现在已被POI取代,但它仍是一个轻量级的选择,适用于简单的Excel操作。 8. **xlsxwriter**:Python库,主要用于创建新的Excel xlsx/xlsm文件,不支持读取已有文件,但提供...

    happycoding_libs_02

    6. **struts.jar** - 这可能是Struts1的库文件,是一个早期的MVC框架,尽管已被Struts2取代,但在一些遗留系统中仍可能被使用。 7. **javassist.jar** - Javaassist是一个用于操作字节码的库,常用于动态代理和AOP...

    Hibernate+struts2+Spring框架jar包大全

    - `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缓存库,用于实现分布式缓存,...

    基于通信矩阵转化成DBC数据库的研究_曾桂芬.pdf

    随着车辆通信技术的发展,CAN(Controller Area Network)网络逐渐取代了以往的集中式车身控制系统,成为了汽车通信的主流技术。随着技术的变革,测试过程中生成DBC数据库的工作也变得尤为关键。DBC数据库是基于CAN...

    excel工具类jar包

    另一个库,JExcelApi,虽然对较旧的.xls格式支持良好,但对.xlsx格式支持有限,所以现在更多地被Apache POI取代。 为了在Maven项目中使用这个Excel工具类jar包,我们需要将其作为项目的依赖添加到pom.xml文件中。...

    Java导出Excel

    - **JExcelAPI**:早期的Java Excel API,但已被Apache POI取代。 本案例中,作者使用了自定义的`Export2XLS`类,这可能是一个封装了上述库功能的自定义实现,以便更好地适应特定的业务逻辑和性能需求。 ##### 2. ...

Global site tag (gtag.js) - Google Analytics