main
黄海 8 months ago
parent 3f3ce46730
commit 215e7ba26d

@ -24,7 +24,8 @@ public class A12 {
static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【12】新-教育资源配置发展预测\\新-教育资源配置发展预测.xlsx";
//源文件
static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\全省及州市县区人口与教育报告集20241023\\133个县区报告2022\\县区研究报告";
//static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\全省及州市县区人口与教育报告集20241023\\133个县区报告2022\\县区研究报告";
static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【12】新-教育资源配置发展预测";
//哪些是处理不了的,就不处理了~
static String[] excludeCityList = {"~$", "磨憨-磨丁", "经开区", "阳宗海"};
@ -87,72 +88,80 @@ public class A12 {
//县区名称
//System.out.println(file.getAbsolutePath());
int chartNumber = 36;
List<List<String>> source36 = ExcelKit.getChartData(file.getAbsolutePath(), chartNumber, 0);
if (source36 == null) {
continue;
}
//需要处理下人与万人的单位兼容
for (int i = 0; i < source36.size(); i++) {
List<String> row = source36.get(i);
for (int j = 1; j <= 4; j++) {
if(j+1>row.size())continue;
if (Double.parseDouble(row.get(j)) < 10) {
row.set(j, String.valueOf((int) Double.parseDouble(row.get(j)) * 10000));
}
}
}
chartNumber = 37;
List<List<String>> source37 = ExcelKit.getChartData(file.getAbsolutePath(), chartNumber, 0);
if (source37 == null) {
continue;
}
List<List<String>> source1 = ExcelKit.getChartData(file.getAbsolutePath(), chartNumber, 0);
for (int i = 0; i < source36.size(); i++) {
List<String> row36 = source36.get(i);
if(i+1>source37.size()) continue;
List<String> row37 = source37.get(i);
Row outRow = outSheet.createRow(++rowIndex);
String year = row36.getFirst();//年份
//学前
String xq_jzg = row36.get(1);//教职工数
String xq_jzg2022 = source36.getFirst().get(1);//教职工2022基数
String xq_szqk = String.valueOf((int)(Double.parseDouble(xq_jzg2022) - Double.parseDouble(xq_jzg)));//缺口、富裕
String xq_ysmj = row37.get(1);//园舍面积
String xq_ysmj2022 = source37.getFirst().get(1);//园舍面积2022基数
String xq_ysmjqk = String.format("%.2f", Double.parseDouble(xq_ysmj2022) - Double.parseDouble(xq_ysmj));
//小学
String xx_jzg = row36.get(2);//教职工数
String xx_jzg2022 = source36.getFirst().get(2);//教职工2022基数
String xx_szqk = String.valueOf((int)(Double.parseDouble(xx_jzg2022) - Double.parseDouble(xx_jzg)));//缺口、富裕
if(2+1>row37.size()) continue;
String xx_ysmj = row37.get(2);//园舍面积
String xx_ysmj2022 = source37.getFirst().get(2);//园舍面积2022基数
String xx_ysmjqk = String.format("%.2f", Double.parseDouble(xx_ysmj2022) - Double.parseDouble(xx_ysmj));
//初中
String cz_jzg = row36.get(3);//教职工数
String cz_jzg2022 = source36.getFirst().get(3);//教职工2022基数
String cz_szqk = String.valueOf((int)(Double.parseDouble(cz_jzg2022) - Double.parseDouble(cz_jzg)));//缺口、富裕
String cz_ysmj = row37.get(3);//园舍面积
String cz_ysmj2022 = source37.getFirst().get(3);//园舍面积2022基数
String cz_ysmjqk = String.format("%.2f", Double.parseDouble(cz_ysmj2022) - Double.parseDouble(cz_ysmj));
//高中
String gz_jzg = row36.get(4);//教职工数
String gz_jzg2022 = source36.getFirst().get(4);//教职工2022基数
String gz_szqk = String.valueOf((int)(Double.parseDouble(gz_jzg2022) - Double.parseDouble(gz_jzg)));//缺口、富裕
String gz_ysmj = row37.get(4);//园舍面积
String gz_ysmj2022 = source37.getFirst().get(4);//园舍面积2022基数
String gz_ysmjqk = String.format("%.2f", Double.parseDouble(gz_ysmj2022) - Double.parseDouble(gz_ysmj));
ExcelKit.putData(outRow, Arrays.asList(year, areaName,
xq_jzg, xq_jzg2022, xq_szqk, xq_ysmj, xq_ysmj2022, xq_ysmjqk, // 学前
xx_jzg, xx_jzg2022, xx_szqk, xx_ysmj, xx_ysmj2022, xx_ysmjqk, // 小学
cz_jzg, cz_jzg2022, cz_szqk, cz_ysmj, cz_ysmj2022, cz_ysmjqk, // 初中
gz_jzg, gz_jzg2022, gz_szqk, gz_ysmj, gz_ysmj2022, gz_ysmjqk, // 高中
cityName), dataStyle);
}
//需要处理下人与万人的单位兼容
// for (int i = 0; i < source1.size(); i++) {
// List<String> row = source1.get(i);
// for (int j = 1; j <= 4; j++) {
// if (j + 1 > row.size()) continue;
// if (Double.parseDouble(row.get(j)) < 10) {
// row.set(j, String.valueOf((int) Double.parseDouble(row.get(j)) * 10000));
// }
// }
// }
ExcelKit.printTable(source1);
// chartNumber = 37;
// List<List<String>> source37 = ExcelKit.getChartData(file.getAbsolutePath(), chartNumber, 0);
// ExcelKit.printTable(source37);
//
// if (source36 != null) {
// for (int i = 0; i < source36.size(); i++) {
// List<String> row36 = source36.get(i);
// if (source37 != null && i + 1 > source37.size()) continue;
// List<String> row37 = null;
// if (source37 != null) {
// row37 = source37.get(i);
// }
// Row outRow = outSheet.createRow(++rowIndex);
// String year = row36.getFirst();//年份
// //学前
// String xq_jzg = row36.get(1);//教职工数
// String xq_jzg2022 = source36.getFirst().get(1);//教职工2022基数
// String xq_szqk = String.valueOf((int)(Double.parseDouble(xq_jzg2022) - Double.parseDouble(xq_jzg)));//缺口、富裕
// String xq_ysmj = null;//园舍面积
// if (row37 != null) {
// xq_ysmj = row37.get(1);
// }
// String xq_ysmj2022 = null;//园舍面积2022基数
// if (source37 != null) {
// xq_ysmj2022 = source37.getFirst().get(1);
// }
// String xq_ysmjqk = String.format("%.2f", Double.parseDouble(xq_ysmj2022) - Double.parseDouble(xq_ysmj));
//
// //小学
// String xx_jzg = row36.get(2);//教职工数
// String xx_jzg2022 = source36.getFirst().get(2);//教职工2022基数
// String xx_szqk = String.valueOf((int)(Double.parseDouble(xx_jzg2022) - Double.parseDouble(xx_jzg)));//缺口、富裕
// if(2+1>row37.size()) continue;
// String xx_ysmj = row37.get(2);//园舍面积
// String xx_ysmj2022 = source37.getFirst().get(2);//园舍面积2022基数
// String xx_ysmjqk = String.format("%.2f", Double.parseDouble(xx_ysmj2022) - Double.parseDouble(xx_ysmj));
//
// //初中
// String cz_jzg = row36.get(3);//教职工数
// String cz_jzg2022 = source36.getFirst().get(3);//教职工2022基数
// String cz_szqk = String.valueOf((int)(Double.parseDouble(cz_jzg2022) - Double.parseDouble(cz_jzg)));//缺口、富裕
// String cz_ysmj = row37.get(3);//园舍面积
// String cz_ysmj2022 = source37.getFirst().get(3);//园舍面积2022基数
// String cz_ysmjqk = String.format("%.2f", Double.parseDouble(cz_ysmj2022) - Double.parseDouble(cz_ysmj));
//
// //高中
// String gz_jzg = row36.get(4);//教职工数
// String gz_jzg2022 = source36.getFirst().get(4);//教职工2022基数
// String gz_szqk = String.valueOf((int)(Double.parseDouble(gz_jzg2022) - Double.parseDouble(gz_jzg)));//缺口、富裕
// String gz_ysmj = row37.get(4);//园舍面积
// String gz_ysmj2022 = source37.getFirst().get(4);//园舍面积2022基数
// String gz_ysmjqk = String.format("%.2f", Double.parseDouble(gz_ysmj2022) - Double.parseDouble(gz_ysmj));
//
// ExcelKit.putData(outRow, Arrays.asList(year, areaName,
// xq_jzg, xq_jzg2022, xq_szqk, xq_ysmj, xq_ysmj2022, xq_ysmjqk, // 学前
// xx_jzg, xx_jzg2022, xx_szqk, xx_ysmj, xx_ysmj2022, xx_ysmjqk, // 小学
// cz_jzg, cz_jzg2022, cz_szqk, cz_ysmj, cz_ysmj2022, cz_ysmjqk, // 初中
// gz_jzg, gz_jzg2022, gz_szqk, gz_ysmj, gz_ysmj2022, gz_ysmjqk, // 高中
// cityName), dataStyle);
// }
// }
}
}
//保存文件

@ -357,7 +357,7 @@ public class ExcelKit {
* @throws IOException
* @throws InvalidFormatException
*/
public static List<List<String>> getChartData(String docPath, int chartNumber, int skipRowCount) throws IOException, InvalidFormatException, InterruptedException, DocumentException {
public static List<List<String>> getChartDataByXml(String docPath, int chartNumber, int skipRowCount) throws IOException, InvalidFormatException, InterruptedException, DocumentException {
List<List<String>> data = readChart(docPath, chartNumber);
//需要跳过前skipRowCount行先要判断一下是不是够跳的不够跳的直接输出错误
if (data == null || data.size() < skipRowCount) {
@ -368,6 +368,29 @@ public class ExcelKit {
return data;
}
public static List<List<String>> getChartData(String docPath, int chartNumber, int skipRowCount) throws IOException, InvalidFormatException, DocumentException, InterruptedException {
return getChartDataByXml(docPath, chartNumber, skipRowCount);
// InputStream is = new FileInputStream(docPath);
// ZipSecureFile.setMinInflateRatio(-1.0d);
// XWPFDocument doc = new XWPFDocument(is);
// //排序后的图表
// List<XWPFChart> charts = ExcelKit.getSortListForXWPFChart(doc.getCharts());
//
// if (charts.size() < chartNumber) {
// System.out.println(docPath + ",没有第" + chartNumber + "个图表,请检查!");
// return null;
// }
// XSSFWorkbook workbook = charts.get(chartNumber - 1).getWorkbook();
// List<List<String>> data = ExcelKit.readSheet(workbook, skipRowCount);
// is.close();
// if (data.isEmpty()) {
// System.out.println(docPath + ",第" + chartNumber + "个图表,存在数据外链接情况改用XML方式处理");
// return getChartDataByXml(docPath, chartNumber, skipRowCount);
// }
// return data;
}
/**
* Sheet2
*
@ -530,7 +553,7 @@ public class ExcelKit {
List<List<String>> matrix = new ArrayList<>();
String xml = DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml";
if (!(new File(xml).exists())) {
System.out.println(sourceDoc+" 没有找到第" + chartNumber + "个图表");
System.out.println(sourceDoc + " 没有找到第" + chartNumber + "个图表");
return matrix;
}
//3、开始读取
@ -600,6 +623,8 @@ public class ExcelKit {
matrix.add(row);
}
printTable(matrix);
//上面生成的数据格式需要行转列,横坐标是年份,纵坐标是数据
int rowCount = matrix.size();// 计算行数和列数
int colCount = matrix.getFirst().size();
@ -641,4 +666,5 @@ public class ExcelKit {
}
return transposed;
}
}

Loading…
Cancel
Save