java解析doc或者docx文件,文件中内容为表格形式

2022-01-08 00:00:00 文件 解析 表格
这里对解析内容进行了数据库存表,对存入字段进行了写死处理。



public ViewData down(File file) throws IOException {

    ViewData viewData = new ViewData();

    if (file == null) {
        viewData.setIsSucceed(false);
        viewData.setMessage("未选择导入文件");
    }
    //读取word文档
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    WhistleRegister whistleRegister = new WhistleRegister();
    String value = "";
    String filePath = file.getPath();
    try{
        FileInputStream in = new FileInputStream(filePath);
            // 处理docx格式 doc 与docx格式共用
            POIFSFileSystem pfs = new POIFSFileSystem(in);
            HWPFDocument hwpf = new HWPFDocument(pfs);
            //得到文档的读取范围
            Range range = hwpf.getRange();
            TableIterator it = new TableIterator(range);
            // 迭代文档中的表格
            // 如果有多个表格只读取需要的一个 set是设置需要读取的第几个表格,total是文件中表格的总数
            int set = 1, total = 4;
            int num = set;
            for (int i = 0; i < set-1; i++) {
                it.hasNext();
                it.next();
            }
            while (it.hasNext()) {
                Table tb = (Table) it.next();
                System.out.println("这是第" + num + "个表的数据");
                //迭代行,默认从0开始,可以依据需要设置i的值,改变起始行数,也可设置读取到那行,只需修改循环的判断条件即可
                for (int i = 0; i < tb.numRows(); i++) {
                    TableRow tr = tb.getRow(i);
                    //迭代列,默认从0开始
                    for (int j = 0; j < tr.numCells(); j++) {
                        //取得单元格
                        TableCell td = tr.getCell(j);
                        //取得单元格的内容
                        for(int k = 0; k < td.numParagraphs(); k++){
                            Paragraph para = td.getParagraph(k);
                            String s = para.text();
                            //去除后面的特殊符号
                            if(null != s && !"".equals(s)){
                                s = s.substring(0, s.length()-1);
                                value = s;
                            }
                            //工单编号
                            if (i == 0 && j == 1) {
                                whistleRegister.setNumber(value);
                            }
                            //来电时间
                            if(i == 0 && j == 3){
                                whistleRegister.setDf10(value);
                            }
                            //热线号码
                            if (i == 1 && j== 1) {
                                whistleRegister.setDf1(value);
                            }
                            //受理单位
                            if (i == 1 && j == 3) {
                                whistleRegister.setDf2(value);
                            }
                            //来电人
                            if (i == 2 && j == 1) {
                                whistleRegister.setDf3(value);
                            }
                            //来电号码
                            if (i == 2 && j == 3) {
                                whistleRegister.setPhone(value);
                            }
                            //联系方式
                            if (i == 3 && j == 1) {
                                whistleRegister.setMobile(value);
                            }
                            //来电人地址
                            if (i == 4 && j ==1) {
                                whistleRegister.setDf4(value);
                            }
                            //问题分类
                            if (i == 5 && j == 1 && k == 0) {
                                whistleRegister.setDf5(value);
                            }
                            //工单分类
                            if (i == 6 && j == 1) {
                                whistleRegister.setDf6(value);
                            }
                            //发生地址
                            if (i == 6 && j == 3) {
                                whistleRegister.setAddress(value);
                            }
                            //被反映单位
                            if (i == 7 && j == 1 && k == 0) {
                                whistleRegister.setDf7(value);
                            }
                            //标题
                            if (i == 8 && j == 1 && k == 0) {
                                whistleRegister.setTitle(value);
                            }
                            //主要内容
                            if (i == 9 && j == 0 && k == 0) {
                                whistleRegister.setContent(value);
                            }
                            //派单人员
                            if (i == 10 && j == 1) {
                                whistleRegister.setRegisteruser(value);
                            }
                            //派单时间
                            if (i == 10 && j == 3) {
                                Date date = sdf.parse(value);
                                whistleRegister.setRegistertime(date);
                            }
                            //处理意见
                            if (i == 11 && j == 1 && k == 0) {
                                whistleRegister.setDf8(value);
                            }
                            //截止时间
                            if (i == 12 && j == 1 && k == 0) {
                                Date date =  sdf.parse(value);
                                whistleRegister.setLimit(date);
                            }
                            if (i == 13 && j == 1 && k == 0) {
                                whistleRegister.setDept(value);
                            }
                            if (i == 14 && j == 1 && k == 0) {
                                whistleRegister.setDf9(value);
                            }
                        }
                    }
                }
            }
            whistleRegister.setRegisterid(UniqueIdUtil.genId());
            whistleRegisterDao.add(whistleRegister);
            viewData.setIsSucceed(true);
            viewData.setMessage("文件上传成功并解析完毕!");
    }catch(Exception e){
        e.printStackTrace();
        viewData.setIsSucceed(false);
        viewData.setMessage("文件解析失败");
    }
    return viewData;

}
    原文作者:一个暖心的IT男
    原文地址: https://blog.csdn.net/weixin_37005773/article/details/89703032
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章