File Excel From Apache POI Cant Open by Ms Excel (

2019-01-26 09:24发布

问题:

I don't know why the file I write using POI cant be opened by Ms Excel 2013, but the file is still readable by POI. (cell value can be changed)

this is the error from file

here is the code

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();

Thanks for your help!!

回答1:

There are two issues with your code. Firstly this:

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

As explained in the Apache POI Docs, don't use an InputStream if you have a File!

Secondly, this:

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

That will only work for .xls files, not for .xlsx ones. Instead, you need to use WorkbookFactory which identifies the type and gives you the right workbook for the format

So, change your code to be

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


回答2:

The major problem that i see here is:

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

Instead you have to use:

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

TO be readable by MS EXCEL 2013.



回答3:

Solved :

by using real android device instead of bluestack emulator, I dont know why, but it works!!

Thanks everyone :D



回答4:

You are calling getSheetAt(0) but you did not create any sheet before (workbook.createSheet(“name”)



回答5:

The solution is to use the .xls extension and NOT .xlsx, as outlined in this answer