Question

Question de base: Comment charger un modèle Excel pour une utilisation avec POI, puis l'enregistrer dans un fichier XLS

Edit:

La réponse est:

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

(Il suffit de charger le modèle comme un classeur, puis écrire le classeur en tant que fichier XLS ailleurs.)

Était-ce utile?

La solution

Avez-vous essayé de le charger comme un .xls standard en utilisant POI, modifiant et il sauver?

Ceci est l'approche que je l'ai utilisé pour insérer des macros dans un .xls POI généré. Je crée le fichier avec la macro (il est vrai comme .xls), puis le charger dans mon application, les données et remplir avec enregistrer en tant que .xls nouvellement créé. Que tout a bien fonctionné.

Autres conseils

Vous pouvez charger directement une .xls qui agira comme modèle, et le modifier.

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

Chargera un xls, en préservant sa structure (macros incluses). Vous pouvez ensuite le modifier,

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

et puis enregistrez-le.

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

Hope this helps.

Vous pouvez également utiliser modèle interne comme ressource.

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

Et sauf que:

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

Vous pouvez créer un fichier XLS à partir d'un modèle XLS.

Mais, pour ce faire, vous devez créer une copie du modèle à chaque fois que vous avez besoin d'utiliser le modèle. Sinon, vous allez modifier le modèle d'origine (ce que vous voulez pas).

Alors, vous devez d'abord obtenir votre fichier de modèle:

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

Copiez le fichier modèle:

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

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

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

Accédez au nouveau fichier copié:

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

Créer un Workbook, de sorte que vous pouvez écrire dans votre nouveau fichier:

Workbook workbook = WorkbookFactory.create(inp);

Après écriture dans votre classeur:

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

Une astuce pour créer un fichier modèle XLS est marquer le modèle avec une variable pour vous localiser la position que vous souhaitez remplir. Comme:

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

Pour Excel-fichiers avec .xlsx utilisent les éléments suivants:

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

Vous pouvez utiliser XSSF en ajoutant la dépendance poi-OOXML dans votre pom.xml Maven si vous voulez enregistrer au format 2007+.

Si vous avez template.xlsx fichier avec une feuille de résumé dans ce xmls et que vous voulez changer une cellule particulière, vous pouvez le faire comme:

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top