# office-all
**Repository Path**: dlw-study-java/office-all
## Basic Information
- **Project Name**: office-all
- **Description**: 提供简单的office类型文件的操作api,提高团队开发效率
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 1
- **Created**: 2020-09-10
- **Last Updated**: 2022-07-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
##作者联系方式:qq: 983546945
### **office sdk 使用说明文档**
#### 1.excel sdk使用文档
##### 1.1 excel模板下载
支持多sheet模板下载,每个sheet数据封装到ExcelSheetModel对象。
```
使用列子:
final ExcelSheetModel
model1 = new ExcelSheetModel<>();
model1.setSheetName("地址信息");
model1.setClazz(Address.class);
model1.setDropDownHandler(new MyDropDownHandler());
final ExcelSheetModel model2 = ExcelSheetModel.builder()
.sheetName("人员信息")
.index(1)
.clazz(Person.class)
.build();
final ExcelSheetModel model3 = ExcelSheetModel.builder()
.index(2)
.clazz(Demo.class)
.dropDownHandler(new MyDropDownHandler())
.build();
ResponseUtil.initExcelResponse(response,"excel测试模板", FileType.ExcelType.XLSX);
ExcelTemplateExporter.template(response.getOutputStream(),model1,model2,model3);
属性:
- sheetName:设置sheet的名称
- clazz:生成模板表头对象的class
- index:用于多个sheet进行排序,升序
- dropDownHandler:用于设置下拉框数据接口,需自定义类实现此接口填充数据,支持单下拉框和级联下拉框
- data:导出时需要的数据
提供的注解:
- @ExcelSheet:用于设置sheet的属性。
- name: 设置sheet的名称,当使用了此注解设置名称可以不设置sheetName属性,如果两个都设置了以sheetName为准。
- headConfigPath:配置excel head的配置文件路径,多个用 ','号隔开
- prefix:配置读取配置文件的前缀,默认是'${' ,可以自定义
- suffix: 读取配置文件后缀默认为'}'
前缀和后缀须同时配置且非空
eg:${key} 读取excel表头, 配置文件格式:key=表头1,表头1-1
使用:@ExcelSheet(name = "人员信息",headConfigPath = {"head1.properties", "head2.properties"},prefix = "@{",suffix = "}")
- @ExcelCell:用于设置每个单元格属性。
- name:设置表头名称,支持从配置文件读取,默认读取方式:${key},key即为配置文件的key
excel 表头信息须配置在工程META-INF/excel_head.properties文件中.
- index:表头的顺序
- width:可设置每个单元格宽度,默认为20
- @ExcelHeadStyle:设置表头样式
- fillPatternType:颜色填充类型,默认FillPatternType.SOLID_FOREGROUND
- fillBackgroundColor:单元格前景填充颜色 默认为IndexedColors.YELLOW
下拉框:
需调用方自己实现此接口设置数据。
eg:
public class MyDropDownHandler implements DropDownHandler {
@Override
public DropDownModel dropDown(ExcelHead excelHead) {
DropDownModel drop = new DropDownModel();
//级联下拉
if (excelHead.getFieldName().equals("city")) {
drop.setDependFieldName("province");
Map> cascadeDropDownMap = new HashMap<>();
cascadeDropDownMap.put("四川",Arrays.asList("成都","自贡"));
cascadeDropDownMap.put("云南",Arrays.asList("昆明","大理"));
drop.setCascadeDropDownMap(cascadeDropDownMap);
}
if (excelHead.getFieldName().equals("area")) {
drop.setDependFieldName("city");
Map> cascadeDropDownMap = new HashMap<>();
cascadeDropDownMap.put("成都",Arrays.asList("高新","金牛"));
cascadeDropDownMap.put("自贡",Arrays.asList("大安"));
cascadeDropDownMap.put("昆明",Arrays.asList("昆明1区"));
cascadeDropDownMap.put("大理",Arrays.asList("丽江"));
drop.setCascadeDropDownMap(cascadeDropDownMap);
}
//单下拉框
if (excelHead.getFieldName().equals("age")) {
drop.setSingleDropDownList(Arrays.asList("10","20","22","23"));
}
return drop;
}
}
- dependFieldName:表示该列依赖的字段名
- cascadeDropDownMap:级联下拉数据
- singleDropDownList:单下拉框数据
下载模板提供两个api:
1. ExcelTemplateExporter.template(OutputStream outputStream, ExcelSheetModel>... excelSheetModel)
2. ExcelTemplateExporter.template(OutputStream outputStream, FileType.ExcelType excelType,ExcelSheetModel>... excelSheetModel)
```
##### 1.2 excel 数据导出
导出与模板下载基本一致,只需再加上导出数据即可。
```
导出提供的api:
1. ExcelExporter.export(OutputStream outputStream, ExcelSheetModel>... excelSheetModel)
2. ExcelExporter.export(OutputStream outputStream,FileType.ExcelType excelType, ExcelSheetModel>... excelSheetModel)
```
##### 1.3 excel 导入
```
提供的api:
1. ExcelImporter.read(InputStream inputStream,Class clazz) //根据@ExcelSheet设置的名称读取指定的sheet
2. ExcelImporter.read(InputStream inputStream,Class clazz,String sheetName) //根据sheetName读取指定的sheet
3. ExcelImporter.read(InputStream inputStream,String className,String sheetName) //根据sheetName读取指定的sheet
4. ExcelImporter.read(InputStream inputStream,String className) //根据@ExcelSheet设置的名称读取指定的sheet
5. ExcelImporter.read(InputStream inputStream,List> classes)//根据@ExcelSheet设置的名称读取指定的sheet,可读取多个sheet
```
#### 2.word sdk使用文档
##### 2.1 word导出
基于poi-tl开发,可参考[官方文档](http://deepoove.com/poi-tl/)
```
提供的注解:作用于字段
- @WordText:表示为文本类型
- @WordPicture:表示图片类型,
- width:设置图片宽度 默认200
- height: 设置图片高度 默认200
- format: 设置图片格式 默认png
- @WordList: 表示为列表类型
- format:列表的格式 默认为0
列表格式 对应关系如下
0 -> FMT_BULLET //● ● ●
1 -> FMT_DECIMAL //1. 2. 3.
2 -> FMT_DECIMAL_PARENTHESES //1) 2) 3)
3 -> FMT_LOWER_LETTER //a. b. c.
4-> FMT_LOWER_ROMAN //i ⅱ ⅲ
5 -> FMT_UPPER_LETTER //A. B. C.
6 -> FMT_UPPER_ROMAN //I. II. III.
- @WordLoopTable:表示固定表格类型,适用于模板有表结构只需循环填充内容
- @WordMiniTable:表示动态表格类型,适用于没有表结构,根据自己指定表头生成表格
- header:表头
- @Name:此注解是第三方jar提供
- value:此属性设置字段别名,对应于模板填充的名称 eg:@Name("age") 对应 {{age}}
word模板填充内容占位符如下:
- 文本 {{var}}
- 图片 {{@var}}
- 列表 {{*var}}
- 动态表格 {{#var}}
- 固定表格 {{address}}省份 | 城市
[province] | [city]
- 文档 {{+var}}
var表示需要填充内容的字段名称或字段别名,需自己定义
使用样例:
@GetMapping("/word/export")
public void word(HttpServletResponse response) throws Exception {
final Person person = person(); //1
final Map map = WordDataWrapper.wrap(person); //2
ResponseUtil.initWordResponse(response,"word导出", FileType.wordType.DOC); //3
FileInputStream inputStream = new FileInputStream(new File("C:\\Users\\ASUS\\Desktop\\word.doc")); //4
WordExporter.exportWord(map,inputStream,response.getOutputStream()); //5
}
1.准备导出的数据
2.包装数据,SDK会转换注解的类型为word所需类型。如果导出的类型比较单一,只有文本类型,可跳过这步。
3.指定导出word文件名称和类型 doc和docx
4.获取word模板,可以在项目classpath,也可通过网络下载。
5.导出word文件。
```
#### 3.pdf sdk使用文档
##### 3.1 pdf导出
可根据制定的PDF模板导出或通过数据动态导出
```
提供的注解:
- @PdfTable:设置PDF导出实体的属性
- title:pdf table 标题
- titleFontType:标题字体类型 默认加粗 PdfFontType.BOLD
- titleSize:标题字体大小 -1表示默认值 如果不使用默认值则设置的值必须大于0
字体大小 此属性配合titleFontType一起使用时,如果titleSize=-1表示使用titleFontType的默认size值,
否则使用titleSize属性值设置字体大小
- titleColor: 设置标题颜色
- headFontType:表头字体类型 默认PdfFontType.NORMAL
- headSize:-1表示默认值 如果不使用默认值则设置的值必须大于0
字体大小 此属性配合headFontType一起使用时,如果headSize=-1表示使用headFontType的默认size值,
否则使用headSize属性值设置字体大小
- headColor:设置表头颜色
- totalWidth:总宽度 表示表格总宽度 如果不是固定宽度模式则可以不设置
- isLockWidth:是否固定宽度 默认不固定 自适应宽度 固定宽度需自己控制宽度
如果为true则totalWidth属性值必须大于0
- isHead: 是否有表头 默认有
- @PdfCell: 设置pdf单元格样式
- name:表示列中文名 用于表头 当设置为有表头的时候name不能为空 必须保持表头与列字段数相等
- index:列的索引 表示表头顺序 从0开始
- width: 列的宽度 每列占总宽度的比列
- cellType: 单元格类型 默认文本 PdfCellType.TEXT
- fontType: 单元格字体类型 默认普通文本 PdfFontType.NORMAL
- size:-1表示默认值 如果不使用默认值则设置的值必须大于0
字体大小 此属性配合fontType一起使用时,如果size=-1表示使用fontType的默认size值,
否则使用size属性值设置字体大小
- cellColor:设置单元格颜色
使用样例:
根据模板导出pdf:
@GetMapping("/pdf")
public void pdf(HttpServletResponse response) throws Exception {
Map map = new HashMap<>();
map.put("name","dlw");
map.put("age", 22); //1
ResponseUtil.initPdfResponse(response,"pdf模板导出测试");//2
PdfTemplateExporter.exportPdfByTemplate(map, "template/pdf/test.pdf",2,response.getOutputStream());//3
}
1.准备导出数据
2,设置导出pdf文件名
3.导出,指定模板路径或提供远程网络下载模板的流,指定模板的页数。
动态导出pdf:
@GetMapping("/pdf/export")
public void pdfExport(HttpServletResponse response) throws Exception {
List addresses = new ArrayList<>();
List people = new ArrayList<>();
for (int i = 0;i<10;i++) {
people.add(new Person("德莱文" + i,i)); //1
}
final List models = PdfTableModel.builder()
.of(1,Address.class, addresses)
.of(2,Person.class, people)
.list(); //2
ResponseUtil.initPdfResponse(response,"pdf导出测试");//3
PdfExporter.export(models,response.getOutputStream());//4
}
1.获取导出的数据
2.构造PdfTableModel数据,需指定对个PDFtable之间的顺序、导出模型的class及导出数据。
3.设置导出pdf文件名称
4.导出pdf
```