main
黄海 8 months ago
parent 0b74e69ac4
commit 7f26375fea

@ -0,0 +1,179 @@
package com.dsideal.base.Tools.Test;
import cn.hutool.core.io.FileUtil;
import com.dsideal.base.DataEase.Model.DataEaseModel;
import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit;
import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil;
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 org.dom4j.DocumentException;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class A12 {
//示例Excel
static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【12】新-教育资源配置发展预测\\新-教育资源配置发展预测.xlsx";
//源文件
static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\有问题的县区";
//哪些是处理不了的,就不处理了~
static String[] excludeCityList = {"~$", "磨憨-磨丁", "经开区", "阳宗海"};
static DataEaseModel dm = new DataEaseModel();
public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException, DocumentException {
//初始化数据库连接
LocalMysqlConnectUtil.Init();
//结果Excel
XSSFWorkbook outWorkbook = new XSSFWorkbook();
//结果Sheet
XSSFSheet outSheet = DsKit.createSheet(outWorkbook);
//样式
XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook);
XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook);
//如果样例文件是xls格式则转化为xlsx格式
sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath);
//拷贝文件头
DsKit.copyHead(sampleExcelPath, outSheet, headerStyle);
//目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死
String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx");
DsKit.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;
if (!file.getName().endsWith(".docx") || file.getName().startsWith("~"))
continue;
boolean flag = false;
for (String s : excludeCityList) {
if (file.getName().contains(s)) {
flag = true;
break;
}
}
if (flag) continue;
//县区名称
String areaName = dm.getAreaName(file.getName());
//市州名称
String cityName = dm.getCityNameByAreaName(areaName);
if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) {
System.out.println("发现异常数据,请人工处理:" + file.getName());
System.exit(0);
}
//县区名称
System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~");
int chartNumber = 36;
List<List<String>> source1 = DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0);
try {
//需要处理下人与万人的单位兼容
if (source1 != null) {
//本例中要乘以多少呢?
String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml";
int mul = DsKit.getMul(xmlPath);
for (List<String> row : source1) {
for (int j = 1; j <= 4; j++) {
if (j + 1 > row.size()) continue;
row.set(j, String.valueOf((int) (Double.parseDouble(row.get(j)) * mul)));
}
}
}
chartNumber = 37;
List<List<String>> source2 = DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0);
//需要处理下平方米与万平方米的单位兼容
if (source2 != null) {
//本例中要乘以多少呢?
String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml";
int mul = DsKit.getMul(xmlPath);
for (List<String> row : source2) {
for (int j = 1; j <= 4; j++) {
if (j + 1 > row.size()) continue;
row.set(j, String.valueOf(Double.parseDouble(row.get(j)) * mul / 10000));//单位:万平方米
}
}
}
if (source1 != null) {
for (int i = 0; i < source1.size(); i++) {
List<String> row36 = source1.get(i);
if (source2 != null && i + 1 > source2.size()) continue;
List<String> row37 = null;
if (source2 != null) {
row37 = source2.get(i);
}
Row outRow = outSheet.createRow(++rowIndex);
String year = row36.getFirst();//年份
//学前
String xq_jzg = row36.get(1).split("\\.")[0];//教职工数
String xq_jzg2022 = source1.getFirst().get(1).split("\\.")[0];//教职工2022基数
String xq_szqk = String.valueOf((int) (Double.parseDouble(xq_jzg2022) - Double.parseDouble(xq_jzg)));//缺口、富裕
String xq_ysmj = null;//园舍面积
if (row37 != null) {
xq_ysmj = row37.get(1);
}
String xq_ysmj2022 = null;//园舍面积2022基数
if (source2 != null) {
xq_ysmj2022 = source2.getFirst().get(1);
}
String xq_ysmjqk = String.format("%.2f", Double.parseDouble(xq_ysmj2022) - Double.parseDouble(xq_ysmj));
//小学
String xx_jzg = row36.get(2).split("\\.")[0];//教职工数
String xx_jzg2022 = source1.getFirst().get(2).split("\\.")[0];//教职工2022基数
String xx_szqk = String.valueOf((int) (Double.parseDouble(xx_jzg2022) - Double.parseDouble(xx_jzg)));//缺口、富裕
if (2 + 1 > row37.size()) continue;
String xx_ysmj = row37.get(2);//园舍面积
String xx_ysmj2022 = source2.getFirst().get(2);//园舍面积2022基数
String xx_ysmjqk = String.format("%.2f", Double.parseDouble(xx_ysmj2022) - Double.parseDouble(xx_ysmj));
//初中
String cz_jzg = row36.get(3).split("\\.")[0];//教职工数
String cz_jzg2022 = source1.getFirst().get(3).split("\\.")[0];//教职工2022基数
String cz_szqk = String.valueOf((int) (Double.parseDouble(cz_jzg2022) - Double.parseDouble(cz_jzg)));//缺口、富裕
String cz_ysmj = row37.get(3);//园舍面积
String cz_ysmj2022 = source2.getFirst().get(3);//园舍面积2022基数
String cz_ysmjqk = String.format("%.2f", Double.parseDouble(cz_ysmj2022) - Double.parseDouble(cz_ysmj));
//高中
String gz_jzg = row36.get(4).split("\\.")[0];//教职工数
String gz_jzg2022 = source1.getFirst().get(4).split("\\.")[0];//教职工2022基数
String gz_szqk = String.valueOf((int) (Double.parseDouble(gz_jzg2022) - Double.parseDouble(gz_jzg)));//缺口、富裕
String gz_ysmj = row37.get(4);//园舍面积
String gz_ysmj2022 = source2.getFirst().get(4);//园舍面积2022基数
String gz_ysmjqk = String.format("%.2f", Double.parseDouble(gz_ysmj2022) - Double.parseDouble(gz_ysmj));
DsKit.putData(outRow, Arrays.asList(year, areaName,
xq_jzg, xq_jzg2022, xq_szqk, String.format("%.2f", Double.parseDouble(xq_ysmj)), String.format("%.2f", Double.parseDouble(xq_ysmj2022)), xq_ysmjqk, // 学前
xx_jzg, xx_jzg2022, xx_szqk, String.format("%.2f", Double.parseDouble(xx_ysmj)), String.format("%.2f", Double.parseDouble(xx_ysmj2022)), xx_ysmjqk, // 小学
cz_jzg, cz_jzg2022, cz_szqk, String.format("%.2f", Double.parseDouble(cz_ysmj)), String.format("%.2f", Double.parseDouble(cz_ysmj2022)), cz_ysmjqk, // 初中
gz_jzg, gz_jzg2022, gz_szqk, String.format("%.2f", Double.parseDouble(gz_ysmj)), String.format("%.2f", Double.parseDouble(gz_ysmj2022)), gz_ysmjqk, // 高中
cityName), dataStyle);
}
}
} catch (Exception err) {
System.out.println(err.toString());
}
}
}
//保存文件
DsKit.saveExcel(excelPath, outWorkbook);
System.out.println("县区所有文件处理完成!");
}
}

@ -0,0 +1,126 @@
package com.dsideal.base.Tools.Test;
import cn.hutool.core.io.FileUtil;
import com.dsideal.base.DataEase.Model.DataEaseModel;
import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit;
import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil;
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 org.dom4j.DocumentException;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class A8 {
//示例Excel
static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【8】总人口变化及预测-双\\总人口变化及预测-双-(万人).xlsx";
//源文件
static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\有问题的县区";
//哪些是处理不了的,就不处理了~
static String[] excludeCityList = {"~$", "磨憨-磨丁", "经开区", "阳宗海"};
public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException, DocumentException {
//初始化数据库连接
LocalMysqlConnectUtil.Init();
//结果Excel
XSSFWorkbook outWorkbook = new XSSFWorkbook();
//结果Sheet
XSSFSheet outSheet = DsKit.createSheet(outWorkbook);
//样式
XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook);
XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook);
//如果样例文件是xls格式则转化为xlsx格式
sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath);
//拷贝文件头
DsKit.copyHead(sampleExcelPath, outSheet, headerStyle);
//目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死
String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx");
DsKit.delExcel(excelPath);
//找到parentPath下一级目录中所有文件
List<File> files = FileUtil.loopFiles(parentPath, file -> true);
int rowIndex = 0;
for (File file : files) {
System.out.println("正在处理:" + file.getName());
}
//处理这个目录
if (files != null) {
for (File file : files) {
//判断file是不是目录是目录的需要跳过
if (file.isDirectory()) continue;
if (!file.getName().endsWith(".docx") || file.getName().startsWith("~"))
continue;
boolean flag = false;
for (String s : excludeCityList) {
if (file.getName().contains(s)) {
flag = true;
break;
}
}
if (flag) continue;
//县区名称
DataEaseModel dm = new DataEaseModel();
String areaName = dm.getAreaName(file.getName());
//市州名称
String cityName = dm.getCityNameByAreaName(areaName);
if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) {
System.out.println("发现异常数据,请人工处理:" + file.getName());
System.exit(0);
}
//县区名称
System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~");
int chartNumber = 1;
List<List<String>> source =
DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0);
//需要处理下人与万人的单位兼容
int mul;
if (source != null) {
//本例中要乘以多少呢?
String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml";
mul = DsKit.getMul(xmlPath);
for (List<String> row : source) {
String year = row.getFirst().split("\\.")[0];
year = year.replace("年", "");
String q = row.get(1);
if (StrKit.isBlank(q)) {
q = "0";
}
double x = Double.parseDouble(q) * mul;
String v = String.format("%.2f", (x > 1000 ? x / 10000 : x));//如果数值大于1000则计算以万为单位否则就保留原来的数字
Row outRow = outSheet.createRow(++rowIndex);
if (Integer.parseInt(year) < 2023) {
DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, v, ""), dataStyle);
} else if (Integer.parseInt(year) > 2023) {
DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, "", v), dataStyle);
} else {
DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, v, v), dataStyle);
}
}
}
}
}
//保存文件
DsKit.saveExcel(excelPath, outWorkbook);
System.out.println("县区所有文件处理完成!");
}
}

@ -0,0 +1,157 @@
package com.dsideal.base.Tools.Test;
import cn.hutool.core.io.FileUtil;
import com.dsideal.base.DataEase.Model.DataEaseModel;
import com.dsideal.base.Tools.FillData.DataEaseKit.DsKit;
import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil;
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 org.dom4j.DocumentException;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class A9 {
//示例Excel
static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\区\\【9】城镇&乡村人口变化及预测-双\\城镇&乡村人口变化及预测-双.xlsx";
//源文件
static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\有问题的县区";
//哪些是处理不了的,就不处理了~
static String[] excludeCityList = {"~$", "磨憨-磨丁", "经开区", "阳宗海"};
public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException, DocumentException {
//初始化数据库连接
LocalMysqlConnectUtil.Init();
//结果Excel
XSSFWorkbook outWorkbook = new XSSFWorkbook();
//结果Sheet
XSSFSheet outSheet = DsKit.createSheet(outWorkbook);
//样式
XSSFCellStyle headerStyle = DsKit.getHeaderStyle(outWorkbook);
XSSFCellStyle dataStyle = DsKit.getDataStyle(outWorkbook);
//如果样例文件是xls格式则转化为xlsx格式
sampleExcelPath = DsKit.convertXlsToXlsx(sampleExcelPath);
//拷贝文件头
DsKit.copyHead(sampleExcelPath, outSheet, headerStyle);
//目标Excel,就是把文件名解析出来后,后面添加上【成果】,需要动态计算获取,不能写死
String excelPath = sampleExcelPath.replace(".xlsx", "【成果】.xlsx");
DsKit.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;
if (!file.getName().endsWith(".docx") || file.getName().startsWith("~"))
continue;
boolean flag = false;
for (String s : excludeCityList) {
if (file.getName().contains(s)) {
flag = true;
break;
}
}
if (flag) continue;
//县区名称
DataEaseModel dm = new DataEaseModel();
String areaName = dm.getAreaName(file.getName());
//市州名称
String cityName = dm.getCityNameByAreaName(areaName);
if (StrKit.isBlank(cityName) || StrKit.isBlank(areaName)) {
System.out.println("发现异常数据,请人工处理:" + file.getName());
System.exit(0);
}
//县区名称
System.out.println("正在进行" + cityName + "-" + areaName + "的数据填充~");
int chartNumber = 2;
List<List<String>> source1 =
DsKit.getChartData(file.getAbsolutePath(), chartNumber, 0);
DsKit.printTable(source1);
try{
//需要处理下人与万人的单位兼容
int mul = 1;
if (source1 != null) {
//本例中要乘以多少呢?
String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml";
mul = DsKit.getMul(xmlPath);
for (List<String> row : source1) {
String year = row.getFirst().split("\\.")[0];
year = year.replace("年", "");
Row outRow = outSheet.createRow(++rowIndex);
String q1 = row.get(1);
if (StrKit.isBlank(q1)) {
q1 = "0";
}
double x = Double.parseDouble(q1) * mul;
String v1 = String.format("%.2f", (x > 1000 ? x / 10000 : x));
String q2 = row.get(2);
if (StrKit.isBlank(q2)) {
q2 = "0";
}
x = Double.parseDouble(q2) * mul;
String v2 = String.format("%.2f", (x > 1000 ? x / 10000 : x));
DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, v1, "", v2, ""), dataStyle);
}
}
chartNumber = 3;
List<List<String>> source2 =
DsKit.getChartData(file.getAbsolutePath(), chartNumber, 1);
if (source2 != null) {
//本例中要乘以多少呢?
String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml";
mul = DsKit.getMul(xmlPath);
for (List<String> row : source2) {
String year = row.getFirst().split("\\.")[0];
year = year.replace("年", "");
Row outRow = outSheet.createRow(++rowIndex);
String q1 = row.get(1);
if (StrKit.isBlank(q1)) {
q1 = "0";
}
String v1 = String.format("%.2f", Double.parseDouble(q1) * mul / 10000);
String q2 = row.get(2);
if (StrKit.isBlank(q2)) {
q2 = "0";
}
double x = Double.parseDouble(q2) * mul;
String v2 = String.format("%.2f", (x > 1000 ? x / 10000 : x));
DsKit.putData(outRow, Arrays.asList(cityName, areaName, year, "", v1, "", v2), dataStyle);
}
}
}catch (Exception err){
System.out.println(err);
}
}
}
//保存文件
DsKit.saveExcel(excelPath, outWorkbook);
System.out.println("县区所有文件处理完成!");
}
}
Loading…
Cancel
Save