Saltar al contenido

Escribir un gran conjunto de resultados en un archivo de Excel usando POI

No busques más por otras webs ya que llegaste al espacio correcto, contamos con la respuesta que quieres pero sin complicaciones.

Solución:

Uso de SXSSF poi 3.8

package example;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class SXSSFexample 


    public static void main(String[] args) throws Throwable 
        FileInputStream inputStream = new FileInputStream("mytemplate.xlsx");
        XSSFWorkbook wb_template = new XSSFWorkbook(inputStream);
        inputStream.close();

        SXSSFWorkbook wb = new SXSSFWorkbook(wb_template); 
        wb.setCompressTempFiles(true);

        SXSSFSheet sh = (SXSSFSheet) wb.getSheetAt(0);
        sh.setRandomAccessWindowSize(100);// keep 100 rows in memory, exceeding rows will be flushed to disk
    for(int rownum = 4; rownum < 100000; rownum++)
        Row row = sh.createRow(rownum);
        for(int cellnum = 0; cellnum < 10; cellnum++)
            Cell cell = row.createCell(cellnum);
            String address = new CellReference(cell).formatAsString();
            cell.setCellValue(address);
        

    


    FileOutputStream out = new FileOutputStream("tempsxssf.xlsx");
    wb.write(out);
    out.close();



Requiere:

  • poi-ooxml-3.8.jar,
  • poi-3.8.jar,
  • poi-ooxml-schemas-3.8.jar,
  • stax-api-1.0.1.jar,
  • xml-apis-1.0.b2.jar,
  • xmlbeans-2.3.0.jar,
  • commons-códec-1.5.jar,
  • dom4j-1.6.1.jar

Enlace útil

Vaya. Creo que estás escribiendo el libro de trabajo 944.000 veces. Su llamada wb.write(bos) está en el ciclo interno. No estoy seguro de que esto sea bastante consistente con la semántica de la clase Workbook. Por lo que puedo decir en los Javadocs de esa clase, ese método escribe el completo libro de trabajo al flujo de salida especificado. Y va a escribir cada fila que ha agregado hasta ahora una vez por cada fila a medida que crece.

Esto explica por qué también está viendo exactamente 1 fila. El primer libro de trabajo (con una fila) que se escribe en el archivo es todo lo que se muestra, y luego 7 GB de basura a partir de entonces.

A menos que tenga que escribir fórmulas o formatear, debería considerar escribir un archivo .csv. Infinitamente más simple, infinitamente más rápido, y Excel hará la conversión a .xls o .xlsx de forma automática y correcta por definición.

Al final de la página puedes encontrar las interpretaciones de otros administradores, tú igualmente puedes insertar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *