Pregunta

Pregunta básica: ¿Cómo se carga una plantilla de Excel para su uso con PDI y luego guardarlo en un archivo XLS

Editar:

La respuesta es:

FileInputStream inputStream = new FileInputStream(new File(templateFile));
Workbook workbook = new HSSFWorkbook(inputStream);

(Sólo tiene que cargar la plantilla como un libro y luego escribir el libro como un archivo XLS en otros lugares.)

¿Fue útil?

Solución

¿Usted ha intentado cargarlo como un .xls estándar utilizando PDI, se modifica y luego guardarlo?

Este es el enfoque que he utilizado para la inserción de macros en un .xls generada POI. Puedo crear el archivo con la macro (la verdad como un .xls) y después colóquela en mi aplicación, pueblan con los datos y guardar como un .xls recién creado. Que todo funcionó bien.

Otros consejos

Puede cargar directamente un archivo .xls que actuará como plantilla y modificarla.

POIFSFileSystem fs = new POIFSFileSystem(
                new FileInputStream("template.xls"));
HSSFWorkbook wb = new  HSSFWorkbook(fs, true);

Se cargar un xls, conservando su estructura (macros incluidas). A continuación, puede modificarlo,

HSSFSheet sheet1 = wb.getSheet("Data");
...

y luego guardarlo.

FileOutputStream fileOut = new FileOutputStream("new.xls"); 
wb.write(fileOut);
fileOut.close();

Espero que esto ayude.

También puede utilizar la plantilla interna como un recurso.

InputStream fis = ChartSample.class.getResourceAsStream("/templates.xls");
HSSFWorkbook wb = new HSSFWorkbook(fis);        
fis.close();
HSSFSheet sh = wb.getSheetAt(0); 
//Here you go

Y excepto que:

out = new FileOutputStream("./new.xls");
wb.write(out);
out.close();

Se puede crear un archivo XLS partir de una plantilla XLS.

Pero, para ello, es necesario crear una copia de la plantilla cada vez que necesita usar la plantilla. Si no, tendrá editar la plantilla original (lo que no quiere).

Por lo tanto, es necesario primero obtener su archivo de plantilla:

URL url = Thread.currentThread().getContextClassLoader().getResource("templates/template.xls");
File file = new File(url.getPath());

Copia el archivo de plantilla:

try (FileOutputStream fileOutputStream = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) {

    Files.copy(file.toPath(), fileOutputStream);

    Workbook workbook = new HSSFWorkbook();
    workbook.write(fileOutputStream);
}

El acceso al nuevo archivo copiado:

FileInputStream inp = new FileInputStream("/home/jake/fileCopiedFromTemplate.xls");

Crear un Workbook, para que pueda escribir en su nuevo archivo:

Workbook workbook = WorkbookFactory.create(inp);

Después de escribir en el libro:

try (FileOutputStream fileOut = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) {
    workbook.write(fileOut);
}

Un consejo para crear un archivo de plantilla XLS es marcar la plantilla con alguna variable para usted localizar la posición que desea rellenar. Como:

------------------------------------
|   | Columna A     | Column B     |
------------------------------------
| 1 |  Some description            | 
------------------------------------
| 2 | {person.name} | {person.age} |
------------------------------------

de Excel-archivos con .xlsx utilizan la siguiente:

FileInputStream inputStream = new FileInputStream(new File("template.xlsx"));
        @SuppressWarnings("resource")
        Workbook wb = new XSSFWorkbook(inputStream);  
        Sheet sheet = wb.getSheet("sheet1");

Puede utilizar XSSF mediante la adición de la dependencia poi-OOXML en su pom.xml experto si desea guardarlo en formato de 2007+.

Si usted tiene template.xlsx archivo con una hoja de resumen en este XMLs y desea cambiar una celda en particular puede hacerlo como:

XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("template.xlsx"));           
FileOutputStream fileOut = new FileOutputStream("new.xlsx");
XSSFSheet sheet1 = wb.getSheet("Summary");
XSSFRow row = sheet1.getRow(15);
XSSFCell cell = row.getCell(3);
cell.setCellValue("Bharthan");

wb.write(fileOut);
log.info("Written xls file");
fileOut.close();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top