POI는 생성된 EXCEL에 여러 번 쓰기 가능

4987 단어 POIEXCEL

1: EXCEL에 데이터를 여러 번 쓰기


1: 이런 방식은 효율이 비교적 낮고 데이터량이 많을수록 뚜렷하다. 4만 개의 데이터는 2분 정도 걸린다
package com.test;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class POIController {
	/**
	 *  , ,4 2 
	 * @param args
	 * @throws FileNotFoundException
	 * @throws InvalidFormatException
	 */
	public static void main(String[] args) throws FileNotFoundException, InvalidFormatException {
		long startTime = System.currentTimeMillis();
		BufferedOutputStream outPutStream = null;
		XSSFWorkbook workbook = null;
		FileInputStream inputStream = null;
		String filePath = "E:\\txt\\111.xlsx";
		try {
			 workbook = getWorkBook(filePath);
			 XSSFSheet sheet = workbook.getSheetAt(0);
			 for (int i = 0; i < 40; i++) {
				 for (int z = 0; z < 1000; z++) {
					 XSSFRow row = sheet.createRow(i*1000+z);
					 for (int j = 0; j < 10; j++) {
						 row.createCell(j).setCellValue(" :"+j);
					 }
				 }
				 // , 
				 outPutStream = new BufferedOutputStream(new FileOutputStream(filePath));
				 workbook.write(outPutStream);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if(outPutStream!=null) {
				try {
					outPutStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(inputStream!=null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(workbook!=null) {
				try {
					workbook.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		long endTime = System.currentTimeMillis();
		System.out.println(endTime-startTime);
	}
	/**
	 *  XSSFWorkbook 
	 * @param filePath
	 * @return
	 */
	public static XSSFWorkbook getWorkBook(String filePath) {
		XSSFWorkbook workbook =  null;
		try {
			File fileXlsxPath = new File(filePath);
			BufferedOutputStream outPutStream = new BufferedOutputStream(new FileOutputStream(fileXlsxPath));
			workbook = new XSSFWorkbook();
			workbook.createSheet(" ");
			workbook.write(outPutStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return workbook;
	}
	
}

2: 이러한 방식은 효율이 높고 일회용 쓰기에 속하며 데이터 양이 클수록 뚜렷하다. 4만 개의 데이터는 17초 정도 걸린다
package com.test;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class POIController {
	/**
	 *  , , ,4 17 
	 * @param args
	 * @throws FileNotFoundException
	 * @throws InvalidFormatException
	 */
	public static void main(String[] args) throws FileNotFoundException, InvalidFormatException {
		long startTime = System.currentTimeMillis();
		BufferedOutputStream outPutStream = null;
		XSSFWorkbook workbook = null;
		FileInputStream inputStream = null;
		String filePath = "E:\\txt\\111.xlsx";
		try {
			 workbook = getWorkBook(filePath);
			 XSSFSheet sheet = workbook.getSheetAt(0);
			 for (int i = 0; i < 40; i++) {
				 for (int z = 0; z < 1000; z++) {
					 XSSFRow row = sheet.createRow(i*1000+z);
					 for (int j = 0; j < 10; j++) {
						 row.createCell(j).setCellValue(" :"+j);
					 }
				 }
			}
			 // , 
			 outPutStream = new BufferedOutputStream(new FileOutputStream(filePath));
			 workbook.write(outPutStream);
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if(outPutStream!=null) {
				try {
					outPutStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(inputStream!=null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(workbook!=null) {
				try {
					workbook.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		long endTime = System.currentTimeMillis();
		System.out.println(endTime-startTime);
	}
	/**
	 *  XSSFWorkbook 
	 * @param filePath
	 * @return
	 */
	public static XSSFWorkbook getWorkBook(String filePath) {
		XSSFWorkbook workbook =  null;
		try {
			File fileXlsxPath = new File(filePath);
			BufferedOutputStream outPutStream = new BufferedOutputStream(new FileOutputStream(fileXlsxPath));
			workbook = new XSSFWorkbook();
			workbook.createSheet(" ");
			workbook.write(outPutStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return workbook;
	}
	
}

다음: POI의 SXSSFWorkbook 대량의 데이터를 excel 문서 디렉터리로 내보내기

좋은 웹페이지 즐겨찾기