java - Java POI - 将工作簿转换为文件
问题描述
我需要返回一个工作簿但转换为 JavaFile
对象。现在我只知道如何将工作簿写入磁盘workbook.write(outputStream)
。但是,我想返回该File
对象以便直接使用它进行进一步处理(上传到亚马逊)。
我的代码:
public File addErrorColumnToExcel(MultipartFile file, HashMap<Integer, String> errors, int newColumnIndex) throws IOException {
Workbook workbook = null;
Sheet sheet = null;
Row row;
Cell newErrorCell;
String errorText;
try {
workbook = new XSSFWorkbook(new BufferedInputStream(file.getInputStream()));
sheet = workbook.getSheetAt(FIRST_SHEET_INDEX);
} catch (IOException e) {
logger.error("cannot get the file: " + file.getOriginalFilename() + e);
}
//do some logic
return workbook; //but I need to convert this to a java File
}
解决方案
您可以创建一个临时文件并将数据写入此文件,然后再返回。处理后不要忘记删除文件。这是一个简化的片段:
public File getEmptyExcelFile() throws IOException {
try (Workbook workbook = new XSSFWorkbook()) {
workbook.createSheet("test"); // do some logic
File outputFile = File.createTempFile("temp", ".xlsx");
try (FileOutputStream fos = new FileOutputStream(outputFile)) {
workbook.write(fos);
}
return outputFile;
}
}
请注意,我对XSSFWorkbook
and使用 try-with-resources FileOutputStream
。
另一个想法是返回一个字节数组byte[]
而不是一个File
. 这是一个更干净的解决方案,不会将文件写入磁盘。
public byte[] getEmptyExcelFileAsBytes() throws IOException {
try (Workbook workbook = new XSSFWorkbook()) {
workbook.createSheet("test"); // do some logic
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
return baos.toByteArray();
}
}
推荐阅读
- ssh - Google Cloud Platform VM 无法从本地 SSH(权限被拒绝(公钥))
- c# - 如何在活动报表中多次调用一个表
- azure - 如何将 Azure Application Insights 添加到 .NET Core 应用程序?
- r - NA 时为轴刻度赋予新名称
- woocommerce - 在 Woocommerce 按钮单击上触发 Facebook 像素事件
- python - 在 Python 的其他地方使用循环的每次迭代作为变量
- orm - Symfony 和 Api-Platform:发布问题并使用多对多关系
- android-studio - fragment.setView(frame,this); 不适用于处理 Android 示例
- javascript - IIS 上未提供 ASP.NET Core MVC 中的 javascript 包
- sql - 客户从上一页登录后,以一种形式显示客户详细信息