Domanda

domanda di base:? Come faccio a caricare un modello di Excel per l'utilizzo con PDI e poi salvarlo in un file XLS

Modifica:

La risposta è:

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

(È sufficiente caricare il modello come una cartella di lavoro e quindi scrivere la cartella di lavoro come file XLS altrove.)

È stato utile?

Soluzione

Hai provato a caricarlo come un .xls standard utilizzando POI, che modifica e poi salvarlo?

Questo è l'approccio che ho usato per l'inserimento di macro in un .xls POI-generated. Creo il file con la macro (certamente come .xls) e poi caricarlo nel mio app, popolare con i dati e salvare come .xls appena creato. Che tutto ha funzionato bene.

Altri suggerimenti

È possibile caricare direttamente un file .xls che fungerà da modello e modificarlo.

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

Sarà caricare un xls, preservando la sua struttura (macro inclusi). È quindi possibile modificarlo,

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

e quindi salvarlo.

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

Spero che questo aiuti.

È inoltre possibile utilizzare modello interno come una risorsa.

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

E salvo che:

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

È possibile creare un file XLS da un modello XLS.

Ma, per fare questo, è necessario creare una copia del modello ogni volta che è necessario utilizzare il modello. In caso contrario, si modificare il modello originale (quello che si vuole).

Quindi, è necessario prima ottenere il file di modello:

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

Copiare il file di modello:

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

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

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

L'accesso al nuovo file copiato:

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

Crea un Workbook, in modo da poter scrivere nel vostro nuovo file:

Workbook workbook = WorkbookFactory.create(inp);

Dopo la scrittura nella cartella di lavoro:

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

Un consiglio per creare un file di modello XLS è contrassegnare il modello con qualche variabile per voi localizzare la posizione che si desidera riempire. Come:

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

per Excel-file con .xlsx utilizzare il seguente:

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

È possibile utilizzare XSSF con l'aggiunta di dipendenza POI-OOXML nel pom.xml Maven se si vuole salvarlo in formato 2007+.

Se avete template.xlsx file con un foglio di riepilogo in questo XMLs e si desidera modificare una particolare cella si può fare come:

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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top