main
HuangHai 4 months ago
parent f1ba2cc0e0
commit 6ebe2f2b95

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/YunNanDsBase.iml" filepath="$PROJECT_DIR$/.idea/YunNanDsBase.iml" />
</modules>
</component>
</project>

@ -60,6 +60,12 @@
<artifactId>cos</artifactId>
<version>${jfinal-cos.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>4.0.3</version>
</dependency>
<!--阿里巴巴大模型-->
<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->
<dependency>

@ -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<SchoolData> dataList = EasyExcel.read(filePath)
.head(SchoolData.class)
.sheet(sheetName)
.headRowNumber(7) // 跳过前7行
.doReadSync();
// 使用 Map 进行分组统计
Map<String, Map<String, Integer>> 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<String, Map<String, Integer>> cityEntry : cityDistrictMap.entrySet()) {
String city = cityEntry.getKey();
System.out.println("市: " + city);
for (Map.Entry<String, Integer> districtEntry : cityEntry.getValue().entrySet()) {
System.out.printf(" 区: %s, 学校总数: %d%n",
districtEntry.getKey(),
districtEntry.getValue());
}
}
}
}

@ -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();
}
}

@ -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;
}
Loading…
Cancel
Save