@@ -143,7 +143,14 @@ public enum ExportOptionEnum { | |||||
projectRemarks(59, "备注"), | projectRemarks(59, "备注"), | ||||
processStatusName(60, "流程状态名称"), | processStatusName(60, "流程状态名称"), | ||||
processLaunchTime(61,"流程发起时间"), | processLaunchTime(61,"流程发起时间"), | ||||
processHandleTime(62,"流程处理时间"); | |||||
processHandleTime(62,"流程处理时间"), | |||||
projectStatusName(63,"项目状态名称"), | |||||
createOn(64,"创建时间"), | |||||
updateOn(65,"更新时间"); | |||||
private Integer code; | private Integer code; | ||||
private String desc; | private String desc; | ||||
@@ -140,12 +140,10 @@ public class ExcelDownUtil { | |||||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodeName(fileName) + ".xls"); | response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodeName(fileName) + ".xls"); | ||||
} | } | ||||
public static List<List<String>> getExportDatas(ToBeProcessedExportReq param, List<Project> projects) { | |||||
public static List<List<String>> getExportDatas(List<ExportOptionEnum> columnList, List<Project> projects) { | |||||
// 表体行数据集合 | // 表体行数据集合 | ||||
List<List<String>> rowList = Lists.newArrayList(); | List<List<String>> rowList = Lists.newArrayList(); | ||||
// 表体列数据集合 | |||||
List<ExportOptionEnum> columnList = param.getExportOptionList(); | |||||
for (ExportOptionEnum column : columnList) { | for (ExportOptionEnum column : columnList) { | ||||
List<String> columnValues = Lists.newArrayList(); | List<String> columnValues = Lists.newArrayList(); | ||||
columnValues.add(column.getDesc()); | columnValues.add(column.getDesc()); | ||||
@@ -12,6 +12,7 @@ import com.ningdatech.pmapi.projectlib.model.vo.AnnualPlanListItemVO; | |||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
import lombok.RequiredArgsConstructor; | |||||
import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
import org.springframework.web.multipart.MultipartFile; | import org.springframework.web.multipart.MultipartFile; | ||||
@@ -27,7 +28,7 @@ import javax.validation.Valid; | |||||
* @since 14:07 2023/2/11 | * @since 14:07 2023/2/11 | ||||
*/ | */ | ||||
@RestController | @RestController | ||||
@AllArgsConstructor | |||||
@RequiredArgsConstructor | |||||
@Api(tags = "年度计划库") | @Api(tags = "年度计划库") | ||||
@RequestMapping("/api/v1/annualPlan") | @RequestMapping("/api/v1/annualPlan") | ||||
public class AnnualPlanController { | public class AnnualPlanController { | ||||
@@ -68,17 +69,16 @@ public class AnnualPlanController { | |||||
annualPlanLibManage.importAnnualPlan(file); | annualPlanLibManage.importAnnualPlan(file); | ||||
} | } | ||||
@GetMapping("/exportAnnualPlanEditTable") | |||||
@ApiOperation("导出年度计划编辑表") | |||||
public void exportAnnualPlanEditTable(HttpServletResponse response) { | |||||
annualPlanLibManage.exportAnnualPlanEditTable(response); | |||||
} | |||||
@GetMapping("/modify") | @GetMapping("/modify") | ||||
@ApiOperation("年度计划编辑") | @ApiOperation("年度计划编辑") | ||||
@WebLog("年度计划编辑") | @WebLog("年度计划编辑") | ||||
public void modify(@RequestBody ProjectDTO req) { | public void modify(@RequestBody ProjectDTO req) { | ||||
annualPlanLibManage.updateAnnualPlan(req); | annualPlanLibManage.updateAnnualPlan(req); | ||||
} | } | ||||
@PostMapping("/exportList") | |||||
@ApiOperation("项目库【列表|编辑表】导出") | |||||
public void exportList(@Valid @RequestBody ProjectListReq param, HttpServletResponse response){ | |||||
annualPlanLibManage.exportList(param,response); | |||||
} | |||||
} | } |
@@ -8,11 +8,14 @@ import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | |||||
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO; | import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO; | ||||
import com.ningdatech.pmapi.projectlib.model.vo.ProjectDetailVO; | import com.ningdatech.pmapi.projectlib.model.vo.ProjectDetailVO; | ||||
import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO; | import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO; | ||||
import com.ningdatech.pmapi.todocenter.model.dto.req.ToBeProcessedExportReq; | |||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
import javax.servlet.http.HttpServletResponse; | |||||
import javax.validation.Valid; | |||||
import java.util.List; | import java.util.List; | ||||
/** | /** | ||||
@@ -48,4 +51,10 @@ public class ProjectLibController { | |||||
private List<ProcessDetailVO> processScheduleDetail(@PathVariable("projectId") Long projectId){ | private List<ProcessDetailVO> processScheduleDetail(@PathVariable("projectId") Long projectId){ | ||||
return projectLibManage.processScheduleDetail(projectId); | return projectLibManage.processScheduleDetail(projectId); | ||||
} | } | ||||
@PostMapping("/exportList") | |||||
@ApiOperation("项目库列表导出") | |||||
private void exportList(@Valid @RequestBody ProjectListReq param, HttpServletResponse response){ | |||||
projectLibManage.exportList(param,response); | |||||
} | |||||
} | } |
@@ -1,17 +1,8 @@ | |||||
package com.ningdatech.pmapi.projectlib.handle; | package com.ningdatech.pmapi.projectlib.handle; | ||||
import com.ningdatech.pmapi.common.constant.CommonConstant; | |||||
import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO; | import com.ningdatech.pmapi.projectlib.model.vo.ProcessDetailVO; | ||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.springframework.beans.BeansException; | |||||
import org.springframework.beans.factory.BeanFactoryUtils; | |||||
import org.springframework.beans.factory.InitializingBean; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.context.ApplicationContext; | |||||
import org.springframework.context.ApplicationContextAware; | |||||
import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
import java.util.ArrayList; | |||||
import java.util.Collections; | import java.util.Collections; | ||||
import java.util.List; | import java.util.List; | ||||
@@ -22,14 +13,14 @@ import java.util.List; | |||||
* @since 2023/02/26 21:36 | * @since 2023/02/26 21:36 | ||||
*/ | */ | ||||
@Component | @Component | ||||
public class ProcessExecuteHandle { | |||||
public class ProcessExecuteChainHandle { | |||||
/** | /** | ||||
* 具体处理者的集合 | * 具体处理者的集合 | ||||
*/ | */ | ||||
private final List<AbstractProcessBusinessHandle> processBusinessHandles; | private final List<AbstractProcessBusinessHandle> processBusinessHandles; | ||||
public ProcessExecuteHandle(List<AbstractProcessBusinessHandle> processBusinessHandles) { | |||||
public ProcessExecuteChainHandle(List<AbstractProcessBusinessHandle> processBusinessHandles) { | |||||
this.processBusinessHandles = processBusinessHandles; | this.processBusinessHandles = processBusinessHandles; | ||||
} | } | ||||
@@ -12,8 +12,11 @@ import com.ningdatech.basic.exception.BizException; | |||||
import com.ningdatech.basic.model.PageVo; | import com.ningdatech.basic.model.PageVo; | ||||
import com.ningdatech.basic.util.CollUtils; | import com.ningdatech.basic.util.CollUtils; | ||||
import com.ningdatech.basic.util.ValidUtil; | import com.ningdatech.basic.util.ValidUtil; | ||||
import com.ningdatech.pmapi.common.constant.CommonConstant; | |||||
import com.ningdatech.pmapi.common.model.entity.ExcelExportWriter; | |||||
import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent; | import com.ningdatech.pmapi.common.statemachine.event.ProjectStatusChangeEvent; | ||||
import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils; | import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils; | ||||
import com.ningdatech.pmapi.common.util.ExcelDownUtil; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | ||||
import com.ningdatech.pmapi.projectlib.helper.ProjectHelper; | import com.ningdatech.pmapi.projectlib.helper.ProjectHelper; | ||||
import com.ningdatech.pmapi.projectlib.model.dto.AnnualLibImportDTO; | import com.ningdatech.pmapi.projectlib.model.dto.AnnualLibImportDTO; | ||||
@@ -36,6 +39,7 @@ import java.io.InputStream; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Arrays; | import java.util.Arrays; | ||||
import java.util.List; | import java.util.List; | ||||
import java.util.Objects; | |||||
import static com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum.*; | import static com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum.*; | ||||
@@ -77,7 +81,11 @@ public class AnnualPlanLibManage { | |||||
public PageVo<AnnualPlanListItemVO> annulPlanLibList(ProjectListReq req) { | public PageVo<AnnualPlanListItemVO> annulPlanLibList(ProjectListReq req) { | ||||
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(req); | LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(req); | ||||
query.eq(Project::getIsTemporaryAugment, 0); | |||||
Integer isTemporaryAugment = req.getIsTemporaryAugment(); | |||||
if (Objects.isNull(isTemporaryAugment)){ | |||||
throw new BizException("请传入是否临时增补标志!"); | |||||
} | |||||
query.eq(Project::getIsTemporaryAugment, isTemporaryAugment); | |||||
query.orderByDesc(Project::getAnnualPlanAddTime); | query.orderByDesc(Project::getAnnualPlanAddTime); | ||||
query.in(Project::getStatus, CollUtils.fieldList(ANNUAL_PLAN_LIST_STATUS, ProjectStatusEnum::getCode)); | query.in(Project::getStatus, CollUtils.fieldList(ANNUAL_PLAN_LIST_STATUS, ProjectStatusEnum::getCode)); | ||||
Page<Project> page = projectService.page(req.page(), query); | Page<Project> page = projectService.page(req.page(), query); | ||||
@@ -203,13 +211,50 @@ public class AnnualPlanLibManage { | |||||
} | } | ||||
} | } | ||||
public void exportAnnualPlanEditTable(HttpServletResponse response) { | |||||
// TODO | |||||
} | |||||
public void updateAnnualPlan(ProjectDTO req) { | public void updateAnnualPlan(ProjectDTO req) { | ||||
Project project = BeanUtil.copyProperties(req, Project.class); | Project project = BeanUtil.copyProperties(req, Project.class); | ||||
projectService.updateById(project); | projectService.updateById(project); | ||||
} | } | ||||
public void exportList(ProjectListReq param, HttpServletResponse response) { | |||||
param.setPageNumber(CommonConstant.EXPORT_PAGE_NUMBER); | |||||
param.setPageSize(CommonConstant.EXPORT_PAGE_SIZE); | |||||
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(param); | |||||
Integer isTemporaryAugment = param.getIsTemporaryAugment(); | |||||
if (Objects.isNull(isTemporaryAugment)){ | |||||
throw new BizException("请传入是否临时增补标志!"); | |||||
} | |||||
query.eq(Project::getIsTemporaryAugment, isTemporaryAugment); | |||||
query.eq(Project::getIsTemporaryAugment, 0); | |||||
query.orderByDesc(Project::getAnnualPlanAddTime); | |||||
query.in(Project::getStatus, CollUtils.fieldList(ANNUAL_PLAN_LIST_STATUS, ProjectStatusEnum::getCode)); | |||||
List<Project> projects = projectService.list(query); | |||||
ExcelExportWriter excelExportWriter = new ExcelExportWriter(); | |||||
Integer tableFlag = param.getTableFlag(); | |||||
if (Objects.isNull(tableFlag)){ | |||||
throw new BizException("请传入要导出的表格类型!"); | |||||
} | |||||
String fileName = null; | |||||
if (tableFlag == 0){ | |||||
fileName = "年度计划库编辑表"; | |||||
} else if (tableFlag == 1) { | |||||
fileName = "年度计划库列表"; | |||||
} | |||||
excelExportWriter.setFileName(fileName); | |||||
List<String> sheetsNames = new ArrayList<>(); | |||||
sheetsNames.add(fileName); | |||||
// 表体行数据集合 | |||||
List<List<String>> exportDatas = ExcelDownUtil.getExportDatas(param.getExportOptionList(), projects); | |||||
// sheet列表集合 | |||||
List<List<List<String>>> sheets = new ArrayList<>(); | |||||
sheets.add(exportDatas); | |||||
excelExportWriter.setHeads(sheets); | |||||
excelExportWriter.setDatas(exportDatas); | |||||
excelExportWriter.setSheets(sheetsNames); | |||||
excelExportWriter.setHeadPropertyClass(List.class); | |||||
excelExportWriter.setHeadPropertyFlag(Boolean.FALSE); | |||||
ExcelDownUtil.excelExportFile(response, excelExportWriter); | |||||
} | |||||
} | } |
@@ -6,8 +6,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||||
import com.google.common.collect.Lists; | import com.google.common.collect.Lists; | ||||
import com.ningdatech.basic.model.PageVo; | import com.ningdatech.basic.model.PageVo; | ||||
import com.ningdatech.basic.util.CollUtils; | import com.ningdatech.basic.util.CollUtils; | ||||
import com.ningdatech.pmapi.common.constant.CommonConstant; | |||||
import com.ningdatech.pmapi.common.model.entity.ExcelExportWriter; | |||||
import com.ningdatech.pmapi.common.util.ExcelDownUtil; | |||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; | ||||
import com.ningdatech.pmapi.projectlib.handle.ProcessExecuteHandle; | |||||
import com.ningdatech.pmapi.projectlib.handle.ProcessExecuteChainHandle; | |||||
import com.ningdatech.pmapi.projectlib.helper.ProjectHelper; | import com.ningdatech.pmapi.projectlib.helper.ProjectHelper; | ||||
import com.ningdatech.pmapi.projectlib.model.entity.Project; | import com.ningdatech.pmapi.projectlib.model.entity.Project; | ||||
import com.ningdatech.pmapi.projectlib.model.entity.ProjectApplication; | import com.ningdatech.pmapi.projectlib.model.entity.ProjectApplication; | ||||
@@ -20,10 +23,12 @@ import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO; | |||||
import com.ningdatech.pmapi.projectlib.service.IProjectApplicationService; | import com.ningdatech.pmapi.projectlib.service.IProjectApplicationService; | ||||
import com.ningdatech.pmapi.projectlib.service.IProjectRenewalFundDeclarationService; | import com.ningdatech.pmapi.projectlib.service.IProjectRenewalFundDeclarationService; | ||||
import com.ningdatech.pmapi.projectlib.service.IProjectService; | import com.ningdatech.pmapi.projectlib.service.IProjectService; | ||||
import com.ningdatech.pmapi.todocenter.enumeration.IsAppendProjectEnum; | |||||
import lombok.RequiredArgsConstructor; | import lombok.RequiredArgsConstructor; | ||||
import org.springframework.beans.BeanUtils; | import org.springframework.beans.BeanUtils; | ||||
import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
import javax.servlet.http.HttpServletResponse; | |||||
import java.util.*; | import java.util.*; | ||||
/** | /** | ||||
@@ -41,7 +46,7 @@ public class ProjectLibManage { | |||||
private final IProjectService projectService; | private final IProjectService projectService; | ||||
private final IProjectApplicationService applicationService; | private final IProjectApplicationService applicationService; | ||||
private final IProjectRenewalFundDeclarationService renewalFundDeclarationService; | private final IProjectRenewalFundDeclarationService renewalFundDeclarationService; | ||||
private final ProcessExecuteHandle processExecuteHandle; | |||||
private final ProcessExecuteChainHandle processExecuteHandle; | |||||
public PageVo<ProjectLibListItemVO> projectLibList(ProjectListReq req) { | public PageVo<ProjectLibListItemVO> projectLibList(ProjectListReq req) { | ||||
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(req); | LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(req); | ||||
@@ -127,4 +132,31 @@ public class ProjectLibManage { | |||||
List<ProcessDetailVO> processDetailVOS = new ArrayList<>(); | List<ProcessDetailVO> processDetailVOS = new ArrayList<>(); | ||||
return processExecuteHandle.handle(projectId, processDetailVOS); | return processExecuteHandle.handle(projectId, processDetailVOS); | ||||
} | } | ||||
public void exportList(ProjectListReq param, HttpServletResponse response) { | |||||
param.setPageNumber(CommonConstant.EXPORT_PAGE_NUMBER); | |||||
param.setPageSize(CommonConstant.EXPORT_PAGE_SIZE); | |||||
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(param); | |||||
List<Project> projects = projectService.list(query); | |||||
ExcelExportWriter excelExportWriter = new ExcelExportWriter(); | |||||
String fileName = "项目库列表"; | |||||
excelExportWriter.setFileName(fileName); | |||||
List<String> sheetsNames = new ArrayList<>(); | |||||
sheetsNames.add(fileName); | |||||
// 表体行数据集合 | |||||
List<List<String>> exportDatas = ExcelDownUtil.getExportDatas(param.getExportOptionList(), projects); | |||||
// sheet列表集合 | |||||
List<List<List<String>>> sheets = new ArrayList<>(); | |||||
sheets.add(exportDatas); | |||||
excelExportWriter.setHeads(sheets); | |||||
excelExportWriter.setDatas(exportDatas); | |||||
excelExportWriter.setSheets(sheetsNames); | |||||
excelExportWriter.setHeadPropertyClass(List.class); | |||||
excelExportWriter.setHeadPropertyFlag(Boolean.FALSE); | |||||
ExcelDownUtil.excelExportFile(response, excelExportWriter); | |||||
} | |||||
} | } |
@@ -1,11 +1,13 @@ | |||||
package com.ningdatech.pmapi.projectlib.model.req; | package com.ningdatech.pmapi.projectlib.model.req; | ||||
import com.ningdatech.basic.model.PagePo; | import com.ningdatech.basic.model.PagePo; | ||||
import com.ningdatech.pmapi.common.enumeration.ExportOptionEnum; | |||||
import io.swagger.annotations.ApiModel; | import io.swagger.annotations.ApiModel; | ||||
import io.swagger.annotations.ApiModelProperty; | import io.swagger.annotations.ApiModelProperty; | ||||
import lombok.*; | import lombok.*; | ||||
import org.springframework.format.annotation.DateTimeFormat; | import org.springframework.format.annotation.DateTimeFormat; | ||||
import javax.validation.constraints.NotNull; | |||||
import java.math.BigDecimal; | import java.math.BigDecimal; | ||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
import java.util.List; | import java.util.List; | ||||
@@ -83,4 +85,10 @@ public class ProjectListReq extends PagePo { | |||||
@ApiModelProperty("实例code 多个") | @ApiModelProperty("实例code 多个") | ||||
private List<String> instCodes; | private List<String> instCodes; | ||||
@ApiModelProperty("导出选项") | |||||
private List<ExportOptionEnum> exportOptionList; | |||||
@ApiModelProperty(value = "表格类型",allowableValues = "0,1") | |||||
private Integer tableFlag; | |||||
} | } |
@@ -174,7 +174,7 @@ public class TodoCenterManage { | |||||
} | } | ||||
excelExportWriter.setFileName(fileName); | excelExportWriter.setFileName(fileName); | ||||
List<String> sheetsNames = Lists.newArrayList(fileName); | List<String> sheetsNames = Lists.newArrayList(fileName); | ||||
List<List<String>> exportDatas = ExcelDownUtil.getExportDatas(param, projects); | |||||
List<List<String>> exportDatas = ExcelDownUtil.getExportDatas(param.getExportOptionList(), projects); | |||||
// sheet列表集合 | // sheet列表集合 | ||||
List<List<List<String>>> sheets = Lists.newArrayList(); | List<List<List<String>>> sheets = Lists.newArrayList(); | ||||
sheets.add(exportDatas); | sheets.add(exportDatas); | ||||
@@ -690,7 +690,7 @@ public class TodoCenterManage { | |||||
List<String> sheetsNames = new ArrayList<>(); | List<String> sheetsNames = new ArrayList<>(); | ||||
sheetsNames.add(fileName); | sheetsNames.add(fileName); | ||||
List<List<String>> exportDatas = ExcelDownUtil.getExportDatas(param, projects); | |||||
List<List<String>> exportDatas = ExcelDownUtil.getExportDatas(param.getExportOptionList(), projects); | |||||
// sheet列表集合 | // sheet列表集合 | ||||
List<List<List<String>>> sheets = new ArrayList<>(); | List<List<List<String>>> sheets = new ArrayList<>(); | ||||
sheets.add(exportDatas); | sheets.add(exportDatas); | ||||
@@ -783,7 +783,7 @@ public class TodoCenterManage { | |||||
List<String> sheetsNames = new ArrayList<>(); | List<String> sheetsNames = new ArrayList<>(); | ||||
sheetsNames.add(fileName); | sheetsNames.add(fileName); | ||||
// 表体行数据集合 | // 表体行数据集合 | ||||
List<List<String>> exportDatas = ExcelDownUtil.getExportDatas(param, projects); | |||||
List<List<String>> exportDatas = ExcelDownUtil.getExportDatas(param.getExportOptionList(), projects); | |||||
// sheet列表集合 | // sheet列表集合 | ||||
List<List<List<String>>> sheets = new ArrayList<>(); | List<List<List<String>>> sheets = new ArrayList<>(); | ||||
sheets.add(exportDatas); | sheets.add(exportDatas); | ||||
@@ -880,7 +880,7 @@ public class TodoCenterManage { | |||||
List<String> sheetsNames = new ArrayList<>(); | List<String> sheetsNames = new ArrayList<>(); | ||||
sheetsNames.add(fileName); | sheetsNames.add(fileName); | ||||
// 表体行数据集合 | // 表体行数据集合 | ||||
List<List<String>> exportDatas = ExcelDownUtil.getExportDatas(param, projects); | |||||
List<List<String>> exportDatas = ExcelDownUtil.getExportDatas(param.getExportOptionList(), projects); | |||||
// sheet列表集合 | // sheet列表集合 | ||||
List<List<List<String>>> sheets = new ArrayList<>(); | List<List<List<String>>> sheets = new ArrayList<>(); | ||||
sheets.add(exportDatas); | sheets.add(exportDatas); | ||||