# excel-utils **Repository Path**: evenliew/excel-utils ## Basic Information - **Project Name**: excel-utils - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-01-28 - **Last Updated**: 2021-01-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # excel-utils #### 介绍 * 通过导入一个模板, 和与模板中匹配的数据源, 进行数据替换; * 现支持普通键值数据{{key}}, 和表格数据{{#key#}}两种; * 不支持直接实例化,通过builder静态方法获得一个构建模板和数据的对象; * 通过该对象build()方法构建TemplateExcelUtils对象,调用export方法即可导出。 #### 软件架构 基于POI开发 #### 使用 ##### 第一步:maven依赖 ```xml 3.15 org.apache.poi poi-scratchpad ${poi.version} org.apache.poi ooxml-schemas 1.3 org.apache.poi poi-ooxml ${poi.version} org.apache.poi poi-ooxml-schemas ``` ##### 第二步:导入代码 > * 主要代码包括两个Java类(TemplateExcelUtils.java 和 Table.java) > * TemplateExcelUtils.java为只要逻辑代码,建议放在utils包下 > * Table.java为添加表数据的实体类,建议放在common包下面 ##### 第三步: 使用 1. 在excel表格中使用{{}}和{{##}}两种占位符, 保存Excel(D:template.xlsx) | {{name}} | {{title}} | | | :----------: | :-------: | ---- | | {{#table1#}} | | | 2. 调用构建类,导入模板 ```java //通过文件系统的方式, 最大扫描行,最大扫描列 TemplateExcelUtils.builder() .setFileSystemTemplate("D:/template.xlsx", 2, 3); //在web环境下的方式, 最大扫描行,最大扫描列 TemplateExcelUtils.builder(). .setClassTemplatePath("/template.xlsx", 2, 3); ``` 3. 添加普通键值数据 ```java //添加键值数据 Map data = new HashMap<>(); data.put("name", "xiaoming"); data.put("title", "The title"); TempalteExcelUtils.builder(). .setFileSystemTemplate("D:/template.xlsx", 2, 3) .addValueData(data); ``` 4. 添加表格数据 Table.java ```java public class Table{ //键序列, 通过这个序列依次再rowDataList中取值 private List keySequence; //表头数据 private List headers; //行数据 private List> rowDataList; public Table(List keySequence, List headers, List> rowDataList) { this.keySequence = keySequence; this.headers = headers; this.rowDataList = rowDataList; } public Table(List keySequence, List> rowDataList) { this.keySequence = keySequence; this.rowDataList = rowDataList; } /** * getter/setter */ } ``` 添加表格数据 ~~~java //...... //实例表格数据 List> rows = new ArrayList<>(); Map row = new HashMap<>(); row.put("field1", "data1"); row.put("field2", "data2"); rows.add(row); Table table = new Table(Arrays.asList("field1", "field2"), rows); TempalteExcelUtils.builder(). .setFileSystemTemplate("D:/template.xlsx", 2, 3) .addValueData(data) .addMergerTableData("table1", table); /** * 一次调用addMergerTableData 添加表数据,则是将这些表格数据合并; * 多次调用addMergerTableData 添加表数据,则是分别添加。 * addMergerTableData(String tableName, Table... table); */ ~~~ 5. 调用build() 构建excel ```java //... //调用build构建excel TempalteExcelUtils.builder(). .addValueData(data); .addMergerTableData("table1", table); .build() ``` 6. 调用export() 导出Excel ```java //... OutputStream out = new FileOutputStream("D:/new.xlsx"); TempalteExcelUtils.builder(). .addValueData(data); .addMergerTableData("table1", table); .build() .export(out); ``` 7. 最终效果 | xiaoming | The title | | | :------: | :-------: | :--: | | data1 | data2 | | #### web环境 > 在web环境中将 TemplateExcelUtils.java中的注释打开,导入需要的包