【发布时间】:2021-12-31 03:28:05
【问题描述】:
问题总结
我创建了一个简单的程序来读取和写入电子表格。但它不起作用。有谁知道我做错了什么?
我尝试过的
我已成功读取电子表格。我已经成功地能够写入电子表格。但是,我不能同时做这两件事。
createRow 函数似乎覆盖了整行。因此,擦除以前的数据。这是一个非常严格的约束。这可能是阻止我同时阅读和写作的原因。
我注意到输出显示“提供的文件为空(零字节长)”。但我确保路径正确,并且电子表格中确实有数据。不确定该错误来自何处。
我已尝试遵循 Stack Overflow 上其他帖子的建议,但他们的任何建议(包括关闭 fileInputStream 和 fileOutputStream)似乎都不会影响我的程序。
我的代码
package certExamPractice;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class SpreadsheetPractice {
public static void main(String[] args) throws IOException {
String path = "C:/Users/james/Desktop/Spreadsheets/Spreadsheet4.xlsx";
FileInputStream fileInputStream = new FileInputStream(path);
FileOutputStream fileOutputStream = new FileOutputStream(path);
XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
XSSFSheet sheet = workbook.createSheet("Sheet1");
Set<String> vir = new HashSet<String>();
vir.add(sheet.getRow(0).getCell(0).getStringCellValue());
vir.add(sheet.getRow(1).getCell(0).getStringCellValue());
vir.add(sheet.getRow(2).getCell(0).getStringCellValue());
vir.add(sheet.getRow(3).getCell(0).getStringCellValue());
sheet.getRow(0).createCell(1).setCellValue("zeta");
sheet.getRow(1).createCell(1).setCellValue("eta");
sheet.getRow(2).createCell(1).setCellValue("theta");
sheet.getRow(3).createCell(1).setCellValue("iota");
System.out.println("Vir = " + vir);
workbook.write(fileOutputStream);
workbook.close();
fileOutputStream.close();
}
}
我的电子表格
输出
Exception in thread "main" org.apache.poi.EmptyFileException: The supplied file was empty (zero bytes long)
at org.apache.poi.util.IOUtils.peekFirstNBytes(IOUtils.java:112)
at org.apache.poi.poifs.filesystem.FileMagic.valueOf(FileMagic.java:209)
at org.apache.poi.openxml4j.opc.internal.ZipHelper.verifyZipHeader(ZipHelper.java:143)
at org.apache.poi.openxml4j.opc.internal.ZipHelper.openZipStream(ZipHelper.java:175)
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:104)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:312)
at org.apache.poi.ooxml.util.PackageHelper.open(PackageHelper.java:47)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:299)
at certExamPractice.SpreadsheetPractice.main(SpreadsheetPractice.java:18)
【问题讨论】: