Apache POI - Bảng tính

Chương này giải thích cách tạo bảng tính và thao tác với nó bằng Java. Bảng tính là một trang trong tệp Excel; nó chứa các hàng và cột có tên cụ thể.

Sau khi hoàn thành chương này, bạn sẽ có thể tạo bảng tính và thực hiện các thao tác đọc trên đó.

Tạo bảng tính

Trước hết, chúng ta hãy tạo một bảng tính bằng cách sử dụng các lớp được tham chiếu đã được thảo luận trong các chương trước. Bằng cách tiếp theo chương trước, hãy tạo một sổ làm việc trước và sau đó chúng ta có thể tiếp tục và tạo một trang tính.

Đoạn mã sau được sử dụng để tạo bảng tính.

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

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

Hàng trên bảng tính

Bảng tính có bố cục dạng lưới. Các hàng và cột được xác định bằng tên cụ thể. Các cột được xác định bằng bảng chữ cái và hàng bằng số.

Đoạn mã sau được sử dụng để tạo một hàng.

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

Viết vào một bảng tính

Chúng ta hãy xem xét một ví dụ về dữ liệu nhân viên. Ở đây, dữ liệu nhân viên được đưa ra dưới dạng bảng.

Id trống Tên trống Chỉ định
Tp01 Gopal Giám đốc kỹ thuật
TP02 Manisha Trình đọc bằng chứng
Tp03 Masthan Người viết kỹ thuật
Tp04 Hài lòng Người viết kỹ thuật
Tp05 Krishna Người viết kỹ thuật

Đoạn mã sau được sử dụng để ghi dữ liệu trên vào một bảng tính.

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");
   }
}

Lưu mã Java ở trên dưới dạng Writesheet.java, sau đó biên dịch và chạy nó từ dấu nhắc lệnh như sau:

$javac Writesheet.java
$java Writesheet

Nó sẽ biên dịch và thực thi để tạo một tệp Excel có tên Writesheet.xlsx trong thư mục hiện tại của bạn và bạn sẽ nhận được kết quả sau trong dấu nhắc lệnh.

Writesheet.xlsx written successfully

Các Writesheet.xlsx tệp trông như sau.

Đọc từ Bảng tính

Chúng ta hãy xem xét tệp excel ở trên có tên Writesheet.xslxlàm đầu vào. Quan sát đoạn mã sau; nó được sử dụng để đọc dữ liệu từ bảng tính.

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 Cell.CELL_TYPE_NUMERIC:
                  System.out.print(cell.getNumericCellValue() + " \t\t ");
                  break;
               
               case Cell.CELL_TYPE_STRING:
                  System.out.print(
                  cell.getStringCellValue() + " \t\t ");
                  break;
            }
         }
         System.out.println();
      }
      fis.close();
   }
}

Hãy để chúng tôi giữ mã trên trong Readsheet.java tệp, sau đó biên dịch và chạy nó từ dấu nhắc lệnh như sau:

$javac Readsheet.java
$java Readsheet

Nếu môi trường hệ thống của bạn được cấu hình với thư viện POI, nó sẽ biên dịch và thực thi để tạo ra kết quả sau trong dấu nhắc lệnh.

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