web-dev-qa-db-fra.com

"Le paquet doit contenir une partie de type de contenu [M1.13]"

J'essaie d'écrire dans un fichier Excel mais je continue à avoir l'erreur:

Exception dans le fil "principal" org.Apache.poi.POIXMLException: org.Apache.poi.openxml4j.exceptions.InvalidFormatException: le package doit contenir une partie de type de contenu [M1.13]

D'après ce que j'ai compris, il me manque un fichier jar. 

Quelqu'un peut-il m'aider à identifier le fichier? 

P.S. J'utilise 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

Utiliser une extension de fichier pour gérer WorkSheet Type

  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\"";
                    }

Pour le fichier XLSX: utilisez XSSFWorkbook & XSSFSheet

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

    XSSFSheet sheet = workbook.getSheetAt(0);

Pour le fichier XLS: utilisez HSSFWorkbook & HSSFSheet

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

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

Cela peut arriver lorsque vous créez votre fichier XLS/XLSX via LibreOffice. Apparemment, quelque chose est perdu dans la conversion et le fichier n’est pas identique à un tableur créé dans Microsoft Office. J'ai eu la même erreur et la solution pour moi était de copier tout le travail que j'ai fait dans LibreOffice Calc sur une feuille de calcul MS Excel, puis d'enregistrer un nouveau fichier.

5
Gabriel Ullmann

Vous avez une incompatibilité de version entre votre fichier Excel et le classeur que vous essayez de créer. Le meilleur moyen d'éviter consiste à choisir l'implémentation d'interface.

J'ai construit sur la solution de Hitesh Sahu:

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

Une autre solution possible est

Workbook workbook = WorkbookFactory.create(source)

WorkbookFactory devrait être fourni par le POI Apache que vous utilisez (s'il n'est pas mis à niveau vers une version plus récente). Il reconnaît le format de fichier et crée une implémentation concrète de l'interface Workbook (XSSFWorkbook ou HSSFWorkbook). Le paramètre source peut être Java.io.InputStream ou Java.io.File

0

CHECK Excel FORMAT .... Tout d’abord, j’ai créé un exemple d’Excel avec poi et j’ai modifié les colonnes. À la première tentative, cela donne la même erreur, mais après quelques tentatives de lecture réussies. Je me demande pourquoi cela n’a pas fonctionné au premier passage: (.__ Si vous avez la bonne bibliothèque, veuillez vérifier le bon format Excel 

0
TAYFUN ÇELİK

J'ai le même problème. Lorsque vous ouvrez un fichier Excel, il génère un fichier tel que ~ $ ______. Xlsx Il suffit de trouver et de supprimer tous les éléments qui ont fonctionné pour moi.

0
Long Nguyen

Le fichier Excel auquel votre application essayant d'accéder ne répond pas en raison de problèmes de réseau ou d'un format corrompu provoque cette erreur. Si cela est dû à un problème de réseau, essayez d'exécuter l'application plus tard (ou) Si le fichier est corrompu, essayez de mettre un nouveau fichier et de tester votre application. Bonne chance.

0
ChiNtu

J'ai le même problème. Votre Excel n'est pas au bon format. Vous pouvez copier tous les travaux sur une nouvelle feuille ou effacer le format. Bonne chance. 

0
Pham Hung

Ok dans mon cas, c'est comme ça que je l'avais et Line3 lançait cette exception:

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

Mais j’ai compris que line3 ne fonctionnait pas, j’avais également ouvert un flux de sortie Sur mon fichier xlsx via line2, puis faire line3 échouait. J'ai enlevé line2 pour le faire fonctionner.

0
UzumakiL