JXL操作生成多个sheet时,生成Recovered_Sheetxx无用表格,求教如何删除

Memories_Code 2018-10-24 02:54:04
项目需要将获取的数据写入Excel表格,根据数据的不同,需要生成一个或是多个sheet( sheet 数量不确定 ),用jxl jar 生成,最后导出表格发现里面有自动生成的Recovered_Sheetxx 表格,并且只有表头,没有数据如下图所示:
然后我在代码里抓日志,获取所有的sheet名(所有获取sheetName的方法都用上了
 Workbook workbook = Workbook.getWorkbook(file);
WritableWorkbook writableWorkbook = Workbook.createWorkbook(file, workbook);
String[] sheetNames = workbook.getSheetNames();
for (int j = 0; j < sheetNames.length; j++) {
Log.d(TAG, "writeToExcel: 11111111111111 " + sheetNames[j]);
if (sheetNames[j].contains("Recovered_Sheet")) {
Log.d(TAG, "writeToExcel: sheetNames[j]: " + sheetNames[j] + ", j:" + j);
writableWorkbook.removeSheet(j);
}

}
String[] writableWorkbookSheetNames = writableWorkbook.getSheetNames();
for (int n = 0; n < writableWorkbookSheetNames.length; n++) {
Log.d(TAG, "writeToExcel: 2222222222222 name " + writableWorkbookSheetNames[n]);
}
WritableSheet[] writableSheets = writableWorkbook.getSheets();
for (int b = 0; b < writableSheets.length; b++) {
Log.d(TAG, "writeToExcel: 333333333333 sheet" + writableSheets[b].getName());
}
Sheet[] sheets = workbook.getSheets();
for (int m = 0; m < sheets.length; m++) {
Log.d(TAG, "writeToExcel:44444444444444 sheets[m].getName() " + sheets[m].getName());
}
writableWorkbook.write();
writableWorkbook.close();
workbook.close();
)
最后在日志中还是没有包含Recovered_Sheetxx名称的表格,

求教如何删除这些无用sheet
...全文
589 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
咸哼酒家 2018-10-24
  • 打赏
  • 举报
回复
引用 3 楼 Memories_Code 的回复:
用poi也许会解决这个问题,但是换jar包这种方法对项目的改动太大了,


几个包而已,也不是很大吧。
我用它因为它比较成熟,API好使,网上例子也很多。
Memories_Code 2018-10-24
  • 打赏
  • 举报
回复



引用 2 楼 CEOCAO 的回复:
我用easy-poi生成多sheet页,详细的部分可以参看官方demo

try {
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("勤务预案报表导出","UTF-8") + ".xls");

//SXSSFWorkbook book = new SXSSFWorkbook(500);
HSSFWorkbook book = new HSSFWorkbook();
for(int i=0;i<sheetList.size();i++){
TaskTempVO vo = sheetList.get(i);
Sheet sheet = book.createSheet(); //创建sheeet
sheet.setDefaultColumnWidth(16);//设置表格默认列宽度为20个字节
book.setSheetName(i, vo.getName());//设置当前sheet名称
Row titlerow = sheet.createRow(0);//第一行设置显示的title标题,可设置其他主题,当前就不考虑

List<TTaskEntity> result = taskExportService.findTaskList(vo.getStatus(), name, taskTyp, taskGrad, startTime, endTime, isCommonUse);
//--------------------------只获取一行记录,将名称插入即可--START--------------------------------
titlerow.createCell(0).setCellValue("勤务名称");//设置标题
titlerow.createCell(1).setCellValue("勤务类型");
titlerow.createCell(2).setCellValue("勤务等级");

//--------------------------只获取一行记录,将名称插入即可--END--------------------------------

if(null !=result){
//--------------------------插入实体数据------START------------------------------
for(int m=0;m<result.size();m++){
Row datarow = sheet.createRow(m+1);
TTaskEntity tTaskEntity = result.get(m);
datarow.createCell(0).setCellValue(tTaskEntity.getTaskName());
datarow.createCell(1).setCellValue(tTaskEntity.getTaskTyp());
datarow.createCell(2).setCellValue(tTaskEntity.getTaskGrad());

}
}
}
//--------------------------插入实体数据------END------------------------------
ServletOutputStream sos = response.getOutputStream();
book.write(sos);

} catch(Exception e){
e.printStackTrace();
}


用poi也许会解决这个问题,但是换jar包这种方法对项目的改动太大了,
咸哼酒家 2018-10-24
  • 打赏
  • 举报
回复
我用easy-poi生成多sheet页,详细的部分可以参看官方demo

try {
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("勤务预案报表导出","UTF-8") + ".xls");

//SXSSFWorkbook book = new SXSSFWorkbook(500);
HSSFWorkbook book = new HSSFWorkbook();
for(int i=0;i<sheetList.size();i++){
TaskTempVO vo = sheetList.get(i);
Sheet sheet = book.createSheet(); //创建sheeet
sheet.setDefaultColumnWidth(16);//设置表格默认列宽度为20个字节
book.setSheetName(i, vo.getName());//设置当前sheet名称
Row titlerow = sheet.createRow(0);//第一行设置显示的title标题,可设置其他主题,当前就不考虑

List<TTaskEntity> result = taskExportService.findTaskList(vo.getStatus(), name, taskTyp, taskGrad, startTime, endTime, isCommonUse);
//--------------------------只获取一行记录,将名称插入即可--START--------------------------------
titlerow.createCell(0).setCellValue("勤务名称");//设置标题
titlerow.createCell(1).setCellValue("勤务类型");
titlerow.createCell(2).setCellValue("勤务等级");

//--------------------------只获取一行记录,将名称插入即可--END--------------------------------

if(null !=result){
//--------------------------插入实体数据------START------------------------------
for(int m=0;m<result.size();m++){
Row datarow = sheet.createRow(m+1);
TTaskEntity tTaskEntity = result.get(m);
datarow.createCell(0).setCellValue(tTaskEntity.getTaskName());
datarow.createCell(1).setCellValue(tTaskEntity.getTaskTyp());
datarow.createCell(2).setCellValue(tTaskEntity.getTaskGrad());

}
}
}
//--------------------------插入实体数据------END------------------------------
ServletOutputStream sos = response.getOutputStream();
book.write(sos);

} catch(Exception e){
e.printStackTrace();
}
Memories_Code 2018-10-24
  • 打赏
  • 举报
回复
现在的问题是在日志中获取所有的sheet名称,并没有发现有Recovered_Sheet的表,但是实际导出表格后有.如何动态的删除这些Recovered_Sheet表

50,535

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧