From cbc60f9a1b50b2937d6f0141765ee3f7ee37cc34 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Tue, 8 Apr 2025 14:44:53 +0800 Subject: [PATCH] 'commit' --- .../Tools/Excel/Bean/BeanSchool2019_CZ.java | 32 +++++++++++ ...School2019.java => BeanSchool2019_XX.java} | 3 +- .../dsideal/base/Tools/Excel/School2019.java | 53 +++++++++++++------ 3 files changed, 70 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/dsideal/base/Tools/Excel/Bean/BeanSchool2019_CZ.java rename src/main/java/com/dsideal/base/Tools/Excel/Bean/{BeanSchool2019.java => BeanSchool2019_XX.java} (92%) diff --git a/src/main/java/com/dsideal/base/Tools/Excel/Bean/BeanSchool2019_CZ.java b/src/main/java/com/dsideal/base/Tools/Excel/Bean/BeanSchool2019_CZ.java new file mode 100644 index 00000000..1b314f9e --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/Excel/Bean/BeanSchool2019_CZ.java @@ -0,0 +1,32 @@ +package com.dsideal.base.Tools.Excel.Bean; + + +import cn.idev.excel.annotation.ExcelProperty; +import com.dsideal.base.Tools.Excel.Util.ExcelUtil; +import lombok.Data; + +@Data +public class BeanSchool2019_CZ { + + @ExcelProperty(index = 1) // B列 + private String schoolName; + + @ExcelProperty(index = 3) // D列 + private String schoolType; + + @ExcelProperty(index = 5) // F列 + private Integer schoolCount; + + @ExcelProperty(index = 374) // NK列 + private String city; + + @ExcelProperty(index = 375) // NL列 + private String district; + + public static void main(String[] args) { + // 测试字母标号转列索引 + String columnLetter = "NK"; // 示例输入 + int columnIndex = ExcelUtil.columnLetterToIndex(columnLetter); + System.out.printf("字母标号 %s 对应的列索引是: %d%n", columnLetter, columnIndex); + } +} \ No newline at end of file diff --git a/src/main/java/com/dsideal/base/Tools/Excel/Bean/BeanSchool2019.java b/src/main/java/com/dsideal/base/Tools/Excel/Bean/BeanSchool2019_XX.java similarity index 92% rename from src/main/java/com/dsideal/base/Tools/Excel/Bean/BeanSchool2019.java rename to src/main/java/com/dsideal/base/Tools/Excel/Bean/BeanSchool2019_XX.java index 59e16bfb..7eebe5ab 100644 --- a/src/main/java/com/dsideal/base/Tools/Excel/Bean/BeanSchool2019.java +++ b/src/main/java/com/dsideal/base/Tools/Excel/Bean/BeanSchool2019_XX.java @@ -6,7 +6,8 @@ import com.dsideal.base.Tools.Excel.Util.ExcelUtil; import lombok.Data; @Data -public class BeanSchool2019 { +public class BeanSchool2019_XX { + @ExcelProperty(index = 1) // B列 private String schoolName; diff --git a/src/main/java/com/dsideal/base/Tools/Excel/School2019.java b/src/main/java/com/dsideal/base/Tools/Excel/School2019.java index b4660734..e56895a8 100644 --- a/src/main/java/com/dsideal/base/Tools/Excel/School2019.java +++ b/src/main/java/com/dsideal/base/Tools/Excel/School2019.java @@ -3,7 +3,8 @@ package com.dsideal.base.Tools.Excel; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import cn.idev.excel.*; -import com.dsideal.base.Tools.Excel.Bean.BeanSchool2019; +import com.dsideal.base.Tools.Excel.Bean.BeanSchool2019_CZ; +import com.dsideal.base.Tools.Excel.Bean.BeanSchool2019_XX; import org.slf4j.LoggerFactory; import java.util.HashMap; @@ -16,36 +17,54 @@ public class School2019 { Logger excelLogger = (Logger) LoggerFactory.getLogger("cn.idev.excel"); excelLogger.setLevel(Level.INFO); String filePath = "D:/dsWork/2025年收集的人口与教育数据库(20250328)/2015-2020年的数据/基础教育/2019.xlsx"; - String sheetName = "基教小学"; - //跳过前7行 - int skipRows = 7; + // 处理小学数据 + processSheet(filePath, "基教小学", 7, BeanSchool2019_XX.class); - // 从第8行开始读取(跳过前7行) - List dataList = FastExcel.read(filePath) - .head(BeanSchool2019.class) + // 处理初中数据 + processSheet(filePath, "基教初中", 7, BeanSchool2019_CZ.class); + } + + /** + * 通用方法:处理指定 Sheet 表的数据 + * + * @param filePath 文件路径 + * @param sheetName Sheet 表名称 + * @param skipRows 跳过的行数 + * @param beanClass Bean 类 + */ + private static void processSheet(String filePath, String sheetName, int skipRows, Class beanClass) { + // 从指定行开始读取 + List dataList = FastExcel.read(filePath) + .head(beanClass) .sheet(sheetName) - .headRowNumber(skipRows) // 跳过前skipRows行 + .headRowNumber(skipRows) // 跳过前 skipRows 行 .doReadSync(); // 使用 Map 进行分组统计 Map> cityDistrictMap = new HashMap<>(); - for (BeanSchool2019 data : dataList) { - if (data.getSchoolCount() > 0) { - String city = data.getCity(); - String district = data.getDistrict(); - int count = data.getSchoolCount(); + for (T data : dataList) { + try { + // 通过反射获取字段值 + String city = (String) beanClass.getMethod("getCity").invoke(data); + String district = (String) beanClass.getMethod("getDistrict").invoke(data); + int count = (int) beanClass.getMethod("getSchoolCount").invoke(data); - // 如果市不存在,创建新的 Map - cityDistrictMap.putIfAbsent(city, new HashMap<>()); + if (count > 0) { + // 如果市不存在,创建新的 Map + cityDistrictMap.putIfAbsent(city, new HashMap<>()); - // 累加区对应的学校数量 - cityDistrictMap.get(city).merge(district, count, Integer::sum); + // 累加区对应的学校数量 + cityDistrictMap.get(city).merge(district, count, Integer::sum); + } + } catch (Exception e) { + throw new RuntimeException("处理数据时发生错误", e); } } // 输出分组统计结果 + System.out.println("Sheet: " + sheetName); for (Map.Entry> cityEntry : cityDistrictMap.entrySet()) { String city = cityEntry.getKey(); System.out.println("市: " + city);