近段时间做一个excel的导出功能,在网上查询了很多方法,发现都很难解决我目前的困难,偶尔查询到POI修改sheetname这个问题,有了解决方法
以下为参考链接及本人部分代码
如有侵权,请联络删除,谢谢
部分代码及注释:
//因为有excel模板,但又不想直接在模板上进行操作,所以先获取文件流信息,模板为xlsx,请自行修改
//使用文件路径读入文件流,因为我的是模板,我是知道路径的
FileInputStream fis = new FileInputStream("src/main/resources/template/ScheduleModel.xlsx");
//创建一个新的excel并读入文件流,读取之后记得关闭流
XSSFWorkbook wk = new XSSFWorkbook(fis);
fis.close();
// 模板内容已经写入了新建的excel,第一个sheet为模板sheet
XSSFSheet fromsheet = wk.getSheetAt(0);
// 新表创建sheet
XSSFSheet sheet = null;
XSSFRow row = null;
//之后就是新文件之内的sheet操作了,要根据模板sheet创建新sheet,直接克隆就可以了
int sheetNum = 1;
sheet = wk.cloneSheet(0);//克隆第一个sheet,因为我后续要对克隆的sheet直接进行操作,所以就直接这样写了
sheetNum++;//获取sheet页数量,也可以使用原生方法int sheetNum = wk.getNumberOfSheets();
wk.setSheetName(sheetNum-1, sheetname);//修改新生成的sheet页名称
以上就是代码部分了,可以自行追加逻辑来确认是否克隆新的sheet,
这个方法比起字节流一行一行读方便很多,唯一的问题是没办法对内容进行筛选。
但如果仅是对模板进行操作,这种方法是我找到的最方便的了,如果有其他方案,可以发给我,谢谢。