当前位置:网站首页>Project practice | excel export function

Project practice | excel export function

2022-07-05 09:26:00 Going_ man

Project practice | Excel Export function

Official documents : About Easyexcel | Easy Excel (alibaba.com)

One 、Excel Template fill export

scene : Export the teaching plan data of each teacher to each teacher named sheet

difficulty : According to the teacher data , Generate multiple named after teachers sheet Of Excel Template to fill ?

Solution :

1、 Generate Excel Template input IO flow :

①pom.xml To configure

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.2.6</version>
    </dependency>
	<dependency>
	  <groupId>org.apache.poi</groupId>
	  <artifactId>poi</artifactId>
	  <version>3.17</version>
	</dependency>
	<dependency>
	  <groupId>org.apache.poi</groupId>
	  <artifactId>poi-ooxml</artifactId>
	  <version>3.17</version>
	</dependency>

② Pass the foundation Excel Templates , Generate multiple... Dynamically sheet Of Excel Template flow

Basics Excel Templates :

 Basics Excel Templates
Generate multiple... Dynamically sheet Of excel Code of template flow :

private InputStream getTemplateIn(String fileName,List<TeachPlanList> teachPlanLists) throws IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    // There is only one original template sheet, adopt poi Copy what you need sheet Number of templates 
    XSSFWorkbook workbook = new XSSFWorkbook(new ClassPathResource(fileName).getInputStream());
    // Set the first of the template sheet The name of 
    String sheet =teachPlanLists.get(0).getUserName()+"-"+ teachPlanLists.get(0).getUserId();
    workbook.setSheetName(0,sheet);
    for (int i = 1; i < teachPlanLists.size(); i++) {
        // Copy template , Get the first i individual sheet
        workbook.cloneSheet(0,teachPlanLists.get(i).getUserName()+"-"+teachPlanLists.get(i).getUserId());
    }
    // Write into the stream 
    workbook.write(bos);
    byte[] bArray = bos.toByteArray();
    return new ByteArrayInputStream(bArray);
}

2、 The generated Excel Input stream as template , Data filling , export Excel

public void exportTeachingPlanList(String schoolID, HttpServletResponse response) throws IOException {
    List<TeachPlanList> teachPlanLists =teachPlanMgrBaseInfoMapper.selectTeachPlanBySchoolId(schoolID);
    String fileName = URLEncoder.encode(" Statistics of personal teaching plan database ", "UTF-8");
    response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");

    InputStream is = getTemplateIn("excel/TeachPlanData.xlsx",teachPlanLists);
    ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
        .withTemplate(is)
        .registerConverter(new FileSizeConverter())
        .build();

    for (int i = 0; i < teachPlanLists.size(); i++) {
        WriteSheet writeSheet = EasyExcel.writerSheet(i).build();
        excelWriter.fill(teachPlanLists.get(i).getTeachPlanExcelInfoList(), writeSheet);
        // Fill in individual statistics 
        Map<String, Object> map = new HashMap<>(2);
        map.put("userName", teachPlanLists.get(i).getUserName());
        map.put("countTeachPlan", teachPlanLists.get(i).getCountTeachPlan());
        // Fill in the list data 
        excelWriter.fill(map, writeSheet);
    }
    excelWriter.finish();
}

3、 Export results display :

 Insert picture description here

Two 、 Written by objects Excel

scene : Statistics and export data into documents

1、 structure Excel Export object

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ShareTpExcelInfo {
    

    @ExcelProperty(" Sharer name ")
    @ColumnWidth(15)
    private String sharerName;

    @ExcelProperty(" Number of lesson plans shared ")
    @ColumnWidth(15)
    private Integer sharerCount;

    @ExcelProperty(" The number of times shared lesson plans have been used ")
    @ColumnWidth(15)
    private Integer useCount;

    @ExcelProperty(" The average number of times shared lesson plans are used ")
    @ColumnWidth(15)
    @JSONField(name="AvgUseCount")
    private Double avgUseCount;

}

2、 Export to Excel

public void exportShareTpExcel(HttpServletResponse response, List<ShareTpExcelInfo> list) throws IOException {
    
   response.setContentType("application/vnd.ms-excel");
   response.setCharacterEncoding("utf-8");
   String fileName = URLEncoder.encode(" Share teaching plan database data " + System.currentTimeMillis(), String.valueOf(StandardCharsets.UTF_8));
   response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
   EasyExcel.write(response.getOutputStream(), ShareTpExcelInfo.class).sheet(" Lesson plan data ").doWrite(list);

}

3、 The results derived
 Insert picture description here

原网站

版权声明
本文为[Going_ man]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/186/202207050916312523.html