diff --git a/Doc/待处理/区/【7】终-人口总体情况/【鲁甸县】终-人口总体情况(万人).xlsx b/Doc/待处理/区/【7】终-人口总体情况/【鲁甸县】终-人口总体情况(万人).xlsx deleted file mode 100644 index afbfac74..00000000 Binary files a/Doc/待处理/区/【7】终-人口总体情况/【鲁甸县】终-人口总体情况(万人).xlsx and /dev/null differ diff --git a/src/main/java/com/dsideal/base/Tools/FillData/Area/A7.java b/src/main/java/com/dsideal/base/Tools/FillData/Area/A7.java new file mode 100644 index 00000000..a741094f --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/FillData/Area/A7.java @@ -0,0 +1,139 @@ +package com.dsideal.base.Tools.FillData.Area; + +import cn.hutool.core.io.FileUtil; +import com.dsideal.base.Tools.FillData.ExcelKit.ExcelKit; +import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil; +import com.dsideal.base.Tools.Util.ReadDocxUtil; +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 java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class A7 { + + //示例Excel + static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【7】终-人口总体情况\\鲁甸县教育发展规模数据收集表.xlsx"; + + //源文件 + static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\全省及州市县区人口与教育报告集20241023\\133个县区报告2022\\县区研究报告"; + + //哪些是处理不了的,就不处理了~ + static String[] excludeCityList = {"~$", "磨憨-磨丁", "经开区", "阳宗海"}; + + //有好多EXCEL,啥样的有用?必须带有关键字字样的才有用! + static String fileNameKey = "发展规模数据"; + + //第二个表格的表头信息 + static String tableKeyword = "自动计算人口数"; + //第二个表格的表头有几行 + static int tableHeadRows = 2; + //第二个表格的最后一列的列名 + static String tableLetterIndex = "D"; + + public static void main(String[] args) throws IOException, InvalidFormatException { + //初始化数据库连接 + LocalMysqlConnectUtil.Init(); + //实例化 + ReadDocxUtil ru = new ReadDocxUtil(); + + //结果Excel + XSSFWorkbook outWorkbook = new XSSFWorkbook(); + //结果Sheet + XSSFSheet outSheet = ExcelKit.CreateSheet(outWorkbook); + //样式 + XSSFCellStyle headerStyle = ExcelKit.getHeaderStyle(outWorkbook); + XSSFCellStyle dataStyle = ExcelKit.getDataStyle(outWorkbook); + //如果样例文件是xls格式,则转化为xlsx格式 + sampleExcelPath = ExcelKit.ConvertXlsToXlsx(sampleExcelPath); + //拷贝文件头 + ExcelKit.CopyHead(sampleExcelPath, outSheet, headerStyle); + + //目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死 + String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx"); + ExcelKit.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(".xlsx") && !file.getName().endsWith(".xls")) + continue; + boolean flag = false; + for (String s : excludeCityList) { + if (file.getName().contains(s)) { + flag = true; + break; + } + } + if (flag) continue; + //只关心发展规模数据的表格 + if (!file.getName().contains(fileNameKey)) continue; + //县区名称 + String areaName = ru.getCityOrAreaName(file.getName()); + //市州名称 + //此文件的路径中最后一层的目录名称,应该是带着市州名称 ,把最后一层子目录的名称提出 + String parentPathName = file.getParentFile().getName(); + String cityName = ru.getCityOrAreaName(parentPathName); + if (StrKit.isBlank(cityName) || cityName.equals(areaName)) { + parentPathName = file.getParentFile().getParentFile().getName(); + cityName = ru.getCityOrAreaName(parentPathName); + } + + if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) { + System.out.println("发现异常数据,请人工处理:" + file.getName()); + System.exit(0); + } + + //县区名称 + System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~"); + String sourceExcel = file.getAbsolutePath(); + List> dataList = ExcelKit.readSecondTable(sourceExcel, 0, tableKeyword, + tableHeadRows, tableLetterIndex); + + //取出第一行 + if (dataList.isEmpty()) continue; + + //入园总数 + for (List stringList : dataList) { + //年份 + int year = Integer.parseInt(stringList.getFirst()); + //总人口 + String zrk = stringList.get(ExcelKit.transLetter2Num("B")).split("\\.")[0]; + //城镇人口 + String cz = stringList.get(ExcelKit.transLetter2Num("C")).split("\\.")[0]; + //乡村人口 + String xc = stringList.get(ExcelKit.transLetter2Num("D")).split("\\.")[0]; + + Row outRow = outSheet.createRow(++rowIndex); + ExcelKit.putData(outRow, Arrays.asList(areaName, "总人口", zrk, "人", cityName), dataStyle); + + ExcelKit.putData(outRow, Arrays.asList(areaName, "新生人口", "0", "人", cityName), dataStyle); + + ExcelKit.putData(outRow, Arrays.asList(areaName, "城镇人口", cz, "人", cityName), dataStyle); + + ExcelKit.putData(outRow, Arrays.asList(areaName, "乡村人口", xc, "人", cityName), dataStyle); + + //保留两位小数 + ExcelKit.putData(outRow, Arrays.asList(areaName, "城镇化率", + String.format("%.2f", Double.parseDouble(cz) / Double.parseDouble(zrk) * 100) + "%", "人", cityName), dataStyle); + } + + } + } + //保存文件 + ExcelKit.saveExcel(excelPath, outWorkbook); + System.out.println("县区所有文件处理完成!"); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/FillData/ExcelKit/ExcelKit.java b/src/main/java/com/dsideal/base/Tools/FillData/ExcelKit/ExcelKit.java index 275e4b4a..5e790360 100644 --- a/src/main/java/com/dsideal/base/Tools/FillData/ExcelKit/ExcelKit.java +++ b/src/main/java/com/dsideal/base/Tools/FillData/ExcelKit/ExcelKit.java @@ -13,7 +13,6 @@ import org.apache.poi.xwpf.usermodel.XWPFChart; import org.apache.poi.xwpf.usermodel.XWPFDocument; import java.io.*; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/dsideal/base/Tools/FillData/Test/TestAspose.java b/src/main/java/com/dsideal/base/Tools/FillData/Test/TestAspose.java deleted file mode 100644 index c4b03af7..00000000 --- a/src/main/java/com/dsideal/base/Tools/FillData/Test/TestAspose.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.dsideal.base.Tools.FillData.Test; - -import com.aspose.words.*; -import com.aspose.words.Chart; -import com.aspose.words.ChartType; -import com.aspose.words.Shape; - -public class TestAspose { - - public static void main(String[] args) throws Exception { - String sourceWord = "c:/西双版纳州人口变化及其对教育的影响20240420.docx"; - - Document doc = new Document(); - DocumentBuilder builder = new DocumentBuilder(doc); - - // Insert a chart shape with a document builder and get its chart. - Shape chartShape = builder.insertChart(ChartType.BAR, 400.0, 300.0); - Chart chart = chartShape.getChart(); - - ChartTitle title = chart.getTitle(); - title.setText("My Chart"); - title.setShow(true); - title.setOverlay(true); - - doc.save( "c:/Charts.ChartTitle.docx"); - } -}