package com.dingzhuo.energy.project.reportForm.domain; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.List; import com.dingzhuo.energy.framework.config.RuoYiConfig; import org.apache.commons.io.FileUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /** * 焦化工序综合能耗 定制的 生成Excel */ public class JtZhnhExcel { /*public static void main(String[] args) { JtZhnhExcel a = new JtZhnhExcel(); String downLoadFilePaht = a.writeExcel("e:\\jhnhrep.xlsx",new Object()); System.out.println("生成后可以下载的文件路径:"+downLoadFilePaht); }*/ /** * 生成焦炭综合能耗Excel报表 * @param modeFilePath 要生成的Excel使用的模板绝对路径 * @param list 这个就是一张报表的 JavaBean */ public String writeExcel(String modeFilePath, List list) { OutputStream out = null; // 生成的下载文件路径 String fownLoadFileName = System.currentTimeMillis()+ "_zhnhRep.xlsx"; //String fownLoadFileName = "jhnhrep" + ".xlsx"; //这个方法要注意下 只有在boot中启动才有效,如果单独run这个类做测试,要改下里面的内容 String downLoadFilePath = getAbsoluteFile(fownLoadFileName); // 读取Excel文档 File finalXlsxFile = createNewFile(modeFilePath,downLoadFilePath);//复制模板, Workbook workBook = null; try { workBook = getWorkbok(finalXlsxFile); } catch (IOException e1) { e1.printStackTrace(); } // sheet 对应一个工作页 插入数据开始 ------ Sheet sheet = workBook.getSheetAt(0); Row row2 = sheet.getRow(2);// 获取到第3行 Cell B3 = row2.getCell(1);// 3行 2列 投入_折标系数 B3.setCellValue(list.get(0).getTrRljmZb()); // 这里就改成jtzhnhBean.get值就行,然后又几行写几行的数据就完活了 Cell C3 = row2.getCell(2);// 3行 3列 投入_实物量 C3.setCellValue(list.get(0).getTrRljmSwl()); Cell D3 = row2.getCell(3);// 3行 4列 投入_折标准煤 D3.setCellValue(list.get(0).getTrRljmZbzm()); Cell F3 = row2.getCell(5);// 3行 6列 产出_折标系数 F3.setCellValue(list.get(0).getCcJtZb()); Cell G3 = row2.getCell(6);// 3行 7列 产出_实物量 G3.setCellValue(list.get(0).getCcJtSwl()); Cell H3 = row2.getCell(7);// 3行 8列 产出_折标准煤 H3.setCellValue(list.get(0).getCcJtZbzm()); Row row3 = sheet.getRow(3);// 获取到第4行 Cell B4 = row3.getCell(1);// 4行 2列 投入_折标系数 B4.setCellValue(list.get(0).getTrDianZb()); // 这里就改成jtzhnhBean.get值就行,然后又几行写几行的数据就完活了 Cell C4 = row3.getCell(2);// 4行 3列 投入_实物量 C4.setCellValue(list.get(0).getTrDianSwl()); Cell D4 = row3.getCell(3);// 4行 4列 投入_折标准煤 D4.setCellValue(list.get(0).getTrDianZbzm()); Cell F4 = row3.getCell(5);// 4行 6列 产出_折标系数 F4.setCellValue(list.get(0).getCcJyZb()); Cell G4 = row3.getCell(6);// 4行 7列 产出_实物量 G4.setCellValue(list.get(0).getCcJySwl()); Cell H4 = row3.getCell(7);// 4行 8列 产出_折标准煤 H4.setCellValue(list.get(0).getCcJyZbzm()); Row row4 = sheet.getRow(4);// 获取到第5行 Cell B5 = row4.getCell(1);// 5行 2列 投入_折标系数 B5.setCellValue(list.get(0).getTrShuiZb()); // 这里就改成jtzhnhBean.get值就行,然后又几行写几行的数据就完活了 Cell C5 = row4.getCell(2);// 5行 3列 投入_实物量 C5.setCellValue(list.get(0).getTrShuiSwl()); Cell D5 = row4.getCell(3);// 5行 4列 投入_折标准煤 D5.setCellValue(list.get(0).getTrShuiZbzm()); Cell F5 = row4.getCell(5);// 5行 6列 产出_折标系数 F5.setCellValue(list.get(0).getCcCbZb()); Cell G5 = row4.getCell(6);// 5行 7列 产出_实物量 G5.setCellValue(list.get(0).getCcCbSwl()); Cell H5 = row4.getCell(7);// 5行 8列 产出_折标准煤 H5.setCellValue(list.get(0).getCcCbZbzm()); Row row5 = sheet.getRow(5);// 获取到第6行 Cell B6 = row5.getCell(1);// 6行 2列 投入_折标系数 B6.setCellValue(list.get(0).getTrZqZb()); // 这里就改成jtzhnhBean.get值就行,然后又几行写几行的数据就完活了 Cell C6 = row5.getCell(2);// 6行 3列 投入_实物量 C6.setCellValue(list.get(0).getTrZqSwl()); Cell D6 = row5.getCell(3);//6行 4列 投入_折标准煤 D6.setCellValue(list.get(0).getTrZqZbzm()); Cell F6 = row5.getCell(5);// 6行 6列 产出_折标系数 F6.setCellValue(list.get(0).getCcMqZb()); Cell G6 = row5.getCell(6);// 6行 7列 产出_实物量 G6.setCellValue(list.get(0).getCcMqSwl()); Cell H6 = row5.getCell(7);// 6行 8列 产出_折标准煤 H6.setCellValue(list.get(0).getCcMqZbzm()); Row row6 = sheet.getRow(6);// 获取到第7行 Cell F7 = row6.getCell(5);// 7行 6列 产出_折标系数 F7.setCellValue(list.get(0).getCcDianZb()); Cell G7 = row6.getCell(6);// 7行 7列 产出_实物量 G7.setCellValue(list.get(0).getCcDianSwl()); Cell H7 = row6.getCell(7);// 7行 8列 产出_折标准煤 H7.setCellValue(list.get(0).getCcDianZbzm()); Row row7 = sheet.getRow(7);// 8获取到第3行 Cell F8 = row7.getCell(5);// 8行 6列 产出_折标系数 F8.setCellValue(list.get(0).getCcZqZb()); Cell G8 = row7.getCell(6);// 8行 7列 产出_实物量 G8.setCellValue(list.get(0).getCcZqSwl()); Cell H8 = row7.getCell(7);// 8行 8列 产出_折标准煤 H8.setCellValue(list.get(0).getCcZqZbzm()); Row row8 = sheet.getRow(8);// 获取到第9行 Cell B9 = row8.getCell(3);// 9行 2列 投入_折标系数 B9.setCellValue(list.get(0).getTrZbzm()); // 这里就改成jtzhnhBean.get值就行,然后又几行写几行的数据就完活了 Cell F9 = row8.getCell(6);// 9行 6列 产出_折标系数 F9.setCellValue(list.get(0).getCcZbzm()); Row row9 = sheet.getRow(9);// 获取到第10行 Cell C9 = row9.getCell(3);// 10行 2列 投入_折标系数 C9.setCellValue(list.get(0).getJhbm()); // 这里就改成jtzhnhBean.get值就行,然后又几行写几行的数据就完活了 Cell G9 = row9.getCell(6);// 10行 6列 产出_折标系数 G9.setCellValue(list.get(0).getZhnh()); //插入数据结束 try { out = new FileOutputStream(finalXlsxFile); workBook.write(out); } catch (Exception e1) { e1.printStackTrace(); } finally { if (out != null) { try { out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } } return fownLoadFileName; } /** * 获取Excel工作簿 * * @param file * @return * @throws IOException */ public static Workbook getWorkbok(File file) throws IOException { Workbook wb = null; FileInputStream in = new FileInputStream(file); wb = new XSSFWorkbook(in); return wb; } /** * 根据模板新建文件并返回文件流用于填充数据 * @param path 这个是模板路径 * @param downLoadFilePath 这个是生成带数据的报表 下载路径 * @return */ private static File createNewFile(String path,String downLoadFilePath) { // 读取模板,并赋值到新文件************************************************************ // 文件模板路径 File file = new File(path); if (!file.exists()) { System.out.println("原模板文件不存在"); } // 写入到新的excel File newFile = new File(downLoadFilePath); try { newFile.createNewFile(); // 复制模板到新文件 FileUtils.copyFile(file, newFile); } catch (Exception e) { e.printStackTrace(); } return newFile; } /** * 获取下载路径 * * @param filename 文件名称 */ private String getAbsoluteFile(String filename) { //Web运行的方法 String downloadPath = RuoYiConfig.getDownloadPath() + filename; //main方法独立运行测试 //String downloadPath = "e:\\"+filename; File desc = new File(downloadPath); if (!desc.getParentFile().exists()) { desc.getParentFile().mkdirs(); } return downloadPath; } }