For*_*ing 3 java excel poi-hssf apache-poi xssf
我试图检查我的excel文件是否已经存在.如果它不存在,我想创建一个新的,如果它存在,我将删除它并创建一个新的.我编写了以下程序但是我遇到了错误 - workbook = WorkbookFactory.create(instream);
错误是 - > java.lang.IllegalArgumentException:您的InputStream既不是OLE2流,也不是tryIng.main上的org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:89)中的OOXML流(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();
}
Run Code Online (Sandbox Code Playgroud)
不要创建一个空文件并尝试阅读它,这将无法正常工作.空零字节文件无效,无法加载而是让POI为您创建一个新文件,稍后您将编写该文件.
更改代码:
if(xlFile.exists() && !xlFile.isDirectory())
xlFile.delete(); //delete if file already exists.
xlFile.createNewFile();
inStream = new FileInputStream(xlFile);
workbook = WorkbookFactory.create(inStream);
Run Code Online (Sandbox Code Playgroud)
相反是:
if(xlFile.exists() && !xlFile.isDirectory())
xlFile.delete(); //delete if file already exists.
if (xlFile.toString().endsWith(".xls") {
workbook = new HSSFWorkbook();
} else {
workbook = new XSSFWorkbook();
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您确实想要读取现有文件,如果您有文件,请不要使用流!请参阅POI文档的这一部分,了解原因.