main
HuangHai 4 months ago
parent ac6345e7ff
commit cbc60f9a1b

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

@ -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;

@ -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,14 +17,26 @@ 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<BeanSchool2019> 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 <T> void processSheet(String filePath, String sheetName, int skipRows, Class<T> beanClass) {
// 从指定行开始读取
List<T> dataList = FastExcel.read(filePath)
.head(beanClass)
.sheet(sheetName)
.headRowNumber(skipRows) // 跳过前 skipRows 行
.doReadSync();
@ -31,21 +44,27 @@ public class School2019 {
// 使用 Map 进行分组统计
Map<String, Map<String, Integer>> 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);
if (count > 0) {
// 如果市不存在,创建新的 Map
cityDistrictMap.putIfAbsent(city, new HashMap<>());
// 累加区对应的学校数量
cityDistrictMap.get(city).merge(district, count, Integer::sum);
}
} catch (Exception e) {
throw new RuntimeException("处理数据时发生错误", e);
}
}
// 输出分组统计结果
System.out.println("Sheet: " + sheetName);
for (Map.Entry<String, Map<String, Integer>> cityEntry : cityDistrictMap.entrySet()) {
String city = cityEntry.getKey();
System.out.println("市: " + city);

Loading…
Cancel
Save