`
Tristan_S
  • 浏览: 366812 次
  • 性别: 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操作表格需要的所有包 包括操作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格式的文件...

    Android写入xls文件

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

    程序用到的jar包

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

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

    excel工具类jar包

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

    ssh+dwr坚决不冲突的jar

    2. `toplink-essentials.jar`:Oracle的TopLink Essentials,也是JPA的一个实现,之前是开源版本,现在已被EclipseLink取代。 3. `jruby.jar`:JRuby,是Ruby语言的Java实现,允许在Java项目中使用Ruby代码。 4. `...

    jxl.jar_java操作excel表格的jar包

    这个库是Java Excel API(JExcel API)的一部分,由薄荷开源软件公司(薄荷开源,现已被Apache POI项目取代)提供。本文将详细介绍如何使用`jxl.jar`进行Excel操作,并探讨其核心功能和用法。 首先,`jxl.jar`支持...

    城市时空数据引擎JUST架构设计与应用.pdf

    该引擎采用了六种时空数据模型,可以适应不同类型的时空数据,如POI分布、交通路网、天气/空气质量、站点数据、交通流量数据以及车联网络用户签到数据等。 JUST-DB作为时空数据的核心,其技术框架包括新的存储模式...

    编译好的pageturner

    这些库文件可能包括解析EPUB文件的解析器(如ZXing用于条形码扫描,或者Apache POI用于处理EPUB内的XML文档),字体渲染引擎(如HarfBuzz用于支持多种语言的排版),以及UI组件和动画库(用于实现翻页效果)。...

    全国市区县矢量shp含路网水系部分POIcgcs2000

    “CGCS2000”是中国大地坐标系统2000,它是中国自2008年起采用的新一代国家坐标系统,取代了旧的北京54和西安80坐标系统。CGCS2000基于国际地球参考框架(ITRF),确保了与全球定位系统(GPS)和其他国际地心坐标...

    仿百度文库

    对于文档解析,可能需要用到像Apache POI(处理Microsoft Office格式)或PDFBox(处理PDF)这样的库。格式转换则可能涉及将不同格式的内容(如.doc, .ppt, .txt等)转换为SWF或PDF所需的中间格式。内容渲染可能需要...

    车载导航工具,wince悬浮、工具、菜单

    然而,随着技术的发展,Wince逐渐被更先进的操作系统如Android所取代,尽管如此,仍有一部分车辆使用Wince系统进行导航和信息娱乐。 悬浮菜单在车载导航系统中是一个实用的设计,它允许用户在不中断导航的情况下...

    Automation

    8. **Apache Ant**:早期的Java构建工具,虽然现在已被Maven和Gradle取代,但在某些场景下仍被使用,用于自动化构建过程。 9. **Apache Nifi**:数据流处理平台,用于自动化数据的获取、转换和分发,适用于大数据和...

Global site tag (gtag.js) - Google Analytics