PDI de Apache: hojas de cálculo

Este capítulo explica cómo crear una hoja de cálculo y manipularla usando Java. La hoja de cálculo es una página en un archivo de Excel; contiene filas y columnas con nombres específicos.

Después de completar este capítulo, podrá crear una hoja de cálculo y realizar operaciones de lectura en ella.

Crear una hoja de cálculo

En primer lugar, creemos una hoja de cálculo utilizando las clases de referencia discutidas en los capítulos anteriores. Siguiendo el capítulo anterior, primero cree un libro de trabajo y luego podemos continuar y crear una hoja.

El siguiente fragmento de código se utiliza para crear una hoja de cálculo.

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

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

Filas en la hoja de cálculo

Las hojas de cálculo tienen un diseño de cuadrícula. Las filas y columnas se identifican con nombres específicos. Las columnas se identifican con alfabetos y las filas con números.

El siguiente fragmento de código se utiliza para crear una fila.

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

Escribir en una hoja de cálculo

Consideremos un ejemplo de datos de empleados. Aquí los datos de los empleados se dan en forma de tabla.

ID de emp Nombre emp Designacion
Tp01 Gopal Gerente técnico
TP02 Manisha Lector de pruebas
Tp03 Masthan Escritor técnico
Tp04 Satish Escritor técnico
Tp05 Krishna Escritor técnico

El siguiente código se utiliza para escribir los datos anteriores en una hoja de cálculo.

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

Guarde el código Java anterior como Writesheet.java, y luego compílelo y ejecútelo desde el símbolo del sistema de la siguiente manera:

$javac Writesheet.java
$java Writesheet

Se compilará y ejecutará para generar un archivo de Excel llamado Writesheet.xlsx en su directorio actual y obtendrá el siguiente resultado en el símbolo del sistema.

Writesheet.xlsx written successfully

los Writesheet.xlsx archivo tiene el siguiente aspecto.

Leer de una hoja de cálculo

Consideremos el archivo de Excel anterior llamado Writesheet.xslxcomo entrada. Observe el siguiente código; se utiliza para leer los datos de una hoja de cálculo.

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

Mantengamos el código anterior en Readsheet.java y luego compílelo y ejecútelo desde el símbolo del sistema de la siguiente manera:

$javac Readsheet.java
$java Readsheet

Si el entorno de su sistema está configurado con la biblioteca de puntos de interés, se compilará y ejecutará para generar la siguiente salida en el símbolo del sistema.

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