diff --git a/Doc/有问题的县区/宁洱县(空35).docx b/Doc/全省及州市县区人口与教育报告集20241023/133个县区报告2022/县区研究报告/有问题,但已处理/宁洱县(空35).docx similarity index 100% rename from Doc/有问题的县区/宁洱县(空35).docx rename to Doc/全省及州市县区人口与教育报告集20241023/133个县区报告2022/县区研究报告/有问题,但已处理/宁洱县(空35).docx diff --git a/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测.xlsx b/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测.xlsx index 50bf2247..deedb6b0 100644 Binary files a/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测.xlsx and b/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测.xlsx differ diff --git a/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测【成果】.xlsx b/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测【成果】.xlsx index 1f3065ca..9b684167 100644 Binary files a/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测【成果】.xlsx and b/Doc/待处理/区/【12】新-教育资源配置发展预测/新-教育资源配置发展预测【成果】.xlsx differ diff --git a/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人).xlsx b/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人).xlsx index 84301612..f07b9862 100644 Binary files a/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人).xlsx and b/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人).xlsx differ diff --git a/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人)【成果】.xlsx b/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人)【成果】.xlsx deleted file mode 100644 index 92f0e478..00000000 Binary files a/Doc/待处理/区/【8】总人口变化及预测-双/总人口变化及预测-双-(万人)【成果】.xlsx and /dev/null differ diff --git a/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双.xlsx b/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双.xlsx index ac9163eb..52f80a8f 100644 Binary files a/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双.xlsx and b/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双.xlsx differ diff --git a/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双【成果】.xlsx b/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双【成果】.xlsx index b8155905..cee2941a 100644 Binary files a/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双【成果】.xlsx and b/Doc/待处理/区/【9】城镇&乡村人口变化及预测-双/城镇&乡村人口变化及预测-双【成果】.xlsx differ diff --git a/src/main/java/com/dsideal/base/Tools/Test/A12.java b/src/main/java/com/dsideal/base/Tools/Test/A12.java new file mode 100644 index 00000000..1be9118d --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/Test/A12.java @@ -0,0 +1,179 @@ +package com.dsideal.base.Tools.Test; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.dom4j.DocumentException; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A12 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【12】新-教育资源配置发展预测\\新-教育资源配置发展预测.xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\有问题的县区"; + //哪些是处理不了的,就不处理了~ + static String[] excludeCityList = {"~$", "磨憨-磨丁", "经开区", "阳宗海"}; + + static DataEaseModel dm = new DataEaseModel(); + + public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException, DocumentException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".docx") || file.getName().startsWith("~")) + continue; + boolean flag = false; + for (String s : excludeCityList) { + if (file.getName().contains(s)) { + flag = true; + break; + } + } + if (flag) continue; + //县区名称 + String areaName = dm.getAreaName(file.getName()); + //市州名称 + String cityName = dm.getCityNameByAreaName(areaName); + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + int chartNumber = 36; + List> source1 = DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0); + try { + + //需要处理下人与万人的单位兼容 + if (source1 != null) { + //本例中要乘以多少呢? + String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml"; + int mul = DsKit.getMul(xmlPath); + for (List row : source1) { + for (int j = 1; j <= 4; j++) { + if (j + 1 > row.size()) continue; + row.set(j, String.valueOf((int) (Double.parseDouble(row.get(j)) * mul))); + } + } + } + chartNumber = 37; + List> source2 = DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0); + + //需要处理下平方米与万平方米的单位兼容 + if (source2 != null) { + //本例中要乘以多少呢? + String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml"; + int mul = DsKit.getMul(xmlPath); + for (List row : source2) { + for (int j = 1; j <= 4; j++) { + if (j + 1 > row.size()) continue; + row.set(j, String.valueOf(Double.parseDouble(row.get(j)) * mul / 10000));//单位:万平方米 + } + } + } + + if (source1 != null) { + for (int i = 0; i < source1.size(); i++) { + List row36 = source1.get(i); + if (source2 != null && i + 1 > source2.size()) continue; + List row37 = null; + if (source2 != null) { + row37 = source2.get(i); + } + Row outRow = outSheet.createRow(++rowIndex); + String year = row36.getFirst();//年份 + //学前 + String xq_jzg = row36.get(1).split("\\.")[0];//教职工数 + String xq_jzg2022 = source1.getFirst().get(1).split("\\.")[0];//教职工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 (source2 != null) { + xq_ysmj2022 = source2.getFirst().get(1); + } + String xq_ysmjqk = String.format("%.2f", Double.parseDouble(xq_ysmj2022) - Double.parseDouble(xq_ysmj)); + + //小学 + String xx_jzg = row36.get(2).split("\\.")[0];//教职工数 + String xx_jzg2022 = source1.getFirst().get(2).split("\\.")[0];//教职工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 = source2.getFirst().get(2);//园舍面积2022基数 + String xx_ysmjqk = String.format("%.2f", Double.parseDouble(xx_ysmj2022) - Double.parseDouble(xx_ysmj)); + + //初中 + String cz_jzg = row36.get(3).split("\\.")[0];//教职工数 + String cz_jzg2022 = source1.getFirst().get(3).split("\\.")[0];//教职工2022基数 + String cz_szqk = String.valueOf((int) (Double.parseDouble(cz_jzg2022) - Double.parseDouble(cz_jzg)));//缺口、富裕 + String cz_ysmj = row37.get(3);//园舍面积 + String cz_ysmj2022 = source2.getFirst().get(3);//园舍面积2022基数 + String cz_ysmjqk = String.format("%.2f", Double.parseDouble(cz_ysmj2022) - Double.parseDouble(cz_ysmj)); + + //高中 + String gz_jzg = row36.get(4).split("\\.")[0];//教职工数 + String gz_jzg2022 = source1.getFirst().get(4).split("\\.")[0];//教职工2022基数 + String gz_szqk = String.valueOf((int) (Double.parseDouble(gz_jzg2022) - Double.parseDouble(gz_jzg)));//缺口、富裕 + String gz_ysmj = row37.get(4);//园舍面积 + String gz_ysmj2022 = source2.getFirst().get(4);//园舍面积2022基数 + String gz_ysmjqk = String.format("%.2f", Double.parseDouble(gz_ysmj2022) - Double.parseDouble(gz_ysmj)); + + DsKit.putData(outRow, Arrays.asList(year, areaName, + xq_jzg, xq_jzg2022, xq_szqk, String.format("%.2f", Double.parseDouble(xq_ysmj)), String.format("%.2f", Double.parseDouble(xq_ysmj2022)), xq_ysmjqk, // 学前 + xx_jzg, xx_jzg2022, xx_szqk, String.format("%.2f", Double.parseDouble(xx_ysmj)), String.format("%.2f", Double.parseDouble(xx_ysmj2022)), xx_ysmjqk, // 小学 + cz_jzg, cz_jzg2022, cz_szqk, String.format("%.2f", Double.parseDouble(cz_ysmj)), String.format("%.2f", Double.parseDouble(cz_ysmj2022)), cz_ysmjqk, // 初中 + gz_jzg, gz_jzg2022, gz_szqk, String.format("%.2f", Double.parseDouble(gz_ysmj)), String.format("%.2f", Double.parseDouble(gz_ysmj2022)), gz_ysmjqk, // 高中 + cityName), dataStyle); + } + } + } catch (Exception err) { + System.out.println(err.toString()); + } + + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/Test/A8.java b/src/main/java/com/dsideal/base/Tools/Test/A8.java new file mode 100644 index 00000000..e40223f1 --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/Test/A8.java @@ -0,0 +1,126 @@ +package com.dsideal.base.Tools.Test; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.dom4j.DocumentException; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A8 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【8】总人口变化及预测-双\\总人口变化及预测-双-(万人).xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\有问题的县区"; + //哪些是处理不了的,就不处理了~ + static String[] excludeCityList = {"~$", "磨憨-磨丁", "经开区", "阳宗海"}; + + + public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException, DocumentException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + for (File file : files) { + System.out.println("正在处理:" + file.getName()); + } + + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".docx") || file.getName().startsWith("~")) + continue; + boolean flag = false; + for (String s : excludeCityList) { + if (file.getName().contains(s)) { + flag = true; + break; + } + } + if (flag) continue; + + //县区名称 + DataEaseModel dm = new DataEaseModel(); + String areaName = dm.getAreaName(file.getName()); + //市州名称 + String cityName = dm.getCityNameByAreaName(areaName); + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + int chartNumber = 1; + + List> source = + DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0); + + //需要处理下人与万人的单位兼容 + int mul; + if (source != null) { + //本例中要乘以多少呢? + String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml"; + mul = DsKit.getMul(xmlPath); + + + for (List row : source) { + String year = row.getFirst().split("\\.")[0]; + year = year.replace("年", ""); + + String q = row.get(1); + if (StrKit.isBlank(q)) { + q = "0"; + } + double x = Double.parseDouble(q) * mul; + String v = String.format("%.2f", (x > 1000 ? x / 10000 : x));//如果数值大于1000,则计算以万为单位,否则就保留原来的数字 + + Row outRow = outSheet.createRow(++rowIndex); + if (Integer.parseInt(year) < 2023) { + DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, v, ""), dataStyle); + } else if (Integer.parseInt(year) > 2023) { + DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, "", v), dataStyle); + } else { + DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, v, v), dataStyle); + } + } + } + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/Test/A9.java b/src/main/java/com/dsideal/base/Tools/Test/A9.java new file mode 100644 index 00000000..5bb4fa4a --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/Test/A9.java @@ -0,0 +1,157 @@ +package com.dsideal.base.Tools.Test; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.jfinal.kit.StrKit; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.dom4j.DocumentException; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A9 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【9】城镇&乡村人口变化及预测-双\\城镇&乡村人口变化及预测-双.xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\有问题的县区"; + + //哪些是处理不了的,就不处理了~ + static String[] excludeCityList = {"~$", "磨憨-磨丁", "经开区", "阳宗海"}; + + + public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException, DocumentException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = DsKit.createSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + DsKit.copyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + DsKit.delExcel(excelPath); + + //找到parentPath下一级目录中所有文件 + List files = FileUtil.loopFiles(parentPath, file -> true); + int rowIndex = 0; + + //处理这个目录 + if (files != null) { + for (File file : files) { + //判断file是不是目录,是目录的需要跳过 + if (file.isDirectory()) continue; + if (!file.getName().endsWith(".docx") || file.getName().startsWith("~")) + continue; + boolean flag = false; + for (String s : excludeCityList) { + if (file.getName().contains(s)) { + flag = true; + break; + } + } + if (flag) continue; + //县区名称 + DataEaseModel dm = new DataEaseModel(); + String areaName = dm.getAreaName(file.getName()); + //市州名称 + String cityName = dm.getCityNameByAreaName(areaName); + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + int chartNumber = 2; + List> source1 = + DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0); + + + DsKit.printTable(source1); + + try{ + //需要处理下人与万人的单位兼容 + int mul = 1; + if (source1 != null) { + //本例中要乘以多少呢? + String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml"; + mul = DsKit.getMul(xmlPath); + + for (List row : source1) { + String year = row.getFirst().split("\\.")[0]; + year = year.replace("年", ""); + Row outRow = outSheet.createRow(++rowIndex); + String q1 = row.get(1); + if (StrKit.isBlank(q1)) { + q1 = "0"; + } + + double x = Double.parseDouble(q1) * mul; + String v1 = String.format("%.2f", (x > 1000 ? x / 10000 : x)); + + String q2 = row.get(2); + if (StrKit.isBlank(q2)) { + q2 = "0"; + } + x = Double.parseDouble(q2) * mul; + String v2 = String.format("%.2f", (x > 1000 ? x / 10000 : x)); + DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, v1, "", v2, ""), dataStyle); + } + } + + chartNumber = 3; + List> source2 = + DsKit.getChartData(file.getAbsolutePath(), chartNumber, 1); + if (source2 != null) { + //本例中要乘以多少呢? + String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml"; + mul = DsKit.getMul(xmlPath); + + for (List row : source2) { + String year = row.getFirst().split("\\.")[0]; + year = year.replace("年", ""); + Row outRow = outSheet.createRow(++rowIndex); + String q1 = row.get(1); + if (StrKit.isBlank(q1)) { + q1 = "0"; + } + String v1 = String.format("%.2f", Double.parseDouble(q1) * mul / 10000); + + String q2 = row.get(2); + if (StrKit.isBlank(q2)) { + q2 = "0"; + } + double x = Double.parseDouble(q2) * mul; + String v2 = String.format("%.2f", (x > 1000 ? x / 10000 : x)); + DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, "", v1, "", v2), dataStyle); + } + } + }catch (Exception err){ + System.out.println(err); + } + + } + } + //保存文件 + DsKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +}