ApacheのPOIでExcelテンプレートを使用します
-
23-08-2019 - |
質問
基本的な質問:どのように私はPOIで使用するためのExcelテンプレートをロードし、XLSファイルに保存します。
?の編集:の
答えは次のとおりです。
FileInputStream inputStream = new FileInputStream(new File(templateFile));
Workbook workbook = new HSSFWorkbook(inputStream);
(ジャストブックとしてテンプレートをロードし、他の場所でXLSファイルとしてブックを作成します。)
解決
あなたは、POIを使用して、標準.XLSとしてそれをアップロードし、それを修正し、それを保存しようとしたことがありますか?
これは私がPOI-生成.XLSにマクロを挿入するために使用されてきたアプローチです。私は(確か.XLSなど)マクロでファイルを作成してから、私のアプリにそれをロードしたデータを取り込むと、新しく作成した.XLSとして保存します。すべてがうまく働いていること。
他のヒント
あなたは直接テンプレートとして機能し、それを変更します.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();
この情報がお役に立てば幸いです。
また、リソースとして内部テンプレートを使用することができます。
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();
あなたは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} |
------------------------------------
.xlsx
とエクセルファイルには、以下を使用します。
FileInputStream inputStream = new FileInputStream(new File("template.xlsx"));
@SuppressWarnings("resource")
Workbook wb = new XSSFWorkbook(inputStream);
Sheet sheet = wb.getSheet("sheet1");
あなたはMavenののpom.xmlにPOI-OOXMLの依存関係を追加することにより、XSSFを使用することができます。
あなたはこのXMLSで要約シートと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();