首页 > 编程语言 >java poi 读取模版excel写入数据并保持原本单元格样式

java poi 读取模版excel写入数据并保持原本单元格样式

时间:2024-12-09 16:11:50浏览次数:10  
标签:java get int 单元格 excel c2 null row

public Result<Object> testreport(@RequestParam Map<String, String> params,HttpServletResponse response) throws Exception{
        String filename="wenjian.xlsx";
        String inFilePath="C:\\Users\\xnn\\Desktop\\附件一:高登商业生活广场用电安全分析报告.xlsx";

        Result info;
        info=appletService.getRiskReportEnterprise(params);
        Map<String,Object> data = (Map<String, Object>) info.getData();

        List<Map<String, Object>> rows=new ArrayList<>();
        InputStream in = new FileInputStream(inFilePath);
        XSSFWorkbook wb = new XSSFWorkbook(in);
        XSSFSheet sheet = wb.getSheetAt(0);
        in.close();
        int rowNum = 1;//模板第一行是固定标题,从第二行开始插入数据
        sheet.setForceFormulaRecalculation(true);//强制执行excel中函数
        // 创建一个单元格,设置其内的数据格式为字符串,并填充内容,其余单元格类同
        for (Map<String, Object> row : rows) {
            // 获取并设置该行每一单元格的信息,该行单元格的索引从 0 开始
            int cellIndex = 1;//从第二个单元格设置值,因为第一个单元格是序号函数row()-1
            XSSFRow newRow = sheet.getRow(rowNum);
            if(newRow==null){
                newRow = sheet.createRow(rowNum);
            }
            XSSFColor color = new XSSFColor();
            color.setRGB(intToByteArray(getIntFromColor(68,84,106)));
            XSSFCellStyle style= wb.createCellStyle();
            style.setFillForegroundColor(color);
            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);

            XSSFCell c2 = newRow.getCell(cellIndex++);
            if (c2 != null) {
                XSSFCellStyle originalStyle = c2.getCellStyle();
                c2.setCellValue(row.get("appNumber")!=null?(String)row.get("appNumber"):null);
                c2.setCellStyle(originalStyle);
            } else {
                System.out.println("空!!!!!!!!!!!!!!!!!!!!!!");
                c2 = newRow.createCell(cellIndex++, CellType.STRING);
                XSSFCellStyle originalStyle = c2.getCellStyle();
                c2.setCellValue(row.get("appNumber")!=null?(String)row.get("appNumber"):null);
                c2.setCellStyle(originalStyle);
            }
            XSSFCell c3 = newRow.createCell(cellIndex++, CellType.STRING);
//            originalStyle = c3.getCellStyle();
            c3.setCellValue(row.get("receiptTitle")!=null?(String)row.get("receiptTitle"):null);
            c3.setCellStyle(style);
            rowNum++;
        }

        try {
            response.setContentType("application/vnd.ms-excel");
            filename = URLEncoder.encode(filename, "UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename="
                    .concat(filename));
            OutputStream out = response.getOutputStream();
            wb.write(out);
            out.close();
            wb.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * rgb转int
     */
    private static int getIntFromColor(int Red, int Green, int Blue){
        Red = (Red << 16) & 0x00FF0000;
        Green = (Green << 8) & 0x0000FF00;
        Blue = Blue & 0x000000FF;
        return 0xFF000000 | Red | Green | Blue;
    }

    /**
     * int转byte[]
     */
    public static byte[] intToByteArray(int i) {
        byte[] result = new byte[4];
        result[0] = (byte)((i >> 24) & 0xFF);
        result[1] = (byte)((i >> 16) & 0xFF);
        result[2] = (byte)((i >> 8) & 0xFF);
        result[3] = (byte)(i & 0xFF);
        return result;
    }

遇到需求一开始是想着自己填rgb颜色,但是发现还要设置字体颜色什么的比较麻烦,不如直接读取原本的文件的样式,注意要用get获取原本单元格再获取样式,create创建单元格的话,样式是空的就获取不到了。

标签:java,get,int,单元格,excel,c2,null,row
From: https://www.cnblogs.com/ssbxfsrm/p/18595219

相关文章

  • 勤哲EXCEL服务器自动生成企业智能信息管理系统
    如今,企业管理正处于信息化、数字化转型的关键阶段,信息化、数字化技术的广泛应用正在改变着传统管理模式。从数据分析、人工智能到云计算等各种数字化工具的出现,为企业提供了更高效、更精确的管理手段。专家认为,信息化企业管理不仅能够提升生产效率、降低成本,还能够实现信息共享......
  • Java模板引擎 Velocity
    目录前言1.Velocity模板引擎概述1.1什么是Velocity1.2Velocity的特点1.3Velocity的主要应用场景2.Velocity的核心原理2.1模板准备2.2数据填充2.3渲染输出3.Velocity的基本使用方法3.1环境配置3.2编写模板3.3数据填充与渲染3.4常见功能示例4.Velocity在......
  • Java学习总结——方法
    Java学习总结——方法1.什么是方法,如何定义?方法是语句的集合,在一起用于实现某一功能,包含于类或对象中。方法的定义:修饰符方法返回类型方法名(参数列表){若干方法语句;return返回值}2.方法参数方法可以包含0个或任意个参数。方法参数用于接收传递给方法的变量值。调用方法......
  • 2025 年你应该告别的 5 个 JavaScript 库
    2025年你应该告别的5个JavaScript库来源:OSCHINA编辑: 白开水不加糖2024-12-0915:03:58 2AI总结干不动了伙计们,老板说每天导它个5000App下载TheNewStack 发文梳理了他们认为在2025年可能过时的5个JavaScript库,分别是:jQuery、Moment.js、Lod......
  • [Javascript] Create Smooth UI Transitions with the Native View Transitions API
    Inthislesson,you'lllearnhowtoimplementsmoothstatetransitionsinyourwebapplicationsusingthebrowser'sbuilt-inViewTransitionsAPI.We'llcreateasimpleexamplethatdemonstrateshowtoanimatebetweendifferenttextstates......
  • 探索 Java 中的类和主方法
    如果你是Java新手,了解类和特殊方法publicstaticvoidmain是编写任何程序的关键。让我们以一种实用而直接的方式来探讨它们的工作原理!(SpringBoot/Cloud项目实战:java567.com)Java中的类是什么?类是Java程序的构建块。它们充当蓝图,包含执行特定任务的方法(或函数)。想象你正......
  • 【Java编程】深入解析 Java 的四大引用类型:强引用、软引用、弱引用、虚引用
    在Java内存管理中,引用的概念扮演着非常重要的角色。引用的强弱程度,直接影响对象在内存中的生存周期。Java语言中定义了四种不同的引用类型:强引用、软引用、弱引用和虚引用,每一种引用类型都有独特的特性和适用场景。理解它们的区别和作用,不仅有助于提升Java内存管理的水平,也有......
  • [Javascript] Assignment question
    vara={n:1};varb=a;a.x=a={n:2};console.log(a.x);//undefinedconsole.log(b.x);//{n:2} Javascriptseethefollowingcode,mainlywilldo3things1.Locate aaddressreferenceinstack2.Create {n:1}inheap3.Assignaddressrefere......
  • Java-21 深入浅出 MyBatis - 手写ORM框架2 手写Resources、MappedStatment、XMLBuilde
    点一下关注吧!!!非常感谢!!持续更新!!!大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html目前已经更新到了:MyBatis(正在更新)框架实现在当前的项目中,在resources下新建:sqlMapConfig.xmlmapper.xmlsqlMapConfig.xml<?xmlversion="1.0"encoding="U......
  • 【Java编程】Java 中的 Function:让转换逻辑更灵活
    Function<T,R>是Java中一个重要的函数式接口,适用于将一个输入转换为一个输出的场景。通过Function,我们可以将复杂的转换逻辑抽象化,提升代码的灵活性和可读性。今天,让我们探讨Function在开发中的妙用,让代码更简洁、模块化!1.Function基础:简化转换逻辑Function的核心方法......