diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index f6f85b5e..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index e229ea19..2efc1c3a 100644 --- a/pom.xml +++ b/pom.xml @@ -60,6 +60,12 @@ cos ${jfinal-cos.version} + + + com.alibaba + easyexcel + 4.0.3 + diff --git a/src/main/java/com/dsideal/base/Tools/Excel/ExcelReader.java b/src/main/java/com/dsideal/base/Tools/Excel/ExcelReader.java new file mode 100644 index 00000000..5b41537d --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/Excel/ExcelReader.java @@ -0,0 +1,56 @@ +package com.dsideal.base.Tools.Excel; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import com.alibaba.excel.EasyExcel; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class ExcelReader { + public static void main(String[] args) { + // 设置 com.alibaba.excel 的日志级别为 INFO + Logger excelLogger = (Logger) LoggerFactory.getLogger("com.alibaba.excel"); + excelLogger.setLevel(Level.INFO); + String filePath = "D:/dsWork/2025年收集的人口与教育数据库(20250328)/2015-2020年的数据/基础教育/2019.xlsx"; + String sheetName = "基教小学"; + + // 从第8行开始读取(跳过前7行) + List dataList = EasyExcel.read(filePath) + .head(SchoolData.class) + .sheet(sheetName) + .headRowNumber(7) // 跳过前7行 + .doReadSync(); + + // 使用 Map 进行分组统计 + Map> cityDistrictMap = new HashMap<>(); + + for (SchoolData data : dataList) { + if (data.getSchoolCount() > 0) { + String city = data.getCity(); + String district = data.getDistrict(); + int count = data.getSchoolCount(); + + // 如果市不存在,创建新的 Map + cityDistrictMap.putIfAbsent(city, new HashMap<>()); + + // 累加区对应的学校数量 + cityDistrictMap.get(city).merge(district, count, Integer::sum); + } + } + + // 输出分组统计结果 + for (Map.Entry> cityEntry : cityDistrictMap.entrySet()) { + String city = cityEntry.getKey(); + System.out.println("市: " + city); + + for (Map.Entry districtEntry : cityEntry.getValue().entrySet()) { + System.out.printf(" 区: %s, 学校总数: %d%n", + districtEntry.getKey(), + districtEntry.getValue()); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/dsideal/base/Tools/Excel/ExcelUtil.java b/src/main/java/com/dsideal/base/Tools/Excel/ExcelUtil.java new file mode 100644 index 00000000..402ad3ce --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/Excel/ExcelUtil.java @@ -0,0 +1,42 @@ +package com.dsideal.base.Tools.Excel; + + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import org.slf4j.LoggerFactory; + +public class ExcelUtil { + public static void main(String[] args) { + // 设置 com.alibaba.excel 的日志级别为 INFO + Logger excelLogger = (Logger) LoggerFactory.getLogger("com.alibaba.excel"); + excelLogger.setLevel(Level.INFO); + + // 测试字母标号转列索引 + String columnLetter = "MM"; // 示例输入 + int columnIndex = columnLetterToIndex(columnLetter); + System.out.printf("字母标号 %s 对应的列索引是: %d%n", columnLetter, columnIndex); + } + + // 将字母标号转换为列索引 + private static int columnLetterToIndex(String columnLetter) { + int index = 0; + for (int i = 0; i < columnLetter.length(); i++) { + char c = columnLetter.charAt(i); + if (c < 'A' || c > 'Z') { + throw new IllegalArgumentException("无效的字母标号: " + columnLetter); + } + index = index * 26 + (c - 'A' + 1); + } + return index - 1; // 列索引从 0 开始 + } + + // 将列索引转换为字母标号 + private static String indexToColumnLetter(int index) { + StringBuilder columnLetter = new StringBuilder(); + while (index >= 0) { + columnLetter.insert(0, (char) ('A' + (index % 26))); + index = (index / 26) - 1; + } + return columnLetter.toString(); + } +} diff --git a/src/main/java/com/dsideal/base/Tools/Excel/SchoolData.java b/src/main/java/com/dsideal/base/Tools/Excel/SchoolData.java new file mode 100644 index 00000000..dbed0eeb --- /dev/null +++ b/src/main/java/com/dsideal/base/Tools/Excel/SchoolData.java @@ -0,0 +1,23 @@ +package com.dsideal.base.Tools.Excel; + + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +@Data +public class SchoolData { + @ExcelProperty(index = 1) // B列 + private String schoolName; + + @ExcelProperty(index = 3) // D列 + private String schoolType; + + @ExcelProperty(index = 5) // F列 + private Integer schoolCount; + + @ExcelProperty(index = 350) // MM列 + private String city; + + @ExcelProperty(index = 351) // MN列 + private String district; +} \ No newline at end of file