首页 > 其他分享 >Apache POI

Apache POI

时间:2024-11-18 15:20:28浏览次数:1  
标签:sheet int Excel 单元格 excel POI Apache row

一、简介

 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式档案读和写的功能。其中使用最多的就是使用POI操作Excel文件。

 jxl:专门操作Excel

 POI更加全面。

 maven坐标:

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.15</version>
        </dependency>

二、Apache POI常用的类

 

三、HSSF

 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。
 常用的类和方法
 1、HSSFWorkbook :工作簿,代表一个excel的整个文档
        HSSFWorkbook(); // 创建一个新的工作簿
        HSSFWorkbook(InputStream inputStream); // 创建一个关联输入流的工作簿,可以将一个excel文件封装成工作簿
        HSSFSheet createSheet(String sheetname); 创建一个新的Sheet
        HSSFSheet getSheet(String sheetName); 通过名称获取Sheet
        HSSFSheet getSheetAt(int index); // 通过索引获取Sheet,索引从0开始
        HSSFCellStyle createCellStyle(); 创建单元格样式
        int getNumberOfSheets(); 获取sheet的个数
        setActiveSheet(int index); 设置默认选中的工作表
        write();
        write(File newFile);
        write(OutputStream stream);
    2、HSSFSheet:工作表
        HSSFRow createRow(int rownum); 创建新行,需要指定行号,行号从0开始
        HSSFRow getRow(int index); 根据索引获取指定的行
        int addMergedRegion(CellRangeAddress region); 合并单元格
        CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol); 单元格范围, 用于合并单元格,需要指定要合并的首行、最后一行、首列、最后一列。
        autoSizeColumn(int column); 自动调整列的宽度来适应内容
        getLastRowNum(); 获取最后的行的索引,没有行或者只有一行的时候返回0
        setColumnWidth(int columnIndex, int width); 设置某一列的宽度,width=字符个数 * 256,例如20个字符的宽度就是20 * 256
    3、HSSFRow :行
        HSSFCell createCell(int column); 创建新的单元格
        HSSFCell setCell(shot index);
        HSSFCell getCell(shot index);
        setRowStyle(HSSFCellStyle style); 设置行样式
        short getLastCellNum(); 获取最后的单元格号,如果单元格有第一个开始算,lastCellNum就是列的个数
        setHeightInPoints(float height); 设置行的高度
    4、HSSFCell:单元格
        setCellValue(String value); 设置单元格的值
        setCellType(); 设置单元格类型,如 字符串、数字、布尔等
        setCellStyle(); 设置单元格样式
        String getStringCellValue(); 获取单元格中的字符串值
        setCellStyle(HSSFCellStyle style); 设置单元格样式,例如字体、加粗、格式化
        setCellFormula(String formula); 设置计算公式,计算的结果作为单元格的值,也提供了异常常用的函数,如求和”sum(A1,C1)”、日期函数、字符串相关函数、CountIf和SumIf函数、随机数函数等
    5、HSSFCellStyle :单元格样式
        setFont(Font font); 为单元格设置字体样式
        setAlignment(HorizontalAlignment align); // 设置水平对齐方式
        setVerticalAlignment(VerticalAlignment align); // 设置垂直对齐方式
        setFillPattern(FillPatternType fp);
        setFillForegroundColor(short bg); 设置前景色
        setFillBackgroundColor(short bg); 设置背景颜色 
    6、HSSFFont:字体,
        setColor(short color); // 设置字体颜色
        setBold(boolean bold); // 设置是否粗体
        setItalic(boolean italic); 设置倾斜
        setUnderline(byte underline); 设置下划线
    HSSFName:名称
    HSSFDataFormat :日期格式化
    HSSFHeader : Sheet的头部
    HSSFFooter :Sheet的尾部
    HSSFDateUtil :日期工具
    HSSFPrintSetup :打印设置
    HSSFErrorConstants:错误信息表

 Excel中的工作簿、工作表、行、单元格中的关系:

 一个Excel文件对应于一个workbook(HSSFWorkbook),
 一个workbook可以有多个sheet(HSSFSheet)组成,
 一个sheet是由多个row(HSSFRow)组成,
 一个row是由多个cell(HSSFCell)组成

四、入门案例

 1、从Excel文件读取数据

package com.itheima.test;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import java.io.File;

public class POITest {
    //使用POI读取Excel文件中数据
    @Test
    public void readExcel() throws Exception {
        //加载制定文件,创建一个excel对象(工作簿)
//        XSSFWorkbook excel = new XSSFWorkbook("C:\\workFiles\\poi.xlsx");
        XSSFWorkbook excel = new XSSFWorkbook(new File("C:\\workFiles\\poi.xlsx"));
        //读取excel文件中第一个sheet标签页
        XSSFSheet sheet = excel.getSheetAt(0);
        //遍历sheet标签页,获得每一行数据
        for (Row row : sheet) {
            //遍历行,获得每个单元格对象
            for (Cell cell : row) {
                System.out.println(cell.getStringCellValue());
            }
        }
        //关闭资源
        excel.close();
    }
}  

  通过上面的入门案例可以看到,POI操作Excel表格封装了几个核心对象: 

   

  还有一种方式就是获取工作表最后一个行号(有数据的行号),从而根据行号获得行对象,通过行获取最后一个单元格索引,从而根据单元格索引获取每行的一个单元格对象,代码如下:

    @Test
    public void readExcel2() throws Exception {
        //加载制定文件,创建一个excel对象(工作簿)
        XSSFWorkbook excel = new XSSFWorkbook(new File("C:\\workFiles\\poi.xlsx"));
        //读取excel文件中第一个sheet标签页
        XSSFSheet sheet = excel.getSheetAt(0);
        //获得当前工作表中最后一个行号,需要注意:行号从0开始,即有2行lastRowNum=1
        int lastRowNum = sheet.getLastRowNum();
        for (int i = 0; i <= lastRowNum; i++) {
            //根据行号获取行对象
            XSSFRow row = sheet.getRow(i);
            //获得当前行最后一个单元格索引
            short lastCellNum = row.getLastCellNum();
            for (int j = 0; j < lastCellNum; j++) {
                String cellValue = row.getCell(j).getStringCellValue();
                System.out.println(cellValue);
            }
        }
        //关闭资源
        excel.close();
    }

 2、向Excel文件写入数据

  使用POI可以在内存中创建一个Excel文件并将数据写入到这个文件,最后通过输出流将内存中的Excel 文件下载到磁盘

@Test
    public void writeExcel() throws Exception {
        //在内存中创建一个Excel文件
        XSSFWorkbook workbook = new XSSFWorkbook();
        //创建工作表,指定工作表名称
        XSSFSheet sheet = workbook.createSheet("传智播客");
        //在工作表中创建行,0表示第一行
        XSSFRow row = sheet.createRow(0);
        //在行中创建单元格,0表示第一个单元格
        row.createCell(0).setCellValue("编号");
        row.createCell(1).setCellValue("名称");
        row.createCell(2).setCellValue("年龄");

        XSSFRow row1 = sheet.createRow(0);
        row1.createCell(0).setCellValue("1");
        row1.createCell(1).setCellValue("小明");
        row1.createCell(2).setCellValue("10");

        XSSFRow row2 = sheet.createRow(2);
        row2.createCell(0).setCellValue("2");
        row2.createCell(1).setCellValue("小王");
        row2.createCell(2).setCellValue("20");

        //通过输出流将内存中的excel文件写到磁盘
        FileOutputStream out = new FileOutputStream("C:\\workFiles\\itcast.xlsx");
        workbook.write(out);

        out.flush();
        out.close();
        workbook.close();
    }

  执行完成,生成itcast.xlsx文件,并且文件里写入数据。

 

标签:sheet,int,Excel,单元格,excel,POI,Apache,row
From: https://www.cnblogs.com/ajing2018/p/18552753

相关文章

  • 高效处理日均5000亿+数据:58集团基于Apache SeaTunnel的数据集成平台架构优化
    视频链接:58集团大数据平台基于ApacheSeaTunnel的架构演进https://www.bilibili.com/video/BV19GUPYcEgB/?vd_source=e139ecc995ab936267a7991b9de55f6c引言在数字化时代,数据已成为企业最宝贵的资产之一。58集团作为中国领先的生活服务平台,其大数据部在数据集成平台的建设上不......
  • 洛谷P3538 [POI2012] OKR-A Horrible Poem
    前言比较典,可以当模板题,故记录一下,写的可能比较水。题意Link长度为\(n\(\leq6\times10^5)\)的字符串,有\(q\(\leq2\times10^6)\)个询问,每次询问求一个区间的最小循环节。思路题面看起来很唬人,我们平时求最短循环节都是用前缀函数,这一放在区间上就不会做了。但实际......
  • [POI2008] BLO-Blockade
    算法手玩样例可以快速得知,如果第\(i\)个点不是割点,只会导致其他点(以下设为点集\(O\))不能到达\(i\)点,不会影响\(O\)之间的连通性那么显然的,我们进行分类讨论\(i\)点不是割点显然的,只会造成\(2(n-1)\)的贡献\(i\)点就是割点这种情况稍微复杂,......
  • Pointnet++改进68:添加FFCM |融合傅里叶卷积
    简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入,提升性能。3.专栏持续更新,紧随最新的研究内容。目录1.理论介绍2.修改步骤2.1步骤一     2.2步骤二     2.3步骤三1......
  • CSS3 超实用属性:pointer-events(可穿透图层的鼠标事件)
    1、是什么pointer-events 直译为指针事件,该属性指定在什么情况下某个DOM可以成为鼠标事件的target。简而言之,就是允许/禁止DOM的鼠标事件(click事件、hover事件、mouse事件等鼠标事件)2、具体属性分析用法分析:pointer-events:auto|none|visiblePainted|visibleFill|......
  • POI 四题题解
    P3434[POI2006]KRA-TheDisks考场上不知道在想什么,把\(O(n)\)正解改成\(O(n\mathrm{log}n)\)的了。关于\(O(n\mathrm{log}n)\)做法很多,我只讲我的。直接二分盘子会在哪里卡住,二分范围是\(1\simlst\)。\(lst\)表示上一个盘子卡住的位置。\(\mathrm{Code}\)#includ......
  • 10月回顾 | Apache SeaTunnel社区动态与进展一览
    各位热爱ApacheSeaTunnel的小伙伴们,社区10月份月报来啦,请查收!这里将记录ApacheSeaTunne社区每月动态和进展,欢迎关注。月度Merge之星感谢以下小伙伴上个月为ApacheSeaTunnel所做的精彩贡献(排名不分先后):@Hisoka-X,@prclin,@JohnTeslaa,@happyboy1024,@jiamin13579,@luck......
  • dockerfile中cmd和entrypoint的区别
    cmd语法TheCMDinstructionhasthreeforms:CMD["executable","param1","param2"](execform,thisisthepreferredform)CMD["param1","param2"](asdefaultparameterstoENTRYPOINT)CMDcommandparam1par......
  • 10月月报 | Apache DolphinScheduler进展总结
    各位热爱ApacheDolphinScheduler的小伙伴们,社区10月份月报更新啦!这里将记录DolphinScheduler社区每月的重要更新,欢迎关注!月度Merge之星感谢以下小伙伴10月份为ApacheDolphinScheduler所做的精彩贡献(排名不分先后):@shouwangyw,@liunaijie,@binitshrest,@wangxj3,@Sblood......
  • Stable Diffusion Web UI - Checkpoint、Lora、Hypernetworks
    Checkpoint、Lora、Hypernetworks是StableDiffusionWebUI生图的重要工具,它们有各自的特点,结合不同的生图场景选择一个或者多个叠加使用,能够更好的命令StableDiffusion生成理想状态的图片。以人像生图用通俗的方式解释checkpoint:必不可少的模型,全局生成模型,图像的生成......