|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package com.dsideal.base.Tools.Test;
|
|
|
|
|
|
|
|
|
|
import com.dsideal.base.Tools.FillData.ExcelKit.ExcelKit;
|
|
|
|
|
import com.jfinal.kit.StrKit;
|
|
|
|
|
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
|
|
|
|
|
import org.dom4j.Document;
|
|
|
|
|
import org.dom4j.DocumentException;
|
|
|
|
@ -57,10 +58,6 @@ public class TestOutSideExcel {
|
|
|
|
|
inputStream.close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//折线图
|
|
|
|
|
public static String LINE = "lineChart";
|
|
|
|
|
//柱状图
|
|
|
|
|
public static String BAR = "barChart";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 读取指定的Chart数据
|
|
|
|
@ -68,7 +65,7 @@ public class TestOutSideExcel {
|
|
|
|
|
* @param workingPath
|
|
|
|
|
* @param chartNumber
|
|
|
|
|
*/
|
|
|
|
|
public static List<List<String>> readChar(String workingPath, int chartNumber, String type) throws DocumentException {
|
|
|
|
|
public static List<List<String>> readChar(String workingPath, int chartNumber) throws DocumentException {
|
|
|
|
|
List<List<String>> res = new ArrayList<>();
|
|
|
|
|
String xml = workingPath + "\\word\\charts\\chart" + chartNumber + ".xml";
|
|
|
|
|
if (!(new File(xml).exists())) {
|
|
|
|
@ -84,6 +81,25 @@ public class TestOutSideExcel {
|
|
|
|
|
//折线图
|
|
|
|
|
//将xml用IDEA打开,搜索关键的数据值,然后右键查看XPATH完整路径可以获取到下面的路径
|
|
|
|
|
///c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser/c:cat/c:numRef/c:numCache/c:pt/c:v
|
|
|
|
|
|
|
|
|
|
//在每个已知的图表类型中查找,找到后跳出循环
|
|
|
|
|
//声明一个数组,图表的所有类型
|
|
|
|
|
String[] CHART_TYPES = {"lineChart", "barChart"};//折线,柱状
|
|
|
|
|
|
|
|
|
|
String type = "";
|
|
|
|
|
for (String chartType : CHART_TYPES) {
|
|
|
|
|
if (root.element("chart").element("plotArea")
|
|
|
|
|
.element(chartType) != null) {
|
|
|
|
|
type = chartType;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (StrKit.isBlank(type)) {
|
|
|
|
|
System.out.println("没有找到图表类型,请扩充图表类型");
|
|
|
|
|
System.out.println(root.element("chart").element("plotArea"));
|
|
|
|
|
System.exit(-1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<Element> xList = root.element("chart").element("plotArea")
|
|
|
|
|
.element(type).element("ser").element("cat")
|
|
|
|
|
.element("numRef").element("numCache").elements("pt");
|
|
|
|
@ -104,7 +120,16 @@ public class TestOutSideExcel {
|
|
|
|
|
|
|
|
|
|
for (int j = 0; j < allValueList.size(); j++) {
|
|
|
|
|
List<Element> yList = allValueList.get(j);
|
|
|
|
|
row.add(yList.get(i).element("v").getText());
|
|
|
|
|
if (yList == null || i + 1 > yList.size() || yList.get(i) == null) {
|
|
|
|
|
row.add(null);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
Element e = yList.get(i).element("v");
|
|
|
|
|
if (e != null) {
|
|
|
|
|
row.add(e.getText());
|
|
|
|
|
} else {
|
|
|
|
|
row.add(null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
res.add(row);
|
|
|
|
|
}
|
|
|
|
@ -118,16 +143,13 @@ public class TestOutSideExcel {
|
|
|
|
|
String workingPath = "C:\\zipFile";
|
|
|
|
|
UnCompress(sourceDoc, workingPath);
|
|
|
|
|
//2、我们需要第几个图表
|
|
|
|
|
int chartNumber = 1;
|
|
|
|
|
//读取第一个图表
|
|
|
|
|
List<List<String>> list1 = readChar(workingPath, chartNumber, LINE);
|
|
|
|
|
ExcelKit.printTable(list1);
|
|
|
|
|
|
|
|
|
|
System.out.println("=========================================================");
|
|
|
|
|
|
|
|
|
|
//读取第二个图表
|
|
|
|
|
chartNumber = 2;
|
|
|
|
|
List<List<String>> list2 = readChar(workingPath, chartNumber, BAR);
|
|
|
|
|
ExcelKit.printTable(list2);
|
|
|
|
|
for (int chartNumber = 4; chartNumber <= 4; chartNumber++) {
|
|
|
|
|
System.out.println("正在处理第" + chartNumber + "个图表的信息~");
|
|
|
|
|
//读取图表
|
|
|
|
|
List<List<String>> list = readChar(workingPath, chartNumber);
|
|
|
|
|
ExcelKit.printTable(list);
|
|
|
|
|
System.out.println("=========================================================");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|