.xls文件只支持6w+的数据写入
.xlsx文件只支持104w+数据的写入
在java中jxl工具类只能操作.xls的文件,不能操作.xlsx的文件
POI工具类能够支持.xlsx的文件操作。
excel的数据读写都相应的简单,网上也有很多的代码,我这里要说的是怎么样写入100w+的数据到Excel中。
在POI中,XSSFWorkbook wb = new XSSFWorkbook ();创建的工作簿能够写入大量的数据,但很大的可能下会虚拟机内存不够而报错
在这种情况下有两种解决方案:
1.重新分配java 虚拟机内存(我没有试验)
2.POI中还提供了SXSSFWorkbook swb=new SXSSFWorkbook(wb,10000);代码的创建工作,第一个参数是XSSFWorkbook wb = new XSSFWorkbook ();第二个参数是内存中处理的数据行数,当数据量超过你所设置的数量,会把多的数据保存到磁盘上。
这里提供一个简单写入excel文件的代码段:
public static void createWorkBook(List<Entity> dataList,String filename) throws IOException {
System.out.println("数据数量=="+dataList.size());
//创建excel工作簿
XSSFWorkbook wb = new XSSFWorkbook ();
SXSSFWorkbook swb=new SXSSFWorkbook(wb,10000);
//swb.createSheet()
//创建第一个sheet(页),命名为 new sheet
SXSSFSheet sheet = null;
sheet = (SXSSFSheet) swb.createSheet("myData");
//Row 行
//Cell 方格
// Row 和 Cell 都是从0开始计数的
for(int i=0;i<dataList.size();i++)
{
Entity en=dataList.get(i);
// 创建一行,在页sheet上
Row row = sheet.createRow(i);
// 在row行上创建一个方格
/*org.apache.poi.ss.usermodel.Cell cell = row.createCell(0);
//设置方格的显示
cell.setCellValue(1); */
//System.out.println(en.getPkg_name());
//row.createCell(0).setCellValue("xx");
row.createCell(0).setCellValue(en.getDate());
// Or do it on one line.
row.createCell(1).setCellValue(en.getxxx());
row.createCell(2).setCellValue(en.getxxx()());
row.createCell(3).setCellValue(en.getxxx()());
row.createCell(4).setCellValue(en.getxxx()());
......
}
//创建一个文件 命名为workbook.xls
FileOutputStream fileOut = new FileOutputStream(filename);
// 把上面创建的工作簿输出到文件中
swb.write(fileOut);
//关闭输出流
fileOut.close();
System.out.println("写入完成----");
}