大家好!
我在做java 生成Excel文件时,由于数据量很大(七万多条),我创建的文件扩展名是xlsx,一下不可以导入Excel中,下载做分段导入,就是在sql语句中(例如每次查询2000条),当第一次执行时,先创建Excel标题,然后把第一次查询的2000数据写入Excel中,然后一直循环,直到把全部数据写入。请问大侠们,怎么循环写入?用什么方法?
if(i == 0 )
{
FileOutputStream os = new FileOutputStream(new File(“D:\\excel\a.xlsx”));
XSSFWorkbook wb = new XSSFWorkbook();
//
XSSFSheet sheet = (XSSFSheet) wb.createSheet("aaa");
//
XSSFRow row = null;
XSSFCell cell = null;
int row_num = 0;
int cell_num = 0;
row = sheet.createRow(row_num);
row.setHeightInPoints(30);
sheet.autoSizeColumn(0, true);
cell = row.createCell(cell_num++);
ExcelUtil.setFormatTitleCenter(wb, cell);
cell.setCellValue("SEQ");
wb.write(os);
os.close();
}
if(list.size()>0){
File file = new File(StringUtil.FILE_NAME);
String fullname = file.getAbsolutePath();
FileInputStream fs = new FileInputStream(fullname);
XSSFWorkbook wb = new XSSFWorkbook(fs);
XSSFSheet sheet = wb.getSheetAt(0);
PDTO dto = null;
Iterator itor = list.iterator();
XSSFRow row = null;
XSSFCell cell = null;
while( itor.hasNext() )
{
dto = (PipeDTO)itor.next();
i++;
//定义列
int j=0;
row = sheet.createRow(i);
//设置行长度自动
//row.setHeight((short)500);
row.setHeightInPoints(20);
//row.setZeroHeight(true);
sheet.autoSizeColumn(j+1, true);
//获得这一行的每j列
cell = row.createCell(j++);
//给单元格设值
ExcelUtil.setFormatLineRight(wb, cell);
cell.setCellValue(dto.getSeq);
}
FileOutputStream os = new FileOutputStream(new File(“D:\\excel\a.xlsx”));
wb.write(os);
os.close();
}
else
{
break;
}
这样执行是还是这样的错误,
[java] java.lang.ArrayIndexOutOfBoundsException: -32765
[java] at java.util.ArrayList.get(Unknown Source)
[java] at org.apache.poi.xssf.model.StylesTable.getFontAt(StylesTable.java:190)
[java] at org.apache.poi.xssf.usermodel.XSSFWorkbook.getFontAt(XSSFWorkbook.java:592)
[java] at org.apache.poi.xssf.usermodel.helpers.ColumnHelper.getColumnWidth(ColumnHelper.java:355)
[java] at org.apache.poi.xssf.usermodel.XSSFSheet.autoSizeColumn(XSSFSheet.java:337)
[java] at dlstx.monitor.data.pipe.PipeDAO.rt_code_check_error(PipeDAO.java:688)
[java] at dlstx.monitor.data.ERPMonitor.pipeCheck(ERPMonitor.java:105)
[java] at dlstx.monitor.data.ERPMonitor.main(ERPMonitor.java:53)
请指点,有没有好点的方法,怎么修改,十分感谢!