Java实现excel导出功能

1.引用jxls依赖, 排除不需要的依赖。

 
            net.sf.jxls
            jxls-core
            1.0.6
            
                
                    org.apache.poi
                    poi
                
                
                    org.apache.poi
                    poi-ooxml
                
                
                    org.apache.poi
                    poi-ooxml-schemas
                
                
                    commons-beanutils
                    commons-beanutils
                
                
                    commons-collections
                    commons-collections
                
                
                    commons-logging
                    commons-logging
                
            
        

2. 实现类中实现。

public void downloadTemplate(HttpServletRequest request, HttpServletResponse response, ImportTemplateCondition templateCondition) {
        // 第三方导入模板文件名称 InitialCostImportTemplate_zh-CN.xlsx
        String templateFileName = "InitialCostImportTemplate_" + request.getLocale().toLanguageTag() + ".xlsx";

        try (
                // 模板文件输入流
                //InputStream templateFileInputStream = new FileInputStream("/home/template/path/" + templateFileName);

                //TODO 仅供本地测试使用
                InputStream templateFileInputStream = new FileInputStream("E:/resources/templates/" + templateFileName);
                // 响应输出流
                OutputStream responseOutputStream = response.getOutputStream();
        ) {
            // xls 转换器
            XLSTransformer transformer = new XLSTransformer();
            // 数据map
            Map dataMaps = new HashMap<>(8);

            // 物业项目ID
            Long projectId = templateCondition.getProjectId();
            if (null == projectId) {
                error(logger, "物业项目是必须的");
                throw new ValidateFailureException(SYS_MODULE_HAP_REC, "物业项目是必须的");
            }

            // 查询物业项目数据
            Project project = this.projectService.selectByPrimaryKey(null,
                    Project.PROTOTYPE.prototypeClone().setProjIdR(projectId));
            // 判断是否查询到物业项目
            if (null == project) {
                error(logger, "当前选择的物业项目不存在");
                throw new ProcessErrorException(SYS_MODULE_HAP_REC, "当前选择的物业项目不存在");
            }

            // 查询需要填充的数据
            // 物业项目编码
            dataMaps.put("projectCode", project.getProjCode());
            // 物业项目名称
            dataMaps.put("projectName", project.getProjName());

            // 填充模板数据
            Workbook workBook = transformer.transformXLS(templateFileInputStream, dataMaps);

            // 设置响应结果的头信息
            response.setContentType("application/x-download;charset=utf-8");
            response.addHeader("Content-Disposition", "attachment;filename=[" + project.getProjCode() + "]" + templateFileName);

            // 输出结果
            workBook.write(responseOutputStream);
            responseOutputStream.flush();
        } catch (FileNotFoundException e) {
            error(logger, "第三方导入模板文件未找到:" + templateFileName, e);
            throw new ProcessErrorException(SYS_MODULE_HAP_REC, "第三方导入模板文件未找到:" + templateFileName, e);
        } catch (IOException e) {
            error(logger, "文件流异常", e);
            throw new ProcessErrorException(SYS_MODULE_HAP_REC, "文件流异常", e);
        } catch (InvalidFormatException e) {
            error(logger, "第三方导入模板转换异常", e);
            throw new ProcessErrorException(SYS_MODULE_HAP_REC, "第三方导入模板转换异常", e);
        }
    }

3. 入参实体

/**
 * 下载模板请求参数
 * @author xxx
 */
@Data
public class ImportTemplateCondition implements Serializable {

    private static final long serialVersionUID = 4564033623863237721L;
    @NotNull
    private Long projectId;
}

 

你可能感兴趣的:(Java实现excel导出功能)