ユーザー定義のExcelファイルを開き、データを入力してユーザー指定のパス、ファイル名で保存するJavaプログラムを作成していますと拡張。入力ファイルがxlsmだったとしても、出力をxlsxとして保存することを宣言することは可能ですが、そうではありません。Poi:xlsmからExcelファイルを開いた後、Excelファイルをxlsxとして保存する
try (Workbook workbook = WorkbookFactory.create(new FileInputStream(templateFile))) {
// ...processing the file here,
// including a call of stripMacros, c.f. below
} catch (IOException | EncryptedDocumentException | InvalidFormatException ex) {
throw new TemplateNotFoundException("Template not found. Please check property templatePath: " + templateFile, ex);
}
へのワークブックの設定:ワークブックを開く
:
The file 'FileName.xlsx' is a macro-free file, but contains macro-enabled content
キーコードのセグメント:私は以下のようにコードでそれをしようとすると、ファイルを開くと、私はエラーになります右のタイプ:
private Workbook stripMacros(final Workbook wb, final String outputFormat) {
Workbook workbook = wb;
if ("xlsx".equals(outputFormat) && (workbook.getClass() == XSSFWorkbook.class)) {
XSSFWorkbook wbx = (XSSFWorkbook) workbook;
wbx.setWorkbookType(XSSFWorkbookType.valueOf("XLSX"));
return wbx;
} else if ("xlsm".equals(outputFormat) && (workbook.getClass() == XSSFWorkbook.class)) {
XSSFWorkbook wbm = (XSSFWorkbook) workbook;
wbm.setWorkbookType(XSSFWorkbookType.valueOf("XLSM"));
return wbm;
} else {
return wb;
}
}
ワークブックの保存:
File outFile = new File(destinationPath, fileName + "." + outputFormat);
outFile.getParentFile().mkdirs();
if (workbook != null) {
try {
workbook.write(new FileOutputStream(outFile));
workbook.close();
} catch (IOException ex) {
throw new FileInaccessibleException("Workbook could not be saved. Please check if the workbook under " + destinationPath + fileName + "." + outputFormat + " is not open in any program.", ex);
}
}
ファイルを正しく開くために追加する必要があるものは何ですか?実際にマクロを手動で削除する必要がありますか?