既存の.docファイルにテキストを追加するためのコードがあり、ApachePOIを使用して別の名前で保存します。
以下は私がこれまでに試したコードです
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();
}
}
}
以下は私が得たものです
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
これに対応するすべてのjarファイルを追加しましたが、それでも解決策が見つかりません。このApache poiは初めてなので、説明と例を教えてください。ありがとう
質問に対して行われた私のコメントからコピーされました:
ApachePOIディストリビューションに含まれているpoi-ooxml-schemas.jarが必要なようです。単一のjarを追加するだけでは、フレームワークのすべてのクラスがあるわけではありません。
私のコメント(または他の人の回答)に基づいて問題を解決した後、この新しい例外があります
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
読んで Apache POI --HWPF-Java Microsoft Wordファイルを処理するAPI 、2003- Word文書を処理するために間違ったクラスを使用しているようです:HWPFは、Microsoft Word 97(-2007)ファイル形式の純粋なJavaへのポートの名前です...パートナー新しいWord2007のHWPFへの.docx形式はXWPFです。これは、ドキュメントを処理したり、ドキュメントをWord2003-からWord2007に変更したりするには、HWPFDocument
クラスが必要であることを意味します。 +。
IMO Apache POIはExcelファイルを処理するための優れたソリューションだと思いますが、Word文書を処理するための別のオプションを検討します。詳細な関連情報を取得するには、 この質問 を確認してください。
これは、poi-ooxml-3.9.jar
の依存関係階層です。
つまり、コンパイル時に使用されなくても、ランタイムで使用できます。
プロジェクトのクラスパスにすべてのjarがあることを確認してください。
この依存関係を設定ファイルに追加します:
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.3</version>
</dependency>
または
System couldn’t find the
poi-ooxml-schemas-xx.xx.jar
ライブラリをクラスパスに追加してください。
org.Apache.poi.POIXMLException:org.Apache.xmlbeans.XmlException:Element themeManager @ http://schemas.openxmlformats.org/drawingml/2006/main は有効なワークブックではありません@ http://schemas.openxmlformats.org/spreadsheetml/2006/main ドキュメントまたは有効な置換。
ソリューション:-。xlsの代わりに.xlsx形式を使用します
XWPFDocumentの適切な依存関係がないため、このエラーが発生します。 ooxml-schemasにはxmlbeansが必要であり、ooxmlにはpoiやooxml-schemasなどが必要です。
ここをチェックしてください: http://poi.Apache.org/overview.html#components
FWIW私はこれを追加しなければなりませんでした:
compile 'org.Apache.poi:ooxml-schemas:1.3'
私の場合、異なるバージョンのpoiがありました。 poi-scratchpadは3.9で、その他すべて-poi、poi-ooxml、poi-ooxml-schemasは3.12でした。 poi-scratchpadのバージョンも3.12に変更し、すべてが機能し始めました。
クラス org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument.Factory
は、ダウンロード可能なjar ooxml-schemas-1.0.jarにあります ここ
このエラーの経験を報告すると思いました。私はそれを突然始めました、そして私のワークスペースで何も変更していませんでした。複数のシートがあるExcelファイルを読み取ろうとしたときに発生することが判明しました(2番目のシートはピボットテーブルであり、大量のデータです。データのサイズが原因であるかどうかはわかりません(私はそう思うので、そうだと思います)複数のワークシートを含むExcelファイルを読んだことがあります)その2番目のシートを削除すると、機能しました。クラスパスを変更する必要はありません。