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

OutExcel2007 v1.0.4 正式版发布 附源代码

阅读更多

 

POI 最新版本已经支持大数据量导出,而不会内存溢出了.  但是我测试了下.效率没有我这个高.而且CPU消耗比较高.

 

曾经放出过源码. 但是很多人,....哎不说了.这次关闭源码.

 

 

这个只是个正式版本...目前该版本.支持多sheet100W数据量的数据导出.

 

解决了Excel2007的格式导出大数据量内存溢出问题 ,

 

本工具,绝对不会出现内存溢出的问题,即使每个sheet100W数据量.导出100个这样sheet ,(100W*100 的数据量)

 

已近解决了多处BUG.再我公司大数据量系统导出里面已近运行了3个月了.没出现问题

 

下载的压缩包里面已近包含了下面的测试类了.

 

package com.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import com.tgseam.excel.Sheet;
import com.tgseam.excel.WorkBook;
import com.tgseam.excel.impl.XlsxWorkBook;
import com.tgseam.excel.info.OutConstants;
import com.tgseam.excel.util.Cell;

public class WorkTest {

	public static void main(String[] args)  {
		new Thread(){
			
			@Override
			public void run(){
				new WorkTest().runs("temp1.xlsx");
			}
			
		}.start();
		
//		new Thread(){	
//			
//			@Override
//			public void run(){
//				new WorkTest().runs("temp2.xlsx");
//			}
//			
//		}.start();
	}
	
	public void runs(String name){
		long start = System.currentTimeMillis();
		
		try {
			
			create(name);//1W*2(sheet)=2W
			WorkBook wb = null;
			for(int i = 0 ; i < 1; i++){
				wb = append(name, wb); 
				System.out.println("i = "+i);
			}
			wb.write();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		long end = System.currentTimeMillis();
		System.out.println("End Create Xlsx Time: "+new SimpleDateFormat("mm:ss.SSS").format(new Date(end - start)));
	}
	
	public WorkBook append(String name, WorkBook wb) throws Exception{
		long startTime = System.currentTimeMillis();
		
		if(wb == null){
			wb = new XlsxWorkBook(new File("D:/Temp/" + name));
		}
		
		Sheet sht1 = wb.getSheet("第\"一\"制药");
		if(sht1 == null){
			sht1 = wb.createSheet("第\"一\"制药");
		}
		int start = sht1.getLastRowSum() +1;
		
		Cell sp2 = sht1.getCell();
		for(int i = start ; i < (start + 10000); i ++){
			
			sht1.setLastRowSum(i);
			sp2.insertRow(i);
	
			sp2.createCell(0, "" + i + "!");
			sp2.createCell(1, (double)232987+i);
			sp2.createCell(2, "" + i + "!");
			sp2.createCell(3, (double)232987+i);
			sp2.createCell(4, "12345---" + i + "!");
			sp2.createCell(5, (double)232987+i);
			sp2.createCell(6, "12345---" + i + "!");
			sp2.createCell(7, (double)232987+i);
			sp2.createCell(8, (double)232987+i);
			sp2.createCell(9, "12345---" + i + "!");
			sp2.createCell(10, (double)232987+i);
			sp2.createCell(11, (double)232987+i);
			sp2.createCell(12, "" + i + "!");
			sp2.createCell(13, (double)232987+i);
			sp2.createCell(14, "12345---" + i + "!");
			sp2.createCell(15, (double)232987+i);
			sp2.createCell(16, "12345---" + i + "!");
			sp2.createCell(17, (double)232987+i);
			sp2.createCell(18, (double)232987+i);
			sp2.createCell(19, "12345---" + i + "!");
			sp2.createCell(20, (double)232987+i);
			sp2.endRow();
		}
		
		/*Sheet sht2 = wb.getSheet("中美史克");
		if(sht2 == null){
			sht2 = wb.createSheet("中美史克"); 
		}
		SpreadSheet sp = sht2.getSpreadSheet();
		int start2 = sht2.getLastRowSum();
		for(int i = start2 ; i < (start2 + 10000); i ++){
			sp.insertRow(i);
	
			sp.createCell(0, "很好" + i + "!");
			sp.createCell(1, (double)232987+i);
			sp.createCell(2, "车市重么" + i + "!");
			sp.createCell(3, (double)232987+i);
			sp.createCell(4, "12345---" + i + "!");
			sp.createCell(5, (double)232987+i);
			sp.createCell(6, "12345---" + i + "!");
			sp.createCell(7, (double)232987+i);
	
			sp.endRow();
		}*/
		
		System.out.println("Append or Create Sheet Time: "+ new SimpleDateFormat("mm:ss.SSS").format(new Date(System.currentTimeMillis() - startTime)));
//		wb.write();
		return wb;
	}
	
	public void create(String name) throws Exception{
		long start = System.currentTimeMillis();
		
		Calendar calendar = Calendar.getInstance();
		WorkBook wb = new XlsxWorkBook();
		
		Sheet st1 = wb.createSheet("第\"一\"制药"+name);
		
		Cell sp = st1.getCell();

		//insert head;
		sp.insertRow(0);
		sp.createCell(0, "心魔", OutConstants.STYLE_FGCOLOR_GRAY);
		sp.createCell(1, "'擦汗魔", OutConstants.STYLE_FGCOLOR_GRAY);
		sp.createCell(2, "眼角膜", OutConstants.STYLE_FGCOLOR_GRAY);
		sp.createCell(3, "行李魔", OutConstants.STYLE_FGCOLOR_GRAY);
		sp.createCell(4, "豆豆魔", OutConstants.STYLE_FGCOLOR_GRAY);
		sp.createCell(5, "OUTPUT", OutConstants.STYLE_FGCOLOR_GRAY);
		sp.createCell(6, "hand", OutConstants.STYLE_FGCOLOR_GRAY);
		sp.createCell(7, "novd", OutConstants.STYLE_FGCOLOR_GRAY);
		sp.createCell(8, "可可魔", OutConstants.STYLE_FGCOLOR_GRAY);
		sp.endRow();
		
		for(int i = 1 ; i < 10000; i ++){
			sp.insertRow(i);
			sp.createCell(0, "年后" + i + "!");
			sp.createCell(1, (double)23.2987);
			sp.createCell(2, 0);
			sp.createCell(3, (double)2329.87);
			sp.createCell(4, (double) -2329.87154514);
			sp.createCell(5, (long) 232987+i);
			sp.createCell(6, (long) -232987+i);
			sp.createCell(7, "0001");
			sp.createCell(8, calendar, OutConstants.STYLE_DATE);
			sp.createCell(9, "12345---" + i + "!");
			sp.createCell(10, (double)232987+i);
			sp.createCell(11, (double)232987+i);
			sp.createCell(12, "" + i + "!");
			sp.createCell(13, (double)232987+i);
			sp.createCell(14, "12345---" + i + "!");
			sp.createCell(15, (double)232987+i);
			sp.createCell(16, "12345---" + i + "!");
			sp.createCell(17, (double)232987+i);
			sp.createCell(18, (double)232987+i);
			sp.createCell(19, "12345---" + i + "!");
			sp.createCell(20, (double)232987+i);
			sp.endRow();
		}
		
		/*Sheet st2 = wb.createSheet("中美史克");
		SpreadSheet sp2 = st2.getSpreadSheet();
		for(int i = 1 ; i < 10000; i ++){
			sp2.insertRow(i);
	
			sp2.createCell(0, "你好" + i + "!");
			sp2.createCell(1, (double)232987+i);
			sp2.createCell(2, "你们号码.." + i + "!");
			sp2.createCell(3, (double)232987+i);
			sp2.createCell(4, "12345---" + i + "!");
			sp2.createCell(5, (double)232987+i);
			sp2.createCell(6, "12345---" + i + "!");
			sp2.createCell(7, (double)232987+i);
	
			sp2.endRow();
		}*/
		long end = System.currentTimeMillis();
		System.out.println("Create Sheet Time: "+ new SimpleDateFormat("mm:ss.SSS").format(new Date(end - start)));
		OutputStream os = new FileOutputStream(new File("D:/Temp/"+name));
		wb.write(os);
	}
}

QQ : 277215237 有BUG联系我啊.亲们

分享到:
评论
8 楼 tuyuan 2018-03-07  
非常抱歉各位, 我13年后就没有做Java开发了.所以没有上博客.
非常抱歉,我最近会吧这些源码开放到github上面,.
7 楼 ishime 2013-08-02  
请问有读取数据的例子吗?
6 楼 tuyuan 2012-05-12  
zhangzhi13856 写道
您那有这jar的源代码吗?能否放我瞅瞅。

QQ: 277215237
5 楼 tuyuan 2012-05-12  
zhangzhi13856 写道
哥们,你这个jar包好像有bug吧,如果在同一个jvm进程中同时再写一个excel文件就会抛出Exception in thread "main" java.lang.IllegalStateException: zip file closed。
比如在你的create中再增加一些代码如下:
FileOutputStream os2 = new FileOutputStream(new File("F:/Temp/tmp2.xlsx"));
Workbook wb2 = new XlsxWorkbook();
Sheet st3 = wb2.createSheet("test");
SpreadSheet sp3 = st3.getSpreadSheet();
for (int i = 1; i < 5; i++) {
sp3.insertRow(i);
sp3.createCell(0, "你好---" + i + "!");
sp3.createCell(1, (double) 232987 + i);
sp3.createCell(2, "12345---" + i + "!");
sp3.createCell(3, (double) 232987 + i);
sp3.createCell(4, "12345---" + i + "!");
sp3.createCell(5, (double) 232987 + i);
sp3.createCell(6, "12345---" + i + "!");
sp3.createCell(7, (double) 232987 + i);
sp3.endRow();
}
wb2.write(os2);

因为我用这个放入项目中 导出第一次没有问题 但是第二次就抛出同样的错误


实在抱歉,这个是最初的1.0版本的.是有这个bug,
已经在后续版本(最新版本v1.4.4)中修复了.而且后续版本中速度已经提高一倍了.
4 楼 zhangzhi13856 2012-04-25  
您那有这jar的源代码吗?能否放我瞅瞅。
3 楼 zhangzhi13856 2012-04-25  
哥们,你这个jar包好像有bug吧,如果在同一个jvm进程中同时再写一个excel文件就会抛出Exception in thread "main" java.lang.IllegalStateException: zip file closed。
比如在你的create中再增加一些代码如下:
FileOutputStream os2 = new FileOutputStream(new File("F:/Temp/tmp2.xlsx"));
Workbook wb2 = new XlsxWorkbook();
Sheet st3 = wb2.createSheet("test");
SpreadSheet sp3 = st3.getSpreadSheet();
for (int i = 1; i < 5; i++) {
sp3.insertRow(i);
sp3.createCell(0, "你好---" + i + "!");
sp3.createCell(1, (double) 232987 + i);
sp3.createCell(2, "12345---" + i + "!");
sp3.createCell(3, (double) 232987 + i);
sp3.createCell(4, "12345---" + i + "!");
sp3.createCell(5, (double) 232987 + i);
sp3.createCell(6, "12345---" + i + "!");
sp3.createCell(7, (double) 232987 + i);
sp3.endRow();
}
wb2.write(os2);

因为我用这个放入项目中 导出第一次没有问题 但是第二次就抛出同样的错误
2 楼 tuyuan 2012-01-07  
例子已经粘贴出来了.其实在jar包里面也有,这个例子..
1 楼 babydeed 2012-01-07  
给个使用例子呀

相关推荐

    JavaEE源代码 commons-logging-1.0.4

    JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-1.0.4JavaEE源代码 commons-logging-...

    基于PHP实现的KeeShop网上商店 v1.0.4_keeshop_v1.0.4_电子商务(源代码+html).zip

    对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步...

    R3DS ZWrap v1.0.4 Win.7z

    《R3DS ZWrap v1.0.4 Win——游戏建模中的拓补神器》 在数字艺术领域,特别是游戏建模中,优秀的工具能够极大地提升工作效率和模型质量。R3DS ZWrap v1.0.4 Win就是这样一款备受赞誉的软件,它是一款专为Zbrush用户...

    魔方报价系统V1.0.4全开源解密版.zip

    【魔方报价系统V1.0.4全开源解密版】是一款专为IT行业设计的报价管理系统,它提供了一套完整的解决方案,帮助企业和个人快速、准确地进行产品和服务的报价。这款系统的开源特性使得用户可以深入理解其内部运作机制,...

    jypro-v1.0.4-9-2023062806471694_pxza37.apk

    jypro-v1.0.4-9-2023062806471694_pxza37.apk

    DNS Jumper V1.0.4 简体中文版

    DNS Jumper V1.0.4 是一个专为用户快速切换DNS服务器而设计的实用工具,尤其适合那些希望优化网络连接速度或增强网络安全性的用户。该软件提供了简体中文界面,便于中国用户操作,同时也支持多国语言,适应全球用户...

    p0sixspwn-v1.0.4

    《iOS设备越狱详解——以p0sixspwn-v1.0.4工具为例》 在数字设备的世界里,iOS设备以其独特的封闭性著称,而“越狱”这一概念,便是为了打破这种封闭,赋予用户更多的自由度。本文将深入探讨越狱的基本概念,并以...

    GLZip-v1.0.4

    GLZip是一款专为Gameloft游戏设计的数据包解压工具,版本号为1.0.4。这个工具的核心功能在于帮助玩家处理和解压缩Gameloft游戏中的大型数据包,以便于游戏的顺利运行和安装。在理解GLZip的具体工作原理和应用之前,...

    RCOM-release V1.0.4.zip

    版本更新:V1.0.4 1. 重要更新、串口接收改为定时器、而不是线程,之前用线程处理串口消息导致各种异常,该版本比较稳定。 版本更新:V1.0.3 1. 支持以16进制发送数据,必须为0123456789abcdefABCDEF的2倍的字符,...

    购物-花粉团手机版 v1.0.4 安卓版.zip

    【标题】"购物-花粉团手机版 v1.0.4 安卓版.zip" 提供的是一个针对安卓平台的移动应用,名为“花粉团手机版”,版本号为1.0.4。这个应用程序主要专注于购物领域,可能是团购、优惠券或者集体采购等功能的集合,旨在...

    bymall多用户开源商城系统 v1.0.4.zip

    bymall多用户开源商城系统 v1.0.4.zip

    knowledgeroot(采用PHP开发的知识库系统)v1.0.4正式版

    KnowledgeRoot 是一个采用 PHP 开发的知识库系统,...使用 FCKEditor 进行内容编辑。 KnowledgeRoot v1.0.3 升级了 dojotoolkit 和 Zend Framework 版本,修复了密码相关的一些问题,另外就是引入的简体中文的支持。

    智能会务管理V1.0.4开源版功能模块.txt

    智能会务管理V1.0.4开源版功能模块

    WebSocket压力并发测试v1.0.4.rar

    WebSocket压力并发测试工具,如标题所示的"WebSocket压力并发测试v1.0.4",主要用于模拟大量并发的WebSocket连接,以检测服务器处理这些连接的能力。这样的工具通常会提供以下功能: 1. **连接数控制**:设置并发...

    Wxdown公众号离线文章保存v1.0.4

    Wxdown是一个用于保存公众号文章到本地离线查看的软件,支持将 HTML 文章保存至本地,并提供 HTML 转 PDF 的功能。此外,软件还支持图片素材管理,可在 Windows、Mac 和 Linux 系统上运行,使用 Go 语言开发,具备轻...

    fcontex博客系统 v1.0.4

    fcontex是开源的PHP博客系统,拥有漂亮的Web 2.0风格的后台界面和完全Ajax化的流畅操作体验,可用于快速构建中小型企业网站和个人博客(Blog)。...fcontex v1.0.4修正了安装向导问题,正在使用1.0.3的用户可以不必升

    安卓应用-健康医疗-浙大口腔医院 v1.0.4 安卓版.zip

    《安卓应用:浙大口腔医院 v1.0.4 安卓版——移动医疗的智能助手》 在当今数字化时代,移动医疗应用已经成为医疗服务的重要组成部分,尤其对于忙碌的现代人来说,通过手机就能轻松获取健康咨询、预约挂号、查看检查...

Global site tag (gtag.js) - Google Analytics