(高分)JAVA导出Excel数据量很大(10多万),然后出错,估计是内存不够,应该怎么改?源码是这样: 150

publicStringwriteToExcelFormat(ListrecordList,String[]title,String[]fmtCell)throwsExc... public String writeToExcelFormat(List recordList, String[] title,
String[] fmtCell) throws Exception {
// 列格式分解 类型:列宽
int fmtMax = fmtCell.length;
String[][] fmtColumn = new String[fmtMax][2];
for (int i = 0; i < fmtMax; i++) {
// 初始化
fmtColumn[i][0] = "";
fmtColumn[i][1] = "";

// 分解格式
if (!fmtCell[i].equals("")) {
String[] a = fmtCell[i].split(":");
for (int j = 0; j < a.length; j++) {
fmtColumn[i][j] = a[j];
}
}
}

// 生成随机数文件名
String filePath = getRandomFilePath();

// 打开文件
File file = new File(filePath);
WritableWorkbook book = Workbook.createWorkbook(file);
// 生成名为fileName“如:第一页”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet("Sheet1", 0);

// 写入标题
WritableFont fontT = new WritableFont(WritableFont.TIMES, 11,
WritableFont.BOLD);
WritableCellFormat wc = new WritableCellFormat(fontT);
wc.setAlignment(Alignment.CENTRE); // 设置居中
for (int j = 0; j < title.length; j++) {
Label labT = new Label(j, 0, title[j], wc);
sheet.addCell(labT);
}

// 设置列宽
for (int j = 0; j < fmtMax; j++) {
if (!fmtColumn[j][1].equals("")) {
sheet.setColumnView(j, Integer.parseInt(fmtColumn[j][1]));
}
}

// 写入记录
int c = 1;// 记录单元格行数
for (int i = 0; i < recordList.size(); i++) {
Element e = (Element) recordList.get(i);
List attrList = e.getChildren(); // 获取节点所有属性
for (int j = 0; j < attrList.size(); j++) {
Element item = (Element) attrList.get(j);
String sValue = item.getText();
// System.out.println("wyq row:"+String.valueOf(i)+"
// col:"+String.valueOf(j)+" value:"+sValue);
if (j < fmtMax && fmtColumn[j][0].equals("number")
&& !"".equals(sValue)) { // 数字
jxl.write.Number number = new jxl.write.Number(j, c,
Double.parseDouble(sValue));
sheet.addCell(number);
} else {
Label label2 = new Label(j, c, sValue);
sheet.addCell(label2);
}
}
c++;
}
}

// 写入数据并关闭文件
book.write();
book.close();
return filePath;
}
recordList是数据库传来的数据,很多,求代码,思路也行,只要解决就给分!
问题就出在写入记录那里,写到3000多条的时候就会出错!
展开
 我来答
逆吞天
2014-11-06 · TA获得超过806个赞
知道小有建树答主
回答量:579
采纳率:0%
帮助的人:182万
展开全部
我记得可以直接在excel模板中写代码,后台只需要传jdbc的数据库连接进去就行。
例如:

<jx:forEach items="${rm.exec("SELECT inv_no FROM INV_MAIN")}" var="sss" >
${sss.inv_no}
</jx:forEach>
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式