Apache poi word文档空指针异常

时间:2013-11-04 08:04:28

标签: java exception ms-word apache-poi

我在word文档中写了一个字符串。但是,当我打开文档获取字符​​串并将其存储在另一个文档中时,它给了我异常。

这是我的代码。

 XWPFDocument document = new XWPFDocument();
   XWPFParagraph paragraphOne = document.createParagraph();
    XWPFRun paragraphOneRunOne = paragraphOne.createRun();
    paragraphOneRunOne.setBold(true);
    paragraphOneRunOne.setItalic(true);
    paragraphOneRunOne.setText("Hello world! This is paragraph one!");
    paragraphOneRunOne.addBreak();


    FileOutputStream outStream = null;
    try {
        outStream = new FileOutputStream("MyDov.docx");
        document.write(outStream);
        outStream.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    try{
    FileInputStream is = new FileInputStream(new File("MyDov.docx"));
        XWPFDocument doc = new XWPFDocument(is); //Document with words
        XWPFWordExtractor ex = new XWPFWordExtractor(doc);  //To get the words
        String words = ex.getText();

         XWPFDocument newDoc = new XWPFDocument(); //Doc to write new doc to
     XWPFParagraph para = newDoc.createParagraph(); //Paragraph
     XWPFRun run = para.createRun();     
          run.setText(words);
              }
        newDoc.write(new FileOutputStream(new File("mydoc.docx")));}
    catch (IOException e)
    {System.out.println(e);}

它给了我这个例外。

Exception in thread "main" java.lang.NullPointerException
    at org.apache.poi.xwpf.extractor.XWPFWordExtractor.extractHeaders(XWPFWordExtractor.java:162)
    at org.apache.poi.xwpf.extractor.XWPFWordExtractor.getText(XWPFWordExtractor.java:87)
    at atestpack.CreateDocumentFromScratch.main(CreateDocumentFromScratch.java:56)

How can I solve this exception?

1 个答案:

答案 0 :(得分:1)

我不确定这是否与您写入文档的方式有关,但是当您检索文本时,它似乎希望您逐段进行。在下面,我从文档中检索了每个段落,循环检索文本,然后根据需要将其写出来。我评论了下面我改变了什么:

public class SO3 {
public static void main(String[] args){

XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraphOne = document.createParagraph();
XWPFRun paragraphOneRunOne = paragraphOne.createRun();
paragraphOneRunOne.setBold(true);
paragraphOneRunOne.setItalic(true);
paragraphOneRunOne.setText("Hello world! This is paragraph one!");
paragraphOneRunOne.addBreak();

try {
    FileOutputStream outStream = new FileOutputStream("D:\\Users\\user2777005\\Desktop\\MyDov.docx");
    document.write(outStream);
    outStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

try{
FileInputStream is = new FileInputStream(new File("D:\\Users\\user2777005\\Desktop\\MyDov.docx"));

XWPFDocument doc = new XWPFDocument(is);
List<XWPFParagraph> paras = doc.getParagraphs(); //This list will hold the paragraphs
XWPFWordExtractor ex = new XWPFWordExtractor(doc);  //To get the words
String words = ""; //This will hold all the text
    for(XWPFParagraph p : paras){  //For each paragraph we retrieved from the document
      words += p.getText();    //Add the text we retrieve to the words string  
    }

    System.out.println(words); //Check out string
    XWPFDocument newDoc = new XWPFDocument(); 
    XWPFParagraph para = newDoc.createParagraph();
    XWPFRun run = para.createRun();     
   //You have to reformat the run with bold/italic e.t.c if you want
    run.setText(words);
    newDoc.write(new FileOutputStream(new File("D:\\Users\\user2777005\\Desktop\\mydoc.docx")));}
   catch (IOException e)
{System.out.println(e);}
}}

祝你好运!