POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能

Apache POI是一種流行的API,它允許程序員使用Java程序創建,修改和顯示MS Office文件。這由Apache軟件基金會開發使用Java分佈式設計或修改Microsoft Office文件的開源庫。它包含類和方法對用戶輸入數據或文件到MS Office文檔進行解碼。

HSSF - 提供讀寫Microsoft Excel格式檔案的功能。
XSSF - 提供讀寫Microsoft Excel OOXML格式檔案的功能。
HWPF - 提供讀寫Microsoft Word格式檔案的功能。
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
HDGF - 提供讀寫Microsoft Visio格式檔案的功能。

Apache POI組件

Apache POI包含類和方法,來將MS Office所有OLE 2文檔複合。此API組件的列表如下。

POIFS (較差混淆技術實現文件系統) : 此組件是所有其他POI元件的基本因素。它被用來明確地讀取不同的文件。

HSSF (可怕的電子表格格式) : 它被用來讀取和寫入MS-Excel文件的xls格式。

XSSF (XML格式) : 它是用於MS-Excel中XLSX文件格式。

HPSF (可怕的屬性設置格式) : 它用來提取MS-Office文件屬性設置。

HWPF (可怕的字處理器格式) : 它是用來讀取和寫入MS-Word的文檔擴展名的文件。

XWPF (XML字處理器格式) : 它是用來讀取和寫入MS-Word的docx擴展名的文件。

HSLF (可怕的幻燈片版式格式) : 它是用於讀取,創建和編輯PowerPoint演示文稿。

HDGF (可怕的圖表格式) : 它包含類和方法爲MS-Visio的二進制文件。

HPBF (可怕的出版商格式) : 它被用來讀取和寫入MS-Publisher文件。

以下是一個Poi生成excel的例子:

package com.h3c.poi.traplib;

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
//http://www.yiibai.com/apache_poi/apache_poi_fonts.html
public class ExcelWrite{

    public static void main(String[] args) {

        //第一步創建workbook  
        HSSFWorkbook wb = new HSSFWorkbook();  

        //第二步創建sheet  
        HSSFSheet sheet = wb.createSheet("測試");  

        //第三步創建行row:添加表頭0行  
        HSSFRow row = sheet.createRow(0);  
        HSSFCellStyle  style = wb.createCellStyle();      
        //style.setAlignment(HSSFCellStyle.ALIGN_CENTER);  //居中  
        HSSFCellStyle  style2 = wb.createCellStyle();  //加粗
        short s = 2;
        HSSFFont font = wb.createFont();
        font.setFontHeightInPoints((short) 16);
        style2.setFont(font);

        //第四步創建單元格  
        HSSFCell cell = row.createCell(0); //第一個單元格  
        cell.setCellValue("姓名");  
        cell.setCellStyle(style2);  



        cell = row.createCell(1);         //第二個單元格     
        cell.setCellValue("年齡");  
        cell.setCellStyle(style2);  


        //第五步插入數據  

        for (int i = 0; i < 5; i++) {  
            //創建行  
            row = sheet.createRow(i+1);  
            //創建單元格並且添加數據  
            row.createCell(0).setCellValue("aa"+i);  
            row.createCell(1).setCellValue(i);  

        }  

        //第六步將生成excel文件保存到指定路徑下  
        try {  
            FileOutputStream fout = new FileOutputStream("E:\\Excel\\traplib\\trapLib.xls");  
            wb.write(fout);  
            fout.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  

        System.out.println("Excel文件生成成功...");  
    }  



    }

用到的jar包:
這裏寫圖片描述

生成的表格:
這裏寫圖片描述

圖片中的樣式可以根據
POI教程進行調整。


下面是一個讀取excel的例子


import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcelFileToList {
    public static void main(String[] args) throws IOException {

        String fileName="C:\\Users\\IBM_ADMIN\\Desktop\\promotion\\a.xls";
          FileInputStream fis = new FileInputStream(fileName); 
            Workbook workbook = null;
          //判斷excel的兩種格式xls,xlsx
          if(fileName.toLowerCase().endsWith("xlsx")){  
              workbook = new XSSFWorkbook(fis);  
          }else if(fileName.toLowerCase().endsWith("xls")){  
              workbook = new HSSFWorkbook(fis);  
          }  


          //得到sheet的總數  
          int numberOfSheets = workbook.getNumberOfSheets();  

          System.out.println("一共"+numberOfSheets+"個sheet");

        //循環每一個sheet  
          for(int i=0; i < numberOfSheets; i++){  

              //得到第i個sheet  
              Sheet sheet = workbook.getSheetAt(i);  
              System.out.println(sheet.getSheetName()+"  sheet");

              //得到行的迭代器  
              Iterator<Row> rowIterator = sheet.iterator();  

              int rowCount=0;
              //循環每一行
              while (rowIterator.hasNext())   
              {  
                  System.out.print("第"+(rowCount++)+"行  ");

                  //得到一行對象  
                  Row row = rowIterator.next();  

                  //得到列對象 
                  Iterator<Cell> cellIterator = row.cellIterator();  

                  int columnCount=0;  

                  //循環每一列
                  while (cellIterator.hasNext())   
                  {  
                      //System.out.print("第"+(columnCount++)+"列:  ");

                      //得到單元格對象
                      Cell cell = cellIterator.next();

                      //檢查數據類型 
                      switch(cell.getCellType()){  
                      case Cell.CELL_TYPE_STRING:  
                              System.out.print(cell.getStringCellValue()+"   ");    
                          break;  
                      case Cell.CELL_TYPE_NUMERIC:  
                          System.out.print(cell.getNumericCellValue()+"   ");  
                      }  
                  } //end of cell iterator 

                  System.out.println();

              } //end of rows iterator  



          } //end of sheets for loop  


         System.out.println("\nread excel successfully...");

          //close file input stream  
          fis.close();  





    }
}

例子生成的效果:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章