来自Apache POI的文件Excel由Excel女士打开(损坏)

时间:2015-05-22 12:57:51

标签: java android excel apache-poi

我不知道为什么我使用POI编写的文件不能由Excel 2013打开,但POI仍然可以读取该文件。 (单元格值可以更改)

this是文件中的错误

这是代码

FileInputStream fis = null;
    try {
        fis = new FileInputStream(fileUri); //not error at fileUri
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    String urii = fileUri.replace(".xls", "0.xls"); //not error
    File fisx = new File(urii);

    Workbook workbook = null;
        workbook = new HSSFWorkbook(fis);

    Sheet sheet = workbook.getSheetAt(0);

    Row row = sheet.getRow(0);

    Cell cell = row.getCell(0);

    String p = cell.getStringCellValue();

    TextView a = (TextView) findViewById(R.id.txtUri);

    cell.setCellValue(new String("popo"));
    String x = cell.getStringCellValue();

    TextView b = (TextView) findViewById(R.id.txtFile);

    a.setText(p);
    b.setText(x);

    OutputStream fos = null;

    fos = new FileOutputStream(fisx);
    workbook.write(fos); //main problem
    fos.flush();
    fos.close();

感谢您的帮助!!

5 个答案:

答案 0 :(得分:6)

您的代码存在两个问题。首先是:

FileInputStream fis = null;
try {
    fis = new FileInputStream(fileUri);

正如Apache POI Docs, don't use an InputStream if you have a File!

中所述

其次,这:

 Workbook workbook = null;
 workbook = new HSSFWorkbook(fis);

这仅适用于.xls个文件,不适用于.xlsx个文件。相反,您需要使用WorkbookFactory来标识类型,并为您提供格式正确的工作簿

因此,请将您的代码更改为

File file = new File(fileUri);
Workbook workbook = WorkbookFactory.create(file);

答案 1 :(得分:1)

我在这里看到的主要问题是:

Workbook workbook = null;
    workbook = new HSSFWorkbook(fis);

相反,你必须使用:

Workbook workbook = null;
    workbook = new XSSFWorkbook(fis);

MS EXCEL 2013可读取。

答案 2 :(得分:0)

解决了:

使用真正的Android设备而不是bluestack模拟器, 我不知道为什么,但它有效!!

谢谢大家:D

答案 3 :(得分:0)

您正在调用getSheetAt(0),但之前没有创建任何工作表(workbook.createSheet(“name”)

答案 4 :(得分:-1)

解决方法是使用.xls扩展名和非.xlsx,如answer

中所述