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

Запишите в электронную таблицу

Рассмотрим пример данных о сотрудниках. Здесь данные о сотрудниках представлены в табличной форме.

Emp Id Имя Emp Обозначение
TP01 Гопал Технический менеджер
TP02 Маниша Proof Reader
TP03 Мастхан Технический писатель
TP04 Satish Технический писатель
TP05 Кришна Технический писатель

Следующий код используется для записи вышеуказанных данных в электронную таблицу.

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

Он будет скомпилирован и выполнится для создания файла Excel с именем Writesheet.xlsx в вашем текущем каталоге, и вы получите следующий вывод в командной строке.

Writesheet.xlsx written successfully

В Writesheet.xlsx файл выглядит следующим образом.

Читать из таблицы

Давайте рассмотрим указанный выше файл Excel с именем Writesheet.xslxкак вход. Обратите внимание на следующий код; он используется для чтения данных из электронной таблицы.

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

Давайте сохраним приведенный выше код в 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