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 ...
随机推荐
- JackSon fasterxml学习
概述 Jackson框架是基于Java平台的一套数据处理工具,被称为"最好的JavaJson解析器". Jackson框架包含了3个核心库:streaming,databind, ...
- android制,点击EditText时刻,隐藏系统软键盘,显示光标
由于项目中要用自己定义的随机键盘,所以必须得屏蔽系统软键盘,可是在4.0的測试系统来看,使用editText.setInputType(InputType.TYPE_NULL)方法固然能隐藏键盘,可是 ...
- EM 12c: OMS Failed to start After restarting the Repository Database or reboot of the server
原文地址:http://blog.csdn.net/wanghui5767260/article/details/39398449 更全面,更专业 EM 12c: OMS Failed to star ...
- JDBC数据源DBCP源代码情景分析
在之前的一篇博文从JDBC到commons-dbutils 中,我曾经写到,对于获取数据库连接,有一个解决方案,那就是数据源.业界用到的比较普遍的开源数据源解决方案有很多,DBCP是其中一种,今天,我 ...
- arcserver开发小结(二)
一.关于服务器上下文 1,服务器上下文(ServerContext)本质上是一个GIS服务器上的进程,它是服务器端编程的起点. 2,只有本地资源才能得到服务器上下文,通常得到服务器上下文的主线是: M ...
- beego中各类数据库连接方式
beego 框架是优秀得go REST API开发框架.下面针对beego中各类数据库连接操作做一个总结. 1. orm连接方式 beego中的orm操作支持三种数据库:mysql,sqlite3,p ...
- ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF SQLite 支持 上一章节我有提 ...
- WPF用Blend写的交通信号灯
原文:WPF用Blend写的交通信号灯 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/1 ...
- x:Static , StaticResource 和DynamicResource等XAML 扩展用法
原文:x:Static , StaticResource 和DynamicResource等XAML 扩展用法 前提: <system:String x:Key="{Component ...
- boost库交叉编译(Linux生成ARM的库)
1. 环境: Linux系统:Ubuntu 14.04 编译工具:arm-fsl-linux-gnueabi-gcc 2.下载boost源码: 地址:https://sourceforge.net/p ...