首页 > 其他分享 >使用PIO自定义每一个格子的属性和值,完全DIY--Excel,不整齐也可以实现

使用PIO自定义每一个格子的属性和值,完全DIY--Excel,不整齐也可以实现

时间:2023-11-20 11:01:42浏览次数:34  
标签:自定义 PIO cell1 cell2 Excel value createCell setCellValue XSSFCell

常规表格样式的Excel导出,

image

有一种不是常规表格样式的Excel导出,

比如如下这种怎么办

image

快速的excel框架API肯定不支持这种

所以我们需要自定义格子的内容

  private CellStyle getCellStyle2(XSSFWorkbook workbook, int x) {
        Font font2 = workbook.createFont();
        font2.setBold(true);
        font2.setFontHeightInPoints((short) x);
        CellStyle cellStyle2 = workbook.createCellStyle();
        cellStyle2.setBorderBottom(BorderStyle.THIN); //下边框
        cellStyle2.setBorderLeft(BorderStyle.THIN);//左边框
        cellStyle2.setBorderTop(BorderStyle.THIN);//上边框
        cellStyle2.setBorderRight(BorderStyle.THIN);//右边框
        cellStyle2.setFont(font2);
        // 居中
        cellStyle2.setAlignment(HorizontalAlignment.CENTER);
        return cellStyle2;
    }
	
  @Override
    public XSSFWorkbook createSampleInboundAndOutboundXSSFWorkbook(List<SampleInboundAndOutbound> sampleInboundAndOutbounds) {
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 创建工作表并设置表名
        XSSFSheet sheet = workbook.createSheet("样品出入库登记表");
        // 设置字体样式
        CellStyle cellStyle = getCellStyle2(workbook, 12);
        // 【第一行】 创建行,下标从0开始
        XSSFRow row = sheet.createRow(0);
        XSSFCell cell = row.createCell(0);
        // 设置每一列宽度
        for (int i = 0; i < 4; i++) {
            sheet.setColumnWidth(i, 15 * 256);
        }
        cell.setCellValue("样品出入库登记表");
        cell.setCellStyle(cellStyle);
        // 合并第一行数据 前4个单元格
        CellRangeAddress region = new CellRangeAddress(0, 0, 0, 3);
        sheet.addMergedRegion(region);

        int rownumIndex = 1;
        for (SampleInboundAndOutbound sampleInboundAndOutbound : sampleInboundAndOutbounds) {
            SampleInfoVo sampleInfoVo = sampleInboundAndOutbound.getSampleInfoVo();
            if (sampleInfoVo == null) {
                continue;
            }
            // 创建表头行
            XSSFRow row2 = sheet.createRow(rownumIndex);
            XSSFCell cell1 = row2.createCell(0);
            cell1.setCellValue("样品编号");
            XSSFCell cell1_value = row2.createCell(1);
            cell1_value.setCellValue(sampleInfoVo.getSampleCode());
            XSSFCell cell2 = row2.createCell(2);
            cell2.setCellValue("样品名称");
            XSSFCell cell2_value = row2.createCell(3);
            cell2_value.setCellValue(sampleInfoVo.getSampleName());

            rownumIndex++;
            XSSFRow row3 = sheet.createRow(rownumIndex);
            XSSFCell cell1_2 = row3.createCell(0);
            cell1_2.setCellValue("产品型号");
            XSSFCell cell1_value_2 = row3.createCell(1);
            cell1_value_2.setCellValue(sampleInfoVo.getProductModel());
            XSSFCell cell2_2 = row3.createCell(2);
            cell2_2.setCellValue("型号类型");
            XSSFCell cell2_value_2 = row3.createCell(3);
            Dictionary varFive1 = dictionaryRemoteService.getByTypeAndCode("sample.product.type", String.valueOf(sampleInfoVo.getProductType()));
            cell2_value_2.setCellValue(varFive1.getName());

            rownumIndex++;
            XSSFRow row4 = sheet.createRow(rownumIndex);
            XSSFCell cell1_3 = row4.createCell(0);
            cell1_3.setCellValue("负责部门");
            XSSFCell cell1_value_3 = row4.createCell(1);
            cell1_value_3.setCellValue(sampleInfoVo.getDutyDepartment());
            XSSFCell cell2_3 = row4.createCell(2);
            cell2_3.setCellValue("负责人");
            XSSFCell cell2_value_3 = row4.createCell(3);
            cell2_value_3.setCellValue(sampleInfoVo.getDutyPersonName());

            rownumIndex++;
            XSSFRow row5 = sheet.createRow(rownumIndex);
            XSSFCell cell1_4 = row5.createCell(0);
            cell1_4.setCellValue("项目平台");
            XSSFCell cell1_value_4 = row5.createCell(1);
            Dictionary varFive4 = dictionaryRemoteService.getByTypeAndCode("sample.model.platform", sampleInfoVo.getProjectPlatform());
            cell1_value_4.setCellValue(varFive4.getName());
            XSSFCell cell2_4 = row5.createCell(2);
            cell2_4.setCellValue("具体车型项目");
            XSSFCell cell2_value_4 = row5.createCell(3);
            Dictionary varFive2 = dictionaryRemoteService.getByTypeAndCode("task.project.name", String.valueOf(sampleInboundAndOutbound.getProjectName()));
            sampleInboundAndOutbound.setProjectNameStr(varFive2.getName());
            cell2_value_4.setCellValue(varFive2.getName());

            rownumIndex++;
            XSSFRow row6 = sheet.createRow(rownumIndex);
            XSSFCell cell1_5 = row6.createCell(0);
            cell1_5.setCellValue("试验类型");
            XSSFCell cell1_value_5 = row6.createCell(1);
            cell1_value_5.setCellValue(sampleInboundAndOutbound.getTestItemTypeName());
            XSSFCell cell2_5 = row6.createCell(2);
            cell2_5.setCellValue("试验代号");
            XSSFCell cell2_value_5 = row6.createCell(3);
            cell2_value_5.setCellValue(sampleInboundAndOutbound.getTestItemCode());

            rownumIndex++;
            XSSFRow row7 = sheet.createRow(rownumIndex);
            XSSFCell cell1_7 = row7.createCell(0);
            cell1_7.setCellValue("试验名称");
            XSSFCell cell1_value_7 = row7.createCell(1);
            cell1_value_7.setCellValue(sampleInboundAndOutbound.getTestItemName());
            CellRangeAddress region2 = new CellRangeAddress(rownumIndex, rownumIndex, 1, 3);
            sheet.addMergedRegion(region2);

            List<SampleReceiver> sampleReceiverList = sampleInboundAndOutbound.getSampleReceiverList();
            if (CollectionUtils.isNotEmpty(sampleReceiverList)) {
                for (SampleReceiver sampleReceiver : sampleReceiverList) {
                    rownumIndex++;
                    XSSFRow row8 = sheet.createRow(rownumIndex);
                    XSSFCell cell1_8 = row8.createCell(0);
                    cell1_8.setCellValue("接收人");
                    XSSFCell cell1_value_8 = row8.createCell(1);
                    cell1_value_8.setCellValue(sampleReceiver.getReceiver());
                    XSSFCell cell2_8 = row8.createCell(2);
                    cell2_8.setCellValue("接收时间");
                    XSSFCell cell2_value_8 = row8.createCell(3);
                    String receiveDate = DateFormatUtils.format(sampleReceiver.getReceiveDate(), "yyyy-MM-dd");
                    cell2_value_8.setCellValue(receiveDate);

                    rownumIndex++;
                    XSSFRow row9 = sheet.createRow(rownumIndex);
                    XSSFCell cell1_9 = row9.createCell(0);
                    cell1_9.setCellValue("实验室");
                    XSSFCell cell1_value_9 = row9.createCell(1);
                    cell1_value_9.setCellValue(sampleReceiver.getLaboratory());
                    XSSFCell cell2_9 = row9.createCell(2);
                    cell2_9.setCellValue("接收数量");
                    XSSFCell cell2_value_9 = row9.createCell(3);
                    cell2_value_9.setCellValue(sampleReceiver.getReceiverCount());

                    rownumIndex++;
                    XSSFRow row10 = sheet.createRow(rownumIndex);
                    XSSFCell cell1_10 = row10.createCell(0);
                    cell1_10.setCellValue("检查结果");
                    XSSFCell cell1_value_10 = row10.createCell(1);
                    Dictionary varFive3 = dictionaryRemoteService.getByTypeAndCode("sample.check.result", String.valueOf(sampleReceiver.getCheckResult()));
                    cell1_value_10.setCellValue(varFive3.getName());
                    CellRangeAddress region4 = new CellRangeAddress(rownumIndex, rownumIndex, 1, 3);
                    sheet.addMergedRegion(region4);
                }
            }
            List<SampleAccepter> sampleAccepterList = sampleInboundAndOutbound.getSampleAccepterList();
            if (CollectionUtils.isNotEmpty(sampleAccepterList)) {
                for (SampleAccepter sampleAccepter : sampleAccepterList) {
                    rownumIndex++;
                    XSSFRow row9 = sheet.createRow(rownumIndex);
                    XSSFCell cell1_9 = row9.createCell(0);
                    cell1_9.setCellValue("归还接收人");
                    XSSFCell cell1_value_9 = row9.createCell(1);
                    cell1_value_9.setCellValue(sampleAccepter.getAccepter());
                    XSSFCell cell2_9 = row9.createCell(2);
                    cell2_9.setCellValue("归还时间");
                    XSSFCell cell2_value_9 = row9.createCell(3);
                    String acceptDate = DateFormatUtils.format(sampleAccepter.getAcceptDate(), "yyyy-MM-dd");
                    cell2_value_9.setCellValue(acceptDate);

                    rownumIndex++;
                    XSSFRow row10 = sheet.createRow(rownumIndex);
                    XSSFCell cell1_10 = row10.createCell(0);
                    cell1_10.setCellValue("归还原因");
                    XSSFCell cell1_value_10 = row10.createCell(1);
                    cell1_value_10.setCellValue(sampleAccepter.getRevertReason() + sampleAccepter.getRemark());
                    CellRangeAddress region4 = new CellRangeAddress(rownumIndex, rownumIndex, 1, 3);
                    sheet.addMergedRegion(region4);
                }
            }
        }
        return workbook;
    }

over--就是创建每一行每一列,填充值的操作------类似需求可以自己参考

标签:自定义,PIO,cell1,cell2,Excel,value,createCell,setCellValue,XSSFCell
From: https://www.cnblogs.com/gtnotgod/p/17843462.html

相关文章

  • Python 另存为 excel
    复制一个excel注意openpyxl-3.0.10fromopenpyxl.reader.excelimportload_workbookif__name__=='__main__':wb=load_workbook('source.xlsx')wb.save('样式表.xlsx')其他版本异常错误openpyxl:Valuemustbeeithernumericalor......
  • 将Excel数据自动录入国家防返贫系统
    不会编程的看这里:https://www.cnblogs.com/liangxinhy/p/17842931.html一、配置运行环境(1)语言python,编程软件Pychram(2)下载三个功能库——selenium、xlrd、xlwtimporttimefromselenium.webdriver.common.byimportByfromselenium.webdriver.supportimportexpected_cond......
  • 自定义Vue脚手架
    创建一个vue项目,项目名叫custom选择最下面的自定义脚手架选择你需要的配置选择vue版本询问是否采用历史模式,默认是hash模式,history模式需要后端进行额外配置选择CSS预处理器选择eslint规范,这里选择的是无分号的规范选择什么时候进行校验,这里选择的是保存时进行校验......
  • 快手抖音同城自动评论脚本,推荐页支持,自定义评论内容,按键精灵开源版!
    之前给客户定制的一个支持快手也抖音的自动同城评论脚本,可以原理很简单,自动上划视频,然后自动留下一个评论,评论内容通过语法分割,实现每次评论的内容都不一样,好了下面是UI和代码。ui:  界面代码:=====================================================界面1:{请在下面设置......
  • 支持抖音快手的直播间刷屏脚本,自定义话术快速,新用户欢迎,按键精灵脚本开源
    用按键精灵之前给客户开发的脚本,功能我这边都设计好了,比如话术速度还有毫秒都可以自定义设置的,还支持虚拟欢迎等功能,还有一直点赞等功能,用按键精灵开发的,我现在拿着也用不了,就直接把源码开源出来。uii界面: 脚本代码:=======================================================......
  • Python批量求取Excel表格每一个4行内某列的最大值、最小值
      本文介绍基于Python语言,基于Excel表格文件内某一列的数据,计算这一列数据在每一个指定数量的行的范围内(例如每一个4行的范围内)的区间最大值的方法。  已知我们现有一个.csv格式的Excel表格文件,其中有一列数据,我们希望对其加以区间最大值的计算——即从这一列的数据部分(也就是......
  • Spring Boot 如何获取Excel sheet页的数量?
    前言在日常的开发中,我们经常需要读取Excel文件中的数据,其中涉及到获取Excel中sheet页的数量。本文将介绍如何使用SpringBoot获取Excelsheet页的数量。摘要本文主要介绍了如何使用SpringBoot获取Excel文件中sheet页的数量。首先通过POI库读取Excel文件,然后通过Workbook对象获......
  • Nginx自定义日志中时间格式
    背景工作需要对接内部的日志中台,对日志打印有固定的格式要求,为了使Nginx的access日志也能被采集,需要对日志格式进行自定义,要求日志格式为:yyyy-MM-ddHH:mm:ss.SSSLOG_LEVELLOG_MSG--->时间格式+打印级别+业务日志如:23-11-1817:34:23.738DEBUGmonitor-7org.apach......
  • Vue的自定义指令
    在使用自定义指令的标签写入v-'自定义指令名'<template><divclass="box"v-loading="loading"></div></template>exportdefault{data(){return{loading:true}},} 公共配置,写在如main.js的公共js中Vue.di......
  • javascript 自定义分页组件
    仿boostrap前端分页组件的实现一 写一个前端自定义分页组件,需要考虑以下问题  /*     需要一个<ul id="pagination"></ul>标签   total; // 总数据的数量   pageSize; // 一页显示数量   pageIndex; // 当前页   */ 二实现细节编写html......