You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

153 lines
6.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 = "c:/新建文件夹";
//哪些是处理不了的,就不处理了~
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);
//需要处理下人与万人的单位兼容
int mul = 1;
if (source1 != null) {
//本例中要乘以多少呢?
String xmlPath = DsKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml";
mul = DsKit.getMul(xmlPath);
DsKit.printTable(source1);
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);
DsKit.printTable(source2);
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);
}
}
}
}
//保存文件
DsKit.saveExcel(excelPath, outWorkbook);
System.out.println("县区所有文件处理完成!");
}
}