欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-16 20:40:44
...

 

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联系我啊.亲们