乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > <em>java</em>怎么读取很大的excel(20w条数据),怎么通过字...

<em>java</em>怎么读取很大的excel(20w条数据),怎么通过字...

作者:乔山办公网日期:

返回目录:excel表格制作


你是刚开始把excel的流读取的时候就内存溢出了吗?我建议如果内存吃紧 增加jvm启动内存 程序中及时释放内存,比如,excel中读取一行后,就把这一行保存到数据库,然后java内设置为null,让GC释放内存。然后一些list之类的,不用了也clear+setNul...

使用java poi
package webservice;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ExcelController {

@SuppressWarnings("deprecation")
public void excel() throws FileNotFoundException, IOException{

String filename = "d:\\excel.xls";
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(filename));
//按名引用excel工作表
// HSSFSheet sheet = workbook.getSheet("JSP");
//也可以用以下方式来获取excel的工作表,采用工作表的索引值
HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row ;
HSSFCell cell1;
int rows=sheet.getLastRowNum();
for(int icount=0;icount<rows;icount++){
row = sheet.getRow(icount);
int line=row.getPhysicalNumberOfCells();
for(int j=0;j<line;j++){
cell1= row.getCell(j);
System.out.println(cell1+"--"+icount+"---"+j);
}
}
//打印读取值
// System.out.println(cell.getStringCellValue());

//新建一输出流
FileOutputStream fout = new FileOutputStream(filename); //PS:filename 是你另存为的路径,7a64e4b893e5b19e337不处理直接写入模版文件
//存盘
workbook.write(fout);
fout.flush();
//结束关闭
fout.close();

}

public HSSFCell getCell(HSSFRow row, int index) {

// 取得分发日期单元格
HSSFCell cell = row.getCell(index);

// 如果单元格不存在
if (cell == null) {

// 创建单元格
cell = row.createCell(index);
}

// 返回单元格
return cell;
}

public static void main(String[] args) {
ExcelController ec = new ExcelController();
try {
ec.excel();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这应该是excel文件中的问题,看看是不是文件中后面那些行里面有空格,或者做过其他标记,可以直接把excel的第21到第31行选中然后删除,保存好之后重新用jxl读取试试。

你是刚开始把excel的流读取的时候就内存溢出了吗?我建议如果内存吃紧

  1. 增加jvm启动内存

  2. 程序中及时释放内存,比如,excel中读取一行后,就把这一行保存到数据库,然后java内设置为null,让GC释放内存。然后一些list之类的,不用了也clear+setNull掉

  3. excel7万数据的话,应该几百M内存就够了,不算过分

相关阅读

  • <em>java</em> web实现在线预览<em>word</em>

  • 乔山办公网word文档
  • 你是什么地方用,一般这个实在服务端实现,把word转成百html,图片,或者swf来在浏览器查看。相对而言转成html的效果最好。目前市面上已经有几个服务商在做,有的是度基于openoffice做
关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网