Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ApachePOI(Java)创建的Excel文件可以';不能在Windows上打开_Java_Windows_Excel_Apache Poi - Fatal编程技术网

使用ApachePOI(Java)创建的Excel文件可以';不能在Windows上打开

使用ApachePOI(Java)创建的Excel文件可以';不能在Windows上打开,java,windows,excel,apache-poi,Java,Windows,Excel,Apache Poi,在我的系统中,我有一个类,可以创建一个包含一些数据的excel 基本上,我从变量ArrayList>读取所有字符串值,并将它们写入excel单元格 public void writeData(Data data, int sheetNumber) throws EncryptedDocumentException, InvalidFormatException, IOException { org.apache.poi.ss.usermodel.Workbook work

在我的系统中,我有一个类,可以创建一个包含一些数据的excel

基本上,我从变量ArrayList>读取所有字符串值,并将它们写入excel单元格

public void writeData(Data data, int sheetNumber)
        throws EncryptedDocumentException, InvalidFormatException, IOException {
    org.apache.poi.ss.usermodel.Workbook workbook;

    try {
        workbook = WorkbookFactory.create(new File(path));
    } catch (FileNotFoundException e) {
        workbook = new HSSFWorkbook();
    }

    org.apache.poi.ss.usermodel.Sheet sheet;
    try {
        sheet = workbook.createSheet("Sheet" + sheetNumber);
    } catch (IllegalArgumentException e) {
        sheet = workbook.getSheet("Sheet" + sheetNumber);
    }

    int dataListSize = data.getData().size();
    for (int i = 0; i < dataListSize; i++) {
        Row row = sheet.createRow(i);
        int rowSize = data.getData().get(i).size();
        for (int j = 0; j < rowSize; j++) {
            row.createCell(j);
            row.getCell(j).setCellValue(String.valueOf(data.getData().get(i).get(j)));
        }
    }
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(new File(path));
        workbook.write(fos);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        workbook.close();
        if (fos != null) {
            try {

                fos.flush();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}
public-void-writeData(数据数据,int-sheetNumber)
引发EncryptedDocumentException、InvalidFormatException、IOException{
org.apache.poi.ss.usermodel.工作簿;
试一试{
工作簿=WorkbookFactory.create(新文件(路径));
}catch(filenotfounde异常){
工作簿=新的HSSF工作簿();
}
org.apache.poi.ss.usermodel.Sheet;
试一试{
工作表=工作簿.createSheet(“工作表”+工作表编号);
}捕获(IllegalArgumentException e){
工作表=工作簿.getSheet(“工作表”+工作表编号);
}
int dataListSize=data.getData().size();
for(int i=0;i
据我所知,代码运行良好,我在Ubuntu上开发,总是先尝试这里的代码,创建的EXCEL很好,我一点问题都没有


当我将其中一个应用到Windows(XP和7,在两者上都试用过)时,我无法使用Microsoft Excel打开它们中的任何一个

有没有人有这方面的经验


谢谢。

正如Axel提到的,问题在于文件扩展名

我可以在Ubuntu(14.04和16.04)中打开以这种方式创建的文件,但不能在Windows(7、8和10)中打开


解决方案是使用
.xls
扩展名,而不是
.xlsx
,这样我就可以在任何操作系统中打开和使用文件。
HSSF是Office 97*.xls格式。(它代表HorribleSpreadSheetFormat。)

}catch(filenotfounde异常){
工作簿=新的HSSF工作簿();
}
当您这样做时,您选择了*.xls格式。如果需要*.xlsx格式,则需要使用
XSSFWorkbook


“我无法使用Microsoft Excel打开其中任何一个。”为什么不能?什么错误消息?请举例说明
路径中的内容。您使用的是什么版本的Apache POI?如果不是最新版本,升级时会发生什么?对不起,我没有错误消息。正如我所说,我使用ubuntu,一些同事使用Windows。我希望明天会收到这些信息。我使用的是3.14版本。(我认为这是最新的(不包括测试版))如果
文件(路径)
不存在,则您正在创建
工作簿=新的HSSFWorkbook()
A
HSSFWorkbook
BIFF
格式的Excel工作簿。必须将其命名为
*.xls
。如果将其命名为
*.xlsx
,则Excel将不会打开它,因为文件格式和文件扩展名不匹配。这就是为什么我要举一个例子来说明
路径中的内容。也许如此,我使用xls而不是xlsx它仍然不适用于我,请看,