poi 操作Excel 以及大数据量导出
maven 依赖 (版本必须一致,否则使用SXSSFworkbook 时程序会报错)
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
HSSFworkbook,XSSFworkbook,SXSSFworkbook 三者 区别
HSSFworkbook:操作Excel2003版本,扩展名为xls
XSSFworkbook:操作Excel2007版本,扩展名为xlsx
SXSSFworkbook :用于大数据量导出,当数据量超过 65536后 程序 会报错:Invalid row number (65536) outside allowable range (0..65535)
例子1:简单导出Excel
@Test
public void test1() throws IOException {
// 读取文件
POIFSFileSystem fs = new POIFSFileSystem(Thread.currentThread().getContextClassLoader().getResourceAsStream("test.xls"));
// 创建一个工作簿
HSSFWorkbook workbook = new HSSFWorkbook(fs);
// 获取第一个sheet
HSSFSheet sheet = workbook.getSheetAt(0);
System.out.println(sheet.getSheetName());
// 获取第一行
HSSFRow row = sheet.getRow(0);
// 获取第一行第一列
HSSFCell cell = row.getCell(0);
System.out.println(cell.getStringCellValue()); // 创建一行
HSSFRow row1 = sheet.createRow(1);
// 创建单元格
HSSFCell cell1 = row1.createCell(0);
// 单元格赋值
cell1.setCellValue("我是程序创建的内容");
System.out.println(cell1.getStringCellValue()); // 创建输出流
FileOutputStream os = new FileOutputStream(new File("D:\\8888.xls"));
// 输出文件
workbook.write(os);
}
例子2:导出查询数据
@Test
public void test2() {
// 模拟导出数据
Object[] obj = new Object[]{"哈哈", "呵呵", "哼哼"};
List<Object[]> list = new ArrayList<Object[]>();
// HSSFWorkbook 只支持2003版本及以下版本Excel 且容量最大为65536
for (int i = 0; i < 65536; i++) {
list.add(obj);
} export("test.xls", list, 2);
} /**
* poi 导出
* @param fileName
* @param objs
* @param rowIndex
*/
private void export(String fileName, List<Object[]> objs, int rowIndex) {
POIFSFileSystem fs = null;
FileOutputStream os = null;
try {
fs = new POIFSFileSystem(Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName));
} catch (IOException e) {
e.printStackTrace();
}
// 创建一个工作簿
try {
HSSFWorkbook workbook = new HSSFWorkbook(fs);
HSSFCellStyle style = setCellStyle(workbook);
// 获取一个sheet页
HSSFSheet sheet = workbook.getSheetAt(0); for (int i = rowIndex - 1; i < objs.size(); i++) {
// 创建行
HSSFRow row = sheet.createRow(i); // 创建列
for (int j = 0; j < objs.get(i).length; j++) {
HSSFCell cell = row.createCell(j);
// 设置单元格样式
cell.setCellStyle(style);
cell.setCellValue(objs.get(i)[j].toString());
}
}
// 创建输出流
os = new FileOutputStream(new File("D:\\8888.xls"));
// 输出文件
workbook.write(os);
} catch (IOException e) {
e.printStackTrace();
}finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} /**
* 设置样式
* @param workbook
*/
private HSSFCellStyle setCellStyle(HSSFWorkbook workbook) {
HSSFCellStyle style = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
// 字号
font.setFontHeightInPoints((short) 12);
style.setFont(font);
// 左右居中 上下居中
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
return style;
}
例子3:大数据量导出
/**
* 大数据量导出
* @throws IOException
*/
@Test
public void text2() throws IOException { XSSFWorkbook xssfWorkbook = new XSSFWorkbook(Thread.currentThread().getContextClassLoader().getResourceAsStream("bigdata.xlsx"));
SXSSFWorkbook wb = new SXSSFWorkbook(xssfWorkbook, 100); Sheet sh = wb.getSheetAt(0);
for(int rownum = 1; rownum < 75537; rownum++){
Row row = sh.createRow(rownum);
for(int cellnum = 0; cellnum < 10; cellnum++){
Cell cell = row.createCell(cellnum);
String address = new CellReference(cell).formatAsString();
cell.setCellValue(address);
} } // // Rows with rownum < 900 are flushed and not accessible
// for(int rownum = 0; rownum < 900; rownum++){
// Assert.assertNull(sh.getRow(rownum));
// }
//
// // ther last 100 rows are still in memory
// for(int rownum = 900; rownum < 1000; rownum++){
// Assert.assertNotNull(sh.getRow(rownum));
// } FileOutputStream out = new FileOutputStream("D:\\sxssf.xlsx");
wb.write(out);
out.close(); // dispose of temporary files backing this workbook on disk
wb.dispose();
}
poi 操作Excel 以及大数据量导出的更多相关文章
- Export大数据量导出和打包
项目需求 导出生成大批量数据的文件,一个Excel中最多存有五十万条数据,查询多余五十万的数据写多个Excel中.导出完成是生成的多个Excel文件打包压缩成zip,而后更新导出记录中的压缩文件路 ...
- SQL Server 使用bcp进行大数据量导出导入
转载:http://www.cnblogs.com/gaizai/archive/2010/04/17/1714389.html SQL Server的导出导入方式有: 在SQL Server中提供了 ...
- 使用内存映射文件MMF实现大数据量导出时的内存优化
前言 导出功能几乎是所有应用系统必不可少功能,今天我们来谈一谈,如何使用内存映射文件MMF进行内存优化,本文重点介绍使用方法,相关原理可以参考文末的连接 实现 我们以单次导出一个excel举例(csv ...
- 【Java POI】POI基于事件驱动解析大数据量2007版本Excel,空值导致列错位问题
1.目前测试了20M的文件,可以读取. 2.支持单个工作表1万+的数据行数,耗时如图. 3.以下是关键地方处理的代码 //Accepts objects needed while parsing. / ...
- C#将dataGridView中显示的数据导出到Excel(大数据量超有用版)
开发中非常多情况下须要将dataGridView控件中显示的数据结果以Excel或者Word的形式导出来,本例就来实现这个功能. 因为从数据库中查找出某些数据列可能不是必需显示出来,在dataGrid ...
- java 导出Excel 大数据量,自己经验总结!
出处: http://lyjilu.iteye.com/ 分析导出实现代码,XLSX支持: /** * 生成<span style="white-space: normal; back ...
- EasyPoi大数据导入导出百万级实例
EasyPoi介绍: 利用注解的方式简化了Excel.Word.PDF等格式的导入导出,而且是百万级数据的导入导出.EasyPoi官方网址:EasyPoi教程_V1.0 (mydoc.io).下面我写 ...
- POI读写大数据量excel,解决超过几万行而导致内存溢出的问题
1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384 ...
- [转]POI大数据量Excel解决方案
全文转载自:jinshuaiwang的博客 目前处理Excel的开源javaAPI主要有两种,一是Jxl(Java Excel API),Jxl只支持Excel2003以下的版本.另外一种是Apach ...
随机推荐
- VC命令行编译中出现Invalid switch错误的解决办法
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用makefile编译gdal库出现一个错误: cd .. if exist./gdal19_i_D.lib del ...
- 深入理解ArrayList与LinkedList的区别
一.先来看看ArrayList与LinkedList 在JDK中所在的位置 从图中可以看出,ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只 ...
- TOP计划猿10最佳实践文章
本文转自:EETproject教师专辑 http://forum.eet-cn.com/FORUM_POST_10011_1200263220_0.HTM?click_from=8800111934, ...
- 傅里叶分析(matlab)
一维信号的傅里叶变换:fft(t) 二维图像的傅里叶变换:fft2(t) fft2(x) ⇒ fft(fft(x)')' 0. 基础 f(t)=∑k=−∞∞αkeikt 1. frequency sp ...
- WPF 图片灰度处理
原文:WPF 图片灰度处理 文章的内容是来自微软中文技术论坛的一个帖子,当时是想将一段将图片灰度处理的代码转换为XAML的一个样式,在这里要谢谢 Xiao Yan Qiang.Sheldon _Xia ...
- Matlab随笔之分段线性函数化为线性规划
原文:Matlab随笔之分段线性函数化为线性规划 eg: 10x, 0<=x<=500 c(x)=1000+8x, 500<=x<=1000 300 ...
- Symbol not found: _lua_objlen
lua: error loading module 'cjson' from file '/usr/local/lib/lua/5.3/cjson.so': dlopen(/usr/local/lib ...
- SwiftCafe 咖啡时光 - 了解 Swift 中的闭包
闭包(Closure) 是现代开发语言的必备特性,极大的提高了我们的开发效率. 关于闭包,你可以把它理解为一种特殊的变量或对象.简而言之,我们通常的对象,里面存储的是变量或对象的值,而闭包里面存储的是 ...
- jquery 用json设置css
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- 通通玩blend美工(6)上——仿iPhone滚动选择器的ListBox(UI设计)
原文:通通玩blend美工(6)上--仿iPhone滚动选择器的ListBox(UI设计) 好久没更新博客了,由于项目比较紧,期间收到不少园友的短消息,感谢大家对我的支持~~. 相信各位都在自己的神机 ...