请问,jxl在写excel文件时,如果文件比较大,需要用多个sheet来存储,那么一定要按步骤:新建一个sheet—>写入数据—>调用一下write方法,这样的步骤来么?可不可以先创建多个sheet,然后在往每一个sheet里面写呢?
我现在采用的方法就是后者,因为有14万多条数据,我以6万为一组存为一个sheet,我先建了3个sheet,然后开始存,当最前面的6万条存完的时候,程序显示此时的sheet已经是第二个sheet了,但是什么在存到第65534条记录的时候还是发生了溢出呢?要是我只往一个sheet里面存,那么我们都知道一个sheet最多只能存65535行,出现溢出很能理解,但是为什么我现在把前面6万条存入sheet1,接下去从第60001条开始存,存到第65534条还是发生了溢出呢?
我的部分代码如下:
public void saveToExcel(ResultSet rs, String targetFile, String siteName){
String[] title = {.....}; //此处括号中内容较多,省略,不影响阅读
WritableWorkbook workbook = null;
OutputStream os; try {
os = new FileOutputStream(targetFile);
orkbook = Workbook.createWorkbook(os);
WritableSheet sheet = null;
final int MAXRAW = 60000; //设置每个sheet做多只能存60000条记录
int rowCount = 0; //总的记录条数个数
int sheet_num = 0;
while(rs.next()){
rowCount++; //统计数据总条数
}
for(int r = 0; r <= rowCount; r++){
sheet_num = r / MAXRAW;
if(r % MAXRAW == 0){ //新建多个sheet
workbook.createSheet(siteName + "_" + (sheet_num + 1), sheet_num);
}
} int raw = 0;
sheet_num = 0;
rs.first(); //将ResultSet光标移至第一行
while(rs.next()){
if(raw % MAXRAW == 0){
if(raw > 1) workbook.write();
sheet = workbook.getSheet(sheet_num);
sheet_num++;
}
//向excel中存入数据
for(int k = 0; k < rs.getMetaData().getColumnCount(); k++){
sheet.addCell(new Label(k,raw + 1,rs.getString(k+1)));
}
raw++;
}
workbook.write();
workbook.close();
System.out.println("文件存取完毕!");
} catch (IOException | WriteException | SQLException e) {
// TODO 自动生成的 catch 块
System.out.println("错误:存取文件出错!");
e.printStackTrace();
}
}
jxl多个sheetjava写excel
我现在采用的方法就是后者,因为有14万多条数据,我以6万为一组存为一个sheet,我先建了3个sheet,然后开始存,当最前面的6万条存完的时候,程序显示此时的sheet已经是第二个sheet了,但是什么在存到第65534条记录的时候还是发生了溢出呢?要是我只往一个sheet里面存,那么我们都知道一个sheet最多只能存65535行,出现溢出很能理解,但是为什么我现在把前面6万条存入sheet1,接下去从第60001条开始存,存到第65534条还是发生了溢出呢?
我的部分代码如下:
public void saveToExcel(ResultSet rs, String targetFile, String siteName){
String[] title = {.....}; //此处括号中内容较多,省略,不影响阅读
WritableWorkbook workbook = null;
OutputStream os; try {
os = new FileOutputStream(targetFile);
orkbook = Workbook.createWorkbook(os);
WritableSheet sheet = null;
final int MAXRAW = 60000; //设置每个sheet做多只能存60000条记录
int rowCount = 0; //总的记录条数个数
int sheet_num = 0;
while(rs.next()){
rowCount++; //统计数据总条数
}
for(int r = 0; r <= rowCount; r++){
sheet_num = r / MAXRAW;
if(r % MAXRAW == 0){ //新建多个sheet
workbook.createSheet(siteName + "_" + (sheet_num + 1), sheet_num);
}
} int raw = 0;
sheet_num = 0;
rs.first(); //将ResultSet光标移至第一行
while(rs.next()){
if(raw % MAXRAW == 0){
if(raw > 1) workbook.write();
sheet = workbook.getSheet(sheet_num);
sheet_num++;
}
//向excel中存入数据
for(int k = 0; k < rs.getMetaData().getColumnCount(); k++){
sheet.addCell(new Label(k,raw + 1,rs.getString(k+1)));
}
raw++;
}
workbook.write();
workbook.close();
System.out.println("文件存取完毕!");
} catch (IOException | WriteException | SQLException e) {
// TODO 自动生成的 catch 块
System.out.println("错误:存取文件出错!");
e.printStackTrace();
}
}
jxl多个sheetjava写excel
while(rs.next()){
if(raw % MAXRAW == 0){
if(raw > 1) workbook.write();
sheet = workbook.getSheet(sheet_num);
sheet_num++;
}
原因:if(raw > 1) workbook.write();
解决:去掉if(raw > 1) workbook.write();这句代码