From e80006ac27c3370e9a4dc02f28898d3380c57993 Mon Sep 17 00:00:00 2001
From: zhijie <1003392067@qq.com>
Date: 星期一, 16 十月 2023 22:49:31 +0800
Subject: [PATCH] 图表替换数值

---
 src/main/java/com/ots/project/tool/report/LAQ/chart/LAQChart.java |  717 +++++++++++++++++++++++------------------------------------
 1 files changed, 283 insertions(+), 434 deletions(-)

diff --git a/src/main/java/com/ots/project/tool/report/LAQ/chart/LAQChart.java b/src/main/java/com/ots/project/tool/report/LAQ/chart/LAQChart.java
index 8f5eca0..b70254d 100644
--- a/src/main/java/com/ots/project/tool/report/LAQ/chart/LAQChart.java
+++ b/src/main/java/com/ots/project/tool/report/LAQ/chart/LAQChart.java
@@ -1,14 +1,22 @@
 package com.ots.project.tool.report.LAQ.chart;
 
+import com.alibaba.fastjson.JSON;
 import com.ots.common.enums.CapabilityEnum;
+import com.ots.common.utils.DateUtils;
+import com.ots.common.utils.MapDataUtil;
 import com.ots.common.utils.StringUtils;
+import com.ots.common.utils.poi.ExcelUtil;
+import com.ots.common.utils.poi.WordUtil;
 import com.ots.framework.config.EssConfig;
+import com.ots.project.exam.domain.TReportTemplate;
 import com.ots.project.tool.PdfUtil;
+import com.ots.project.tool.report.LAQ.LAQTemplate;
 import com.ots.project.tool.report.MAQ.base.RowData;
 import com.ots.project.tool.report.MAQ.base.SeriesData;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ooxml.POIXMLDocument;
 import org.apache.poi.ooxml.POIXMLDocumentPart;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellType;
 import org.apache.poi.xssf.usermodel.XSSFCell;
@@ -19,10 +27,8 @@
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.openxmlformats.schemas.drawingml.x2006.chart.*;
 
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
+import java.io.*;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -36,401 +42,281 @@
 public class LAQChart {
 
 
-    public static void main(String[] args) throws IOException {
-        try {
-//            OutputStream os = new FileOutputStream("D:\\娴嬭瘎绯荤粺\\闇�姹俓\2023\\5.棰嗗娼滃姏鎶ュ憡\\report\\LAQ鑻辨枃鎶ュ憡-20230926.docx");
-//            XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage("D:\\娴嬭瘎绯荤粺\\闇�姹俓\2023\\5.棰嗗娼滃姏鎶ュ憡\\report\\LAQ鑻辨枃鎶ュ憡-20230926.docx"));
-//
-//            String fileName = "C:\\Users\\澶уご\\Desktop\\MAQ缁勫埆鎶ュ憡\\MAQ缁勫埆瀵煎叆鏁版嵁妯℃澘 -3缁�(1).xlsx";
-//            //鍙樻洿鍥捐〃鏁版嵁
-//            changeMAQTRChart(document,fileName);
-//            document.write(os);
+    public static void main(String[] args) throws Exception {
+        String dataPath = "D:\\娴嬭瘎绯荤粺\\闇�姹俓\LAQ\\report\\LAQ琛ㄥご鏁版嵁鏂囦欢.xlsx";
+        // 鑾峰彇瀵煎叆鏁版嵁
+        File file = new File(dataPath);
+        InputStream in = new FileInputStream(file);
+        ExcelUtil<LAQTemplate> util = new ExcelUtil<>(LAQTemplate.class);
+        List<LAQTemplate> laqTemplateList = util.importExcel(in);
+        // 鐢熸垚鏂囦欢闆嗗悎
+        List<String> fileNameList = new ArrayList<>();
+        List<String> deleteStrList = new ArrayList<>();
+        for (int i = 0; i < laqTemplateList.size(); i++) {
+            LAQTemplate laqTemplate = laqTemplateList.get(i);
+            //缁勮鎶ュ憡鎵�鐢ㄦ暟鎹�
+            Map<String, Object> textMap = new HashMap<>();
+            textMap.put("sendEmailFileName",laqTemplate.getName());
+            textMap.put("nowDate", DateUtils.getDate());
+            MapDataUtil.objectToMap(laqTemplate,textMap);
 
-            OutputStream os = new FileOutputStream("D:\\娴嬭瘎绯荤粺\\闇�姹俓\2023\\5.棰嗗娼滃姏鎶ュ憡\\report\\LAQ鑻辨枃鎶ュ憡-111.docx");
-//            PdfUtil.convertPDF("D:\\娴嬭瘎绯荤粺\\闇�姹俓\2023\\5.棰嗗娼滃姏鎶ュ憡\\report\\LAQ鑻辨枃鎶ュ憡-20230926.docx");
-            XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage("D:\\娴嬭瘎绯荤粺\\闇�姹俓\2023\\5.棰嗗娼滃姏鎶ュ憡\\report\\LAQ鑻辨枃鎶ュ憡-20230926.docx"));
-
-            document.write(os);
-
-/*            String fileName = "C:\\Users\\澶уご\\Desktop\\MAQ缁勫埆鎶ュ憡\\缁勫埆瀵规瘮鎶ュ憡娴嬭瘯鏁版嵁.xlsx";
-            //replaceContent(fileName);
-            initDataNew(fileName,1);*/
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-    }
-
-
-    /**
-     * 璁$畻鏁版嵁骞剁敓鎴愭ā鏉�
-     */
-    public static Map<String,Map<Integer,Double>> replaceContent(String fileName){
-        //骞冲潎鍊奸泦鍚�
-        Map<String,Map<Integer,Double>> averageMap = new TreeMap<>();
-        try {
-            XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(fileName));
-            Map<String,Map<Integer,List<Double>>> dataMap = new TreeMap<>();
-            for (int i = 0; i < wb.getNumberOfSheets(); i++) {
-                XSSFSheet sheet = wb.getSheetAt(i);
-                String companyName = sheet.getRow(1).getCell(0).getStringCellValue();
-                Map<Integer,List<Double>> map = new HashMap<>();
-                //缁熻浜烘暟
-                int person = 0;
-                //琛�
-                for (int j = 1; j <= sheet.getLastRowNum(); j++) {
-                    XSSFRow row = sheet.getRow(j);
-                    if(isEmptyRow(row)){
-                        break;
-                    }
-                    //鍒�
-                    for (int k = 1; k < row.getLastCellNum(); k++) {
-                        XSSFCell cell = row.getCell(k);
-                        if(cell == null){
-                            break;
-                        }
-                        //涓嶆槸鍒嗘暟 蹇界暐
-                        Double cellValue = null;
-                        try {
-                            switch (cell.getCellType()) {
-                                case STRING:
-                                    cellValue = Double.valueOf(cell.getStringCellValue());
-                                    break;
-                                case NUMERIC:
-                                    cellValue = cell.getNumericCellValue();
-                                    break;
-                            }
-                        }catch (Exception e){
-                            log.error("鑾峰彇鍒嗘暟澶辫触,{}"+e.getMessage());
-                            e.printStackTrace();
-                        }
-
-                        //褰掔被涓��
-                        if(map.get(k) != null){
-                            map.get(k).add(cellValue);
-                        }else {
-                            List<Double> list = new ArrayList<>();
-                            list.add(cellValue);
-                            map.put(k,list);
-                        }
-                    }
-                    person++;
-                }
-
-                //璁剧疆浜烘暟
-                List<Double> list = new ArrayList<>();
-                list.add(Double.valueOf(person));
-                map.put(999,list);
-
-                //璁剧疆涓嶅悓鍥㈤槦鐨勬暟鎹�
-                dataMap.put(companyName,map);
+//            TReportTemplate template = null;
+//            String zipFileName = WordUtil.makeReportFile("D:\\娴嬭瘎绯荤粺\\闇�姹俓\LAQ\\report\\LAQ鑻辨枃鎶ュ憡-20230926.docx", template, textMap, new HashMap<>(), deleteStrList);
+//            fileNameList.add(zipFileName);
+            ZipSecureFile.setMinInflateRatio(0.001);
+            try (OutputStream os = new FileOutputStream("D:\\娴嬭瘎绯荤粺\\闇�姹俓\LAQ\\report\\LAQ.docx");XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage("D:\\娴嬭瘎绯荤粺\\闇�姹俓\LAQ\\report\\LAQ鑻辨枃鎶ュ憡-20230926.docx"))){
+                Map<Integer,List<SeriesData>> seriesDatas = initData(textMap);
+                changeChart(document,seriesDatas,textMap);
+                document.write(os);
+            }catch (Exception e){
+                e.printStackTrace();
             }
-            //骞冲潎鍊奸泦鍚�
-            for (Map.Entry<String, Map<Integer, List<Double>>> map : dataMap.entrySet()) {
-                //33涓釜鎬ч泦鍚堝��
-                Map<Integer,List<Double>> valMap = map.getValue();
-                //缁熻涓�у钩鍧囧��
-                Map<Integer,Double> doubleMap = new HashMap<>();
-                for (Map.Entry<Integer, List<Double>> val : valMap.entrySet()) {
-                    List<Double> doubleList = val.getValue();
-                    //璁$畻骞冲潎鍊�
-                    double average = doubleList.stream().mapToDouble(e -> e).average().orElse(0.00);
-                    doubleMap.put(val.getKey(),average);
-                }
-                averageMap.put(map.getKey(),doubleMap);
-            }
-            //System.out.println(averageMap);
-        }catch (Exception e){
-            e.printStackTrace();
-            log.error("璁$畻骞冲潎鍊煎嚭閿�!");
+
+            log.info("鍒犻櫎鐨勬枃浠跺悕:{}", JSON.toJSONString(deleteStrList));
+            WordUtil.deleteFileByStr(deleteStrList);
         }
-        return averageMap;
     }
 
     /**
      * 鍒濆鍖栨姤鍛婃暟鎹�
-     * @param fileName 鏁版嵁婧愭枃浠跺悕
-     * @param index 妯℃澘sheet绱㈠紩
+     * @param textMap
      * @return
      */
-    public static List<SeriesData> initDataNew(String fileName,Integer index){
-        Map<String,Map<Integer,Double>> dataMap = replaceContent(fileName);
-        List<SeriesData> seriesDatas = new ArrayList<>();
-        if(dataMap != null){
-            int oneIndex = 22;
-            int twoIndex = 33;
-            //1-22涓��
-            if(index == 0){
-                //涓�� [绗竴琛宂
-                SeriesData title = new SeriesData();
-                String name = "涓��";
-                title.setName(name);
-                List<RowData> rowDataList = new ArrayList<>();
-                for (int i = oneIndex; i > 0; i--) {
-                    RowData rowData = new RowData();
-                    rowData.setName(name);
-                    rowData.setValueStr(CapabilityEnum.codeOf(i));
-                    rowDataList.add(rowData);
-                }
-                title.setValue(rowDataList);
-                seriesDatas.add(title);
-                //鍔ㄦ�佸��
-                for (Map.Entry<String,Map<Integer,Double>> map : dataMap.entrySet()) {
-                    SeriesData valSeriesData = new SeriesData();
-                    Map<Integer,Double> valMap = map.getValue();
-                    valSeriesData.setName(map.getKey()+"锛坣="+ valMap.get(999).intValue() +"锛�");
-                    List<RowData> valRowDataList = new ArrayList<>();
-                    for (int i = oneIndex; i > 0; i--) {
-                        RowData rowData = new RowData();
-                        rowData.setName(map.getKey());
-                        rowData.setValue(valMap.get(i));
-                        valRowDataList.add(rowData);
-                    }
-                    valSeriesData.setValue(valRowDataList);
-                    seriesDatas.add(valSeriesData);
-                }
-                //鍥哄畾杈呭姪鍒�
-                String auxiliary = "杈呭姪";
-                SeriesData auxiliaryTitle = new SeriesData();
-                auxiliaryTitle.setName(auxiliary);
-                List<RowData> auxiliaryRowDataList = new ArrayList<>();
-                for (int i = 1; i <= oneIndex; i++) {
-                    RowData rowData = new RowData();
-                    rowData.setName(auxiliary);
-                    rowData.setValue(i);
-                    auxiliaryRowDataList.add(rowData);
-                }
-                auxiliaryTitle.setValue(auxiliaryRowDataList);
-                seriesDatas.add(auxiliaryTitle);
-                //鍧愭爣绾�
-                String blank = " ";
-                SeriesData blankTitle = new SeriesData();
-                blankTitle.setName(blank);
-                List<RowData> blankTitleRowDataList = new ArrayList<>();
-                for (int i = 1; i <= oneIndex; i++) {
-                    RowData rowData = new RowData();
-                    rowData.setName(blank);
-                    rowData.setValue(0);
-                    blankTitleRowDataList.add(rowData);
-                }
-                blankTitle.setValue(blankTitleRowDataList);
-                seriesDatas.add(blankTitle);
-            }
-            //23-33涓��
-            if(index == 1){
-                //涓�� [绗竴琛宂
-                SeriesData title = new SeriesData();
-                String name = "涓��";
-                title.setName(name);
-                List<RowData> rowDataList = new ArrayList<>();
-                for (int i = twoIndex; i > oneIndex; i--) {
-                    RowData rowData = new RowData();
-                    rowData.setName(name);
-                    rowData.setValueStr(CapabilityEnum.codeOf(i));
-                    rowDataList.add(rowData);
-                }
-                title.setValue(rowDataList);
-                seriesDatas.add(title);
-                //鍔ㄦ�佸��
-                for (Map.Entry<String,Map<Integer,Double>> map : dataMap.entrySet()) {
-                    SeriesData valSeriesData = new SeriesData();
-                    Map<Integer,Double> valMap = map.getValue();
-                    valSeriesData.setName(map.getKey()+"锛坣="+valMap.get(999).intValue()+"锛�");
-                    List<RowData> valRowDataList = new ArrayList<>();
-                    for (int i = twoIndex; i > oneIndex; i--) {
-                        RowData rowData = new RowData();
-                        rowData.setName(map.getKey());
-                        rowData.setValue(valMap.get(i));
-                        valRowDataList.add(rowData);
-                    }
-                    valSeriesData.setValue(valRowDataList);
-                    seriesDatas.add(valSeriesData);
-                }
-                //鍥哄畾杈呭姪鍒�
-                String auxiliary = "杈呭姪";
-                SeriesData auxiliaryTitle = new SeriesData();
-                auxiliaryTitle.setName(auxiliary);
-                List<RowData> auxiliaryRowDataList = new ArrayList<>();
-                for (int i = 1; i <= (twoIndex-oneIndex); i++) {
-                    RowData rowData = new RowData();
-                    rowData.setName(auxiliary);
-                    rowData.setValue(i);
-                    auxiliaryRowDataList.add(rowData);
-                }
-                auxiliaryTitle.setValue(auxiliaryRowDataList);
-                seriesDatas.add(auxiliaryTitle);
-                //鍧愭爣绾�
-                String blank = " ";
-                SeriesData blankTitle = new SeriesData();
-                blankTitle.setName(blank);
-                List<RowData> blankTitleRowDataList = new ArrayList<>();
-                for (int i = 1; i <= (twoIndex-oneIndex); i++) {
-                    RowData rowData = new RowData();
-                    rowData.setName(blank);
-                    rowData.setValue(0);
-                    blankTitleRowDataList.add(rowData);
-                }
-                blankTitle.setValue(blankTitleRowDataList);
-                seriesDatas.add(blankTitle);
-            }
-        }
-        return seriesDatas;
+    public static Map<Integer,List<SeriesData>> initData(Map<String, Object> textMap){
+        Map<Integer,List<SeriesData>> seriesDataMap = new HashMap<>();
+        //鑾峰彇鍛戒腑鏁板��
+        BigDecimal olas = (BigDecimal) textMap.get("olas");
+        BigDecimal ca = (BigDecimal) textMap.get("ca");
+        BigDecimal bla = (BigDecimal) textMap.get("bla");
+        BigDecimal nr = (BigDecimal) textMap.get("nr");
+        BigDecimal ar = (BigDecimal) textMap.get("ar");
+        BigDecimal open = (BigDecimal) textMap.get("open");
+        BigDecimal cons = (BigDecimal) textMap.get("cons");
+        BigDecimal extra = (BigDecimal) textMap.get("extra");
+        BigDecimal agree = (BigDecimal) textMap.get("agree");
+        BigDecimal emosta = (BigDecimal) textMap.get("emosta");
+
+        // 鍥捐〃1
+        List<SeriesData> seriesDatas = Arrays.asList(
+                new SeriesData(" ", Arrays.asList(
+                        new RowData(" ", 0,"绫诲埆 1")
+                )),
+                new SeriesData("绯诲垪 1", Arrays.asList(
+                        new RowData("绯诲垪 1", olas.doubleValue())
+                ))
+        );
+        seriesDataMap.put(1,seriesDatas);
+
+        // 鍥捐〃2
+        seriesDatas = Arrays.asList(
+                new SeriesData(" ", Arrays.asList(
+                        new RowData(" ", 0,"Behavioral Leadership Alignment"),
+                        new RowData(" ", 0,"Cognitive Ability")
+                )),
+                new SeriesData("绯诲垪 1", Arrays.asList(
+                        new RowData("绯诲垪 1", bla.doubleValue()),
+                        new RowData("绯诲垪 1", ca.doubleValue())
+                ))
+        );
+        seriesDataMap.put(2,seriesDatas);
+
+        // 鍥捐〃3
+        seriesDatas = Arrays.asList(
+                new SeriesData(" ", Arrays.asList(
+                        new RowData(" ", 0,"Abstract Reasoning"),
+                        new RowData(" ", 0,"Numeric Reasoning")
+                )),
+                new SeriesData("绯诲垪 1", Arrays.asList(
+                        new RowData("绯诲垪 1", ar.doubleValue()),
+                        new RowData("绯诲垪 1", nr.doubleValue())
+                ))
+        );
+        seriesDataMap.put(3,seriesDatas);
+
+        // 鍥捐〃4
+        seriesDatas = Arrays.asList(
+                new SeriesData(" ", Arrays.asList(
+                        new RowData(" ", 0,"绫诲埆 1")
+                )),
+                new SeriesData("绯诲垪 1", Arrays.asList(
+                        new RowData("绯诲垪 1", bla.doubleValue())
+                ))
+        );
+        seriesDataMap.put(4,seriesDatas);
+
+        // 鍥捐〃5
+        seriesDatas = Arrays.asList(
+                new SeriesData(" ", Arrays.asList(
+                        new RowData(" ", 0,"Emotional Stability"),
+                        new RowData(" ", 0,"Agreeableness"),
+                        new RowData(" ", 0,"Extraversion"),
+                        new RowData(" ", 0,"Conscientiousness"),
+                        new RowData(" ", 0,"Openness to Experience")
+                )),
+                new SeriesData("绯诲垪 1", Arrays.asList(
+                        new RowData("绯诲垪 1", emosta.doubleValue()),
+                        new RowData("绯诲垪 1", agree.doubleValue()),
+                        new RowData("绯诲垪 1", extra.doubleValue()),
+                        new RowData("绯诲垪 1", cons.doubleValue()),
+                        new RowData("绯诲垪 1", open.doubleValue())
+                ))
+        );
+        seriesDataMap.put(5,seriesDatas);
+
+        // 鍥捐〃6
+        seriesDatas = Arrays.asList(
+                new SeriesData(" ", Arrays.asList(
+                        new RowData(" ", 0,"Emotional Stability"),
+                        new RowData(" ", 0,"Agreeableness"),
+                        new RowData(" ", 0,"Extraversion"),
+                        new RowData(" ", 0,"Conscientiousness"),
+                        new RowData(" ", 0,"Openness to Experience")
+                )),
+                new SeriesData("绯诲垪 1", Arrays.asList(
+                        new RowData("绯诲垪 1", emosta.doubleValue()),
+                        new RowData("绯诲垪 1", agree.doubleValue()),
+                        new RowData("绯诲垪 1", extra.doubleValue()),
+                        new RowData("绯诲垪 1", cons.doubleValue()),
+                        new RowData("绯诲垪 1", open.doubleValue())
+                ))
+        );
+        seriesDataMap.put(6,seriesDatas);
+
+        // 鍥捐〃7
+        seriesDatas = Arrays.asList(
+                new SeriesData(" ", Arrays.asList(
+                        new RowData(" ", 0,"Emotional Stability"),
+                        new RowData(" ", 0,"Agreeableness"),
+                        new RowData(" ", 0,"Extraversion"),
+                        new RowData(" ", 0,"Conscientiousness"),
+                        new RowData(" ", 0,"Openness to Experience")
+                )),
+                new SeriesData("绯诲垪 1", Arrays.asList(
+                        new RowData("绯诲垪 1", emosta.doubleValue()),
+                        new RowData("绯诲垪 1", agree.doubleValue()),
+                        new RowData("绯诲垪 1", extra.doubleValue()),
+                        new RowData("绯诲垪 1", cons.doubleValue()),
+                        new RowData("绯诲垪 1", open.doubleValue())
+                ))
+        );
+        seriesDataMap.put(7,seriesDatas);
+
+        // 鍥捐〃8
+        seriesDatas = Arrays.asList(
+                new SeriesData(" ", Arrays.asList(
+                        new RowData(" ", 0,"Emotional Stability"),
+                        new RowData(" ", 0,"Agreeableness"),
+                        new RowData(" ", 0,"Extraversion"),
+                        new RowData(" ", 0,"Conscientiousness"),
+                        new RowData(" ", 0,"Openness to Experience")
+                )),
+                new SeriesData("绯诲垪 1", Arrays.asList(
+                        new RowData("绯诲垪 1", emosta.doubleValue()),
+                        new RowData("绯诲垪 1", agree.doubleValue()),
+                        new RowData("绯诲垪 1", extra.doubleValue()),
+                        new RowData("绯诲垪 1", cons.doubleValue()),
+                        new RowData("绯诲垪 1", open.doubleValue())
+                ))
+        );
+        seriesDataMap.put(8,seriesDatas);
+
+        // 鍥捐〃9
+        seriesDatas = Arrays.asList(
+                new SeriesData(" ", Arrays.asList(
+                        new RowData(" ", 0,"Emotional Stability"),
+                        new RowData(" ", 0,"Agreeableness"),
+                        new RowData(" ", 0,"Extraversion"),
+                        new RowData(" ", 0,"Conscientiousness"),
+                        new RowData(" ", 0,"Openness to Experience")
+                )),
+                new SeriesData("绯诲垪 1", Arrays.asList(
+                        new RowData("绯诲垪 1", emosta.doubleValue()),
+                        new RowData("绯诲垪 1", agree.doubleValue()),
+                        new RowData("绯诲垪 1", extra.doubleValue()),
+                        new RowData("绯诲垪 1", cons.doubleValue()),
+                        new RowData("绯诲垪 1", open.doubleValue())
+                ))
+        );
+        seriesDataMap.put(9,seriesDatas);
+
+        // 鍥捐〃10
+        seriesDatas = Arrays.asList(
+                new SeriesData("X 鍊�", Arrays.asList(
+                        new RowData("X 鍊�", olas.doubleValue())
+                )),
+                new SeriesData("Y 鍊�", Arrays.asList(
+                        new RowData("Y 鍊�", 44)
+                ))
+        );
+        seriesDataMap.put(10,seriesDatas);
+
+        return seriesDataMap;
     }
 
     /**
-     * 鍒濆鍖栨姤鍛婃暟鎹�
-     * @param fileName 鏁版嵁婧愭枃浠跺悕
-     * @param index 妯℃澘sheet绱㈠紩
-     * @return
-     */
-    public static List<SeriesData> initData(String fileName,Integer index){
-        List<SeriesData> seriesDatas = new ArrayList<>();
-        try {
-            XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(fileName));
-            XSSFSheet sheet1 = wb.getSheetAt(index);
-
-            //鏁版嵁澶勭悊  鍏堣幏鍙栬〃澶撮暱搴�  閬嶅巻琛ㄥご琛屾暟銆佷竴涓�瀵瑰簲鏀捐繘琛ㄥご闆嗗悎閲�
-            Map<Integer,SeriesData> map = new HashMap<>();
-            XSSFRow row = sheet1.getRow(0);
-            for (int i = 0; i < row.getLastCellNum(); i++) {
-                //涓虹┖蹇界暐
-                /*if(StringUtils.isEmpty(getName(row.getCell(i)))){
-                    continue;
-                }*/
-                SeriesData seriesData = new SeriesData(getName(row.getCell(i)));
-                map.put(i,seriesData);
-                //璇诲彇姣忎竴琛屾瘡涓�鍒�
-                for (int j = 1; j <= sheet1.getLastRowNum(); j++) {
-                    //姣忎竴琛�
-                    XSSFRow row1 = sheet1.getRow(j);
-                    RowData rowData = new RowData();
-                    if(seriesData.getValue() == null){
-                        List<RowData> rowDatas = new ArrayList<>();
-                        //璁剧疆琛ㄥご
-                        rowData.setName(getName(row.getCell(i)));
-                        //鏍规嵁绫诲瀷鍒ゆ柇璧嬪��
-                        switch (row1.getCell(i).getCellType()) {
-                            case STRING:
-                                rowData.setValueStr(row1.getCell(i).getStringCellValue());
-                                break;
-                            case NUMERIC:
-                                rowData.setValue(row1.getCell(i).getNumericCellValue());
-                                break;
-                            default:
-                                break;
-                        }
-                        rowDatas.add(rowData);
-                        seriesData.setValue(rowDatas);
-                    }else{
-                        //璁剧疆琛ㄥご
-                        rowData.setName(getName(row.getCell(i)));
-                        //鏍规嵁绫诲瀷鍒ゆ柇璧嬪��
-                        switch (row1.getCell(i).getCellType()) {
-                            case STRING:
-                                rowData.setValueStr(row1.getCell(i).getStringCellValue());
-                                break;
-                            case NUMERIC:
-                                rowData.setValue(row1.getCell(i).getNumericCellValue());
-                                break;
-                            default:
-                                break;
-                        }
-                        seriesData.getValue().add(rowData);
-                    }
-                }
-                seriesDatas.add(seriesData);
-            }
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-        return seriesDatas;
-    }
-
-    /**
-     * 鏍规嵁鍗曞厓鏍肩被鍨嬪彇鍊�
-     * @return 杩斿洖瀛楃鍊�
-     */
-    private static String getName(XSSFCell cell){
-        String name = null;
-        switch (cell.getCellType()) {
-            case STRING:
-                name = cell.getStringCellValue();
-                break;
-            case NUMERIC:
-                name = cell.getNumericCellValue()+"";
-                break;
-        }
-        return name;
-    }
-
-    /**
-     * 鏇挎崲MAQTR鍥捐〃鏁版嵁
+     * 鏇挎崲LAQ鍥捐〃鏁版嵁
      * @param document 鏂囨。瀵硅薄
-     * @param fileName 鏁版嵁婧恊xcel
+     * @param seriesDataMap
+     * @param textMap 鏁版嵁婧�
      */
-    public static void changeMAQTRChart(XWPFDocument document,String fileName) {
-        if(StringUtils.isEmpty(fileName)){
+    public static void changeChart(XWPFDocument document, Map<Integer,List<SeriesData>> seriesDataMap, Map<String, Object> textMap) {
+        if(StringUtils.isEmpty(textMap)){
             return;
         }
         try {
             List<POIXMLDocumentPart> relations = document.getRelations();
+            int barIndex = 1;
             for (POIXMLDocumentPart part : relations) {
                 if (part instanceof XWPFChart) {
                     // 鍥捐〃鍏冪礌
                     XWPFChart chart = (XWPFChart) part;
-                    String partName = chart.getPackagePart().getPartName().getName();
-
-                    Integer index = 0;
-                    if(partName.contains("chart1.xml")){
-                        index = 0;
-                    }else if(partName.contains("chart2.xml")){
-                        index = 1;
-                    }
-                    //鑾峰彇妯℃澘鏁版嵁
-                    List<SeriesData> seriesDatas = initDataNew(fileName,index);
-                    //List<SeriesData> seriesDatas = initData(fileName,index);
-                    //log.error(JSON.toJSONString(seriesDatas));
-                    //鏁版嵁闀垮害
-                    int size = seriesDatas.size();
                     // 鏌ョ湅閲岄潰鐨勫浘琛ㄦ暟鎹紝鎵嶈兘鐭ラ亾鏄粈涔堝浘琛�
                     CTPlotArea plot = chart.getCTChart().getPlotArea();
+                    getChartType(chart);
                     // excel鍐呯疆琛ㄦ牸
                     XSSFWorkbook workbook = chart.getWorkbook();
                     XSSFSheet sheet = workbook.getSheetAt(0);
 
-                    //鏁g偣鍥�
-                    if (!plot.getScatterChartList().isEmpty()) {
-                        CTScatterChart scatterChart = plot.getScatterChartArray(0);
-
-                        //鍘婚櫎澶氫綑鏁版嵁婧�
-                        int remain = 8 - size;
-                        if(remain != 0){
-                            for (int j = 1; j <= remain; j++) {
-                                int removeSize = scatterChart.getSerList().size() - j - 1;
-                                scatterChart.getSerList().remove(removeSize);
-                                //鍒犻櫎excel澶氫綑鍒�
-                                //deleteColumn(sheet,8 - remain);
-                            }
-                        }
-
+                    //鏌卞舰鍥�
+                    if (!plot.getBarChartList().isEmpty()) {
+                        List<SeriesData> seriesDatas = seriesDataMap.get(barIndex);
+                        CTBarChart barChart = plot.getBarChartArray(0);
+                        //System.out.println("鏌卞舰鍥緖"+plot.getScatterChartList().size()+"}");
                         //鍒锋柊鍐呯疆excel鏁版嵁
                         refreshExcel(seriesDatas, sheet);
                         workbook.write(chart.getPackagePart().getOutputStream());
 
-                        //鏁g偣鍥炬暟鎹簮 XY鍧愭爣
-                        for (int i = 0; i < scatterChart.getSerList().size(); i++) {
-                            //鏍规嵁鍥捐〃鏁版嵁绾胯幏鍙栧搴旀暟鎹簮  鏁板�兼槸X杞� 杈呭姪Y杞�
-                            List<SeriesData> scatterDatas = new ArrayList<SeriesData>();
-                            //鏈�鍚庝竴涓暟鎹簮闇�鎷垮彇鏈�鍚庝竴鍒�0000 浣滀负x杞�
-                            if((i+1) == size-2){
-                                scatterDatas.add(seriesDatas.get(size-1));
-                                scatterDatas.add(seriesDatas.get(size-2));
-                            }else{
-                                scatterDatas.add(seriesDatas.get(i+1));
-                                scatterDatas.add(seriesDatas.get(size-2));
-                            }
+                        //鏌卞舰鍥炬暟鎹簮
+//                        List<SeriesData> barDatas = seriesDatas.subList(1,4);
+                        //鍥犱负鏌卞舰鍥綜TBarSer娌℃寜excel椤哄簭璧� 璋冩崲鏁版嵁浣嶇疆淇濇寔瀵瑰簲
+                        Collections.swap(seriesDatas, 0, 1);
+                        int j = 0;
+                        for (CTBarSer ser : barChart.getSerList()) {
+                            //鏇存柊鏌卞舰鍥炬暟鎹紦瀛�
+                            updateBarChart(seriesDatas.get(j), ser.getVal());
+                            ++j;
+                        }
+                        barIndex++;
+                    }
 
-                            CTScatterSer ser = scatterChart.getSerList().get(i);
-                            updateScatterChart(scatterDatas,ser.getTx(), ser.getXVal(), ser.getYVal());
+                    //鏁g偣鍥�
+                    if (!plot.getScatterChartList().isEmpty()) {
+                        List<SeriesData> seriesDatas = seriesDataMap.get(10);
+                        CTScatterChart scatterChart = plot.getScatterChartArray(0);
+                        //System.out.println("鏁g偣鍥緖"+plot.getScatterChartList().size()+"}");
+                        //鍒锋柊鍐呯疆excel鏁版嵁
+                        refreshExcel(seriesDatas, sheet);
+                        workbook.write(chart.getPackagePart().getOutputStream());
+
+/*                        //鏁g偣鍥炬暟鎹簮 XY鍧愭爣
+                        List<SeriesData> scatterDatas = new ArrayList<SeriesData>();
+                        scatterDatas.add(seriesDatas.get(0));
+                        scatterDatas.add(seriesDatas.get(4));*/
+                        int i = 0;
+                        for (CTScatterSer ser : scatterChart.getSerList()) {
+                            //鏇存柊鏁g偣鍥剧紦瀛�
+                            updateScatterChart(seriesDatas, ser.getXVal(), ser.getYVal());
+                            ++i;
                         }
                     }
                 }
@@ -442,72 +328,41 @@
         }
     }
 
-    /**
-     * 鍒犻櫎鍒�
-     * @param sheet
-     * @param columnToDelete
-     */
-    public static void deleteColumn(XSSFSheet sheet, int columnToDelete) {
-        for (int r = 0; r <= sheet.getLastRowNum(); r++) {
-            XSSFRow row = sheet.getRow(r);
-            for (int c = columnToDelete; c <= row.getLastCellNum(); c++) {
-                XSSFCell cOld = row.getCell(c);
-                if (cOld != null) {
-                    row.removeCell(cOld);
-                }
-                XSSFCell cNext = row.getCell(c + 1);
-                if (cNext != null) {
-                    XSSFCell cNew = row.createCell(c, cNext.getCellType());
-                    cloneCell(cNew, cNext);
-                    if (r == 0) {
-                        sheet.setColumnWidth(c, sheet.getColumnWidth(c + 1));
-                    }
-                }
-            }
-        }
-    }
+
 
     /**
-     * 鍙宠竟鍒楀乏绉�,鏍峰紡鍊艰缃�
-     * @param cNew
-     * @param cOld
+     * 鏇存柊 鏌卞舰鍥� 鐨勭紦瀛樻暟鎹�
+     *
+     * @param seriesDatas   鏁版嵁
+     * @param numDataSource 鏁版嵁鐨勭紦瀛�
      */
-    private static void cloneCell(XSSFCell cNew, XSSFCell cOld) {
-        cNew.setCellComment(cOld.getCellComment());
-        cNew.setCellStyle(cOld.getCellStyle());
-        if (CellType.BOOLEAN == cNew.getCellType()) {
-            cNew.setCellValue(cOld.getBooleanCellValue());
-        } else if (CellType.NUMERIC == cNew.getCellType()) {
-            cNew.setCellValue(cOld.getNumericCellValue());
-        } else if (CellType.STRING == cNew.getCellType()) {
-            cNew.setCellValue(cOld.getStringCellValue());
-        } else if (CellType.ERROR == cNew.getCellType()) {
-            cNew.setCellValue(cOld.getErrorCellValue());
-        } else if (CellType.FORMULA == cNew.getCellType()) {
-            cNew.setCellValue(cOld.getCellFormula());
-        }
-    }
+    protected static void updateBarChart(SeriesData seriesDatas, CTNumDataSource numDataSource) {
+        //鑾峰彇鏌卞舰鍥炬暟鎹暟閲�
+        long ptNumCnt = numDataSource.getNumRef().getNumCache().getPtCount().getVal();
+        int dataSize = seriesDatas.value.size();
+        for (int i = 0; i < dataSize; i++) {
+            RowData cellValu = seriesDatas.value.get(i);
+            CTNumVal val = ptNumCnt > i ? numDataSource.getNumRef().getNumCache().getPtArray(i)
+                    : numDataSource.getNumRef().getNumCache().addNewPt();
+            val.setIdx(i);
+            val.setV(String.format("%.0f", cellValu.value));
 
-    /**
-     * 绌鸿鍒ゆ柇
-     * @param row
-     * @return
-     */
-    public static boolean isEmptyRow(XSSFRow row){
-        if(row == null || row.toString().isEmpty()){
-            return  true;
-        }else{
-            Iterator<Cell> it = row.iterator();
-            boolean isEmpty = true;
-            while (it.hasNext()){
-                Cell cell = it.next();
-                if(cell.getCellType() != CellType.BLANK){
-                    isEmpty = false;
-                    break;
-                }
-            }
-            return isEmpty;
         }
+
+        // 鏇存柊瀵瑰簲excel鐨勮寖鍥�
+        numDataSource.getNumRef().setF(
+                replaceRowEnd(numDataSource.getNumRef().getF(),
+                        ptNumCnt,
+                        dataSize));
+
+        // 鍒犻櫎澶氱殑
+        if (ptNumCnt > dataSize) {
+            for (int idx = dataSize; idx < ptNumCnt; idx++) {
+                numDataSource.getNumRef().getNumCache().removePt(dataSize);
+            }
+        }
+        // 鏇存柊涓暟
+        numDataSource.getNumRef().getNumCache().getPtCount().setVal(dataSize);
     }
 
 
@@ -575,14 +430,8 @@
      * @param xDataSource X鍧愭爣鏁版嵁缂撳瓨
      * @param yDataSource Y鍧愭爣鏁版嵁缂撳瓨
      */
-    protected static void updateScatterChart(List<SeriesData> seriesDatas,CTSerTx serTitle, CTAxDataSource xDataSource,
+    protected static void updateScatterChart(List<SeriesData> seriesDatas, CTAxDataSource xDataSource,
                                              CTNumDataSource yDataSource) {
-
-        // 鏇存柊绯诲垪鏍囬
-        if(StringUtils.isNotEmpty(seriesDatas.get(0).getName())){
-            serTitle.getStrRef().setF(serTitle.getStrRef().getF());
-            serTitle.getStrRef().getStrCache().getPtArray(0).setV(seriesDatas.get(0).getName());
-        }
 
         //鑾峰彇xy鍧愭爣鏁版嵁鏉℃暟
         long xNumCnt = xDataSource.getNumRef().getNumCache().getPtCount().getVal();

--
Gitblit v1.9.1