main
黄海 8 months ago
parent ee139295df
commit fd9318895e

@ -2,5 +2,11 @@
城镇化率 = 城镇人口 / 总人口 保留两位小数
总人口:B
城镇人口:D
乡村人口:E
城镇化率:计算,
每项需要除以10000
单位:万人

@ -0,0 +1,103 @@
package com.dsideal.base.Tools.FillData.City;
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.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class C8 {
//示例Excel
static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\市\\【8】人口总体情况\\人口总体情况.xlsx";
//源文件
static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\全省及州市县区人口与教育报告集20241023\\2023年数据更新表\\16州市数据更新表汇总20241021";
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<File> files = FileUtil.loopFiles(parentPath, file -> true);
int rowIndex = 0;
//处理这个目录
if (files != null) {
for (File file : files) {
//判断file是不是目录是目录的需要跳过
if (file.isDirectory()) continue;
//城市名称
String cityName = ru.getCityOrAreaName(file.getName());
if (StrKit.isBlank(cityName)) {
System.out.println("发现异常数据,请人工处理:" + file.getName());
System.exit(0);
}
System.out.println("正在进行" + cityName + "的数据填充~");
//如果源文件或者示例文件是xls格式则转化为xlsx格式
String sourceExcel = file.getAbsolutePath();
sourceExcel = ExcelKit.ConvertXlsToXlsx(sourceExcel);
//它的最后一个有效数据行,就是这个城市的整体数据汇总
List<List<String>> sheetList = ExcelKit.readSheet(sourceExcel, 4);//此表格有4行表头
//最后一行的数据就是整个市州的数据
List<String> rowData = sheetList.getLast();
try {
Row outRow = outSheet.createRow(++rowIndex);
Double allCount = Double.parseDouble(rowData.get(ExcelKit.transLetter2Num("B"))) / 10000;
Double chengZhenCount = Double.parseDouble(rowData.get(ExcelKit.transLetter2Num("D"))) / 10000;
Double xiangChunCount = Double.parseDouble(rowData.get(ExcelKit.transLetter2Num("E"))) / 10000;
Double lv =
Double.parseDouble(rowData.get(ExcelKit.transLetter2Num("D"))) /
Integer.parseInt(rowData.get(ExcelKit.transLetter2Num("B")));
//需要保留两位小数
lv = Double.parseDouble(String.format("%.2f", lv));
ExcelKit.putData(outRow, Arrays.asList(cityName, "总人口",Double.parseDouble(String.format("%.2f", allCount))+"" , "万人", "云南省"), dataStyle);
outRow = outSheet.createRow(++rowIndex);
ExcelKit.putData(outRow, Arrays.asList(cityName, "城镇人口",Double.parseDouble(String.format("%.2f", chengZhenCount))+"", "万人", "云南省"), dataStyle);
outRow = outSheet.createRow(++rowIndex);
ExcelKit.putData(outRow, Arrays.asList(cityName, "乡村人口", Double.parseDouble(String.format("%.2f", xiangChunCount))+"", "万人", "云南省"), dataStyle);
outRow = outSheet.createRow(++rowIndex);
ExcelKit.putData(outRow, Arrays.asList(cityName, "城镇化率", lv + "%", "", "云南省"), dataStyle);
} catch (Exception err) {
System.out.println("错误数据:");
System.out.println(rowData);
System.exit(0);
}
}
}
//保存文件
ExcelKit.saveExcel(excelPath, outWorkbook);
System.out.println("市州所有文件处理完成!");
}
}

@ -1,162 +0,0 @@
package com.dsideal.base.Tools.FillData.Test;
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.*;
public class C7_Test {
//示例Excel
static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\市\\【7】概览\\概览.xlsx";
//源文件
static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\全省及州市县区人口与教育报告集20241023\\2023年数据更新表\\16州市数据更新表汇总20241021";
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);
/*
EXCELAIMap<String,String>key使 _,_
I
O
P
M
N
S
Z
AA
X
Y
AD
AJ
AK
AH
AI
AN
AQ
AR
AO
AP
AU
AX
AY
AV
AW
*/
// 初始化数据
String[] a = {"学前", "小学", "初中", "高中", "中职"};
String[] b = {"招生总数", "在校生总数", "教职工总数", "专任教师数"};
String[][] data = {
{"学前", "学校总数", "I"},
{"学前", "招生总数", "O"},
{"学前", "在校生总数", "P"},
{"学前", "教职工总数", "M"},
{"学前", "专任教师数", "N"},
{"小学", "学校总数", "S"},
{"小学", "招生总数", "Z"},
{"小学", "在校生总数", "AA"},
{"小学", "教职工总数", "X"},
{"小学", "专任教师数", "Y"},
{"初中", "学校总数", "AD"},
{"初中", "招生总数", "AJ"},
{"初中", "在校生总数", "AK"},
{"初中", "教职工总数", "AH"},
{"初中", "专任教师数", "AI"},
{"高中", "学校总数", "AN"},
{"高中", "招生总数", "AQ"},
{"高中", "在校生总数", "AR"},
{"高中", "教职工总数", "AO"},
{"高中", "专任教师数", "AP"},
{"中职", "学校总数", "AU"},
{"中职", "招生总数", "AX"},
{"中职", "在校生总数", "AY"},
{"中职", "教职工总数", "AV"},
{"中职", "专任教师数", "AW"}
};
// 创建存储结构+填充数据
Map<String, String> schoolData = new LinkedHashMap<>();
for (String[] entry : data) {
String grade = entry[0];
String metric = entry[1];
String value = entry[2];
schoolData.put(grade + "_" + metric, value);
}
//开始填表
//找到parentPath下一级目录中所有文件
List<File> files = FileUtil.loopFiles(parentPath, file -> true);
int rowIndex = 0;
//处理这个目录
if (files != null) {
for (File file : files) {
//判断file是不是目录是目录的需要跳过
if (file.isDirectory()) continue;
//城市名称
String cityName = ru.getCityOrAreaName(file.getName());
if (StrKit.isBlank(cityName)) {
System.out.println("发现异常数据,请人工处理:" + file.getName());
System.exit(0);
}
System.out.println("正在进行" + cityName + "的数据填充~");
//如果源文件或者示例文件是xls格式则转化为xlsx格式
String sourceExcel = file.getAbsolutePath();
sourceExcel = ExcelKit.ConvertXlsToXlsx(sourceExcel);
//它的最后一个有效数据行,就是这个城市的整体数据汇总
List<List<String>> sheetList = ExcelKit.readSheet(sourceExcel, 4);//此表格有4行表头
//最后一行的数据就是整个市州的数据
List<String> rowData = sheetList.getLast();
for (String s : a) {
for (String t : b) {
Row outRow = outSheet.createRow(++rowIndex);
try {
ExcelKit.putData(outRow, Arrays.asList(cityName, t, "2023", s, rowData.get(ExcelKit.transLetter2Num(schoolData.get(s + "_" + t))), "云南省"), dataStyle);
} catch (Exception err) {
System.out.println("错误数据:");
System.out.println(rowData);
System.out.println(schoolData.get(s + "_" + t) + ":" + ExcelKit.transLetter2Num(schoolData.get(s + "_" + t)) + "找不到这一列!");
System.exit(0);
}
}
}
}
}
//保存文件
ExcelKit.saveExcel(excelPath, outWorkbook);
System.out.println("市州所有文件处理完成!");
}
}
Loading…
Cancel
Save