Frage

Grund Frage: Wie lade ich eine Excel-Vorlage für die Verwendung mit POI und dann in eine XLS-Datei speichern

Edit:

Die Antwort lautet:

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

(Laden Sie einfach die Vorlage als Arbeitsmappe und dann die Arbeitsmappe als XLS-Datei an anderer Stelle schreiben.)

War es hilfreich?

Lösung

Haben Sie versucht, es nach oben als Standard .xls mit POI Laden, es zur Änderung und dann sie zu speichern?

Dies ist der Ansatz, den ich zum Einfügen von Makros in einem POI-generierte .xls verwendet habe. Ich erstelle die Datei mit dem Makro (zugegebenermaßen als .xls) und dann in meine App laden, mit Daten füllen und als neu erstellen .xls speichern. Das alles hat gut funktioniert.

Andere Tipps

Sie können direkt eine .xls laden, die als Vorlage dienen soll, und ändern Sie es.

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

Wird eine xls laden, die Erhaltung seiner Struktur (Makros enthalten). Sie können es dann ändern,

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

und speichern Sie es dann.

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

Hope, das hilft.

Sie können auch interne Vorlage als Ressource verwenden.

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

Und sparen Sie Folgendes:

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

Sie können eine XLS-Datei von einer XLS-Vorlage erstellen.

Aber, dies zu tun, müssen Sie jedes Mal eine Kopie der Vorlage erstellen Sie die Vorlage verwenden müssen. Wenn nicht, werden Sie die Original-Vorlage bearbeiten (was Sie nicht wollen).

So, müssen Sie zuerst Ihre Template-Datei erhalten:

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

Kopieren Sie die Template-Datei:

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

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

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

Besuchen Sie die neue kopierte Datei:

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

Erstellen Sie eine Workbook, so können Sie in der neuen Datei schreiben:

Workbook workbook = WorkbookFactory.create(inp);

Nach dem Schreiben in Ihrer Arbeitsmappe:

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

Eine Spitze eine XLS-Vorlagendatei zu erstellen, ist die Vorlage mit einigen Variable markieren Sie die Position zu lokalisieren, die Sie füllen möchten. Wie:

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

Für Excel-Dateien mit .xlsx verwenden Sie die folgende:

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

Sie können mit XSSF von Poi-OOXML Abhängigkeit in Ihrem Maven pom.xml hinzufügen, wenn Sie es in 2007+ Format speichern möchten.

Wenn Sie template.xlsx Datei mit einer Zusammenfassung in diesem xmls haben und Sie möchten eine bestimmte Zelle ändern, die Sie tun können, es als:

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top