web-dev-qa-db-de.com

"Paket sollte einen Inhaltstyp-Teil [M1.13] enthalten."

Ich versuche, in eine Excel-Datei zu schreiben, erhalte jedoch weiterhin den Fehler:

Ausnahme im Thread "main" org.Apache.poi.POIXMLException: org.Apache.poi.openxml4j.exceptions.InvalidFormatException: Das Paket muss einen Inhaltstyp-Teil [M1.13] enthalten.

Nach meinem Verständnis fehlt mir eine Jar-Datei. 

Kann mir jemand helfen herauszufinden, um welche Datei es sich handelt? 

P.S. Ich benutze Netbeans.

 my current files

import Java.io.FileInputStream;
import Java.io.FileNotFoundException;
import Java.io.FileOutputStream;
import Java.io.IOException;
import javax.swing.JOptionPane;
import org.Apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.Apache.poi.xssf.usermodel.XSSFCell;
import org.Apache.poi.xssf.usermodel.XSSFRow;
import org.Apache.poi.xssf.usermodel.XSSFSheet;
import org.Apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 *
 * @author nicholaskissaun
 */

public class Tester {

    public static void main (String args \[\])throws FileNotFoundException, IOException, InvalidFormatException{     
        int RowCount = 7, iChoice;
        String sChoice;
        XSSFSheet s;
        XSSFRow row1;
        XSSFWorkbook wb;
        XSSFCell r1c1, r1c2, r1c8, r1Episodes;

        FileInputStream fis = new FileInputStream("/Users/nicholaskissaun/Google Drive/Grade 11_12/Computer Science/Java/Term1/src/IA/Profiles/Becky/ShowDetails.xlsx");           
        wb = new XSSFWorkbook(fis);  
        s = wb.getSheetAt(0);

    }      

}
6
Tephrite

Verwenden Sie die Dateierweiterung, um WorkSheet Type zu behandeln

  String inputFilename = new File(path).getName();

                    switch (inputFilename.substring(inputFilename.lastIndexOf(".") + 1,
                            inputFilename.length())) {
                        case "xls":
                            return readXLS(path);

                        case "xlsx":
                            return readXLSX(path);
                        default:
                            Log.e(TAG, "No XLS file chosen");
                            return "Please select valid \"Excel\" File\"";
                    }

Für XLSX-Datei: XSSFWorkbook & XSSFSheet verwenden

    XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File(path)));

    XSSFSheet sheet = workbook.getSheetAt(0);

Für XLS-Datei: HSSFWorkbook & HSSFSheet verwenden

    HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File(path)));

    HSSFSheet sheet = workbook.getSheetAt(0);
7
Hitesh Sahu

Dies kann passieren, wenn Sie Ihre XLS/XLSX-Datei über LibreOffice erstellen. Anscheinend geht bei der Konvertierung etwas verloren, und die Datei stimmt nicht mit einer in Microsoft Office erstellten Tabelle überein. Ich hatte den gleichen Fehler und die Lösung für mich bestand darin, die gesamte in LibreOffice Calc geleistete Arbeit in eine MS Excel-Tabelle zu kopieren und dann eine neue Datei zu speichern.

5
Gabriel Ullmann

Was Sie haben, ist ein Versionskonflikt zwischen Ihrer Excel-Datei und der Arbeitsmappe, die Sie erstellen möchten. Der beste Weg, dies zu vermeiden, ist: Wählen Sie Schnittstellenimplementierung.

Ich baute auf Hitesh Sahus Lösung auf:

import org.Apache.poi.ss.usermodel.Workbook;
import org.Apache.poi.ss.usermodel.WorkbookFactory;

Workbook workbook = null;

// parse files from request
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile multipartDataPointsFile = multipartRequest.getFile("yourFileHere");

try {
    if(multipartDataPointsFile!=null) {
        String originalFileName= multipartDataPointsFile.getOriginalFilename();
        if(originalFileName!=null && originalFileName.length()>0) {
            switch (originalFileName.substring(originalFileName.lastIndexOf(".") + 1,
                    originalFileName.length())) {
                case "xls":
                    try {
                        workbook = WorkbookFactory.create(multipartDataPointsFile.getInputStream());
                    }catch(org.Apache.poi.openxml4j.exceptions.InvalidFormatException ie){
                        logger.error("Malformed Excel");
                        throw new IOException();
                    }
                    if(workbook!=null) {
                        // Do something in here
                    }else{
                        logger.error("Could not pass along the workbook");
                        throw new IOException();
                    }
                case "xlsx":
                    try {
                        workbook = WorkbookFactory.create(multipartDataPointsFile.getInputStream());
                    }catch(org.Apache.poi.openxml4j.exceptions.InvalidFormatException ie){
                        logger.error("Malformed Excel");
                        throw new IOException();
                    }
                    if(workbook!=null) {
                          // Do something in here
                    }else{
                        logger.error("Could not pass along the workbook");
                        throw new IOException();
                    }
                default:
                    logger.error("File type is not  recognized  Excell type");
                    throw new IOException();
            }

        }else{
            logger.error("Can Not Read File Name");
            throw new IOException();  
        }
    }else{
        logger.error("Did not select a file");
        throw new IOException();
    }
} catch (IOException e) {
    throw new ApplicationErrorException("Can't parse  Excel file");
}
2
mike oganyan

Eine andere mögliche Lösung ist

Workbook workbook = WorkbookFactory.create(source)

WorkbookFactory sollte von dem von Ihnen verwendeten Apache-POI bereitgestellt werden (falls nicht auf eine neuere Version aktualisiert). Es erkennt das Dateiformat und erstellt eine konkrete Implementierung der Workbook-Schnittstelle (XSSFWorkbook oder HSSFWorkbook). Der source-Parameter kann Java.io.InputStream oder Java.io.File sein. 

0

CHECK Excel FORMAT .... Zuerst habe ich ein Beispiel-Excel mit poi erstellt und die Spalten mit meinem ersten Versuch geändert. Es wird derselbe Fehler ausgegeben. Nach wenigen Versuchen wurde es jedoch erfolgreich gelesen. Ich frage mich, warum es beim ersten Lauf nicht funktioniert hat: (.__ Wenn Sie eine richtige Bibliothek haben, überprüfen Sie bitte das korrekte Excel-Format 

0
TAYFUN ÇELİK

Ich habe das gleiche Problem. Wenn Sie eine Excel-Datei öffnen, wird eine Datei wie ~ $ ______. Xlsx .__ generiert. Suchen und löschen Sie alle für mich funktionierenden Dateien.

0
Long Nguyen

Die Excel-Datei, auf die Ihre Anwendung zuzugreifen versucht, reagiert aufgrund von Netzwerkproblemen oder beschädigtem Format nicht. Wenn es sich um ein Netzwerkproblem handelt, versuchen Sie, die Anwendung später auszuführen (oder) Wenn die Datei beschädigt ist, versuchen Sie, eine neue Datei einzufügen und Ihre Anwendung zu testen. Viel Glück.

0
ChiNtu

Ich habe das gleiche Problem. Ihr Excel hat nicht das richtige Format. Sie können alle Arbeiten auf ein neues Blatt kopieren oder das Format löschen. Viel Glück. 

0
Pham Hung

Ok, in meinem Fall hatte ich es so und Line3 hat diese Ausnahme ausgelöst:

File xlsxFile = new File( "C:\\myWorkbook.xlsx" );
FileInputStream finXLSX = new FileInputStream( xlsxFile ); //line1

FileOutputStream foutXLSX = new FileOutputStream( xlsxFile ); //line2

XSSFWorkbook workSheet = new XSSFWorkbook( finXLSX ); //line3

Ich stellte jedoch fest, dass line3 nicht funktionierte, da ich über Line2 auch einen Ausgabestrom auf meiner xlsx-Datei geöffnet hatte. Line3 schlug dann fehl. Ich habe line2 entfernt, damit es funktioniert.

0
UzumakiL