likes
comments
collection
share

Apache POI处理Excel文档

作者站长头像
站长
· 阅读数 4

    前一段时间Java处理Excel文件都是使用JXL这个库,后来发现这个库并不支持xlsx这种高版本的格式,并且不能处理大量的数据,就找到了POI这个库

1:Apache POI 是什么

    Apache POI项目的任务是根据Office Open XML标准(OOXML)和Microsoft的OLE 2复合文档格式(OLE2)创建和维护Java API,以处理各种文件格式。简而言之,可以使用Java读取和写入Microsoft Excel文件。此外,您可以使用Java读取和写入Microsoft Word和Microsoft PowerPoint文件

1.1 Apache POI环境

    从poi.apache.org/download.ht… 下载最新的POI库,之后解压,获取我们需要的jar

Apache POI处理Excel文档

1.2 创建一个SHEET

创建一个sheet的步骤时首先必须来创建一个工作簿对象(XSSFWorkbook),第二不就是在使用XSSFWorkbook对象创建一个sheet

//创件一个工作簿
XSSFWorkbook workbook = new XSSFWorkbook(); 
//创建一个电子表格
XSSFSheet spreadsheet = workbook.createSheet("Sheet Name");

XSSFWorkbook类:可以对对Excel进行读写,它兼容.xls和.xlsx格式,支持office的2007或者更高版本,HSSFWorkbook类:可以对对Excel进行读写,它兼容.xls格式,不支持高版本的office所以一般我们会使用XSSFWorkbook来操作表格,看看如何向单元格里保存数据

public class WriteSheetTest {

 private static final String PATH = "WriteSheet.xlsx"; //文件路径

 public static void main(String[] args) throws Exception {
      FileInputStream fis = new FileInputStream(PATH);
      //创建一个工作簿
      XSSFWorkbook workbook = new XSSFWorkbook();
      //创建一个电子表格
      XSSFSheet sheet = workbook.createSheet("mySheet");
      //行对象
      XSSFRow row ;
      for(int r = 0 ;r<3;r++) {
         //1.创建一个行对象
          row = sheet.createRow(r);
          for(int c = 0;c<3;c++) {
              //2.创建一个单元格
              Cell cell = row.createCell(c);
              cell.setCellValue(r+c);
          }
      }
      FileOutputStream fos = new FileOutputStream(PATH);
      workbook.write(fos);
      workbook.close();
  }
}

Apache POI处理Excel文档上面的程序中创建了名字为mySheet的电子表格,写了三行三列的数据,POI中使用XSSFRow对象表示行对象,使用XSSFRow row = sheet.createRow(r);创建一个行对象,参数是行号,Cell表示一个单元格对象,可以使用行对象XSSFRow创建一个单元格格对象,Cell cell = row.createCell(c);参数是列号。

1.3 读取一个SHEET

public class Readsheet 
{
   static XSSFRow row;

public static void main(String[] args) throws Exception 
   {
      FileInputStream fis = new FileInputStream(
      new File("WriteSheet.xlsx"));
      //打开需要读取的文件
      XSSFWorkbook workbook = new XSSFWorkbook(fis);
      //按照SHEET的名称读取一个电子表格
      XSSFSheet sheet = workbook.getSheet("mySheet");
//      int size = sheet.getLastRowNum();
//      System.out.println(size);
//      int s= sheet.getPhysicalNumberOfRows();
//      System.out.println(s);
      //获取一个行的迭代器
      Iterator<Row> rowIterator = sheet.rowIterator();
      while(rowIterator.hasNext()) {
           row = (XSSFRow) rowIterator.next();
           Iterator<Cell> cellIterator = row.cellIterator();
           while(cellIterator.hasNext()) {
               Cell cell = cellIterator.next();
               switch(cell.getCellTypeEnum() ) {
               case NUMERIC:
                  double val = cell.getNumericCellValue();
                  System.out.print(val+"\t\t");
                  break ;
               case STRING:
                   String str = cell.getStringCellValue();
                   System.out.print(str+"\t\t");

               }
           }
           System.out.println();
      }
      fis.close();
   }
}

运行结果:0.0    1.0    2.01.0    2.0    3.02.0    3.0    4.0这里需要注意,在读取单元格的值时需要先判断数据类型,不然获取数据会报数据类型错误。