首页 > 编程语言 >Java使用POI库读取或者生成Excel

Java使用POI库读取或者生成Excel

时间:2023-12-21 13:58:10浏览次数:21  
标签:cellStyle Java wb 样式 setColumnWidth Excel POI sheet 256

  1. maven引入poi库,版本选4.1.2
    <!-- excel工具 -->
    		<dependency>
    			<groupId>org.apache.poi</groupId>
    			<artifactId>poi-ooxml</artifactId>
    			<version>${poi.version}</version>
    		</dependency>
    

      

  2. 应用,编辑excel有两种方式,一种是使用Excel模板进行读取并进行数据填充的操作,主要是按照模板来写,获取指定行和指定列的数据,然后编辑它
  3. 使用生成的方式,这种方式没有模板文件,需要创建行和创建列,然后编辑这些行和列的数据,还可设计单元格格式和合并单元格操作,注意,使用这种方式需要记录行号,每次生成出一行行号自增

上代码:HSSFCellStyle是设计样式的类,在方法中将表头和列表样式设计好,然后在生成单元格时应用这个样式,从而实现字体大小、加粗、边框等功能。HSSFSheet有很多方法,不一一赘述,详见chatGPT,本质是使用HSSFSheet创建行,而后编辑行和列的操作,尤其是需要遍历出对象列表时,循环遍历会很方便,每次创建行将行号加一即可。合并单元格

sheet.addMergedRegion(new CellRangeAddress(2, 2, 1, 9));下标从零开始,对应的是开始行号,结束行号,开始列号,结束列号
/** 第一步,创建一个Workbook,对应一个Excel文件  */
        HSSFWorkbook wb = new HSSFWorkbook();

        /** 第二步,在Workbook中添加一个sheet,对应Excel文件中的sheet  */
        HSSFSheet sheet = wb.createSheet("报表");

        /** 第三步,设置样式以及字体样式*/
        HSSFCellStyle titleStyle = createTitleCellStyle(wb);
        HSSFCellStyle headerStyle = createHeadCellStyle(wb, (short) 10);
        HSSFCellStyle contentStyle = createContentCellStyle(wb, (short) 10);

        sheet.setColumnWidth(0, 10 * 256);
        sheet.setColumnWidth(1, 16 * 256);
        sheet.setColumnWidth(2, 12 * 256);
        sheet.setColumnWidth(3, 10 * 256);
        sheet.setColumnWidth(4, 16 * 256);
        sheet.setColumnWidth(5, 10 * 256);
        sheet.setColumnWidth(6, 11 * 256);
        sheet.setColumnWidth(7, 16 * 256);
        sheet.setColumnWidth(8, 10 * 256);
        sheet.setColumnWidth(9, 13 * 256);
        /** 第四步,创建标题 ,合并标题单元格 */
        // 行号
        int rowNum = 0;
        // 创建第一页的第一行,索引从0开始
        HSSFRow row0 = sheet.createRow(rowNum++);

        row0.setHeight((short) 1200);// 设置行高
        String title = excelData.get("title").toString();
        for (int i = 0; i <= 9; i++) {
            HSSFCell c00 = row0.createCell(i);
            c00.setCellValue(title);
            c00.setCellStyle(titleStyle);
        }
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 9));//标题合并单元格操作,6为总列数

        // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
        // 第二行
        HSSFRow row1 = sheet.createRow(rowNum++);
        row1.setHeight((short) 700);

        String[] row_first = {"", "全部车辆维修次数", excelData.get("totalTimes").toString(), "", "全部车辆报价金额", excelData.get("totalSettlementPrice").toString(), "", "全部车辆结算金额", excelData.get("totalPaymentPrice").toString(), ""};
        for (int i = 0; i < row_first.length; i++) {
            HSSFCell tempCell = row1.createCell(i);
            tempCell.setCellValue(row_first[i]);
            tempCell.setCellStyle(headerStyle);
        }

//        // 合并
        sheet.addMergedRegion(new CellRangeAddress(1, 1, 2, 3));
        sheet.addMergedRegion(new CellRangeAddress(1, 1, 5, 6));
        sheet.addMergedRegion(new CellRangeAddress(1, 1, 8, 9));


        HSSFRow row6 = sheet.createRow(rowNum++);
        row6.setHeight((short) 900);
        String[] row_six = {"分析报告", excelData.get("report").toString(), "", "", "", "", "", "", "", ""};
        for (int i = 0; i < row_six.length; i++) {
            HSSFCell tempCell = row6.createCell(i);
            tempCell.setCellValue(row_six[i]);
            tempCell.setCellStyle(headerStyle);
        }
        // 合并
        sheet.addMergedRegion(new CellRangeAddress(2, 2, 1, 9));

 创建标题样式代码

/**
     * 创建标题样式
     *
     * @param wb
     * @return
     */
    private static HSSFCellStyle createTitleCellStyle(HSSFWorkbook wb) {
        HSSFCellStyle cellStyle = wb.createCellStyle();
        cellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());//背景颜色
        cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直对齐
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

        HSSFFont headerFont1 = (HSSFFont) wb.createFont(); // 创建字体样式
        headerFont1.setBold(true); //字体加粗
        headerFont1.setFontName("楷体"); // 设置字体类型
        headerFont1.setFontHeightInPoints((short) 16); // 设置字体大小
        cellStyle.setFont(headerFont1); // 为标题样式设置字体样式
        cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
        cellStyle.setBorderLeft(BorderStyle.THIN); //左边框
        cellStyle.setBorderRight(BorderStyle.THIN); //右边框
        cellStyle.setBorderTop(BorderStyle.THIN); //上边框
        return cellStyle;
    }

POI也可以通过读取excel来编辑它,适用于特定的表格,不过过程比较繁琐,并且excel不设计好边框会导致读取到了空的单元格,导致编辑失败报错

标签:cellStyle,Java,wb,样式,setColumnWidth,Excel,POI,sheet,256
From: https://www.cnblogs.com/jy6634/p/17918796.html

相关文章

  • Java是一门功能强大且广泛使用的编程语言
    Java是一门功能强大且广泛使用的编程语言,有许多有趣而实用的开发教程可以帮助你更好地学习和应用Java。以下是一些有趣的Java开发教程推荐:JavaFX图形用户界面教程:JavaFX是Java的一个丰富的GUI平台,用于创建漂亮的用户界面和交互式效果。学习JavaFX可以让你了解如何创建各种富有创意......
  • nacos 2.3.0 支持 java openjdk 22吗? 支持
    [nacos2.2.3支持jdk17吗?-SegmentFault思否](https://segmentfault.com/q/1010000044179850)renguoqiang@ubuntulenovo:~/gitee_base/nacos-server-2.3.0/bin$java找不到命令“java”,但可以通过以下软件包安装它:sudoaptinstalldefault-jre#version2:1.......
  • java读取网络文件和本地文件
    java读取网络文件和本地文件:packagecom.mybatisplustest.test;importjava.io.*;importjava.net.URL;/***CreatedbyAdministratoron2023/12/21.*/publicclassTest{publicstaticvoidmain(String[]args){//读取网络文件readNet......
  • python+excel接口自动化获取token并作为请求参数进行传参操作
    1、登录接口登录后返回对应token封装:importjsonimportrequestsfromutil.operation_jsonimportOperationJsonfrombase.runmethodimportRunMethodclassOperationHeader:def__init__(self,response):self.response=json.loads(response)defget_response_token(......
  • JavaTimeModule 所在包
    JavaTimeModule是jackson转换java8时间类的需要的typo包,但是jackson-databind包中不存在这个类,JavaTimeModule所在包为jackson-datatype-jsr310,maven坐标如下:<!--https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310--><dependency......
  • java基础之“获取系统类型,区分Windows和Linux系统”
    一、获取系统类型,区分Windows和Linux系统//判断是否是windows系统System.getProperties().getProperty("os.name").contains("Windows") 二、案例@TestpublicvoidtestWindows(){Stringproperty=System.getProperties().getProperty("os.name");......
  • POI中创建条件格式后使用aspose转换为PDF时,颜色不正常的问题
    场景:使用一个EXCEL模板,其中创建了一些条件格式,通过EASYPOI进行模板填充,使用FE模板指令,复制填充了一些行,同时复制了这些行中存在的条件格式。现象:打开EXCEL,条件格式是正常的,但是随后通过ASPOSECELLS将XLSX转换为PDF,会发现新创建的条件格式的长短、颜色都不正常解决方法一:在EXCE......
  • SQLSERVER导入EXCEL数据
    1、整理好对应的EXCEL表格数据,要有标题行。否则无法映射。 2、登录进入SQLSERVER数据库管理软件,选中要导入的数据库,右键-->点击任务-->选择导入数据  3、点击下一步,直到这个页面,数据源下拉选择EXCEL,选择文件路径,勾选首行包含列名称3、(1)如果点击下一步报错The'Microsof......
  • java方法引用
    一、方法引用1、概述 示例:packagecom.itbianma04;publicclassDemo{publicstaticvoidmain(String[]args){usePrinttable(s->System.out.println(s));usePrinttable(System.out::println);}privatestaticvoidusePrinttable(......
  • 全球知名的五款JavaScript混淆加密工具详解
    ​现在市场上有很多好用的混淆加密工具,其中一些比较流行且受欢迎的工具包括:1、UglifyJS(罗马尼亚):UglifyJS是一个非常流行的JavaScript工具库,它可以压缩、混淆、美化和格式化JavaScript代码。使用UglifyJS时,您可以通过调整参数来控制压缩级别并设置混淆选项。注:主要用于压缩j......