- 浏览: 470196 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
此去经年雪123:
为啥生成的是乱码 你好
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
alonglw:
zxf0089216 写道1.为什么每次都是10001RSAK ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
zxf0089216:
1.为什么每次都是10001RSAKeyPair(" ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
dunhanson:
后台的测试main方法都能加密解密。前台加密后的密文交给后台解 ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名 -
map612:
wula0010 写道仔细看了下,可以运行RSAUtil.ma ...
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
一般导出Excel可以选择POI或者JXL,poi比较方便但是处理大数据量效果不佳,jxl可以支持较大数据量,但是超过5W条也会报OOM错误。
那么如果有上百万条的数据怎么到处Excel呢?
其实Excel可以保存成HTML格式的文档(包括图片),我们可以研究html文件格式,然后用io方式往里面输出数据就可以了。
html格式如下:
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv=Content-Type content="text/html; charset=gb2312"> <meta name=ProgId content=Excel.Sheet> <meta name=Generator content="Microsoft Excel 11"> <link rel=File-List href="Book1.files/filelist.xml"> <link rel=Edit-Time-Data href="Book1.files/editdata.mso"> <link rel=OLE-Object-Data href="Book1.files/oledata.mso"> <!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} x\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>www.jujumao.com</o:Author> <o:LastAuthor>www.jujumao.com</o:LastAuthor> <o:Created>2010-05-24T10:00:21Z</o:Created> <o:LastSaved>2010-05-25T01:00:34Z</o:LastSaved> <o:Company>微软</o:Company> <o:Version>11.5606</o:Version> </o:DocumentProperties> </xml><![endif]--> <style> <!--table {mso-displayed-decimal-separator:"\."; mso-displayed-thousand-separator:"\,";} @page {margin:1.0in .75in 1.0in .75in; mso-header-margin:.5in; mso-footer-margin:.5in;} tr {mso-height-source:auto; mso-ruby-visibility:none;} col {mso-width-source:auto; mso-ruby-visibility:none;} br {mso-data-placement:same-cell;} .style0 {mso-number-format:General; text-align:general; vertical-align:middle; white-space:nowrap; mso-rotate:0; mso-background-source:auto; mso-pattern:auto; color:windowtext; font-size:12.0pt; font-weight:400; font-style:normal; text-decoration:none; font-family:宋体; mso-generic-font-family:auto; mso-font-charset:134; border:none; mso-protection:locked visible; mso-style-name:常规; mso-style-id:0;} td {mso-style-parent:style0; padding:0px; mso-ignore:padding; color:windowtext; font-size:12.0pt; font-weight:400; font-style:normal; text-decoration:none; font-family:宋体; mso-generic-font-family:auto; mso-font-charset:134; mso-number-format:General; text-align:general; vertical-align:middle; border:none; mso-background-source:auto; mso-pattern:auto; mso-protection:locked visible; white-space:nowrap; mso-rotate:0;} .xl24 {mso-style-parent:style0; white-space:normal;} ruby {ruby-align:left;} rt {color:windowtext; font-size:9.0pt; font-weight:400; font-style:normal; text-decoration:none; font-family:宋体; mso-generic-font-family:auto; mso-font-charset:134; mso-char-type:none; display:none;} --> </style> <!--[if gte mso 9]><xml> <x:ExcelWorkbook> <x:ExcelWorksheets> <x:ExcelWorksheet> <x:Name>Sheet1</x:Name> <x:WorksheetOptions> <x:DefaultRowHeight>285</x:DefaultRowHeight> <x:Selected/> <x:Panes> <x:Pane> <x:Number>3</x:Number> <x:ActiveRow>2</x:ActiveRow>//默认选中的行 <x:ActiveCol>2</x:ActiveCol>//默认选中的列 </x:Pane> </x:Panes> <x:ProtectContents>False</x:ProtectContents> <x:ProtectObjects>False</x:ProtectObjects> <x:ProtectScenarios>False</x:ProtectScenarios> </x:WorksheetOptions> </x:ExcelWorksheet> <x:ExcelWorksheet> <x:Name>Sheet2</x:Name> <x:WorksheetOptions> <x:DefaultRowHeight>285</x:DefaultRowHeight> <x:ProtectContents>False</x:ProtectContents> <x:ProtectObjects>False</x:ProtectObjects> <x:ProtectScenarios>False</x:ProtectScenarios> </x:WorksheetOptions> </x:ExcelWorksheet> <x:ExcelWorksheet> <x:Name>Sheet3</x:Name> <x:WorksheetOptions> <x:DefaultRowHeight>285</x:DefaultRowHeight> <x:ProtectContents>False</x:ProtectContents> <x:ProtectObjects>False</x:ProtectObjects> <x:ProtectScenarios>False</x:ProtectScenarios> </x:WorksheetOptions> </x:ExcelWorksheet> </x:ExcelWorksheets> <x:WindowHeight>9225</x:WindowHeight> <x:WindowWidth>17100</x:WindowWidth> <x:WindowTopX>120</x:WindowTopX> <x:WindowTopY>105</x:WindowTopY> <x:ProtectStructure>False</x:ProtectStructure> <x:ProtectWindows>False</x:ProtectWindows> </x:ExcelWorkbook> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="1027"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--> </head> <body link=blue vlink=purple> //正文内容 <table x:str border=0 cellpadding=0 cellspacing=0 width=912 style='border-collapse: collapse;table-layout:fixed;width:684pt'> <col width=72 style='width:54pt'> <col width=237 style='mso-width-source:userset;mso-width-alt:7584;width:178pt'> <col width=215 style='mso-width-source:userset;mso-width-alt:6880;width:161pt'> <col width=28 style='mso-width-source:userset;mso-width-alt:896;width:21pt'> <col width=72 span=5 style='width:54pt'> <tr height=76 style='height:57.0pt'><!--数据列--> <td height=76 width=72 style='height:57.0pt;width:54pt'>萨地方</td> <td class=xl24 width=237 style='width:178pt'>阿送大幅大赛sadf<br> dsafsafds<br> <><''"><br> afdsa----</td> <td align=right width=215 style='width:161pt' x:num>1</td> <td width=28 style='width:21pt'></td> <td width=72 style='width:54pt'></td> <td width=72 style='width:54pt'></td> <td width=72 style='width:54pt'></td> <td width=72 style='width:54pt'></td> <td width=72 style='width:54pt'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 align=right style='height:14.25pt' x:num>2</td> <td align=right x:num>2</td> <td align=right x:num>2</td> <td colspan=6 style='mso-ignore:colspan'></td> </tr> <tr height=57 style='height:42.75pt;mso-xlrowspan:3'> <td height=57 colspan=9 style='height:42.75pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> <td colspan=7 rowspan=14 height=266 width=603 style='mso-ignore:colspan-rowspan; height:199.5pt;width:452pt'><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute; margin-left:68.25pt;margin-top:7.5pt;width:347.25pt;height:186pt;z-index:1' fillcolor="windowText [64]" strokecolor="window [65]" strokeweight="3e-5mm" o:insetmode="auto"> <v:fill color2="window [65]"/> <v:imagedata src="Book1.files/image001.png" o:title=""/> <x:ClientData ObjectType="Pict"> <x:MoveWithCells/> <x:SizeWithCells/> <x:Locked>False</x:Locked> <x:AutoFill>False</x:AutoFill> <x:AutoLine>False</x:AutoLine> <x:CF>Bitmap</x:CF> </x:ClientData> </v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout'> <table cellpadding=0 cellspacing=0> <tr> <td width=91 height=10></td> </tr> <tr> <td></td> <td><img width=463 height=248 src="Book1.files/image002.jpg" v:shapes="_x0000_s1026"></td> <td width=49></td> </tr> <tr> <td height=8></td> </tr> </table> </span><![endif]><!--[if !mso & vml]><span style='width:452.25pt;height:199.5pt'></span><![endif]--></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <tr height=19 style='height:14.25pt'> <td height=19 colspan=2 style='height:14.25pt;mso-ignore:colspan'></td> </tr> <![if supportMisalignedColumns]> <tr height=0 style='display:none'> <td width=72 style='width:54pt'></td> <td width=237 style='width:178pt'></td> <td width=215 style='width:161pt'></td> <td width=28 style='width:21pt'></td> <td width=72 style='width:54pt'></td> <td width=72 style='width:54pt'></td> <td width=72 style='width:54pt'></td> <td width=72 style='width:54pt'></td> <td width=72 style='width:54pt'></td> </tr> <![endif]> </table> </body> </html>
在项目中,我们可以先定制出一个excel模板并填充一两条数据(比如包含头、体、尾),在输出的时候,我们只需要把正文内容(文件体)那一部分用JAVA的IO输出就可以了,如果数据量很大,可以每隔一段时间就flush一下。
至此,可通过数据生成如上格式的HTML文本信息则避开大量对象的建立,如果将该HTML直接以application/excel返回浏览器时则Excel文件会比普通大一点,可以通过配置过滤器对该HTML进行压缩即可,如下:
response.reset(); response.setContentType("application/zip;charset=GBK"); String s = "查询-" + new java.sql.Date(System.currentTimeMillis()).toString().replaceAll("-","") + ".xls"; String filename = s + ".zip"; response.addHeader("Content-Disposition", "inline;filename=" + filename);
---简单总结----
先建一个excel文件,如a.xls。填上两条伪数据。然后另存为网页,即htm格式,如a.htm。
然后,用记事本打开htm格式的a.htm,这样excel文件格式代码就暴露在你面前。
剩下的事,就是把a.htm源代码的伪数据部分,替成数据库里的数据,然后把替换后的整个a.htm源代码,用java的io写成一个后缀为xls的文件。就打完收工了。
注意:为了不给内存增加压力,要把a.htm源代码分成三部分:头(伪数据部分 前的代码) + 伪数据部分 + 尾(伪数据部分 后的代码)。
先把 头 写到文件,并flush。然后是 伪数据部分 ,替一条数据库里的记录就写到文件里,并flush。最后把 尾 写到文件,并flush。
重点就是要经常flush,不然数据大就OOM了;另外如果使用了list取数据,在使用完以后要及时list.clear().
不同版本下Excel数据量极限:
excel2000的工作表中最大只能有65536行数据,每一行最大只能有256列
2003下
行:65536
列:IV即230
2007下
行:1048576
列:XFD,26进制,16384列.
(在excel中atrl+shift+右箭头 atrl+shift+下箭头即可查看)
评论
这里说的是导出,至于打开慢,就和offie有关了。
ps:剑走偏锋,你可以设置一下response的head,弹出下载窗口而不是直接打开,这样就不会显得应用反应慢了。
发表评论
-
linux、win下用jmx监控tomcat运行情况
2012-03-14 15:52 1637for windows: 1、add below lin ... -
[转]Java缩略图类带水印(jpg,png)
2011-08-31 09:09 1578package com.example; import ... -
swing和awt的两个简单使用
2011-08-29 13:27 12411、swing: package frame; ... -
[转]笔记:Hibernate性能优化事项(持续更新)
2011-08-27 10:38 16041、针对Oracle数据库而言 ... -
自定义classloader实现
2011-08-09 14:19 1432package classloader; import ... -
[总结篇]Java中从键盘接收一个字符
2011-05-29 21:53 2185引言 从控制台中读 ... -
利用commons-net包实现ftp上传下载例子
2011-01-19 16:50 4067下载文件的时候注意一下,第一个参数要用iso-8859_ ... -
请使用Oracle新版本驱动
2010-11-09 11:08 2586今天使用apache dbutils连接oracle10G时, ... -
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
2010-10-25 16:07 37861需求环境: 西安项目中,客户要求保护用户的密码信息,不 ... -
使用java.net.URL实现Post数据
2010-07-20 10:38 5988实现:利用URL访问URL并传递参数,然后获取返回结果。 可 ... -
java文件锁的实现
2010-07-02 16:37 7171项目使用到集群环境,流程发送时如果确保一个流程不会被两个流程同 ... -
Log4j使用总结
2010-01-09 09:50 983一、介绍 Log4j是Apa ... -
servlet下载文件不支持迅雷的解决方法
2009-11-18 13:42 3805servlet实现下载时,如果客户端安装了迅雷,发现不能正确下 ... -
JMS-ActiveMQ入门实例
2009-11-04 11:49 7225下载ActiveMQ http://activemq.a ... -
Lucene+HighLighter高亮显示实例
2009-11-03 18:37 5278今天搞了一个关于Lucene的例子,权当入门教程。网上有很多资 ... -
JAVA操作Excel参考
2009-11-03 10:33 1040Java Excel是一开放源码项目,通过它Java开发人 ... -
freemarker根据模板生成文件的编码问题
2009-10-20 15:46 2623用freemarker生成html静态文件时,涉及的编码主要有 ... -
RSS基本知识、开发相关
2009-09-27 11:43 1260RSSLibJ是一个专门读 ... -
Ant+xFire生成客户端代码实战
2009-09-12 16:41 2737生成xfire客户端有多种方式,直接调用xFire暴露的接口、 ... -
Spring中JdbcTemplate相关的几个接口
2009-09-07 16:48 19591、org.springframew ...
相关推荐
在Java开发中,批量导出大数据量到Excel是一项常见的任务,尤其在数据分析、报表生成或者数据交换场景下。为了高效地处理这种情况,开发者通常需要掌握一些特定的技术和策略。本资料"Java_批量导出大数据量Excel方法...
1. **内存优化**:当数据量非常大时,建议使用Apache POI提供的SXSSF类来降低内存占用。 2. **性能考虑**:在实际应用中,应尽可能减少对Excel文件的读写操作,避免频繁创建和销毁对象。 3. **异常处理**:在处理...
在导出数据时,可选择将Excel或CSV文件进行压缩,具体步骤如下: 1. 文件压缩:使用WinRAR、7-Zip等压缩软件,将数据文件添加到压缩包中。 2. 设置参数:根据需求调整压缩级别,以平衡压缩比和压缩速度。 3. 传输与...
# 导出数据到多个Excel文件 data = ... # 数据 for i, chunk in enumerate(pd.groupby(data, group_keys=False, chunksize=10000)): chunk.to_excel(f'chunk_{i}.xlsx', index=False) # 压缩文件 with ...
其次,在实验过程中,大数据量的导出很容易引发内存溢出,调整JVM的内存大小治标不治本。很多人建议保存为.CSV格式的文件。不过,.CSV方式导出也存在问题:首先,如果用excel来打开csv,超过65536行的数据都会看不见...
这是我在公司实习的时候研究的课题,主要将大量数据从数据库导出到Excel文件。(一般是值Excel2007及以后版本)因为Excel2003及以前的版本中能保持的数据量是有限制的。Excel2007及以后版本中的数据能保持100万条...
在C#编程中,将大数据量导出到Excel是一个常见的需求,特别是在数据分析、报表生成或者数据交换场景下。Microsoft.Office.Interop.Excel库是.NET Framework提供的一个用于与Microsoft Excel交互的COM接口,它允许...
C#大量数据导出到Excel,超过65536行时自动分页导出
"使用POI导出大数据量到EXCEL"这个主题涉及到如何高效地利用POI处理大量数据并将其导出到Excel文件中。以下是对这个主题的详细讲解。 1. **Apache POI简介** Apache POI 是一个开源项目,它提供了Java API来创建、...
这时,如果使用传统的方法,例如使用 OLE 自动化来一个一个地将数据写入到 Excel 中,这将非常耗时,尤其是在数据量很大的情况下。为了解决这个问题,我们可以使用 DBGridEh 控件来快速导出数据到 Excel 中。 使用 ...
数据库导出数据为Excel文件是IT领域中常见的数据处理任务,尤其在数据分析、报表生成以及数据交换时非常实用。这个工具显然旨在简化这一过程,它支持多种类型的数据库,这意味着无论你使用的是MySQL、Oracle、SQL ...
4. **查看导出内容**:导出完成后,系统会自动打开包含导出数据的Excel文件,其中不仅包含数据本身,还会显示用于查询数据的SQL脚本。 5. **查看SQL脚本**:点击文件中的“SQL Statement”标签页,可以查看所使用的...
在Java开发中,处理大数据量的Excel导出是一项常见的任务,尤其当数据量达到数十万条时,单个Excel文件可能会遇到性能瓶颈或格式限制。本项目针对这一问题提出了一种解决方案,即分块生成多个Excel文件,然后将它们...
3. **Power Pivot数据模型**:对于大数据量的分析,Excel的Power Pivot提供了强大的数据建模功能。用户可以构建数据模型并导出为Power BI报表,实现更高级的数据可视化和分析。 4. **VBA编程导出**:通过VBA,可以...
在实际应用中,可能还需要考虑性能优化,例如分批导出大数据量,或者在后台服务器处理导出以避免阻塞浏览器。此外,为了提供更好的用户体验,可以添加进度提示、错误处理等功能。 总结来说,EXTJS Grid的数据导出到...
在Java编程中,导出数据到Excel文件是一项常见的任务,特别是在数据分析、报表生成或数据交换等场景下。这里我们将深入探讨如何使用Java实现从数据库中查询数据并将其以多级表头的形式导入到Excel文件中。 首先,...
- **性能优化**: 大文件或大量数据导入/导出时,应考虑分批处理,避免一次性加载所有数据导致内存占用过高。 - **用户交互**: 提供进度指示器或取消功能,提升用户体验。 - **错误处理**: 捕获可能出现的文件读写...
对于C#来说,处理Excel文件可以借助Microsoft的Office Interop库,但这种方式在处理大量数据时效率较低,因为需要启动Excel进程并进行内存映射。因此,更推荐使用第三方库,如EPPlus(用于.xlsx)和NPOI(支持.xlsx...
web项目中需要有将数据导出excel的操作需求 使用html格式导出方法,但在...待所有数据写完,将各个小excel文件进行打包,输出到输出流中。 一小部分说明 见 http://blog.csdn.net/lisen1987/article/details/16857359
同时,由于纯前端导出可能会面临大数据量的性能挑战,所以对于非常大的数据集,可能需要考虑分批导出或者服务端处理。 总的来说,通过结合EasyUI的前端界面和SheetJS的数据处理能力,我们可以实现在浏览器端直接将...