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.
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);
}
}
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);
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.
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");
}
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
.
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
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.
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.
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.
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.