Comment éviter de java.lang.NoClassDefFoundError
J'ai un code pour l'ajout de textes existants .fichier doc, et il va enregistrer sous un nom différent à l'aide de apache POI.
Voici le code que j'ai essayé jusqu'à présent
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFFooter;
import org.apache.poi.xwpf.usermodel.XWPFTable;
public class FooterTableWriting {
public static void main(String args[])
{
String path="D:\\vignesh\\AgileDocTemplate.doc";
String attch="D:\\Attach.doc";
String comment="good";
String stat="ready";
String coaddr="xyz";
String cmail="[email protected]";
String sub="comp";
String title="Globematics";
String cat="General";
setFooter(path, attch, comment, stat, coaddr, cmail, sub, title, cat);
}
private static void setFooter(String docTemplatePath,String attachmentPath,String comments,String status,String coAddress,String coEmail,String subject,String title,String catagory)
{
try{
InputStream input = new FileInputStream(new File(docTemplatePath));
XWPFDocument document=new XWPFDocument(input);
XWPFHeaderFooterPolicy headerPolicy =new XWPFHeaderFooterPolicy(document);
XWPFFooter footer = headerPolicy.getDefaultFooter();
XWPFTable[] table = footer.getTables();
for (XWPFTable xwpfTable : table)
{
xwpfTable.getRow(1).getCell(0).setText(comments);
xwpfTable.getRow(1).getCell(1).setText(status);
xwpfTable.getRow(1).getCell(2).setText(coAddress);
xwpfTable.getRow(1).getCell(3).setText(coEmail);
xwpfTable.getRow(1).getCell(4).setText(subject);
xwpfTable.getRow(1).getCell(5).setText(title);
xwpfTable.getRow(1).getCell(6).setText(catagory);
}
File f=new File (attachmentPath.substring(0,attachmentPath.lastIndexOf('\\')));
if(!f.exists())
f.mkdirs();
FileOutputStream out = new FileOutputStream(new File(attachmentPath));
document.write(out);
out.close();
System.out.println("Attachment Created!");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
La suivante est ce que j'ai
org.apache.poi.POIXMLException: org.apache.xmlbeans.XmlException: error: The document is not a document@http://schemas.openxmlformats.org/wordprocessingml/2006/main: document element mismatch got themeManager@http://schemas.openxmlformats.org/drawingml/2006/main
at org.apache.poi.xwpf.usermodel.XWPFDocument.onDocumentRead(XWPFDocument.java:124)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:200)
at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:74)
at ext.gt.checkOut.FooterTableWriting.setFooter(FooterTableWriting.java:32)
at ext.gt.checkOut.FooterTableWriting.main(FooterTableWriting.java:25)
Caused by: org.apache.xmlbeans.XmlException: error: The document is not a document@http://schemas.openxmlformats.org/wordprocessingml/2006/main: document element mismatch got themeManager@http://schemas.openxmlformats.org/drawingml/2006/main
at org.apache.xmlbeans.impl.store.Locale.verifyDocumentType(Locale.java:458)
at org.apache.xmlbeans.impl.store.Locale.autoTypeDocument(Locale.java:363)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1279)
at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1263)
at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
at org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument$Factory.parse(Unknown Source)
at org.apache.poi.xwpf.usermodel.XWPFDocument.onDocumentRead(XWPFDocument.java:92)
... 4 more
J'ai ajouté tous les fichiers jar correspondant à cela, mais encore je ne trouve pas la solution.Je suis nouveau sur ce apache poi, donc merci de m'aider avec des explications et des exemples.
Grâce
On dirait que vous devez
Êtes-vous à l'aide d'Eclipse?
oui....Je suis à l'aide d'eclipse
Comment l'éviter? Comme d'habitude, assurez-vous, toutes les classes sont sur le chemin de la classe 😉
lol @EJP si vous avez réellement lire les commentaires de l'op dit qu'il se fixe, la première chose que par l'ajout d'un supplément pot et maintenant il commence à se faire une autre erreur. Puis il a dit qu'il avait mise à l'erreur. Je souhaite que je pourrais downvote votre commentaire.
poi-ooxml-schemas.jar
qui vient dans le Apache POI de distribution. Juste l'ajout d'un seul bocal ne signifie pas que vous avez toutes les classes du framework.Êtes-vous à l'aide d'Eclipse?
oui....Je suis à l'aide d'eclipse
Comment l'éviter? Comme d'habitude, assurez-vous, toutes les classes sont sur le chemin de la classe 😉
lol @EJP si vous avez réellement lire les commentaires de l'op dit qu'il se fixe, la première chose que par l'ajout d'un supplément pot et maintenant il commence à se faire une autre erreur. Puis il a dit qu'il avait mise à l'erreur. Je souhaite que je pourrais downvote votre commentaire.
OriginalL'auteur Vignesh Vino | 2013-02-27
Vous devez vous connecter pour publier un commentaire.
Copie de mon commentaire fait à la question:
Ressemble vous avez besoin poi-ooxml-schemas.jar qui vient dans Apache POI de distribution. Juste l'ajout d'un seul bocal ne signifie pas que vous avez toutes les classes du framework.
Après la résolution du problème en fonction de mon commentaire (ou un autre peuple réponses), vous avez cette nouvelle Exception
Lecture Apache POI - HWPF - API Java pour Gérer les Fichiers de Microsoft Word, il semble que vous utilisez la mauvaise classe permettant de gérer 2003 - documents word: HWPF est le nom de notre port de Microsoft Word 97(-2007) format de fichier à pure Java ... Le partenaire de HWPF pour la nouvelle version de Word 2007 .docx format est XWPF.. Cela signifie que vous avez besoin
HWPFDocument
classe permettant de gérer le document ou le changement de votre document à partir de Word 2003 à Word 2007+.OMI-je trouver Apache POI comme une bonne solution pour la manipulation de fichiers Excel, mais je chercherais un autre des options pour la manipulation de documents Word. Vérifier cette question pour obtenir plus d'infos.
OriginalL'auteur Luiggi Mendoza
C'est la dépendance de la hiérarchie pour
poi-ooxml-3.9.jar
.Ce qui signifie l'un d'eux peut être utilisé à runtime même si ils ne sont pas utilisés au moment de la compilation.
Assurez-vous d'avoir tous les fichiers jar dans le classpath de votre projet.
D'avoir des versions différentes ne devrait pas poser de problème.
OriginalL'auteur Nishant Shreshth
Ajouter cette dépendance de votre fichier de configuration:
ou
S'il vous plaît ajouter à la bibliothèque de votre classpath.
OriginalL'auteur Manimaran Samuthirapandi
La classe
org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument.Factory
est situé dans le bocal ooxml-schemas-1.0.jar qui peut être téléchargé iciOriginalL'auteur artfullyContrived
Vous obtenez cette erreur, parce que vous n'avez pas la bonne dépendance de l'XWPFDocument. ooxml-schémas nécessite xmlbeans, et ooxml nécessite poi et ooxml-schémas, etc...
Vérifier ici: http://poi.apache.org/overview.html#components
OriginalL'auteur Xacius
Pensé que je voudrais rendre compte de mon expérience avec cette erreur. J'ai commencé à sortir de la bleue, et n'avait rien changé dans mon espace de travail. S'avère qu'il se produit, tout en essayant de lire un fichier Excel qui a plus de 1 feuille (deuxième feuille était un tableau croisé dynamique, grande quantité de données. Quittez pas sûr si c'est en raison de la taille des données (je soupçonne donc, parce que j'AI du lire les fichiers Excel qui contiennent plus de 1 de la feuille de calcul). Lorsque j'ai supprimé ce deuxième feuille, il a travaillé. Pas de changements à classpath nécessaire.
OriginalL'auteur Chris Light
org.apache.pi.POIXMLException: org.apache.xmlbeans.XmlException: Élément themeManager@http://schemas.openxmlformats.org/drawingml/2006/main n'est pas valide classeur@http://schemas.openxmlformats.org/spreadsheetml/2006/main document ou une substitution valides.
Solution :- utilisation .format xlsx au lieu de .xls
OriginalL'auteur Vinit Bhardwaj
FWIW, j'ai dû ajouter ceci:
OriginalL'auteur slim
Pour mon cas, j'ai eu différentes versions de poi(s). poi-pavé était de 3,9 et tous les autres - pi, pi-ooxml,poi-ooxml-schémas ont été de 3.12. J'ai changé de version de poi-pavé de 3.12 ainsi et tout a commencé à travailler.
OriginalL'auteur nanosoft
Si vous n'êtes pas à l'aide de maven pour votre projet dépendances. Vous devez avoir les éléments suivants pots dans votre classpath
OriginalL'auteur Karthi Murugan