我正在使用 Apache POI 工作簿在 Java 中打开一个 Excel 文件(源),更改一组特定单元格中的数据,将工作簿保存到一个单独的文件,然后关闭工作簿(因为文档说明要关闭工作簿,甚至如果它是只读的)。
POI 每次都会更改源 Excel 文件中的数据。根据 POI 文档的建议,我尝试了几种不同的方法来防止这种情况发生,但这些方法都失败了。
这里有两种尝试在理论上应该有效,但没有。
尝试 1 - 将源文件设置为只读
File file = new File("{path-to-existing-source-file}");
file.setReadOnly();
Workbook workbook = WorkbookFactory.create(file); // throws a FileNotFoundException
“访问被拒绝”的AFileNotFoundException抛出在WorkbookFactory.create(file):
java.io.FileNotFoundException: {path-to-source-file-that-exists} (Access is denied)
at java.io.RandomAccessFile.open0(Native Method)
at java.io.RandomAccessFile.open(RandomAccessFile.java:316)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:243)
at org.apache.poi.poifs.nio.FileBackedDataSource.newSrcFile(FileBackedDataSource.java:158)
at org.apache.poi.poifs.nio.FileBackedDataSource.<init>(FileBackedDataSource.java:60)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:224)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:172)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:298)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:271)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:252)
at com.stackoverflow.MyClass(MyClass.java:71)
源文件存在,并且有效只读。
尝试 2 - 使用允许显式设置只读的 POI API 构造函数
File file = new File("{path-to-existing-source-file}");
Workbook workbook = WorkbookFactory.create(file, null, true); // true is read-only
// dataBean is just a container bean with the appropriate reference values
Sheet sheet = workbook.getSheet(dataBean.getSheetName());
Row row = sheet.getRow(dataBean.getRowNumber());
Cell cell = row.getCell(dataBean.getColumnNumber());
cell.setCellValue(dataBean.getValue());
“不允许操作,文档以只读模式打开!”。当然设置为只读;我不想写入源,我只想将所有数据发送到新目标。
使用 POI 时,我可以设置或更改什么以不改变来源?
我们目前的解决方法是创建一个重复的源文件,但这不是一个好的解决方案。
胡说叔叔
DIEA
慕妹3242003
慕尼黑8549860
相关分类