您的位置:

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两个类库的用法及其区别。当然,在实际应用开发中,还需要根据具体需求进行更为灵活的调整和操作。