(高分)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多条的时候就会出错! 展开
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多条的时候就会出错! 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询