HSSFWorkBook和XSSFWorkBook详解

Excel是一种数据记录和处理工具,近年来,它也越来越成为了许多企业和机构中不可或缺的工具。HSSFWorkBook和XSSFWorkBook是Java中两个主要的Excel处理类库,它们提供了Excel读写、修改、创建等常规操作的方法。在这篇文章中,我们将从多个方面详细介绍HSSFWorkBook和XSSFWorkBook的用法及其不同之处。

一、创建工作簿

创建Excel工作簿是Excel文件处理的第一步。无论是使用HSSFWorkBook还是XSSFWorkBook创建工作簿,首先需要引入相关的类库:

//HSSF相关
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellReference;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;

//XSSF相关
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;

对于一个HSSFWorkBook工作簿的创建,可以使用以下代码:

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("sheet1");
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue("Hello World");

上述代码首先创建了一个HSSFWorkbook对象,然后创建了名为“sheet1”的HSSFSheet对象,接着创建第1行的HSSFRow对象,最后在其中创建第1列的HSSFCell对象并将其值设置为“Hello World”。

而对于XSSFWorkBook工作簿的创建,可以使用以下代码:

XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("sheet1");
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
cell.setCellValue("Hello World");

可以看出,HSSFWorkBook和XSSFWorkBook的创建方式非常相似,唯一的差别就在于前者用到的类库是HSSF,后者用到的类库是XSSF。

二、读取Excel文件

Java中读取Excel文件,是Excel处理应用功能的常用方式。POI库中提供了一些类来帮助我们读取Excel文件。以下就是一个从Excel文件中读取数据的例子。

//HSSF相关
FileInputStream input = new FileInputStream(new File("workbook.xls"));
HSSFWorkbook workbook = new HSSFWorkbook(input);
HSSFSheet sheet = workbook.getSheetAt(0);

Iterator rowIterator = sheet.iterator();
while(rowIterator.hasNext()) {
    HSSFRow row = (HSSFRow)rowIterator.next();
    Iterator cellIterator = row.cellIterator();
    while(cellIterator.hasNext()) {
        HSSFCell cell = (HSSFCell)cellIterator.next();
        System.out.print(cell.toString() + " ");
    }
    System.out.println("");
}

//XSSF相关
FileInputStream input = new FileInputStream(new File("workbook.xlsx"));
XSSFWorkbook workbook = new XSSFWorkbook(input);
XSSFSheet sheet = workbook.getSheetAt(0);

Iterator rowIterator = sheet.iterator();
while(rowIterator.hasNext()) {
    XSSFRow row = (XSSFRow)rowIterator.next();
    Iterator cellIterator = row.cellIterator();
    while(cellIterator.hasNext()) {
        XSSFCell cell = (XSSFCell)cellIterator.next();
        System.out.print(cell.toString() + " ");
    }
    System.out.println("");
}

由于HSSFWorkBook和XSSFWorkBook以及其相关类库都是从POI库中引入的,因此在读取Excel文件时,它们的区别不是很大。不同的地方在于HSSFWorkBook使用.xls文件格式,而XSSFWorkBook使用.xlsx文件格式。

三、添加样式

Excel表格中的样式非常重要,它能够使得表格看起来更加美观、易读。以下是如何为Excel表格添加样式的代码示例。

//HSSF相关
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("sheet1");
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue(1.2);

HSSFCellStyle style = workbook.createCellStyle();
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
cell.setCellStyle(style);

//XSSF相关
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("sheet1");
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
cell.setCellValue(1.2);

XSSFCellStyle style = workbook.createCellStyle();
style.setDataFormat(workbook.createDataFormat().getFormat("0.00"));
cell.setCellStyle(style);

上述代码创建了一个HSSFWorkBook或XSSFWorkBook对象,并在其上创建了一个名为“sheet1”的表格。接着创建指向表格中单元格的对象,并在其中填入数值1.2。最后,又创建封装样式信息的HSSFCellStyle或XSSFCellStyle对象,并将其设置为特定的单元格的样式。

四、使用函数

Excel表格中的公式是Excel表格的核心功能,可以对表格数据进行非常灵活的操作。以下示例为如何在Excel表格中使用函数。

//HSSF相关
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("sheet1");
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellFormula("SUM(A1:A2)");

//XSSF相关
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("sheet1");
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
cell.setCellFormula("SUM(A1:A2)");

在上述代码中,我们可以看到,HSSFWorkBook和XSSFWorkBook的区别处在于使用的类库不同。但是在使用函数时,它们的方法非常类似,都可以使用setCellFormula()函数来设置要使用的公式。在上述代码中,我们设置了Excel表格中求和函数的公式,即将A1和A2单元格的数值相加求和。

五、写入文件

最后,我们需要将在Excel表格中所做的修改写入到Excel文件。以下示例代码为如何将Excel表格写入到文件中。

//HSSF相关
FileOutputStream out = new FileOutputStream(new File("workbook.xls"));
workbook.write(out);
out.close();

//XSSF相关
FileOutputStream out = new FileOutputStream(new File("workbook.xlsx"));
workbook.write(out);
out.close();

在上述代码中,我们创建一个输出流,并将Excel表格写入到文件中,最后关闭输出流。这是为Excel文件保存所必需的步骤,否则,对Excel表格的修改无法被保存。

六、总结

本文从创建工作簿、读取Excel文件、添加样式、使用函数、写入文件五个方面,详细介绍了HSSFWorkBook和XSSFWorkBook两个类库的用法及其区别。当然,在实际应用开发中,还需要根据具体需求进行更为灵活的调整和操作。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/159852.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-20 00:16
下一篇 2024-11-20 00:16

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论