|
|
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("县区所有文件处理完成!");
|
|
|
}
|
|
|
}
|