Código de Java - Java escribir excel con Apache Poi Java API

Imágen de perfil
Val: 42
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Java escribir excel con Apache Poi Java APIgráfica de visualizaciones


Java

Publicado el 19 de Noviembre del 2015 por Julio (12 códigos)
14.184 visualizaciones desde el 19 de Noviembre del 2015
Vamos a explicar como crear una hoja excel, como añadir celdas, modificar su contenido y en definitiva manipular los datos según necesitemos con un ejemplo.

Java escribir excel con Apache Poi Java API

En este primer ejemplo vamos a leer el fichero excel que pasaremos como parámetro y crearemos una nueva hoja excel donde haremos una copia de la hoja excel leída, es un ejercicio sencillo que nos introduce en la creación de nuestras propias excel desde Java, a continuación el código Xules donde tenéis todas las explicaciones de lo que se hace:

Espero que te haya sido útil

Requerimientos

Es necesario incluir en el proyecto la librería Apache POI: https://poi.apache.org/download.html

1.0
estrellaestrellaestrellaestrellaestrella(1)

Publicado el 19 de Noviembre del 2015gráfica de visualizaciones de la versión: 1.0
14.185 visualizaciones desde el 19 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Aquí encontrarás este y alguno más: http://codigoxules.org/java-escribir-excel-con-apache-poi-java-api/.
Ten en cuenta que para utilizar esta librería la tienes que añadir al proyecto con el que estés trabajando, descarga la librería Apache POI:https://poi.apache.org/download.html para añadirla, aquí: http://codigoxules.org/netbeans-anadir-libreria-apache-poi-java-api/ te explico como añadirla a un proyecto en Netbeans, también te puede servir de orientación con otros IDEs ya que se hace de forma similar.
Si quieres puedes descargarte aquí la hoja excel utilizada en el ejemplo: http://codigoxules.org/?wpdmdl=1086 una excel sencilla con países, monedas e idiomas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package org.xulescode.poi;
 
import java.io.*;
 
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 
import org.apache.poi.ss.usermodel.Cell;
 
/** 
 * Utility class, where we will create methods for training read and write excel files,
 * with <a href="https://poi.apache.org/">Apache POI</a>, we use 
 * <a href="https://poi.apache.org/spreadsheet/">POI-HSSF and POI-XSSF - Java API To Access Microsoft</a>
 * HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file.
 * 
 * Clase de utilidades, donde crearemos métodos
 * para el aprendizaje de la lectura y escritura de ficheros excel con 
 * <a href="https://poi.apache.org/">Apache POI</a>, usaremos
 * <a href="https://poi.apache.org/spreadsheet/">POI-HSSF and POI-XSSF - Java API To Access Microsoft</a>
 * HSSF es el proyecto POI de implementación total en Java para ficheros Excel '97(-2007).
 *
 * @author Xules You can follow me on my website http://www.codigoxules.org/en
 * Puedes seguirme en mi web http://www.codigoxules.org).
 */
public class JavaPoiUtils {
 
    /**
     * Explanation of the method by which we read the excel file we pass as
     * parameter if exists, and where we copy its content in a new excel spreadsheet 
     * is also passed as a parameter.
     * Método con el que leemos el fichero excel que pasamos como
     * parámetro si existe y donde copiamos su contenido en una nueva hoja excel que
     * también se pasa como parámetro.
     * @param excelFile <code>String</code> 
     *      excel File we are going to read. 
     *      Fichero excel que vamos a leer. 
     * @param excelNewFile <code>String</code> 
     *      excel File we are going to write. 
     *      Fichero excel en el que vamos a escribir. 
     */
    public void readWriteExcelFile(File excelFile, File excelNewFile){
        InputStream excelStream = null;
        OutputStream excelNewOutputStream = null;
        try {            
            excelStream = new FileInputStream(excelFile);
            excelNewOutputStream = new FileOutputStream(excelNewFile);
            // High level representation of a workbook.
            // Representación del más alto nivel de la hoja excel.
            HSSFWorkbook hssfWorkbook = new HSSFWorkbook(excelStream);
            HSSFWorkbook hssfWorkbookNew = new HSSFWorkbook();
            // We chose the sheet is passed as parameter. 
            // Elegimos la hoja que se pasa por parámetro.
            HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0);
            // We create the new sheet we are going to use.
            // Creamos la hoja nueva que vamos a utilizar.
            HSSFSheet hssfSheetNew = hssfWorkbookNew.createSheet("Copy-Copia");
            // An object that allows us to read a row of the excel sheet, and extract from it the cell contents.
            // Objeto que nos permite leer un fila de la hoja excel, y de aquí extraer el contenido de las celdas.
            HSSFRow hssfRow;
            HSSFRow hssfRowNew;
            // Initialize the object to read the value of the cell 
            // Inicializo el objeto que leerá el valor de la celda
            HSSFCell cellNew;            
            // I get the number of rows occupied on the sheet
            // Obtengo el número de filas ocupadas en la hoja
            int rows = hssfSheet.getLastRowNum();  
            String cellValue; 
             
            // Creating title row (creando unas filas con título)
             
            // ENGLISH TITLE (Titulo en inglés)
            hssfRowNew = hssfSheetNew.createRow(1); 
            cellNew = hssfRowNew.createCell(1);
            cellNew.setCellType(HSSFCell.CELL_TYPE_STRING);
            cellNew.setCellValue("THIS IS A COPY");  
            // SPANISH TITLE (Título en español)
            hssfRowNew = hssfSheetNew.createRow(3);
            cellNew = hssfRowNew.createCell(1);
            cellNew.setCellType(HSSFCell.CELL_TYPE_STRING);
            cellNew.setCellValue("ESTO ES UNA COPIA"); 
            // For this example we'll loop through the rows getting all the cells to copy them in the new sheet.
            // Para este ejemplo vamos a recorrer todas las filas para obtener todas las celdas y copiarlas en la nueva hoja.
            for (int r = 0; r < rows; r++) {
                hssfRow = hssfSheet.getRow(r);
                if (hssfRow == null){
                    break;
                }else{
                    System.out.print("Row: " + r + " -> ");
                    // Creamos la columna en la nueva excel
                    hssfRowNew = hssfSheetNew.createRow(r + 10);   
                    for (int c = 0; c < hssfRow.getLastCellNum(); c++) {
                        /* 
                            We have those cell types (tenemos estos tipos de celda): 
                                CELL_TYPE_BLANK, CELL_TYPE_NUMERIC, CELL_TYPE_BLANK, CELL_TYPE_FORMULA, CELL_TYPE_BOOLEAN, CELL_TYPE_ERROR
                        */
                        cellValue = hssfRow.getCell(c) == null?"":
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_STRING)?hssfRow.getCell(c).getStringCellValue():
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_NUMERIC)?"" + hssfRow.getCell(c).getNumericCellValue():
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_BOOLEAN)?"" + hssfRow.getCell(c).getBooleanCellValue():
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_BLANK)?"BLANK":
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_FORMULA)?"FORMULA":
                                (hssfRow.getCell(c).getCellType() == Cell.CELL_TYPE_ERROR)?"ERROR":"";
                        System.out.print("[Column " + c + ": " + cellValue + "] ");
                        cellNew = hssfRowNew.createCell(c);
                        cellNew.setCellType(HSSFCell.CELL_TYPE_STRING);
                        cellNew.setCellValue(cellValue);
                    }
                    System.out.println();
                }
            }
            hssfWorkbookNew.write(excelNewOutputStream);
            excelNewOutputStream.close();
            System.out.println("Your excel file has been generated!(¡Se ha generado tu hoja excel!");
        } catch (FileNotFoundException fileNotFoundException) {
            System.out.println("The file not exists (No se encontró el fichero): " + fileNotFoundException);
        } catch (IOException ex) {
            System.out.println("Error in file procesing (Error al procesar el fichero): " + ex);
        } finally {
            try {
                excelStream.close();
            } catch (IOException ex) {
                System.out.println("Error in file processing after close it (Error al procesar el fichero después de cerrarlo): " + ex);
            }
        }
    }
 
    /**     
     * Main method for the tests for the methods of the class <strong>Java
     * read excel</strong> and <strong>Java create excel</strong> 
     * with <a href="https://poi.apache.org/">Apache POI</a>. 
     * <br>
     * Método main para las pruebas para los método de la clase,
     * pruebas de <strong>Java leer excel</strong> y  <strong>Java crear excel</strong>
     * con <a href="https://poi.apache.org/">Apache POI</a>.     
     * @param args 
     */
    public static void main(String[] args){
        JavaPoiUtils javaPoiUtils = new JavaPoiUtils();
        File excelFile = new File("/home/xules/codigoxules/apachepoi/PaisesIdiomasMonedas.xls");
        File newExcelFile = new File("/home/xules/codigoxules/apachepoi/PaisesIdiomasMonedasNuevo.xls");
        if (!newExcelFile.exists()){
            try {
                newExcelFile.createNewFile();
            } catch (IOException ioe) {
                System.out.println("(Error al crear el fichero nuevo)" + ioe);
            }
        }
        javaPoiUtils.readWriteExcelFile(excelFile, newExcelFile);
    }
}



Comentarios sobre la versión: 1.0 (1)

Imágen de perfil
15 de Enero del 2019
estrellaestrellaestrellaestrellaestrella
Excelente, tu código me será útil para aprender a manejar archivos excel desde Java.
Esto porque en muchos casos un cliente o algún amigo le pide a uno un programa pero también le pide a uno que le permita lanzar resultados finales, resúmenes y datos de estado de dineros o recursos en Excel.
Responder

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s3350