# excel-converter-starter
**Repository Path**: yawensilence/excel-converter-starter
## Basic Information
- **Project Name**: excel-converter-starter
- **Description**: java对象的list与excel数据相互转化的 spring boot starter
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 4
- **Created**: 2019-01-27
- **Last Updated**: 2022-05-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# excel-converter-starter
#### 介绍
java对象的list与excel数据相互转化,适用于根据Excel模板填写数据并导入,以及将业务数据导出为Excel表格的场景
使用简单:
1. 导入时只需要将java对象的属性写在Excel模板的第一行,即可准确导入为java对象的list;
2. 导出时无需配置即可按照java对象的属性导出,若配置了属性对应的表头,即可显示配置的表头信息
#### 软件架构
软件架构说明
#### 安装教程
```xml
com.jvm123
excel-converter-starter
1.2.1
```
#### 使用说明
1. 将ExImporter或ExExporter注入使用即可
```java
@RestController
public class DemoExcelConvertController {
@Autowired
private ExImporter exImporter;
@Autowired
private ExExporter exExporter;
@GetMapping("test")
public List person() {
List peo = exImporter.convert("./企业人员汇总表.xlsx", Person.class);
System.out.println(peo);
return peo;
}
@GetMapping("test3")
public void test3(HttpServletResponse response) throws IOException {
Company c = new Company();
c.setAddress("address");
c.setAmount(0.1245D);
c.setDate(new Date());
c.setMoney(0.23123);
c.setName("yawn");
c.setId(12);
exExporter.export(Arrays.asList(c, c, c), "./export.xlsx");
response.addHeader("Content-Disposition","attachment;filename=export.xlsx");
exExporter.export(Arrays.asList(c, c, c), response.getOutputStream());
}
}
```
2. 如需要设置导入或导出的属性,可在application.yml文件中配置,如下:
```yaml
excel:
converter:
name: yawn
props-map:
default:
name-row-index: 0
comment-row-index: 1
first-data-row-index: 2
name-header-map:
id: ID
name: 名称
address: 地址
date: 日期
show-name-row: true
date-pattern: yyyy-MM-dd hh:mm:ss
company:
sheet-index: 1
name-row-index: 1
comment-row-index: 0
first-data-row-index: 2
last-data-row-index: -1
data-row-num: -1
start-column-index: 0
```
此配置示例重写了"default"配置以及添加了新的配置"company",使用这两个配置的属性进行导入或导出时,示例如下:
```java
@RestController
public class DemoExcelConvertController {
@Autowired
private ExImporter exImporter;
@Autowired
private ExExporter exExporter;
@GetMapping("test2")
public List test2() {
List companyList = exImporter.convert("./企业人员汇总表.xlsx", "company", Company.class);
System.out.println(companyList);
return companyList;
}
@GetMapping("test4")
public void test3(HttpServletResponse response) throws IOException {
Company c = new Company();
c.setAddress("address");
c.setAmount(0.1245D);
c.setDate(new Date());
c.setMoney(0.23123);
c.setName("yawn");
c.setId(12);
exExporter.export(Arrays.asList(c, c, c), "./export.xlsx");
response.addHeader("Content-Disposition","attachment;filename=export.xlsx");
exExporter.export(Arrays.asList(c, c, c), response.getOutputStream(), "company");
}
}
```
3. ExImporter导入调用的方法有:
```java
public List convert(String filePath, String propsName, Class tClazz);
public List convert(File file, String propsName, Class tClazz);
public List convert(InputStream is, String propsName, Class tClazz);
public List convert(String filePath, Class tClazz);
public List convert(File file, Class tClazz);
public List convert(InputStream is, Class tClazz);
```
其中propsName为要使用的yml文件中配置的转换属性的名称
4. ExExporter导出调用的方法有:
```java
public void export(List beanList, String pathFile);
public void export(List beanList, File file);
public void export(List beanList, OutputStream os);
public void export(List beanList, String pathFile, String propsName);
public void export(List beanList, File file, String propsName);
public void export(List beanList, OutputStream os, String propsName);
```
此外,还添加了将mapList导出的方法exportMapList(),参数与上面的方法类似。
## 5. 按照模板导出

* 如上图,将相应数据填入excel表格的相应位置,需要制作模板之后,进行以下配置:
```yaml
excel:
converter:
props-map:
grade:
sheet-index: 0
date-pattern: yyyy年MM月dd日
name-location-map:
name: B2
address: B4
age: D2
date: D15
gradeList:
project: b8
grade: c8
totalGrade:
project: B13
grade: C13
```
> sheet-index配置了需要导出到的sheet;name-location-map配置了属性与导出位置坐标的对应关系。
* 然后在代码中使用ExTplExporter导出即可,如下:
```java
@RestController
public class DemoExcelConvertController {
@Autowired
private ExTplExporter exTplExporter;
@GetMapping("test5")
public void test5(HttpServletResponse response) throws IOException {
Person person = createPerson();
response.addHeader("Content-Disposition","attachment;filename=grade.xlsx");
exTplExporter.export("成绩单模板.xlsx", person,
response.getOutputStream(), "grade");
}
}
```
#### 参与贡献
yawn Lau
#### change list
* v1.0
基本功能:导入、导出、按模板导出等
* v1.1
java对象导出excel时,增加对象子属性字段的支持(java对象子属性的字段也可以导出到excel中了)
* v1.2.0
修复spring单例引起的多次数据导出重复显示的问题
* v1.2.1
修复导入excel时的一些已知问题