我的代码
// 导入普通客户信息
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();
}
15 个解决方案
#1
千万级,写到一个excel 里吗?
#2
是用Excel 导入 没办法 公司要这么干
#3
速度没办法,数据量在那摆着呢,循环1千万次还比1万次长的多呢。
#4
这种从excel里导东西出来没什么点可以优化的
我倒是很好奇这种千万级别的excel是怎么产生的,这种文件估计放在绝大部分pc机上都打不开
我倒是很好奇这种千万级别的excel是怎么产生的,这种文件估计放在绝大部分pc机上都打不开
#5
用jxls试试
#6
他是分数十次次导入的 估计是没办法了 我在看看有没有其他办法
#7
分10次就应该导入到不同的文件里去,用多台机器来分析处理,导入到一个文件里这个真实匪夷所思
#8
这种从excel里导东西出来没什么点可以优化的
我倒是很好奇这种千万级别的excel是怎么产生的,这种文件估计放在绝大部分pc机上都打不开
他是分数十次次导入的 估计是没办法了 我在看看有没有其他办法
分10次就应该导入到不同的文件里去,用多台机器来分析处理,导入到一个文件里这个真实匪夷所思
导入的数据库 用的是mysql
#9
lz还纠结个什么呢?数据量摆着呢,编程接口没有什么新的,就是poi了,速度不可能有什么质的提高。
#10
速度没办法,数据量在那摆着呢,循环1千万次还比1万次长的多呢。
#11
我采用了批量提交的方法,先将数据保存到集合,最后再50个子批次提交,速度快了近10倍,当然测试用数据是1w 条左右,更大数据量可同理保存到集合,分批次保存
#12
非得用xls格式吗?用csv可能速度会快很多
#13
非得用xls格式吗?用csv可能速度会快很多
恩恩 据说可以 到时试试
#14
千万条数据不会出现oom么?我也是用poi跟楼主类似的方法五六万条数据就已经出现oom了
#15
java实现导入大数量数据到excel中,用poi感觉会很麻烦吧
。试试用插件吧,方便点,PageOffice插件就很不错,可以实现插入数据到excel中。可以到官网上查查
#1
千万级,写到一个excel 里吗?
#2
千万级,写到一个excel 里吗?
是用Excel 导入 没办法 公司要这么干
#3
速度没办法,数据量在那摆着呢,循环1千万次还比1万次长的多呢。
#4
这种从excel里导东西出来没什么点可以优化的
我倒是很好奇这种千万级别的excel是怎么产生的,这种文件估计放在绝大部分pc机上都打不开
我倒是很好奇这种千万级别的excel是怎么产生的,这种文件估计放在绝大部分pc机上都打不开
#5
用jxls试试
#6
这种从excel里导东西出来没什么点可以优化的
我倒是很好奇这种千万级别的excel是怎么产生的,这种文件估计放在绝大部分pc机上都打不开
他是分数十次次导入的 估计是没办法了 我在看看有没有其他办法
#7
这种从excel里导东西出来没什么点可以优化的
我倒是很好奇这种千万级别的excel是怎么产生的,这种文件估计放在绝大部分pc机上都打不开
他是分数十次次导入的 估计是没办法了 我在看看有没有其他办法
分10次就应该导入到不同的文件里去,用多台机器来分析处理,导入到一个文件里这个真实匪夷所思
#8
这种从excel里导东西出来没什么点可以优化的
我倒是很好奇这种千万级别的excel是怎么产生的,这种文件估计放在绝大部分pc机上都打不开
他是分数十次次导入的 估计是没办法了 我在看看有没有其他办法
分10次就应该导入到不同的文件里去,用多台机器来分析处理,导入到一个文件里这个真实匪夷所思
导入的数据库 用的是mysql
#9
lz还纠结个什么呢?数据量摆着呢,编程接口没有什么新的,就是poi了,速度不可能有什么质的提高。
#10
速度没办法,数据量在那摆着呢,循环1千万次还比1万次长的多呢。
#11
我采用了批量提交的方法,先将数据保存到集合,最后再50个子批次提交,速度快了近10倍,当然测试用数据是1w 条左右,更大数据量可同理保存到集合,分批次保存
#12
非得用xls格式吗?用csv可能速度会快很多
#13
非得用xls格式吗?用csv可能速度会快很多
恩恩 据说可以 到时试试
#14
千万条数据不会出现oom么?我也是用poi跟楼主类似的方法五六万条数据就已经出现oom了
#15
java实现导入大数量数据到excel中,用poi感觉会很麻烦吧
。试试用插件吧,方便点,PageOffice插件就很不错,可以实现插入数据到excel中。可以到官网上查查