//获取需要的用户信息
lu = comm.findalluser();
for (User u : lu) {
//查出所有客户信息
la = salesaccountdao.listpallAccount(u.getUserid());
if (la.size() > 0) {
accountLists.addAll(la);
}
}
//将查处的所有客户信息导出成excel(一下循环费时)
int i=0,j=0,size = accountLists.size();
for (i = 1; i < size; i++) {
// 获得这个sheet的第i行
row = sheet1.createRow(i);
for (j = 0; j < 12; j++) {
// 设置每个sheet每一行的宽度,自动,根据需求自行确定
sheet1.autoSizeColumn(j + 1, true);
// 获得这一行的每j列
cell = row.createCell(j);
switch (j) {
case 0:
cell.setCellValue(accountLists.get(i).getName());
break;
case 1:
cell.setCellValue(accountLists.get(i).getAddress());
break;
case 2:
cell.setCellValue(accountLists.get(i).getCity());
break;
case 3:
cell.setCellValue(accountLists.get(i).getCreatetime());
break;
case 4:
cell.setCellValue(accountLists.get(i).getCustomertype());
break;
case 5:
cell.setCellValue(accountLists.get(i).getDescription());
break;
case 6:
cell.setCellValue(accountLists.get(i).getProvince());
break;
case 7:
cell.setCellValue(accountLists.get(i).getStatecode());
break;
case 8:
cell.setCellValue(accountLists.get(i).getFax());
break;
case 9:
cell.setCellValue(accountLists.get(i).getIndustrycode());
break;
case 10:
cell.setCellValue(accountLists.get(i).getRes());
break;
case 11:
cell.setCellValue(accountLists.get(i).getWebsiteurl());
break;
case 12:
cell.setCellValue(accountLists.get(i).getTelephone());
break;
case 13:
cell.setCellValue(accountLists.get(i).getUserByOwnerid().getName());
break;
}
}
}
//就在生成excel的嵌套循环中,浪费了大量时间,总的600条数据,打印时间却是110秒钟,请高手指点一二,不胜感激!!
解决方案 »
- js产生两组随机数,第一组产生不重复随机数组,第二组产生不包括第一组数据的不重复随机数
- href怎么写
- AJAX-DWR 返回值问题
- ★关闭当前画面,刷新父画面,若父画面迁移:window.opener.closed = false; 但window.operner其他属性都「書き込みできません」。如何知道父画面是否发生迁移?
- 如何将这样的10-15 15:51时间显示转换成这样的Oct 15 3:51pm时间显示??
- 如何防止直接访问jsp文件
- static关键字到底是怎么一个用法?
- 图片无法显示的问题
- 简单问题,快拿分!
- 一个很简单的关于session问题,在线等!!!
- 出现404错误后如何获取引发错的RUL
- 请教一个问题,系统自动生成的一个流水码,由今年年份数字4位+从0001-9999每次递增1的4位数字组成的8位字符串。。。
int i=0,j=0,size = accountLists.size();
for (User user : accountLists) {
// 获得这个sheet的第i行
row = sheet1.createRow(i);
for (j = 0; j < 12; j++) {
// 获得这一行的每j列
cell = row.createCell(j);
switch (j) {
case 0:
cell.setCellValue(user.getName());
break;
case 1:
cell.setCellValue(user.getAddress());
break;
case 2:
cell.setCellValue(user.getCity());
break;
case 3:
cell.setCellValue(user.getCreatetime());
break;
case 4:
cell.setCellValue(user.getCustomertype());
break;
case 5:
cell.setCellValue(user.getDescription());
break;
case 6:
cell.setCellValue(user.getProvince());
break;
case 7:
cell.setCellValue(user.getStatecode());
break;
case 8:
cell.setCellValue(user.getFax());
break;
case 9:
cell.setCellValue(user.getIndustrycode());
break;
case 10:
cell.setCellValue(user.getRes());
break;
case 11:
cell.setCellValue(user.getWebsiteurl());
break;
case 12:
cell.setCellValue(user.getTelephone());
break;
case 13:
cell.setCellValue(user.getUserByOwnerid().getName());
break;
}
}
i++;
}
for (j = 0; j < 12; j++) {
// 设置每个sheet每一行的宽度,自动,根据需求自行确定
sheet1.autoSizeColumn(j + 1, true);
}
改这样试试看。
试试加判断if (row == null) {
row = sheet1.createRow(i);
}if (cell == null) {
cell = row.createCell(j);
}
1)List遍历不要用get(i),这个很慢。 我改成了。
for (User user : accountLists)
2)这个被多做了很多遍,list的size多大就做了多少次。
其实只要1次就行。 for (j = 0; j < 12; j++) {
// 设置每个sheet每一行的宽度,自动,根据需求自行确定
sheet1.autoSizeColumn(j + 1, true);
}
因为你的excel的列数固定12行,行数未知,
比如你的行数是1000行,
用你的写法,autoSizeColumn设置操作1000*12 = 12000 次而lL的写法是无论多少行就是设置12次。
你做了无谓的操作
void autoSizeColumn(int column,boolean useMergedCells)
This process can be relatively slow on large sheets, so this should normally only be called once per column, at the end of your processing. sheets比较大时,这个方法可能相对较慢,所以只需在最后,为指定的列执行一次该方法即可。
所以楼主上面写的,每循环一次都执行一次该方法就会比较慢了。
另外该方法是对一列的,所以一列执行一次也就够了,不用一列的多个单元格都去执行,多余了。再有:
for (User u : lu) {
la = salesaccountdao.listpallAccount(u.getUserid());
if (la.size() > 0) {
accountLists.addAll(la);
}
}
salesaccountdao.listpallAccount 这个方法是怎么做的?针对每个userid都执行一次数据库查询吗?如果这样那也太慢了。
不要循环,就执行一次数据库查询,把所有的user 的信息都查出来,然后赋给accountLists。
我的是一个用户下有多个客户,需要查询多个用户下的所有客户,我用每个用户的id循环找到客户,每个id都要访问一次数据库,确实很费时,请问如何查询多个用户下的所有客户呢?