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 ...
随机推荐
- 【非常高%】【codeforces 733B】Parade
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- Android studio 无法启动安卓模拟器
1.通过Android SDK Manager在extra中,找到并选中了那个Intel x86 Emulator Accelerator (HAXM) 2.手动启动HAXM 去对应的sdk\e ...
- 在这里23种经典设计模式UML类图汇总
创建型模式 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说"来四个鸡翅"就 ...
- <meta http-equiv="refresh" content="0; url=">什么意思?
原文:<meta http-equiv="refresh" content="0; url=">什么意思? 页面定期刷新,如果加url的,则会重新定 ...
- Android官方教程翻译(2)——运行第一个程序
转载请注明出处:http://blog.csdn.net/dawanganban/article/details/9823623 Running Your App PREVIOUSNEXT THIS ...
- WPF 元素相对另外一个元素的 相对位置
原文:WPF 元素相对另外一个元素的 相对位置 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/740 ...
- TCP 报文段结构
源端口.目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信.源端口.目标端口是用 ...
- 3 Task中的一些枚举 创建时候的、continue时候的
创建时常用的枚举: None.PreferFairness.LongRunning.AttacthedToParent.DenyChildAttach.HideScheduler AttacthedT ...
- 移动浏览器Chrome 32 for Android移除300ms点击推迟
在手机浏览器的一篇文章翻译300ms延迟实用文章,原文地址 http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away 去掉移动设 ...
- sql语句计算出每个月的天数
原文:sql语句计算出每个月的天数 从当前月-11个月开始,到当前月为止,用一个sql语句计算出每个月的天数. SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-LEVEL+1 ...