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