Apache POI - 電子表格



本章解釋如何使用 Java 建立電子表格並對其進行操作。電子表格是 Excel 檔案中的一個頁面;它包含具有特定名稱的行和列。

完成本章後,您將能夠建立電子表格並在其上執行讀取操作。

建立電子表格

首先,讓我們使用前面章節中討論的參考類建立一個電子表格。按照上一章的內容,先建立一個工作簿,然後我們可以繼續建立工作表。

以下程式碼片段用於建立電子表格。

//Create Blank workbook
XSSFWorkbook workbook = new XSSFWorkbook();

//Create a blank spreadsheet
XSSFSheet spreadsheet = workbook.createSheet("Sheet Name");

電子表格中的行

電子表格具有網格佈局。行和列用特定名稱標識。列用字母標識,行用數字標識。

以下程式碼片段用於建立一行。

XSSFRow row = spreadsheet.createRow((short)1);

寫入電子表格

讓我們考慮一個員工資料示例。此處員工資料以表格形式給出。

員工ID 員工姓名 職位
Tp01 Gopal 技術經理
TP02 Manisha 校對員
Tp03 Masthan 技術撰寫人
Tp04 Satish 技術撰寫人
Tp05 Krishna 技術撰寫人

以下程式碼用於將上述資料寫入電子表格。

import java.io.File;
import java.io.FileOutputStream;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Writesheet {
   public static void main(String[] args) throws Exception {
      //Create blank workbook
      XSSFWorkbook workbook = new XSSFWorkbook(); 

      //Create a blank sheet
      XSSFSheet spreadsheet = workbook.createSheet(" Employee Info ");

      //Create row object
      XSSFRow row;

      //This data needs to be written (Object[])
      Map < String, Object[] > empinfo = new TreeMap < String, Object[] >();
      empinfo.put( "1", new Object[] { "EMP ID", "EMP NAME", "DESIGNATION" });
      empinfo.put( "2", new Object[] { "tp01", "Gopal", "Technical Manager" });
      empinfo.put( "3", new Object[] { "tp02", "Manisha", "Proof Reader" });
      empinfo.put( "4", new Object[] { "tp03", "Masthan", "Technical Writer" });
      empinfo.put( "5", new Object[] { "tp04", "Satish", "Technical Writer" });
      empinfo.put( "6", new Object[] { "tp05", "Krishna", "Technical Writer" });
      
      //Iterate over data and write to sheet
      Set < String > keyid = empinfo.keySet();
      int rowid = 0;

      for (String key : keyid) {
         row = spreadsheet.createRow(rowid++);
         Object [] objectArr = empinfo.get(key);
         int cellid = 0;

         for (Object obj : objectArr) {
            Cell cell = row.createCell(cellid++);
            cell.setCellValue((String)obj);
         }
      }
      //Write the workbook in file system
      FileOutputStream out = new FileOutputStream(new File("Writesheet.xlsx"));
      workbook.write(out);
      out.close();
      System.out.println("Writesheet.xlsx written successfully");
   }
}

將上述 Java 程式碼儲存為 **Writesheet.java**,然後從命令提示符編譯並執行它,如下所示:

$javac Writesheet.java
$java Writesheet

它將編譯並執行以在當前目錄中生成名為 **Writesheet.xlsx** 的 Excel 檔案,您將在命令提示符中獲得以下輸出。

Writesheet.xlsx written successfully

**Writesheet.xlsx** 檔案如下所示:

Writesheet

從電子表格讀取

讓我們將上述名為 **Writesheet.xslx** 的 Excel 檔案作為輸入。觀察以下程式碼;它用於從電子表格讀取資料。

import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

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);
      XSSFSheet spreadsheet = workbook.getSheetAt(0);
      Iterator < Row >  rowIterator = spreadsheet.iterator();
      
      while (rowIterator.hasNext()) {
         row = (XSSFRow) rowIterator.next();
         Iterator < Cell >  cellIterator = row.cellIterator();
         
         while ( cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            
            switch (cell.getCellType()) {
               case NUMERIC:
                  System.out.print(cell.getNumericCellValue() + " \t\t ");
                  break;
               
               case STRING:
                  System.out.print(
                  cell.getStringCellValue() + " \t\t ");
                  break;
            }
         }
         System.out.println();
      }
      fis.close();
   }
}

讓我們將上述程式碼儲存在 **Readsheet.java** 檔案中,然後從命令提示符編譯並執行它,如下所示:

$javac Readsheet.java
$java Readsheet

如果您的系統環境已配置 POI 庫,它將編譯並執行,並在命令提示符中生成以下輸出。

EMP ID   EMP NAME       DESIGNATION 
 tp01     Gopal       Technical Manager 
 tp02     Manisha     Proof Reader 
 tp03     Masthan     Technical Writer 
 tp04     Satish      Technical Writer 
 tp05     Krishna     Technical Writer
廣告
© . All rights reserved.