每当我使用Apatche POI打开Excel文件时,文件都会被修改,即使我只是在读取文件而不进行任何修改。
以这样的测试代码为例。
public class ApachePoiTest {
@Test
public void readingShouldNotModifyFile() throws Exception {
final File testFile = new File("C:/work/src/test/resources/Book2.xlsx");
final byte[] originalChecksum = calculateChecksum(testFile);
Assert.assertTrue("Calculating checksum modified file",
MessageDigest.isEqual(originalChecksum, calculateChecksum(testFile)));
try (Workbook wb = WorkbookFactory.create(testFile)) {
Assert.assertNotNull("Reading file with Apache POI", wb);
}
Assert.assertTrue("Reading file with Apache POI modified file",
MessageDigest.isEqual(originalChecksum, calculateChecksum(testFile)));
}
@Test
public void readingInputStreamShouldNotModifyFile() throws Exception {
final File testFile = new File("C:/work/src/test/resources/Book2.xlsx");
final byte[] originalChecksum = calculateChecksum(testFile);
Assert.assertTrue("Calculating checksum modified file",
MessageDigest.isEqual(originalChecksum, calculateChecksum(testFile)));
try (InputStream is = new FileInputStream(testFile); Workbook wb = WorkbookFactory.create(is)) {
Assert.assertNotNull("Reading file with Apache POI", wb);
}
Assert.assertTrue("Reading file with Apache POI modified file",
MessageDigest.isEqual(originalChecksum, calculateChecksum(testFile)));
}
private byte[] calculateChecksum(final File file) throws Exception {
final MessageDigest md = MessageDigest.getInstance("MD5");
md.reset();
try (InputStream is = new FileInputStream(file)) {
final byte[] bytes = new byte[2048];
int numBytes;
while ((numBytes = is.read(bytes)) != -1) {
md.update(bytes, 0, numBytes);
}
return md.digest();
}
}
}
Test readingShouldNotModifyFile
总是失败,因为 Apache POI 总是会修改该文件。在测试使用MS Office新创建的空白Excel文件时,Apache POI将文件从8.1 kb切割到6.2 kb并损坏文件。
测试对象:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
以及版本3.12
我是否可以防止Apache POI通过其他方式修改我的文件,然后传递< code>InputStream而不是< code>File。我不想传递< code>InputStream,因为我担心Apache警告它会占用更多内存,并且对< code>InputStream有一些特定的要求。
您的问题是您没有传入只读标志,因此Apache POI默认打开文件读/写。
您需要使用重载的 WorkbookFactory.create 方法,该方法采用只读标志集,该只读标志设置为 true
改变路线
try (InputStream is = new FileInputStream(testFile); Workbook wb = WorkbookFactory.create(is)) {
到
try (IWorkbook wb = WorkbookFactory.create(testFile,null,true)) {
并且您的文件将以只读方式打开,没有任何更改
问题内容: 嗨,我正在尝试从json文件中获取数据,然后插入和ID,然后执行POST REST。我的文件data.json具有: 并且我想添加一个id,以便json数据如下所示: 所以我尝试了: 我无法加载json格式文件。我应该怎么做才能将json文件转换为json对象并添加另一个id值。 问题答案: 使用设置项目。
我正在写一个程序,它需要从excel文件中读取和写入数据,而不考虑格式(xls或xlsx)。 我知道ApachePOI,但它似乎有不同的类来处理xls文件(HSSF)和xlsx(XSSF)文件。 任何人都知道我将如何实现我在这里的目标。(也欢迎使用POI以外的API的想法)。
我是编程界的新手。嗯,我正在尝试使用ApachePOI库读取excel文件(5行5列)。我实际上有两个相同问题的实现。在第一个代码片段中,我只是读取excel文件并将其打印到控制台中。 然而,现在我正试图将读取的excel数据保存到一个数组中。所以我想在动态获取excel行和列大小后设置数组大小。但令我惊讶的是,当我执行第二个代码段时,似乎“while(cellIterator.hasNext()
本文向大家介绍Pandas读取并修改excel的示例代码,包括了Pandas读取并修改excel的示例代码的使用技巧和注意事项,需要的朋友参考一下 一、前言 最近总是和excel打交道,由于数据量较大,人工来修改某些数据可能会有点浪费时间,这时候就使用到了Python数据处理的神器—–Pandas库,话不多说,直接上Pandas。 二、安装 这次使用的python版本是python2.7,安装py
嗨,我想在第一行搜索一个字符串,如果找到了,我想移动那一列。
问题内容: 我正在尝试读取Excel文件(Office 2003)。有一个Excel文件需要上载并对其内容进行解析。 通过Google,我只能找到以下相关(且主题不足)的答案:生成Excel文件,读取Excel XML文件,读取Excel CSV文件或不完整的废弃项目。我拥有Office 2003,因此如果我需要那里的任何文件,都可以使用它们。它已安装在我的盒子上,但尚未安装,也无法安装在我的共享