1.对模板写入数据,并写入一个新的本地地址excel文件中。
例:第一行为id,日期1,日期2,日期3,日期4,日期5,日期6,日期7,日期8
注意:excel的行和列都从0开始,所以我代码是:从第二行开始,生成100行,8列的数据,第一列为id-count,后面的列为日期。切记关闭流,和栈一样,先定义的后关闭。不关会导致一直占用文件,在进行比如删除操作时报错。
InputStream in = method2.class.getResourceAsStream("/template/输出数据文件.xlsx");
XSSFWorkbook excel = new XSSFWorkbook(in);
XSSFSheet sheet1 = excel.getSheet("Sheet1");
int count = 1;
while(count < 100){
XSSFRow row = sheet1.getRow(count);
if (row == null) {
row = sheet1.createRow(count);
for (int i = 0; i < 8; i++) {
if (row.getCell(i) == null) {
row.createCell(i);
}
}
}
row.getCell(0).setCellValue(String.valueOf("id-" + count));
row.getCell(1).setCellValue(String.valueOf(time1));
row.getCell(2).setCellValue(String.valueOf(time2));
row.getCell(3).setCellValue(String.valueOf(time3));
row.getCell(4).setCellValue(String.valueOf(time4));
row.getCell(5).setCellValue(String.valueOf(time5));
row.getCell(6).setCellValue(String.valueOf(time6));
row.getCell(7).setCellValue(String.valueOf(time7));
count++;
}
//写入文件
FileOutputStream out = new FileOutputStream("D:\\输出数据文件" + UUID.randomUUID().toString().replaceAll("-","") + ".xlsx");
excel.write(out);
excel.close();
in.close();
2.对模板写入数据,并给前端下载。
前面代码都一样,最后写入文件那里改一下
改为:其实就是写出到通过response.getOutputStream()得到ServletOutputStream,写出到这里。切记关闭流,和栈一样,先定义的后关闭。
//写出
ServletOutputStream outputStream = response.getOutputStream();
excel.write(outputStream);
excel.write(out);
in.close();
3.生成excel,保存到项目的recourse目录下,关于如何输出到前端,看上面就好。
生成excel:
//初始化
// 创建Excel文件
XSSFWorkbook wk = new XSSFWorkbook();
// 创建一张工作表
XSSFSheet sheet = wk.createSheet("info");
// 设置列宽
sheet.setColumnWidth(0, 5000);
// 创建一行(表头)
XSSFRow row = sheet.createRow(0);
// 创建第一行的首部单元格,并设置值,可以不设置,看自己实际情况,但是需要创建单元格。
for (int i = 0; i < length; i++) {
row.createCell((short) i - 1).setCellValue();
}
//将文件输出到resource的templateFiles文件夹下。
String s1 = XXXapplication.GetSourcePath()+ "templateFiles\\";
FileOutputStream out = new FileOutputStream(new File(s1 + "fileName.xlsx"));
wk.write(out);
out.close();
wk.close();
关于为何一定要设置单元格,参考文章java使用poi操作excel时报错:“org.apache.poi.xssf.usermodel.XSSFRow.getCell(int)“ because “row“ is null-CSDN博客