zhuwei 2 лет назад
Родитель
Сommit
42b07eff48

+ 356 - 39
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -314,10 +314,10 @@ public class ExcelTabController extends BladeController {
             j = j+1;
             mergedCell.getComment().getRichText().setText(j+"");
             mergedCell.setValue(j+"");
-            dataMap.put("x1",mergedCell.getRow());
-            dataMap.put("x2",mergedCell.getLastRow());
-            dataMap.put("y1",mergedCell.getColumn());
-            dataMap.put("y2",mergedCell.getLastColumn());
+            dataMap.put("x1",mergedCell.getColumn());
+            dataMap.put("x2",mergedCell.getLastColumn());
+            dataMap.put("y1",mergedCell.getRow());
+            dataMap.put("y2",mergedCell.getLastRow());
             xyList.put(j+"",dataMap);
         }
 
@@ -330,10 +330,10 @@ public class ExcelTabController extends BladeController {
                 mergedCell.getComment().getRichText().setText(j+"");
                 mergedCell.setValue(j+"");
                 Map<String,Integer> dataMap = new HashMap<>();
-                dataMap.put("x1",mergedCell.getRow());
-                dataMap.put("x2",mergedCell.getLastRow());
-                dataMap.put("y1",mergedCell.getColumn());
-                dataMap.put("y2",mergedCell.getLastColumn());
+                dataMap.put("x1",mergedCell.getColumn());
+                dataMap.put("x2",mergedCell.getLastColumn());
+                dataMap.put("y1",mergedCell.getRow());
+                dataMap.put("y2",mergedCell.getLastRow());
                 xyList.put(j+"",dataMap);
             }
         }
@@ -360,16 +360,14 @@ public class ExcelTabController extends BladeController {
             for(int x=0;x<td1.size();x++){
                 Element cell1 = td1.get(x);
                 Element cell2 = td2.get(x);
-                String html = cell2.html();
-                if(html.indexOf("div")>=0){
-                    html=cell2.children().get(0).html();
-                }
+                String html = cell2.text();
                 Map<String, Integer> xyMap = xyList.get(html);
                 if(xyMap!=null){
                     cell1.attr("x1",xyMap.get("x1")+"");
                     cell1.attr("x2",xyMap.get("x2")+"");
                     cell1.attr("y1",xyMap.get("y1")+"");
                     cell1.attr("y2",xyMap.get("y2")+"");
+                    cell1.attr("exc_xy",html);
                 }
             }
         }
@@ -382,10 +380,10 @@ public class ExcelTabController extends BladeController {
         detail.setFileType(3); // 表示为清表信息  1 表示祖节点  2 表示为节点信息 3 表示清表
         detail.setHtmlUrl(thmlUrl);
         excelTabService.saveOrUpdate(detail);
-
         if(html2.exists()){
             html2.delete();
         }
+
         // 解析html
         expailHtmlInfo(thmlUrl, detail.getId());
         return R.success("上传成功");
@@ -535,12 +533,10 @@ public class ExcelTabController extends BladeController {
         WbsTreePrivate wbsTree = new WbsTreePrivate();
         wbsTree.setPKeyId(tabId);
         WbsTreePrivate aPrivate = wbsTreePrivateService.getOne(Condition.getQueryWrapper(wbsTree));
-
         aPrivate.setExcelId(exceTabId);
 
         // 获取excel 基本信息
         ExcelTab excelTab = excelTabService.getById(exceTabId);
-
         UpdateWrapper<WbsTreePrivate> updateWrapper = new UpdateWrapper<>();
         updateWrapper.in("p_key_id", tabId);
         updateWrapper.set("is_link_table", 2);
@@ -548,9 +544,7 @@ public class ExcelTabController extends BladeController {
         updateWrapper.set("excel_id", exceTabId);
 
         // 复制模版htmlURL
-
         File file_in = ResourceUtil.getFile(excelTab.getHtmlUrl());
-
         String filecode = SnowFlakeUtil.getId() + "";
         String thmlUrl = file_path + "/privateUrl/" + filecode + ".html";
         File file_out = ResourceUtil.getFile(thmlUrl);
@@ -579,8 +573,9 @@ public class ExcelTabController extends BladeController {
             }
         }
 
-        List<WbsFormElement> elementList = wbsFormElementService.selectElementListByFid(aPrivate.getInitTableId() + "");
 
+
+        List<WbsFormElement> elementList = wbsFormElementService.selectElementListByFid(aPrivate.getInitTableId() + "");
         for (int i = 0; i < trs.size(); i++) {
             Element tr = trs.get(i);
             Elements tds = tr.select("td");
@@ -627,7 +622,6 @@ public class ExcelTabController extends BladeController {
 
                     //字段正则表达式校验
                     String regularExpression = "$event" + "," + "'" + RegularExpressionUtil.getRegularExpression(filedType) + "','" + (StringUtils.isNotEmpty(filedType) ? WbsElementUtil.getTypeTips(filedType) : null) + "'," + i + "," + j;
-
                     if (is_true) {
                         element.children().get(0).attr("placeholder", lastName)
                                 .attr("weighing", maxScore + "").attr("id", attrInfo).attr("keyName", attrInfo)
@@ -665,13 +659,11 @@ public class ExcelTabController extends BladeController {
             pupdate.set("excel_id", aPrivate.getPKeyId());
             wbsTreePrivateService.update(pupdate);
         }
-
         wbsTreePrivateService.update(updateWrapper);
 
         //关联项目下所有的合同段
 //        if (aPrivate.getType() != 10) {
             aPrivate.setHtmlUrl(thmlUrl);
-
             //关联清表后 表单名和清表一样
             aPrivate.setNodeName(excelTab.getName());
             aPrivate.setFullName(excelTab.getName());
@@ -801,8 +793,7 @@ public class ExcelTabController extends BladeController {
             @ApiImplicitParam(name = "pkeyId", value = "pkeyId", required = true)
     })
     public R getExcelHtml(Long pkeyId) throws Exception {
-        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-        String sys_file_net_url = ParamCache.getValue(CommonConstant.SYS_FILE_NET_URL);
+
         Thread.sleep(200);
         WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.getByPKeyId(pkeyId);
         if (wbsTreePrivate == null) {
@@ -813,26 +804,27 @@ public class ExcelTabController extends BladeController {
         }
 
         String fileUrl = wbsTreePrivate.getHtmlUrl();
-        File file1 = ResourceUtil.getFile(fileUrl);
-        InputStream fileInputStream;
-        if (file1.exists()) {
-            fileInputStream = new FileInputStream(file1);
-        } else {
-            String path = sys_file_net_url + fileUrl.replaceAll("//", "/").replaceAll(file_path, "");
-            fileInputStream = CommonUtil.getOSSInputStream(path);
-        }
 
+        InputStream  fileInputStream = FileUtils.getInputStreamByUrl(fileUrl);
         String htmlString = IoUtil.readToString(fileInputStream);
-
         // 远程搜索配置
         Document doc = Jsoup.parse(htmlString);
         Element table = doc.select("table").first();
         Elements col = doc.select("Col");
         doc.select("Col").remove();
         ProjectInfo projectInfo = projectInfoService.getById(wbsTreePrivate.getProjectId());
+        // 添加标题显示
+
+        //判断是否是水利水电表,水利水电项目名14,表名12 。   其他表都是18
+        Boolean isWater = false;
+        ExcelTab tab = excelTabMapper.getWaterByTableId(wbsTreePrivate.getExcelId());
+        if (tab != null){
+            isWater = true;
+        }
+
         // 添加标题显示
         Elements trs = table.select("tr");
-        for (int i = 0; i < 6; i++) {
+        for (int i = 1; i < 6; i++) {
             Element tr = trs.get(i);
             Elements tds = tr.select("td");
             for (int j = 0; j < tds.size(); j++) {
@@ -841,9 +833,14 @@ public class ExcelTabController extends BladeController {
                 String style = data.attr("style");
                 if (style.indexOf("font-size") >= 0) {
                     int fontsize = Integer.parseInt(style.substring(style.indexOf("font-size:") + 10, style.indexOf(".0pt")));
-                    if (StringUtils.isNotEmpty(data.text()) && fontsize >= 12) {
-                        trs.get(i - 1).select("td").get(0).text(projectInfo.getProjectName());
-                        break;
+                    if (isWater){
+                        if (StringUtils.isNotEmpty(data.text()) && fontsize >= 12) {
+                            trs.get(i - 1).select("td").get(0).text(projectInfo.getProjectName());
+                        }
+                    }else {
+                        if (StringUtils.isNotEmpty(data.text()) && fontsize >= 14) {
+                            trs.get(i - 1).select("td").get(0).text(projectInfo.getProjectName());
+                        }
                     }
                 }
             }
@@ -916,6 +913,329 @@ public class ExcelTabController extends BladeController {
         File file1 = ResourceUtil.getFile(thmlUrl);
         String htmlString = IoUtil.readToString(new FileInputStream(file1));
 
+        /*
+           解析
+           1 解析样式
+           2 计算坐标
+           3 计算区域位置
+         */
+        // 样式集合
+        Document doc = Jsoup.parse(htmlString);
+        // 解析 style
+        Map<String, String> styleMap = getHtmlStyle(doc);
+        //解析
+        Element table = doc.select("table").first();
+        Elements trs = table.select("tr");
+
+        // 获取图片信息
+        Elements imgs = doc.select("img");
+
+        // 获取总行列数
+        int maxCol = doc.select("Col").size();
+        String[] rowData = new String[trs.size() + 5]; //本来加一的 害怕出现特殊情况 故意 加 5
+
+        // 行的状态
+        boolean index_state = false;
+        // 区域划分表示
+        int xy_type = 1;
+
+        // 解析 excel元素集合
+        List<ExctabCell> colTitle = new ArrayList<>();
+
+//      标题集合信息
+        List<Map<String, String>> zikey = new ArrayList<>();
+        for (int i = 0; i <= trs.size() - 1; i++) {
+            Element tr = trs.get(i);
+            Elements tds = tr.select("td");
+            String xyInof = getTrInfo(tds, styleMap, index_state, xy_type, maxCol, i, zikey);
+            xy_type = Integer.parseInt(xyInof.split(",")[0]);
+            tr.attr("xy_type", xyInof);
+            index_state = Boolean.parseBoolean(xyInof.split(",")[1]);
+
+            boolean istrue = Boolean.parseBoolean(xyInof.split(",")[3]);
+
+            // 计算单元格坐标
+            for (int j = 0; j < tds.size(); j++) {
+                {
+                    Element data = tds.get(j);
+                    int colspan = data.attr("COLSPAN").equals("") ? 0 : Integer.parseInt(data.attr("COLSPAN"));
+                    int rowspan = data.attr("ROWSPAN").equals("") ? 0 : Integer.parseInt(data.attr("ROWSPAN"));
+                    String keyId = data.attr("class");
+                    if (StringUtils.isNotEmpty(keyId)) {
+                        data.removeAttr("class");
+                    }
+
+                    // 计算
+                    int x1 = Integer.parseInt(data.attr("x1"));
+                    int x2 = Integer.parseInt(data.attr("x2"));;
+                    int y1 = Integer.parseInt(data.attr("y1"));;
+                    int y2 = Integer.parseInt(data.attr("y2"));;
+
+                    String textInfo = data.text().trim().replaceAll(" ", "");
+                    System.out.println("-------=="+textInfo);
+
+                    data.text(textInfo.replaceAll(" ", ""));
+                    if (textInfo.indexOf("□") < 0 && !textInfo.isEmpty() && !(textInfo.equals("/") && textInfo.length() < 2) && !(textInfo.indexOf("年") >= 0 && textInfo.indexOf("月") >= 0 && textInfo.indexOf("日") >= 0) && !textInfo.equals("—") && !textInfo.equals("-")) {  // 标题区域
+                        Map<String, String> dataInfo = new HashMap<String, String>();
+                        dataInfo.put("name", textInfo);
+                        dataInfo.put("x1", x1 + "");
+                        dataInfo.put("x2", x2 + "");
+                        dataInfo.put("y1", y1 + "");
+                        dataInfo.put("y2", y2 + "");
+                        dataInfo.put("xytype", xy_type + "");
+                        if (textInfo.indexOf("/") < 0 || (textInfo.indexOf("/") >= 0 && textInfo.length() > 1)) { // 带/为分割数据
+                            zikey.add(dataInfo);
+                        }
+                    } else { //空行
+
+                        List<Map<String, String>> left = new ArrayList<>();
+                        List<Map<String, String>> top = new ArrayList<>();
+                        for (int k = 0; k < zikey.size(); k++) {
+                            String name = zikey.get(k).get("name");
+                            int xx1 = Integer.parseInt(zikey.get(k).get("x1"));
+                            int xx2 = Integer.parseInt(zikey.get(k).get("x2"));
+                            int yy1 = Integer.parseInt(zikey.get(k).get("y1"));
+                            int yy2 = Integer.parseInt(zikey.get(k).get("y2"));
+                            int xytype2 = Integer.parseInt(zikey.get(k).get("xytype"));
+
+                            // 左匹配
+                            if (yy1 <= y1 && yy2 >= y2 && xx2 < x1 && xytype2 == xy_type) {
+                                left.add(zikey.get(k));
+                            }
+
+                            //向 上 匹配
+                            if (index_state) {
+                                if (xx1 <= x1 && xx2 >= x2 && yy2 < y1 && xytype2 == xy_type) {
+                                    top.add(zikey.get(k));
+                                }
+                            }
+                        }
+
+                        String inputText = "";
+                        // 特征值赛选 规则
+                        for (int k = 0; k < left.size(); k++) { // 左计算
+                            String name = left.get(k).get("name");
+                            int xx2 = Integer.parseInt(left.get(k).get("x2"));
+                            int yy2 = Integer.parseInt(left.get(k).get("y2"));
+
+                            if (!StringUtil.isNumeric(name) && name.length() <= 20) { // 数字不匹配
+                                if (index_state) { // 正向规则匹配
+                                    if (istrue) { // 是否空格等于值
+                                        if (x1 - xx2 <= 1 && y1 == yy2) {
+                                            inputText = name;
+                                        } else {
+                                            inputText += name + "_";
+                                        }
+                                    } else {
+                                        inputText += name + "_";
+                                    }
+                                } else {
+                                    if (x1 - xx2 <= 1 && y1 == yy2) {
+                                        inputText = name;
+                                    }
+                                }
+                            }
+                        }
+
+                        // 特征值赛选 规则
+                        if (top != null && top.size() >= 1) {
+                            for (int k = 0; k < top.size(); k++) { // 向上计算
+                                String name = top.get(k).get("name");
+                                if (!StringUtil.isNumeric(name) && name.length() <= 20) {
+                                    inputText += name + "_";
+                                }
+                            }
+                        }
+
+                        if (inputText != null && inputText != "" && inputText.indexOf("_") >= 0) {
+                            inputText = inputText.substring(0, inputText.lastIndexOf("_"));
+                        }
+
+                        // 质检表特殊处理匹配
+
+                        String parm = i + "," + j + "," + x1 + "," + x2 + "," + y1 + "," + y2 + ",$event";
+                        // 设置文本信息
+                        ExctabCell exctabCell = new ExctabCell();
+                        if ((textInfo.indexOf("年") >= 0 && textInfo.indexOf("月") >= 0 && textInfo.indexOf("日") >= 0) || inputText.indexOf("日期") >= 0) {
+                            if (inputText.indexOf("日期") >= 0) {
+                                data.empty().append("<el-date-picker type='date' @keyDowns='dateKeydown()' format='YYYY年MM月DD日' value-format='YYYY年MM月DD日' @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;' placeholder='" + inputText + "'> </el-date-picker>");
+                            } else if (textInfo.indexOf("年") >= 0 && textInfo.indexOf("月") >= 0 && textInfo.indexOf("日") >= 0) {
+                                if (inputText.indexOf("专业监理工程师") >= 0) {
+                                    inputText = "专业监理工程师_年月日";
+                                } else if (inputText.indexOf("质检工程师") >= 0) {
+                                    inputText = "质检工程师_年月日";
+                                } else {
+                                    inputText = "年月日";
+                                }
+                            }
+                            data.empty().append("<el-date-picker @keyDowns='dateKeydown()'  type='date' format='YYYY年MM月DD日' value-format='YYYY年MM月DD日' @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;' placeholder='年月日'> </el-date-picker>");
+                            exctabCell.setTextInfo(inputText);
+                            exctabCell.setExctabId(excelId);
+                            exctabCell.setIsDeleted(0);
+                            exctabCell.setXys(i + "_" + j);
+                            colTitle.add(exctabCell);
+                            data.attr("title", inputText);
+
+                        } else if (textInfo.indexOf("□") >= 0) { //多选框
+                            exctabCell.setTextInfo(inputText);
+                            exctabCell.setExctabId(excelId);
+                            exctabCell.setIsDeleted(0);
+                            exctabCell.setXys(i + "_" + j);
+                            colTitle.add(exctabCell);
+                            data.attr("title", inputText);
+                            // 添加多选框
+
+                            String[] cheText = textInfo.split("□");
+                            JSONArray objs = new JSONArray();
+                            if (cheText != null && cheText.length >= 1) {
+                                int key = 1;
+                                for (String keyval : cheText) {
+                                    JSONObject jsonObject = new JSONObject();
+                                    if (StringUtils.isNotEmpty(keyval)) {
+                                        jsonObject.put("key", key);
+                                        jsonObject.put("name", keyval);
+                                        objs.add(jsonObject);
+                                        keyId += 1;
+                                    }
+                                }
+                            } else {
+                                JSONObject jsonObject = new JSONObject();
+                                jsonObject.put("key", "1");
+                                jsonObject.put("name", "");
+                                objs.add(jsonObject);
+                            }
+
+                            String checkbox = "<hc-form-checkbox-group @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' :objs='" + objs + "'  @change='checkboxGroupChange' @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " placeholder=''> </hc-form-checkbox-group>";
+                            data.empty().append(checkbox);
+
+                        } else {
+                            if (index_state) { // 区域内
+                                if (rowspan >= 1) {
+                                    data.empty().append("<el-input type='textarea' @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft'  @keydown.shift.right='keyupShiftRight'  @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;'   :rows=" + rowspan * 2 + " placeholder=''> </el-input>");
+                                } else {
+                                    data.empty().append("<el-input type='text' @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft'  @keydown.shift.right='keyupShiftRight'  @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;' placeholder=''> </el-input>");
+                                }
+                            } else { // 区域外
+                                if (j == 0) {
+                                    if (colspan == maxCol && i >= 1) {
+                                        if (rowspan >= 1) {
+                                            data.empty().append("<el-input @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' type='textarea'  @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;'   :rows=" + rowspan * 2 + " placeholder=''> </el-input>");
+                                        } else {
+                                            data.empty().append("<el-input @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' type='text' @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;' placeholder=''> </el-input>");
+                                        }
+                                    }
+                                } else {
+                                    Element bforData = tds.get(j - 1);
+                                    if (!bforData.text().isEmpty() || bforData.html().indexOf("hc-form-checkbox-group") >= 0) {
+                                        if (rowspan >= 1) {
+                                            data.empty().append("<el-input @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft' @keydown.shift.right='keyupShiftRight' type='textarea' @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;'   :rows=" + rowspan * 2 + " placeholder=''> </el-input>");
+                                        } else {
+                                            data.empty().append("<el-input @keydown.shift.up='keyupShiftUp' @keydown.shift.down='keyupShiftDown' @keydown.shift.left='keyupShiftLeft'  @keydown.shift.right='keyupShiftRight' type='text' @contextmenu.prevent.native='contextmenuClick(" + parm + ")'  @mouseup.right='RightClick(" + parm + ")' trIndex=" + i + " tdIndex=" + j + "  x1=" + x1 + " x2=" + x2 + " y1=" + y1 + " y2=" + y2 + " style='width:100%;height:100%;' placeholder=''> </el-input>");
+                                        }
+                                    }
+                                }
+                            }
+
+                            if (!inputText.equals("")) {
+                                exctabCell.setExctabId(excelId);
+
+
+                                exctabCell.setTextInfo(inputText);
+                                if (inputText.contains("日期") || inputText.contains("年") || inputText.contains("月") || inputText.contains("日")) {
+                                    //日期
+                                    exctabCell.setTextElementType(4);
+                                } else if (inputText.indexOf("签字") >= 0) {
+                                    exctabCell.setTextElementType(6);
+                                } else {
+                                    //字符串
+                                    exctabCell.setTextElementType(1);
+                                }
+
+                                exctabCell.setIsDeleted(0);
+                                exctabCell.setXys(i + "_" + j);
+                                colTitle.add(exctabCell);
+                            }
+                            data.attr("title", inputText);
+                        }
+                    }
+                }
+            }
+        }
+
+        // 去掉重复的数
+        Map<String, String> groupMap2 = colTitle.stream()
+                .collect(Collectors.groupingBy(ExctabCell::getTextInfo, Collectors.mapping(ExctabCell::getXys, Collectors.joining(","))));
+
+        exctabCellService.DeletExcelByTableId(excelId + "");
+
+        List<ExctabCell> colTitle2 = new ArrayList<>();
+        for (String title : groupMap2.keySet()) {
+            ExctabCell exctabCell = new ExctabCell();
+            exctabCell.setExctabId(excelId);
+            exctabCell.setIsDeleted(0);
+            exctabCell.setTextInfo(title);
+            exctabCell.setCreateTime(new Date());
+
+            if (title.contains("日期") || title.contains("年") || title.contains("月") || title.contains("日")) {
+                //日期
+                exctabCell.setTextElementType(4);
+            } else {
+                //字符串
+                exctabCell.setTextElementType(1);
+            }
+
+            exctabCell.setXys(groupMap2.get(title));
+            colTitle2.add(exctabCell);
+        }
+        exctabCellService.saveBatch(colTitle2);
+
+
+        //对excel 的图片进行操作
+        ExcelTab exceltab = excelTabService.getById(excelId);
+        if(exceltab!=null){
+            // 获取excle 的数据
+            String fileUrl = exceltab.getFileUrl();
+            InputStream ossInputStream = CommonUtil.getOSSInputStream(fileUrl);
+            Workbook wb = new Workbook();
+            wb.loadFromMHtml(ossInputStream);
+            Worksheet sheet = wb.getWorksheets().get(0);
+            PicturesCollection pictures = sheet.getPictures();
+            if(pictures!=null && pictures.size()>=1){
+                for (int i=0 ; i<pictures.size() ; i++){
+                    ExcelPicture pic = pictures.get(i);
+                    int x = pic.getLeftColumn();
+                    int y = pic.getBottomRow();
+                    Elements select = doc.select("el-input[x1=" + x + "][y1=" + y + "]");
+                    System.out.println("xx=--"+x);
+                    System.out.println("yy=--"+y);
+                    if(select!=null && select.size()>=1){
+                        Element element = select.get(0);
+                        Element elementP = element.parent();
+                        element.remove();
+                        Element imgele = imgs.get(i);
+                        imgele.removeAttr("class");
+                        elementP.append(imgele.toString());
+                    }
+                }
+            }
+
+            ossInputStream.close();
+        }
+        // 移除图片
+        imgs.remove();
+        // 保存
+        File writefile = new File(thmlUrl);
+        FileUtil.writeToFile(writefile, doc.html(), Boolean.parseBoolean("UTF-8"));
+
+    }
+
+    // 上传解析 html
+    public void expailHtmlInfo11111111111111(String thmlUrl, Long excelId) throws Exception {
+
+        // 读取
+        File file1 = ResourceUtil.getFile(thmlUrl);
+        String htmlString = IoUtil.readToString(new FileInputStream(file1));
+
         /*
            解析
            1 解析样式
@@ -992,9 +1312,6 @@ public class ExcelTabController extends BladeController {
                     //x 移位 算法
                     String getRowInfo = rowData[y1];
 
-                    if (y1 == 17) {
-                        System.out.println("1");
-                    }
                     if (getRowInfo != null) {
                         String[] dataInfo2 = getRowInfo.split(",");
 

+ 11 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -595,7 +595,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             try {
                 //获取onlyOffice缓存中的文件流
                 URL url = new URL(downloadUri);
-                String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+                String file_path = FileUtils.getSysLocalFileUrl();
                 String filecode = SnowFlakeUtil.getId() + "";
                 String dataUrl = file_path + "/excel/" + filecode + ".pdf";
                 java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();
@@ -615,7 +615,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 ExcelTab excelTab = baseMapper.selectById(Long.parseLong(tabId));
                 //上传新文件到文件服务器
                 byte[] officeByte = IoUtil.readToByteArray(inputStream);
-
                 FileOutputStream fs = new FileOutputStream(dataUrl);
                 fs.write(officeByte);
                 fs.flush();
@@ -630,7 +629,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 if (file.exists()) {
                     file.delete();
                 }
-                System.out.println("123456");
             } catch (Exception e) {
                 editCallback.setError(1);
                 e.printStackTrace();
@@ -1490,11 +1488,17 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                                             if(StringUtils.isNotEmpty(dataJson)){
                                                 JSONArray jsonArray = JSONArray.parseArray(dataJson);
                                                 List<Integer> idList = Func.toIntList(myData);
-                                                String dataInfo = jsonArray.getJSONObject(idList.get(0)-1).getString("name");
-                                                for(int inx=1 ; inx<idList.size() ; inx++){
-                                                   int valIndex = idList.get(inx)-1;
-                                                    dataInfo = dataInfo+","+jsonArray.getJSONObject(valIndex).getString("name");
+                                                String dataInfo = "";//jsonArray.getJSONObject(idList.get(0)-1).getString("name");
+                                                for(int inx=0 ; inx<idList.size() ; inx++){
+                                                    int index = idList.get(inx);
+                                                    if(index>=1){
+                                                        dataInfo = dataInfo+jsonArray.getJSONObject(index).getString("name")+",";
+                                                    }
+                                                }
+                                                if (StringUtils.isNotEmpty(dataInfo)){
+                                                    dataInfo = dataInfo.substring(0,dataInfo.lastIndexOf(","));
                                                 }
+
                                                 cell.setCellValue(dataInfo);
                                             }
                                         }