# excel-tool **Repository Path**: jinbo1/excel-tool ## Basic Information - **Project Name**: excel-tool - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-11-13 - **Last Updated**: 2024-02-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、注解版导出 ## (1)主要功能: 1、支持单sheet表格导出功能 2、支持多sheet导出功能(每个sheet可以是不同对象) 3、支持注解完成表头内容的设置,宽度设置,高度设置(不设自适应高度) 4、支持注解完成日期类型格式化(不设置检查出是日期类型自动格式化为YYYY-MM-dd) 5、支持注解完成空时显示默认值功能 6、支持注解完成sheet名称设置,不设置默认为表格名称,出现重复名称,设置为名称+序号。 7、支持动态导出,导出选择列或者排除所选列 8、支持导出文件到指定的路径下 ## (2)未来规划: 1、支持复杂表头类型表格导出 2、支持筛选条件动态导出功能(导出数据的同时,想带时间、案由等筛选条件需求) ## (3)浏览器导出表格 ### 1、引入坐标 ``` com.thunisoft excel-tool 0.0.9-SNAPSHOT ``` ### 2、在要导出对象类加@Excel注解 #### 属性上的@Excel注解(必选项) name = "日志时间" : 表头名称(必填) column = 0 : 列号,从0开始(必填,根据表格展示顺序设置) width = 150 :列宽 (可选默认为30) dateFormat = "YYYY-MM" :日期类型格式化(可选,不设置检查出是日期类型默认格式化为 YYYY-MM-dd ) defaultValue ="查询" : 空时默认值(可选) high = 100 :表头高度 (可选,不设置自适应高度) #### 类上的@Excel注解 (可选项) 类上的注解目前只有名称,为sheet名称,不指定默认为表格名称 ### 例子: ``` @Data @Excel(name="日志") public class OperationLog { @ApiModelProperty("Id") private String id; @Excel(name = "日志时间",column = 0,width = 150,dateFormat = "YYYY-MM") @ApiModelProperty("日志时间") private Date logTime; @Excel(name = "账号",column = 1) @ApiModelProperty("账号") private String account; @Excel(name = "所在单位",column = 2) @ApiModelProperty("所在单位") private String corp; @Excel(name = "日志类型",column = 3) @ApiModelProperty("日志类型") private String logType; @Excel(name = "操作",column = 4 ,defaultValue ="查询") @ApiModelProperty("操作") private String operation; } ``` ### 3、调导出方法 1. 多sheet导出方法 exportXls.export(HttpServletResponse response, List> excelDataList, String name); 2. 单sheet导出方法 exportXls.export(HHttpServletResponse response, ExcelData excelData, String name); 例子(多sheet,单sheet同理) ``` //注入 private final AnnotationExcelExport annotationExcelExport; public void exportTest(HttpServletResponse response){ List indicatorDetails = getIndicatorDetails(indicatorDetailList); //数据要导出的数据 ExcelData excelData = new ExcelData<>(); excelData.setClassType(IndicatorDetail.class); excelData.setData(indicatorDetails); caseRemoveSuspectName(param.getUnit(), excelData); //动态导出功能。没有此功能可以跳过此步 annotationExcelExport.export(response, excelData, param.getName()); } /** * 案件判断是否是案件,是案件导出对象中的嫌疑人姓名移除 * @param unit 单位(件/人) * @param excelData 表格数据 */ private void caseRemoveSuspectName(String unit, ExcelData excelData) { if(StringUtils.equals(unit, CalculationConsts.PIECE_UNIT)){ List columnName = new ArrayList<>(); columnName.add("suspectName"); ColumnInfo columnInfo = new ColumnInfo(); columnInfo.setColumnName(columnName); excelData.setColumnInfo(columnInfo); } } ``` ### 4、动态导出功能(可选) 动态导出有2中方式,一种是排除不想要的字段,另一种方式是包含想要的字段。默认是排除如上面例子所示 ,排除suspectName字段位例子 (1) 排除字段 ``` ExcelData excelData = new ExcelData<>() List columnName = new ArrayList<>(); columnName.add("suspectName"); ColumnInfo columnInfo = new ColumnInfo(); columnInfo.setColumnName(columnName); excelData.setColumnInfo(columnInfo); ``` (2)要包含的字段 ``` ExcelData excelData = new ExcelData<>() List columnName = new ArrayList<>(); columnName.add("suspectName"); ColumnInfo columnInfo = new ColumnInfo(); columnInfo.setColumnName(columnName); columnInfo.setIsExclude(false); //是否排除设置成包含。默认是排除 excelData.setColumnInfo(columnInfo); ``` ## (4)导出表格文件到指定路径 ``` annotationExcelExport.saveFile(excelData, filePath,fileName); ``` - excelData: ExcelData 表格数据,跟上方构建方式相同 - filePath :要导出的路径,没有则新建 - fileName :导出文件名 # 二、模板版本导出 ## (1)主要功能: 1、对于复杂表头,会花费大量的时间去写合并信息及表头信息,为了简化这部分时间设计一种模板方式,即不需要关注复杂表头,只需要灌入数据,就可以实现复杂表头的表格的导出功能。 2、同时也添加了动态数据设置,应用场景主要为导出数据的同时要带筛选时间,案由等。 3、新增模板背景色样式。 ## (2)未来版本规划: 1、添加动态导出功能 2、支持通过类方式的导出功能 3、添加单sheet导出模式,简化设置流程 ## (3)使用步骤 ### 1、引入坐标 ``` com.thunisoft excel-tool 0.0.9-SNAPSHOT ``` ### 2、添加表格模板(主要配置,见下面详情。模板例子见git里面的例子文件) #### (1)根据项目要求设置表头等信息可以参考例子表格。 1、必要条件 >>>:data_start(数据开始位子) >>>:data_end(程序结束位子) 2、可选条件 已 >>>: 开头自定义数据信息例子(>>>:time),作用是替换特殊数据(时间,案由等筛选条件,需要跟数据一起导出需求) #### (2)添加表格模板位子(可选) excel: tool: directory: xxxx ### 3、调导出方法 export(HttpServletResponse response, List data, String name) #### 例子: ``` /** * 表格导出第一个大表格 * @param response respose参数 * @param exportParam 要导的数据信息 * @param fileName 文件名称 */ public void tableExport(HttpServletResponse response, ExportParam exportParam, String fileName) { List> data = exportParam.getData(); //将数据变成行数据(List),根据自身需求构建数据对象 ExcelTemplateData excelTemplateData = new ExcelTemplateData(); excelTemplateData.setStandardData(data); Map specialData = new HashMap<>(1); specialData.put(">>>:name",exportParam.getName()); //构建特殊数据替换,这里要替换的是表里里面的名称 excelTemplateData.setSpecialData(specialData); List data = new ArrayList<>(); data.add(excelTemplateData); exportXls.export(response,data,fileName); } ``` # 三、读取导入表格数据 ### 1、引入坐标 ``` com.thunisoft excel-tool 0.0.9-SNAPSHOT ``` ### 2、注入ReadXlsData ``` @RequiredArgsConstructor(onConstructor = @__(@Autowired)) private final ReadXlsData readXlsData; ``` ### 3、传入流调用获取数据方法(多sheet数据,单sheet获取一个即可) ``` List> xlsData = readXlsData.getXlsData(inputStream); ```