|
|
|
@ -67,12 +67,12 @@ public class TestOutSideExcel {
|
|
|
|
|
* @param workingPath
|
|
|
|
|
* @param chartNumber
|
|
|
|
|
*/
|
|
|
|
|
public static List<List<String>> readChar(String workingPath, int chartNumber) throws DocumentException {
|
|
|
|
|
List<List<String>> matrix = new ArrayList<>();
|
|
|
|
|
public static List<List<String>> readChart(String workingPath, int chartNumber) throws DocumentException {
|
|
|
|
|
List<List<String>> matrix = new ArrayList<>();
|
|
|
|
|
String xml = workingPath + "\\word\\charts\\chart" + chartNumber + ".xml";
|
|
|
|
|
if (!(new File(xml).exists())) {
|
|
|
|
|
System.out.println("没有找到第" + chartNumber + "个图表");
|
|
|
|
|
return matrix ;
|
|
|
|
|
return matrix;
|
|
|
|
|
}
|
|
|
|
|
//3、开始读取
|
|
|
|
|
// 创建 SAXReader 对象,读取 XML 文件
|
|
|
|
@ -87,7 +87,6 @@ public class TestOutSideExcel {
|
|
|
|
|
//在每个已知的图表类型中查找,找到后跳出循环
|
|
|
|
|
//声明一个数组,图表的所有类型
|
|
|
|
|
String[] CHART_TYPES = {"lineChart", "barChart"};//折线,柱状
|
|
|
|
|
|
|
|
|
|
String type = "";
|
|
|
|
|
for (String chartType : CHART_TYPES) {
|
|
|
|
|
if (root.element("chart").element("plotArea")
|
|
|
|
@ -102,15 +101,12 @@ public class TestOutSideExcel {
|
|
|
|
|
System.exit(-1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<Element> xList = root.element("chart").element("plotArea")
|
|
|
|
|
.element(type).element("ser").element("cat")
|
|
|
|
|
List<Element> xList = root.element("chart").element("plotArea").element(type).element("ser").element("cat")
|
|
|
|
|
.element("numRef").element("numCache").elements("pt");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<Object> allValueList = new ArrayList<>();
|
|
|
|
|
List<Object> listObject = new ArrayList<>();
|
|
|
|
|
///c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser/c:val/c:numRef/c:numCache
|
|
|
|
|
for (Element ser : root.element("chart").element("plotArea")
|
|
|
|
|
.element(type).elements("ser")) {
|
|
|
|
|
for (Element ser : root.element("chart").element("plotArea").element(type).elements("ser")) {
|
|
|
|
|
List<Element> yList = ser.element("val").element("numRef").element("numCache").elements("pt");
|
|
|
|
|
|
|
|
|
|
//记录都有哪些有效数值和索引号
|
|
|
|
@ -118,16 +114,16 @@ public class TestOutSideExcel {
|
|
|
|
|
for (Element e : yList) {
|
|
|
|
|
map.put(Integer.parseInt(e.attribute("idx").getValue()), e);
|
|
|
|
|
}
|
|
|
|
|
List<Object> lo = new ArrayList<>();
|
|
|
|
|
List<Object> list = new ArrayList<>();
|
|
|
|
|
for (int i = 0; i < xList.size(); i++) {
|
|
|
|
|
lo.add(map.getOrDefault(i, null));
|
|
|
|
|
list.add(map.getOrDefault(i, null));
|
|
|
|
|
}
|
|
|
|
|
allValueList.add(lo);
|
|
|
|
|
listObject.add(list);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < allValueList.size(); i++) {
|
|
|
|
|
//数据是按行读取的
|
|
|
|
|
for (int i = 0; i < listObject.size(); i++) {
|
|
|
|
|
List<String> row = new ArrayList<>();
|
|
|
|
|
List<Element> lo = (List<Element>) allValueList.get(i);
|
|
|
|
|
List<Element> lo = (List<Element>) listObject.get(i);
|
|
|
|
|
for (Element e : lo) {
|
|
|
|
|
if (e == null) {
|
|
|
|
|
row.add(null);
|
|
|
|
@ -138,13 +134,10 @@ public class TestOutSideExcel {
|
|
|
|
|
matrix.add(row);
|
|
|
|
|
}
|
|
|
|
|
//上面生成的数据格式需要行转列,横坐标是年份,纵坐标是数据
|
|
|
|
|
// 计算行数和列数
|
|
|
|
|
int rowCount = matrix.size();
|
|
|
|
|
int rowCount = matrix.size();// 计算行数和列数
|
|
|
|
|
int colCount = matrix.getFirst().size();
|
|
|
|
|
|
|
|
|
|
// 创建一个一维列表,用于存储转换后的列
|
|
|
|
|
List<List<String>> transposed = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
// 遍历每一列
|
|
|
|
|
for (int col = 0; col < colCount; col++) {
|
|
|
|
|
// 创建一个新的内部列表,用于存储当前列的所有行
|
|
|
|
@ -156,8 +149,7 @@ public class TestOutSideExcel {
|
|
|
|
|
// 将当前列添加到结果列表中
|
|
|
|
|
transposed.add(column);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 在每一行的第一列插入序号
|
|
|
|
|
// 在每一行的第一列插入年份
|
|
|
|
|
for (int i = 0; i < transposed.size(); i++) {
|
|
|
|
|
List<String> column = transposed.get(i);
|
|
|
|
|
column.addFirst(xList.get(i).element("v").getText()); // 在每行的开始插入序号
|
|
|
|
@ -172,10 +164,10 @@ public class TestOutSideExcel {
|
|
|
|
|
String workingPath = "C:\\zipFile";
|
|
|
|
|
UnCompress(sourceDoc, workingPath);
|
|
|
|
|
//2、我们需要第几个图表
|
|
|
|
|
for (int chartNumber = 4; chartNumber <= 4; chartNumber++) {
|
|
|
|
|
for (int chartNumber = 1; chartNumber <= 37; chartNumber++) {
|
|
|
|
|
System.out.println("正在处理第" + chartNumber + "个图表的信息~");
|
|
|
|
|
//读取图表
|
|
|
|
|
List<List<String>> list = readChar(workingPath, chartNumber);
|
|
|
|
|
List<List<String>> list = readChart(workingPath, chartNumber);
|
|
|
|
|
ExcelKit.printTable(list);
|
|
|
|
|
System.out.println("=========================================================");
|
|
|
|
|
}
|
|
|
|
|