main
黄海 8 months ago
parent 05572e114a
commit a7f413a28f

@ -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("=========================================================");
}

Loading…
Cancel
Save