web-dev-qa-db-ja.com

Apache POIでのExcelテンプレートの使用

基本的な質問:POIで使用するExcelテンプレートをロードしてXLSファイルに保存するにはどうすればよいですか?

編集:

答えは:

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

(テンプレートをワークブックとしてロードして、そのワークブックをXLSファイルとして別の場所に書き込むだけです。)

19
Jake

POIを使用して標準.xlsとしてロードし、修正して保存してみましたか?

これは、POIで生成された.xlsにマクロを挿入するために使用した方法です。マクロ(確かに.xlsとして)でファイルを作成し、それをアプリにロードして、データを入力し、新しく作成した.xlsとして保存します。それはすべてうまくいきました。

16
Brian Agnew

テンプレートとして機能する.xlsを直接ロードして変更できます。

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

その構造(マクロを含む)を保持して、xlsをロードします。その後、それを変更できます。

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

それを保存します。

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

お役に立てれば。

13
PATRY Guillaume

内部テンプレートをリソースとして使用することもできます。

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

そしてそれを保存してください:

out = new FileOutputStream("./new.xls");
wb.write(out);
out.close();
5
Doan Quang Viet

XLSテンプレートからXLSファイルを作成できます。

ただし、これを行うには、テンプレートを使用する必要があるたびに、テンプレートのコピーを作成する必要があります。そうでない場合は、元のテンプレート(不要なもの)を編集します。

したがって、最初にテンプレートファイルを取得する必要があります。

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

テンプレートファイルをコピーします。

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

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

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

新しくコピーしたファイルにアクセスします。

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

Workbookを作成して、新しいファイルに書き込むことができるようにします。

Workbook workbook = WorkbookFactory.create(inp);

ワークブックに書き込んだ後:

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

XLSテンプレートファイルを作成するためのヒントは、入力する位置をローカライズするための変数をテンプレートにマークすることです。お気に入り:

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

.xlsxを含むExcelファイルの場合は、以下を使用します。

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

2007+形式で保存する場合は、maven pom.xmlにpoi-ooxml依存関係を追加してXSSFを使用できます。

このxmlにサマリーシートを含むtemplate.xlsxファイルがあり、特定のセルを変更する場合は、次のようにします。

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();
1
Bharthan