java poi Excel大数据量(千万级)导入如何提高速度
求有经验的大神指教
我的代码
// 导入普通客户信息
public String importExcle() {
TEmployee employee = (TEmployee) request.getSession().getAttribute(
"employee");
TCustomerInfo c = new TCustomerInfo();
// 声明数据流
InputStream is = null;
if (employee != null) {
int hang = 0;
int lie = 0;
if (excel != null) {
try {
// 解析excel 2007 版本文件
is = new FileInputStream(excel);
XSSFWorkbook work = new XSSFWorkbook(is);
XSSFSheet sheet = work.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();
// 循环表的行,从第二行开始
for (int i = 1; i < rows; i++) {
hang = i + 1;
c = new TCustomerInfo();
XSSFRow row = sheet.getRow(i);
if (row == null) {// 判断是否为空
continue;
}
// 读取该行的每一列
for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {
XSSFCell cell = row.getCell(j);
if (cell == null) {
continue;
}
if (cell.toString() == null
|| "".equals(cell.toString())) {
continue;
}
String v = Util.getXssfCellValue(cell);
switch (j) {// 通过列数来判断对应插如的字段
case 0:
c.setCompanyName(v);
break;
case 1:
c.setLinkName(v);
break;
case 2:
c.setTell(v);
break;
case 3:
c.setTelephone(v);
break;
case 4:
c.setPosition(v);
break;
case 5:
c.setEmail(v);
break;
case 6:
c.setCompanyType(v);
break;
case 7:
c.setCustomerType(v);
break;
case 8:
c.setCompanyDetail(v);
break;
}
c.setCreateMan(employee.getName());
c.setCreateDate(new Date());
}
customerInfoBiz.addCustomer(c);
}
request.setAttribute("message", "导入成功(=^_^=)");
} catch (Exception e) {
System.out.println("进入 ---解析excel 2003 版本文件--错误抛出");
try {
// 解析excel 2003 版本文件
is = new FileInputStream(excel);
HSSFWorkbook work = new HSSFWorkbook(is);
HSSFSheet sheet = work.getSheetAt(0);
if (sheet != null) {
int rows = sheet.getPhysicalNumberOfRows();
// 循环表的行,从第二行开始
for (int i = 1; i < rows; i++) {
hang = i + 1;
c = new TCustomerInfo();
HSSFRow row = sheet.getRow(i);
if (row == null) {// 判断是否为空
continue;
}
// 循环表格的列
for (short j = 0; j < row
.getPhysicalNumberOfCells(); j++) {
HSSFCell cell = row.getCell(j);
if (cell == null) {
continue;
}
if (cell.toString() == null|| "".equals(cell.toString())) {
continue;
}
String v = Util.getHssfCellValue(cell);
switch (j) {// 通过列数来判断对应插如的字段
case 0:
c.setCompanyName(v);
break;
case 1:
c.setLinkName(v);
break;
case 2:
c.setTell(v);
break;
case 3:
c.setTelephone(v);
break;
case 4:
c.setPosition(v);
break;
case 5:
c.setEmail(v);
break;
case 6:
c.setCompanyType(v);
break;
case 7:
c.setCustomerType(v);
break;
case 8:
c.setCompanyDetail(v);
break;
}
c.setCreateMan(v);
c.setCreateDate(new Date());
}
customerInfoBiz.addCustomer(c);
}
request.setAttribute("message", "导入成功(=^_^=)");
}
} catch (Exception e1) {
request.setAttribute("message", "第" + hang + "行,第"
+ lie + "列开始导入失败,请注意导入格式!!");
e1.printStackTrace();
}
}
}
} else {
request.setAttribute("message", "登录超时 ,请重新登录!!");
}
// 查询时对象中含有值对查询有误
if (customer != null) {
customer = null;
}
return customerList();
}