Java对Excel的相关操作
1094 字
5 分钟
Java对Excel的相关操作
Excel相关
1、全自定义单元格格式导出excel
创建相关的excel文件:XSSFWorkbook workbook = new XSSFWorkbook();sheet名称设置(可多个sheet):Sheet sheet = workbook.createSheet();根据sheet名称单独设计表格(有一定的先后顺序):1. 创建行(从0开始):Row row0 = sheet.createRow(0);(每一行都是独立的,需要单独创建,且不可多次创建)2.合并所需的单元格:CellRangeAddress mergedRegion = new CellRangeAddress(起始行, 结束行, 起始列, 结束列);sheet.addMergedRegion(mergedRegion);3.单独创建单元格(相当于列,创建行是前提条件,也是从0开始):
Cell cell = row0.createCell(0);
4.根据所需要的逻辑在对应的位置依次插入数据:cell.setCellValue(具体数值);5.Tips:各种操作必须按行!!!
public String labourAttendanceDetailListExport(Map<String, Object> parameter) throws Exception {String startTime = parameter.get("startTime").toString();String endTime = parameter.get("endTime").toString();LabourBaseReq labourBaseReq = new LabourBaseReq();labourBaseReq.setProjectId(Long.valueOf(parameter.get("projectId").toString()));List<LabourBaseRes> labourBaseRes = labourBaseMapper.selectPageList(labourBaseReq);//标题头日期List<String> everyDay = null;try {everyDay = com.luban.common.utils.DateUtils.findEveryDay(startTime, endTime);} catch (Exception e) {throw new RuntimeException(e);}List<String> finalEveryDay = everyDay;XSSFWorkbook workbook = new XSSFWorkbook();//根据班组分租Map<Long, List<LabourBaseRes>> map = labourBaseRes.stream().collect(Collectors.groupingBy(LabourBaseRes::getOrganId));map.forEach((key, value) -> {//sheet名称设置Sheet sheet = workbook.createSheet(value.get(0).getProjectName() + "-" + value.get(0).getOrganName() + "-" + "考勤明细");//创建第0行Row sheetTitle = sheet.createRow(0);Cell sheetTitleCell = sheetTitle.createCell(0);//合并第0行相关的格子CellRangeAddress mergedRegion = new CellRangeAddress(0, 0, 0, 5 + finalEveryDay.size());sheet.addMergedRegion(mergedRegion);//标题插入sheetTitleCell.setCellValue(value.get(0).getEnterpriseName() + "-" + value.get(0).getProjectName() + "-" + value.get(0).getOrganName()+ startTime + "~" + endTime);//创建第1行Row headerRow = sheet.createRow(1);//标题头设置List<String> sheetTitles = new ArrayList<>();sheetTitles.add("项目名称");sheetTitles.add("人员姓名");sheetTitles.add("班组");sheetTitles.add("工种");sheetTitles.add("类型");sheetTitles.add("日期");for (int i = 0; i < sheetTitles.size(); i) {Cell headerCell = headerRow.createCell(i);headerCell.setCellValue(sheetTitles.get(i));}//合并标题头两行for (int i = 0; i < 5; i) {CellRangeAddress mergedRegion2 = new CellRangeAddress(1, 2, i, i);sheet.addMergedRegion(mergedRegion2);}//日期合并CellRangeAddress mergedRegion1 = new CellRangeAddress(1, 1, 5, finalEveryDay.size() + 4);sheet.addMergedRegion(mergedRegion1);//创建第2行(日期)//日期插入Row dataRow = sheet.createRow(2);//列for (int j = 5; j < finalEveryDay.size() + 5; j) {Cell dataCell = dataRow.createCell(j);dataCell.setCellValue(finalEveryDay.get(j - 5));}//两个人以上的数据插入if (value.size() > 1) {int rowNum = 3;for (LabourBaseRes item : value) {//创建第3行(上班时间)//合并数据标题两行Row workRow = sheet.createRow(rowNum);List<String> headTitle = new ArrayList<>();headTitle.add(item.getWorkerName());headTitle.add(item.getProjectName());headTitle.add(item.getOrganName());headTitle.add(item.getProfessionName());for (int i = 0; i < 4; i) {//列//数据插入Cell cell = workRow.createCell(i);cell.setCellValue(headTitle.get(i));}//合并这一行的相关数据for (int j = 0; j < 4; j++) {//列CellRangeAddress mergedRegion3 = new CellRangeAddress(rowNum, rowNum + 1, j, j);sheet.addMergedRegion(mergedRegion3);}//上下班打卡时间填充//获取数据List<String> workTime = new ArrayList<>();List<String> offWorkTime = new ArrayList<>();for (String temp : finalEveryDay) {Map<String, Object> param = new HashMap<>();param.put("labourId", item.getId());param.put("ioDirection", NumberConstants.ONE);param.put("time", temp);String time1 = labourIoRecordMapper.selectAttendanceTime(param);//上班时间if (Objects.isNull(time1)) {workTime.add("无");} else {workTime.add(time1.substring(11, 16));}param.put("ioDirection", NumberConstants.TWE);String time2 = labourIoRecordMapper.selectAttendanceTime(param);//下班时间if (Objects.isNull(time2) || Objects.equals(workTime.get(workTime.size() - 1), "0")) {offWorkTime.add("无");} else {offWorkTime.add(time2.substring(11, 16));}}//上下班时间及其对应的时间数据//上班行创建for (int j = 5; j < finalEveryDay.size() + 5; j++) {Cell workCell = workRow.createCell(4);workCell.setCellValue("上班时间");Cell dataCell1 = workRow.createCell(j);dataCell1.setCellValue(workTime.get(j - 5));}//创建第4行(下班行创建)Row offWorkRow = sheet.createRow(rowNum + 1);for (int j = 5; j < finalEveryDay.size() + 5; j++) {Cell offWorkCell = offWorkRow.createCell(4);offWorkCell.setCellValue("下班时间");Cell dataCell1 = offWorkRow.createCell(j);dataCell1.setCellValue(offWorkTime.get(j - 5));}rowNum = rowNum + 2;}} else {//创建第3行(上班时间)//合并数据标题两行Row workRow = sheet.createRow(3);List<String> headTitle = new ArrayList<>();headTitle.add(value.get(0).getWorkerName());headTitle.add(value.get(0).getProjectName());headTitle.add(value.get(0).getOrganName());headTitle.add(value.get(0).getProfessionName());for (int i = 0; i < 4; i) {//列//数据插入Cell cell = workRow.createCell(i);cell.setCellValue(headTitle.get(i));}//合并这一行的相关数据for (int j = 0; j < 4; j) {//列CellRangeAddress mergedRegion3 = new CellRangeAddress(3, 4, j, j);sheet.addMergedRegion(mergedRegion3);}//上下班打卡时间填充//获取数据List<String> workTime = new ArrayList<>();List<String> offWorkTime = new ArrayList<>();for (String temp : finalEveryDay) {Map<String, Object> param = new HashMap<>();param.put("labourId", value.get(0).getId());param.put("ioDirection", NumberConstants.ONE);param.put("time", temp);String time1 = labourIoRecordMapper.selectAttendanceTime(param);//上班时间if (Objects.isNull(time1)) {workTime.add("无");} else {workTime.add(time1.substring(11, 16));}param.put("ioDirection", NumberConstants.TWE);String time2 = labourIoRecordMapper.selectAttendanceTime(param);//下班时间if (Objects.isNull(time2) || Objects.equals(workTime.get(workTime.size() - 1), "0")) {offWorkTime.add("无");} else {offWorkTime.add(time2.substring(11, 16));}}//上下班时间及其对应的时间数据//上班行创建Cell workCell = workRow.createCell(4);workCell.setCellValue("上班时间");for (int j = 5; j < finalEveryDay.size() + 5; j++) {Cell dataCell1 = workRow.createCell(j);dataCell1.setCellValue(workTime.get(j - 5));}//创建第4行(下班行创建)Row offWorkRow = sheet.createRow(4);Cell offWorkCell = offWorkRow.createCell(4);offWorkCell.setCellValue("下班时间");for (int j = 5; j < finalEveryDay.size() + 5; j++) {Cell dataCell1 = offWorkRow.createCell(j);dataCell1.setCellValue(offWorkTime.get(j - 5));}}});File path = File.createTempFile("考勤明细", ".xlsx");ByteArrayOutputStream os = new ByteArrayOutputStream();try {workbook.write(os);} catch (IOException e) {e.printStackTrace();}byte[] content = os.toByteArray();File file = FileUtils.byteToFile(content, path.getPath());return MinIOUtil.upload(file, "labourAttendanceDetailListExport");}2、excel样式设计
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
Java对Excel的相关操作
https://firefly.cuteleaf.cn/posts/obsidian/java对excel的相关操作/ 相关文章 智能推荐
1
Java列表分页方法
开发笔记 1、PageHelper 2、IPage
2
Java树形目录上下移动
开发笔记 1、Controller层 2、interface层 3、实现层 4、Mapper 5、.XML
3
SpringBoot文件上传工具类
开发笔记 SpringBoot文件上传工具类 Spring File Storage工具几乎整合了市面上所有的OSS对象存储平台,包括本地、FTP、SFTP、WebDAV、阿里云OSS、华为云OBS、七牛云Kodo、腾讯云COS、百度云 BOS、又拍云USS、MinIO、京东云 OSS、网
4
Springboot中使用kafka
开发笔记 1、Kafka的定义 Message Queue MQ ,消息队列中间件; Kafka是一个分布式、支持分区的 partition 、多副本的 replica ,基于zookeeper协调的分布式消息系统,因其可水平扩展和高吞吐率而被广泛使用 2、在SpringBoot中使用Ka
5
JDK在Linux环境下安装
运维部署 JDK安装 方式一:gz安装包解压安装 1、准备JDK安装包 我这里下载的是 jdk 8u161 linux x64.tar.gz 安装包,并将其直接放在了 root 目录下 2、卸载已有的OPENJDK 如果有 如果系统自带有 OpenJDK ,可以按照如下步骤提前卸载之。 首
随机文章 随机推荐