从Word文档中以.docx格式读取数据作为每个字段,并将其保存在Java数据库中

时间:2018-06-26 12:09:12

标签: java apache-poi docx4j

是否可以从.docx文件中读取数据作为字段,以便将其保存在数据库中?必须使用Java。 例如,我们有像CV这样的Word表单文档,我们应该阅读每个字段,例如(姓名,姓氏,年龄,位置,日期),以便它能够将其保存在数据库中而不是一个大文本列中,而是一个单独的字段中。 enter image description here Java中有2个库,其中一个是Apache POI,另一个是docx4j,但是它提供了一种将数据大块保存在数据库的一个文本字段中的方法。 但是它应该将每个字段都分隔为一个元素。

我这样做是为了将数据保存为一大块。 结果仅以这种方式保存数据 enter image description here

我还没有找到任何办法。 请给我一些建议。

1 个答案:

答案 0 :(得分:2)

您需要使用您提供的输入示例来解析Microsoft Word文档,并获取每一行的特定值。

首先,这是我使用的测试文件的格式,我将其放置在本地目录中,并且遵循与示例图像相同的格式:

  

员工

     

名称: Bob

     

姓氏: Smith

     

年龄: 28

     

位置:开发人员

     

日期:6/26/18

import java.io.File;
import java.io.FileInputStream;
import java.util.LinkedList;
import java.util.List;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;

    public class Test {

    public static void main(String[] args) {
        //exampleFile is the layout file you provided with data added for testing
        List<String> values = parseWordDocument("exampleFile.docx");

        for(String s: values)
            System.out.println(s);
    }

    public static List<String> parseWordDocument(String documentPath) {
        FileInputStream fInput = null;
        XWPFDocument document = null;
        List<String> parsedValues = null;

        try {
            File file = new File(documentPath);

            fInput = new FileInputStream(file.getAbsolutePath());
            document = new XWPFDocument(fInput);

            //getParagraphs() will grab each paragraph for you
            List<XWPFParagraph> paragraphs = document.getParagraphs();

            parsedValues = new LinkedList<>();

            for (XWPFParagraph para : paragraphs) {
                //remove the title
                if(!para.getText().equals("Employee")) {
                    //here is where you want to parse your line to get needed values
                    String[] splitLine = para.getText().split(":");
                    //based on example input file [1] is the value you need
                    parsedValues.add(splitLine[1]);
                }
            }

            fInput.close();
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return parsedValues;
    }

}

有了这个,我从 parseWordDocument()创建的列表中得到的输出是:

  

鲍勃

     

史密斯

     

28

     

开发人员

     

6/26/18

因此,您现在可以简单地获取返回的列表并将其循环(而不是打印出值)并创建适当的SQLite查询。