根據word模版導入word中用戶填寫的數據

背景

客戶有個需求:從word格式文檔中讀項目關鍵信息到數據庫中,如:第一個表格中的聯繫人,項目名之類的信息,word中的格式不是固定的,可以會有些改動。

分析

方案1:讀取第一個表格,然後再讀取表格中的固定行列。缺點:位置如果改變,代碼改動比較大。

方案2:利用word中的域功能,域特點可以隱藏起來,不影響用戶的信息錄入。域格式爲:$電話$。就可以用正則去獲取域位置的信息。缺點:必需提供模版讓用戶下載再填寫。

代碼


    /**
     * 正則表達式匹配兩個指定字符串中間的內容
     * @param soap
     * @return
     */
    public static List<String> getSubUtil(String soap, String rgex){
        List<String> list = new ArrayList<String>();
        Pattern pattern = Pattern.compile(rgex);// 匹配的模式
        Matcher m = pattern.matcher(soap);
        while (m.find()) {
            int i = 1;
            String group = m.group(i);
            int j = group.lastIndexOf('\t');
            if(j>-1){
                group=group.substring(j+1);
            }

            list.add(group);
            i++;
        }
        return list;
    }
    public static String getSubUtilSimple(String soap,String rgex){
        Pattern pattern = Pattern.compile(rgex);// 匹配的模式
        Matcher m = pattern.matcher(soap);
        while(m.find()){
            return m.group(1);
        }
        return "";
    }

    /**
     * 轉存到map結構中
     * @param text
     * @return
     */
    public static Map convertKeyToMap(String text){

        String rgex = "\\$(.*?)\\$";
        List<String> subUtil = RgexUtils.getSubUtil(text, rgex);
        Map map=new HashMap();

        for (String s : subUtil) {
            String rgex1 = "\\s(.*?)\\$"+s+"\\$";
            String s1 = RgexUtils.getSubUtil(text, rgex1).get(0);
            map.put(s,s1);
        }

        return map;
    }

效果

總結

本方案利用了word中的高級功能完善的解決了導入數據的格式變化問題。百度谷歌絕對找不到,絕對原創。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章