2015-05-22 11 views
7

Nie wiem, dlaczego plik, który piszę przy użyciu POI, nie może zostać otwarty przez MS Excel 2013, ale plik jest nadal czytelny na podstawie POI. (Wartość komórki można zmienić)Plik Excel z Apache POI Cant Open przez MS Excel (uszkodzony)

this jest błąd z pliku

Oto kod

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

Dzięki za pomoc !!

Odpowiedz

1

Głównym problemem, że widzę tutaj jest:

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

Zamiast tego trzeba użyć:

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

być czytelny przez MS EXCEL 2013

+0

HSSFWorkbook działa zbyt. –

+0

tak .. ale aby można było otworzyć na MS Excel 2013 trzeba użyć ... XSSFWorkbook –

+0

mój plik wejściowy jest typu xls, a wyjście jest również typu xls. Ponadto próbowałem przesłać plik wyjściowy do google docs, i nie udało się załadować (myślę, ponieważ plik wyjściowy jest uszkodzony) – ketelagoreng

6

Istnieją dwa problemy z Twój kod. Po pierwsze to, że:

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

Jak wyjaśniono w Apache POI Docs, don't use an InputStream if you have a File!

drugie, to:

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

To zadziała tylko dla .xls plików, nie dla .xlsx nich. Zamiast tego trzeba użyć WorkbookFactory który identyfikuje rodzaj i daje prawo skoroszytu dla formatu

So, zmienić swój kod będzie

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

Ciągle pojawia się ten sam błąd, oryginalny rozmiar pliku to 25kb, ale rozmiar pliku wyjściowego to tylko 17kb (z tą samą zawartością lub może kilkoma różnymi) – ketelagoreng

+0

Upewnij się, że zapisujesz do innego pliku. Punkty POI nie obsługują (obecnie) obsługi zapisów w miejscu, więc musi to być inny plik – Gagravarr

+0

String urii = fileUri.replace (". Xls", "0.xls"); ta linia do zmiany pliku URI i nazwy, proszę pomóż meeeeeee .....: (( – ketelagoreng

0

rozwiązany:

używając prawdziwego android urządzenie zamiast emulatora bluestack, Nie wiem dlaczego, ale działa!

Dzięki wszystkim: D

0

Rozwiązaniem jest użycie rozszerzenie .xls i .xlsx NIE, jak określono w niniejszym answer

Powiązane problemy