Leer y escribir hojas de cálculo de Excel

La comunidad de código abierto ha creado muchos proyectos Java de código abierto, que van desde software de gráficos hasta marcos de juegos y procesadores de texto. En esta publicación, presento un proyecto de biblioteca de código abierto para leer y escribir hojas de cálculo de Microsoft Excel.

Recomendar una biblioteca de hojas de cálculo

P: Me han pedido que amplíe el software de hoja de cálculo basado en Java de mi empresa para leer y escribir hojas de cálculo de Excel. ¿Puede recomendarme una biblioteca Java de código abierto que me ayude con esta tarea?

R: Es posible que desee consultar JExcelAPI, que es una biblioteca de código abierto madura basada en Java que le permite leer, escribir y modificar hojas de cálculo de Excel. Estas son algunas de sus muchas características:

  • Lee datos de libros de Excel 95, 97, 2000, XP y 2003
  • Lee y escribe fórmulas (solo Excel 97 y versiones posteriores)
  • Genera hojas de cálculo en formato Excel 2000
  • Admite formato de fuente, número y fecha
  • Admite sombreado de celda, borde de celda y coloración de celda
  • Modifica hojas de trabajo existentes
  • Admite la copia de gráficos
  • Admite la inserción y copia de imágenes en hojas de cálculo

JExcelAPI fue desarrollado por Andrew Kahn y fue lanzado bajo la GNU Lesser General Public License.

Descarga de la biblioteca JExcelAPI

P: ¿Cómo descargo JExcelAPI?

R: Complete los siguientes pasos para descargar JExcelAPI:

  1. Apunte su navegador al sitio SourceForge de JExcelAPI.
  2. Haga clic en el jexcelapienlace.
  3. En la página resultante, haga clic en uno de los enlaces de carpeta. Por ejemplo, hice clic en el 2.6.12enlace.
  4. En la página resultante, haga clic en el nombre del archivo de distribución. Por ejemplo, hice clic en el jexcelapi_2_6_12.zipenlace.
  5. Después de un breve retraso, su navegador debería pedirle que guarde este archivo. Continúe y guarde el archivo.

Después de la descarga, desarchive este archivo. Debe observar un jexcelapidirectorio de inicio dentro de un jexcelapi_2_6_12directorio.

Demostrando la biblioteca JExcelAPI

P: ¿La biblioteca JExcelAPI contiene demostraciones?

R: El jexcelapidirectorio de inicio de JExcelAPI contiene un jxl.jararchivo que contiene demostraciones para leer, escribir y copiar hojas de cálculo.

La demostración de lectura lee una hoja de cálculo existente y la convierte a valores separados por comas (CSV) o formato XML mediante la opción de línea de comandos -csvo -xml. Considere los siguientes ejemplos:

java -jar jxl.jar -csv budget.xls java -jar jxl.jar -xml budget.xls

Estos ejemplos leen budget.xlsy generan su contenido en formato CSV y XML en una salida estándar. Cuando no se especifica -csvni -xml, -csvse asume.

La demostración de escritura crea una hoja de cálculo de muestra que incluye fórmulas, bordes, imágenes y más. Esta hoja de cálculo se genera especificando la -writeopción de línea de comandos, como se muestra a continuación:

java -jar jxl.jar -write sample.xls

La Figura 1 muestra parte de la sample.xlshoja de cálculo resultante .

Figura 1. Usé LibreOffice Calc para acceder a la hoja de cálculo sample.xls

La demostración de copia copia la hoja de cálculo de muestra jxlrwtest.xls, que se almacena en el mismo directorio que jxl.jar, en una nueva hoja de cálculo. En la hoja de cálculo resultante, la primera hoja (original) no se modifica mientras que la segunda hoja (modificada) contiene valores modificados.

Esta demostración se genera especificando la -rwopción de línea de comandos seguida de jxlrwtest.xlsy el nombre de la hoja de cálculo de salida. Considere la siguiente línea de comando:

java -jar jxl.jar -rw jxlrwtest.xls copy.xls

Esta línea de comando se copia jxlrwtest.xlsen copy.xls. La Figura 2 muestra la segunda hoja (modificada) en LibreOffice Calc.

Figura 2. Haga clic en las pestañas original y modificada para ver las hojas originales y modificadas

Incluyendo JExcelAPI para compilación y ejecución

P: ¿Cómo incluyo JExcelAPI al compilar el código fuente y ejecutar una aplicación?

R: Para incluir JExcelAPI al compilar el código fuente y ejecutar una aplicación, realice una de las siguientes acciones:

  • Agregue el archivo jexcelapidel directorio de inicio jxl.jara su CLASSPATHvariable de entorno.
  • Incluir a jxl.jartravés de la opción de línea de comandos del programa javacy .java-cp

Programando con JExcelAPI

P: ¿Cómo creo programas Java que aprovechan JExcelAPI?

R: El jexcelapidirectorio de inicio incluye un tutorial.htmlarchivo que presenta un tutorial básico sobre programación con JExcelAPI. El tutorial le muestra cómo leer, escribir y copiar hojas de cálculo. El tutorial también trata sobre el formato.

jexcelapitambién incluye un docssubdirectorio, que proporciona acceso a una extensa documentación de la API. Apunte su navegador web al index.htmlarchivo de este directorio y podrá explorar los tipos en los cuatro paquetes documentados de esta biblioteca:

  • jxl: los tipos del paquete principal
  • jxl.demo: tipos para las distintas demostraciones
  • jxl.format: tipos relacionados con el formato
  • jxl.write: tipos para escribir en una hoja de cálculo

Note that this list isn't exhaustive. Additional packages such as jxl.read are present but are not documented. To learn about additional packages, execute jar tvf jxl.jar and examine the package information in the resulting JAR listing.

To help you get started with JExcelAPI, I've created a simple JExcelAPIDemo application that demonstrates creating a new spreadsheet that is saved in output.xls and then reading and outputting the contents of this spreadsheet. Check out Listing 1.

Listing 1. Writing and reading a simple spreadsheet

import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; public class JExcelAPIDemo { public static void main(String[] args) throws BiffException, IOException, WriteException { WritableWorkbook wworkbook; wworkbook = Workbook.createWorkbook(new File("output.xls")); WritableSheet wsheet = wworkbook.createSheet("First Sheet", 0); Label label = new Label(0, 2, "A label record"); wsheet.addCell(label); Number number = new Number(3, 4, 3.1459); wsheet.addCell(number); wworkbook.write(); wworkbook.close(); Workbook workbook = Workbook.getWorkbook(new File("output.xls")); Sheet sheet = workbook.getSheet(0); Cell cell1 = sheet.getCell(0, 2); System.out.println(cell1.getContents()); Cell cell2 = sheet.getCell(3, 4); System.out.println(cell2.getContents()); workbook.close(); } }

Listing 1 first creates a writable workbook by invoking one of Workbook's factory methods. A writable sheet is then created for this workbook, and then a label and a number are added as the sheet's two cell values. The workbook is then written and closed.

Listing 1 continues by getting a workbook associated with output.xls and reading its contents. The getSheet() method provides access to the first sheet within this workbook. Its getCell() method is called to access the two cells, whose contents are then output.

Assuming that jxl.jar is located in the current directory, execute the following command to compile Listing 1:

javac -cp jxl.jar JExcelAPIDemo.java

Assuming success, execute the following command to run JExcelAPIDemo:

java -cp jxl.jar;. JExcelAPIDemo

You should observe the following output:

A label record 3.146

Figure 3 shows you output.xls in a LibreOffice context.

Figure 3. The solitary sheet displays two cell values

What's next?

La próxima vez, presento un conjunto de acertijos que abordan la evolución de las bibliotecas de Java. Estos acertijos se centran en la compatibilidad del código fuente y binario entre los programas cliente y las bibliotecas que utilizan estos programas.

descargar Descargar la fuente Obtener el código fuente para las aplicaciones de esta publicación. Creado por Jeff Friesen para JavaWorld

Se utilizó el siguiente software para desarrollar el código de la publicación:

  • JDK 7u6 de 64 bits
  • JExcelAPI 2.6.12

El código de la publicación se probó en las siguientes plataformas:

  • JVM en Windows 7 SP1 de 64 bits

Esta historia, "Leer y escribir hojas de cálculo de Excel", fue publicada originalmente por JavaWorld.