Apache POI - Fogli di calcolo

Questo capitolo spiega come creare un foglio di calcolo e manipolarlo utilizzando Java. Il foglio di calcolo è una pagina in un file Excel; contiene righe e colonne con nomi specifici.

Dopo aver completato questo capitolo, sarai in grado di creare un foglio di calcolo ed eseguire operazioni di lettura su di esso.

Crea un foglio di lavoro

Prima di tutto, creiamo un foglio di calcolo utilizzando le classi di riferimento discusse nei capitoli precedenti. Seguendo il capitolo precedente, creiamo prima una cartella di lavoro e poi possiamo andare avanti e creare un foglio.

Il seguente frammento di codice viene utilizzato per creare un foglio di calcolo.

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

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

Righe sul foglio di lavoro

I fogli di calcolo hanno un layout a griglia. Le righe e le colonne sono identificate con nomi specifici. Le colonne sono identificate con alfabeti e righe con numeri.

Il seguente frammento di codice viene utilizzato per creare una riga.

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

Scrivi in ​​un foglio di calcolo

Consideriamo un esempio di dati dei dipendenti. Qui i dati dei dipendenti sono forniti in forma tabellare.

Emp Id Nome Emp Designazione
Tp01 Gopal Responsabile tecnico
TP02 Manisha Lettore di bozze
Tp03 Masthan Scrittore tecnico
Tp04 Satish Scrittore tecnico
Tp05 Krishna Scrittore tecnico

Il codice seguente viene utilizzato per scrivere i dati precedenti in un foglio di calcolo.

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

Salva il codice Java sopra come Writesheet.java, quindi compilarlo ed eseguirlo dal prompt dei comandi come segue:

$javac Writesheet.java
$java Writesheet

Verrà compilato ed eseguito per generare un file Excel denominato Writesheet.xlsx nella directory corrente e otterrai il seguente output nel prompt dei comandi.

Writesheet.xlsx written successfully

Il Writesheet.xlsx il file ha il seguente aspetto.

Leggi da un foglio di calcolo

Consideriamo il file excel sopra denominato Writesheet.xslxcome input. Rispettare il codice seguente; viene utilizzato per leggere i dati da un foglio di calcolo.

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

Cerchiamo di mantenere il codice sopra in Readsheet.java file, quindi compilarlo ed eseguirlo dal prompt dei comandi come segue:

$javac Readsheet.java
$java Readsheet

Se l'ambiente di sistema è configurato con la libreria POI, verrà compilato ed eseguito per generare il seguente output nel prompt dei comandi.

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