我正在尝试检查我的 Excel 文件是否已经存在。如果它不存在,我想创建一个新的,如果它存在,我将删除它并创建一个新的。我编写了以下程序,但在行 - workbook= WorkbookFactory.create(instream); 处收到错误
错误是-> java.lang.IllegalArgumentException:您的InputStream既不是OLE2流,也不是OOXML流 在 org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:89) 在 tryIng.main(tryIng.java:84)
这是一个程序->
try {
String filePath= "C:/Users/pritik/Desktop/t1.xlsx";
File file = new File(filePath);
filePath= file.getAbsolutePath();
xlFile = new File(filePath);
if(xlFile.exists() && !xlFile.isDirectory())
xlFile.delete(); //delete if file already exists.
xlFile.createNewFile();
inStream = new FileInputStream(xlFile);
workbook = WorkbookFactory.create(inStream); // I get error at this line
String sheetName="NewSheet";
Sheet sheet = workbook.createSheet(sheetName);
FileOutputStream fOut = new FileOutputStream(xlFile);
int i,j;
xRows = xTS.length;
xCols = xTS[0].length;
for(i =0;i<xRows;i++)
{
row = sheet.createRow(i);
for(j=0;j<xCols;j++)
{
cell = row.createCell(j);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(xTS[i][j]);
}
}
workbook.write(fOut);
fOut.flush();
fOut.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
不要创建一个空文件并尝试读取它,那是行不通的。空的零字节文件无效,无法加载。相反,请让 POI 为您创建一个新文件,稍后您将编写该文件。
更改代码:
if(xlFile.exists() && !xlFile.isDirectory())
xlFile.delete(); //delete if file already exists.
xlFile.createNewFile();
inStream = new FileInputStream(xlFile);
workbook = WorkbookFactory.create(inStream);
改为:
if(xlFile.exists() && !xlFile.isDirectory())
xlFile.delete(); //delete if file already exists.
if (xlFile.toString().endsWith(".xls") {
workbook = new HSSFWorkbook();
} else {
workbook = new XSSFWorkbook();
}
此外,如果您确实想读取现有文件,如果您有文件,请不要使用流!请参阅 POI 文档的这段内容 了解为什么不这样做。
您不需要根据接受的答案中描述的文件扩展名来选择实现类。
如果您使用 XLSX(Excel 2007+ 格式),则应在项目中包含
poi-ooxml
依赖项。如果您使用 XLS(Excel 97-2003 格式),则应包含 poi
依赖项。
对于 XLSX (Excel 2007+):
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.4</version>
</dependency>
最后要使用 xlsx 和 xls,您需要两个依赖项
第一
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.4</version>
</dependency>
第二个
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.4</version>
</dependency>