利用SXSSFWorkbook导出excel
2017-12-04 17:53
369 查看
项目需要一次性导出几十万数据,于是乎就SXSSFWorkbook导出excel了,写了个导出的工具类,还能要完善它,这个只是1.0版本,但是基本需求能够满足了
package com.fnst.frame.core.common.excel;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* SXSSFWorkbook 导出 excel工具类
* Created by loup on 2017/12/4.
*/
public abstract class ExcelSXSSFWriter {
/**
* 写入标题
*
* @param sheet
* @param rowNum 第几行的行号
* @param values key:第几列的列号 value:值
*/
public static void genSheetHead(Sheet sheet, int rowNum, Map<Integer, Object> values) {
Row row = sheet.createRow(rowNum);
for (Integer cellNum : values.keySet()) {
Cell cell = row.createCell(cellNum);
Object value = values.get(cellNum);
generateValue(value, cell);
}
}
/**
* @param row
* @param cellNum 第几列的列号
* @param value 值
*/
public static void createCell(Row row, int cellNum, Object value) {
Cell cell = row.createCell(cellNum);
generateValue(value, cell);
}
private static void generateValue(Object value, Cell cell) {
if (value instanceof String) {
cell.setCellValue((String) value);
} else if (value instanceof Boolean) {
cell.setCellValue((Boolean) value);
} else if (value instanceof Double) {
cell.setCellValue((Double) value);
} else if (value instanceof Date) {
cell.setCellValue((Date) value);
} else if (value instanceof Calendar) {
cell.setCellValue((Calendar) value);
} else if (value instanceof RichTextString) {
cell.setCellValue((RichTextString) value);
}
}
public static void main(String[] args) throws Exception {
//输入模板文件
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream("F:\\test\\ceshi.xlsx"));
SXSSFWorkbook workbook = new SXSSFWorkbook(xssfWorkbook, 1000);
//导出文件
File file = new File("F:\\test\\test2.xlsx");
long start = System.currentTimeMillis();
for (int i = 0; i < 2; i++) {
Sheet sheet = workbook.getSheet("sheet" + (i + 1));
if (sheet == null) {
sheet = workbook.createSheet("sheet" + (i + 1));
}
// 生成标题
Map<Integer, Object> firstTitles = new HashMap<>();
firstTitles.put(0, "部门:");
firstTitles.put(1, "test12221");
firstTitles.put(7, "时间:");
firstTitles.put(8, "2017-09-11");
genSheetHead(sheet, 0, firstTitles);
Map<Integer, Object> twoTitles = new HashMap<>();
twoTitles.put(0, "工号:");
twoTitles.put(1, "test12221");
twoTitles.put(2, "姓名:");
twoTitles.put(3, "aaaa");
genSheetHead(sheet, 1, twoTitles);
for (int rownum = 2; rownum < 100000; rownum++) {
Row row = sheet.createRow(rownum);
int k = -1;
createCell(row, ++k, "第 " + rownum + " 行");
createCell(row, ++k, 34343.123456789);
createCell(row, ++k, "23.67%");
createCell(row, ++k, "12:12:23");
createCell(row, ++k, "2014-10-<11 12:12:23");
createCell(row, ++k, "true");
createCell(row, ++k, "false");
createCell(row, ++k, "fdsa");
createCell(row, ++k, "123");
createCell(row, ++k, "321");
createCell(row, ++k, "3213");
createCell(row, ++k, "321");
createCell(row, ++k, "321");
createCell(row, ++k, "43432");
createCell(row, ++k, "54");
createCell(row, ++k, "fal45se");
createCell(row, ++k, "fal6se");
createCell(row, ++k, "fal64321se");
createCell(row, ++k, "fal43126se");
createCell(row, ++k, "432432");
createCell(row, ++k, "432432");
createCell(row, ++k, "r54");
createCell(row, ++k, "543");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1a");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
}
}
FileOutputStream out = new FileOutputStream(file);
workbook.write(out);
System.out.println((System.currentTimeMillis()-start));
out.close();
}
}
package com.fnst.frame.core.common.excel;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* SXSSFWorkbook 导出 excel工具类
* Created by loup on 2017/12/4.
*/
public abstract class ExcelSXSSFWriter {
/**
* 写入标题
*
* @param sheet
* @param rowNum 第几行的行号
* @param values key:第几列的列号 value:值
*/
public static void genSheetHead(Sheet sheet, int rowNum, Map<Integer, Object> values) {
Row row = sheet.createRow(rowNum);
for (Integer cellNum : values.keySet()) {
Cell cell = row.createCell(cellNum);
Object value = values.get(cellNum);
generateValue(value, cell);
}
}
/**
* @param row
* @param cellNum 第几列的列号
* @param value 值
*/
public static void createCell(Row row, int cellNum, Object value) {
Cell cell = row.createCell(cellNum);
generateValue(value, cell);
}
private static void generateValue(Object value, Cell cell) {
if (value instanceof String) {
cell.setCellValue((String) value);
} else if (value instanceof Boolean) {
cell.setCellValue((Boolean) value);
} else if (value instanceof Double) {
cell.setCellValue((Double) value);
} else if (value instanceof Date) {
cell.setCellValue((Date) value);
} else if (value instanceof Calendar) {
cell.setCellValue((Calendar) value);
} else if (value instanceof RichTextString) {
cell.setCellValue((RichTextString) value);
}
}
public static void main(String[] args) throws Exception {
//输入模板文件
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream("F:\\test\\ceshi.xlsx"));
SXSSFWorkbook workbook = new SXSSFWorkbook(xssfWorkbook, 1000);
//导出文件
File file = new File("F:\\test\\test2.xlsx");
long start = System.currentTimeMillis();
for (int i = 0; i < 2; i++) {
Sheet sheet = workbook.getSheet("sheet" + (i + 1));
if (sheet == null) {
sheet = workbook.createSheet("sheet" + (i + 1));
}
// 生成标题
Map<Integer, Object> firstTitles = new HashMap<>();
firstTitles.put(0, "部门:");
firstTitles.put(1, "test12221");
firstTitles.put(7, "时间:");
firstTitles.put(8, "2017-09-11");
genSheetHead(sheet, 0, firstTitles);
Map<Integer, Object> twoTitles = new HashMap<>();
twoTitles.put(0, "工号:");
twoTitles.put(1, "test12221");
twoTitles.put(2, "姓名:");
twoTitles.put(3, "aaaa");
genSheetHead(sheet, 1, twoTitles);
for (int rownum = 2; rownum < 100000; rownum++) {
Row row = sheet.createRow(rownum);
int k = -1;
createCell(row, ++k, "第 " + rownum + " 行");
createCell(row, ++k, 34343.123456789);
createCell(row, ++k, "23.67%");
createCell(row, ++k, "12:12:23");
createCell(row, ++k, "2014-10-<11 12:12:23");
createCell(row, ++k, "true");
createCell(row, ++k, "false");
createCell(row, ++k, "fdsa");
createCell(row, ++k, "123");
createCell(row, ++k, "321");
createCell(row, ++k, "3213");
createCell(row, ++k, "321");
createCell(row, ++k, "321");
createCell(row, ++k, "43432");
createCell(row, ++k, "54");
createCell(row, ++k, "fal45se");
createCell(row, ++k, "fal6se");
createCell(row, ++k, "fal64321se");
createCell(row, ++k, "fal43126se");
createCell(row, ++k, "432432");
createCell(row, ++k, "432432");
createCell(row, ++k, "r54");
createCell(row, ++k, "543");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1a");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
createCell(row, ++k, "few1");
}
}
FileOutputStream out = new FileOutputStream(file);
workbook.write(out);
System.out.println((System.currentTimeMillis()-start));
out.close();
}
}
相关文章推荐
- How To Use ADO.NET to Retrieve and Modify Records in an Excel Workbook With Visual Basic .NET(利用Ado.net导出到Excel)
- 利用poi-SXSSFWorkbook导出数据
- SXSSFWorkbook 导出大批量数据和图片到excel
- Java Excel SXSSFWorkbook大量数据导出
- DevExpress 利用动态创建GridControl导出Excel,并不显示在界面上
- 利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
- 利用Aspose.Cells和Excel模板导出复杂的统计数据
- 利用java反射机制实现动态导出excel
- 利用剪贴板实现高速导出数据到Excel
- 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出
- Excel导出 利用poi-3.8-20120326.jar包 和工具包sl-common.jar
- 利用反射导入导出Excel
- Java Web利用POI导出Excel简单例子
- 利用office导出Excel
- Apache POI 第六讲之利用Excel模板实现数据的批量导出
- jsp利用POI直接生成Excel并在页面中导出
- 利用注解反射生成导出excel文件
- ASP.Net MVC利用NPOI导入导出Excel - RuleLu
- excel导入导出操作类 利用泛型 反射 导入excel
- (利用poi插件) 报表导出Excel