main
黄海 8 months ago
parent 71aeacce5b
commit a2e0968266

@ -1,149 +0,0 @@
package com.dsideal.base.Tools.Test;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import java.io.File;
import java.io.IOException;
import java.util.*;
public class ConvertExcel {
// 获取系统的临时文件目录
private static final String tempDir = System.getProperty("java.io.tmpdir");
public static void main(String[] args) throws IOException {
String source = "D:\\dsWork\\dsProject\\dsBase\\src\\main\\java\\com\\dsideal\\base\\Tools\\Sample.xlsx";
File file = new File(source);
//哪些列是固定不动的,比如此处是第0列与第1列是不动的就是年份+学段
List<Integer> fixedColumns = new ArrayList<>();
fixedColumns.add(0);
fixedColumns.add(1);
//每列的列号与列名对应关系
String[] colNames = new String[1024];
int cl = 0;
// 读取Excel数据
ExcelReader reader = ExcelUtil.getReader(file);
// 创建临时文件文件名具有随机UUID扩展名为.xlsx
//利用uuid生成一个临时文件名
String uuidFileName = UUID.randomUUID().toString().toUpperCase() + ".xlsx";
String output = tempDir + uuidFileName;
// 创建一个ExcelWriter对象初始化时会创建一个空的Excel文件
ExcelWriter writer = ExcelUtil.getWriter(output);
//表头
List<List<Object>> read = reader.read(0, 0);//第0行是表头
for (int i = 0; i < reader.getColumnCount(); i++) {
colNames[cl++] = read.getFirst().get(i).toString();
}
//数据
List<List<Object>> data = reader.read(1, reader.getRowCount());//从第1行读取到最后一行
for (List<Object> row : data) {
//拆分每一行的数据
for (int i = 0; i < reader.getColumnCount(); i++) {
if (!fixedColumns.contains(i)) {//非fixedColumns列进行枚举
List<String> rowData = new ArrayList<>();
//输出固定列的名称和值
for (int cNum : fixedColumns) {
String value = row.get(cNum).toString();//列值
rowData.add(value);
}
String cName = colNames[i];//列名
String value = row.get(i).toString();
rowData.add(cName);
rowData.add(value);
writer.writeRow(rowData);
}
}
}
writer.flush();
writer.close();
reader.close();
/***************************************************************************************/
//上面的代码没动过,下面是新写的
reader = ExcelUtil.getReader(output);
//前面固定的
List<String> header = new ArrayList<>();
header.add("年份");
header.add("学段");
header.add("区域分类");
header.add("总量分类");
header.add("区域数值");
header.add("总量数值");
// 写入表头
uuidFileName = UUID.randomUUID().toString().toUpperCase() + ".xlsx";
output = tempDir + uuidFileName;
writer = ExcelUtil.getWriter(output);
writer.writeHeadRow(header);
//还需要继续扩展EXCEL模板实现数据转换
Set<String> setArea = new HashSet<>();
setArea.add("城区");
setArea.add("镇区");
setArea.add("乡村");
List<List<String>> res = new ArrayList<>();
data = reader.read(1, reader.getRowCount());//从第1行读取到最后一行
for (List<Object> row : data) {
List<String> rowData = new ArrayList<>();
//输出固定列的名称和值
rowData.add(row.get(0).toString());//年度
rowData.add(row.get(1).toString());//学段
if (setArea.contains(row.get(2).toString())) {//如果是城区、镇区、乡村
rowData.add(row.get(2).toString());
rowData.add("");
rowData.add(row.get(3).toString());
rowData.add("");
} else {
rowData.add("");
rowData.add(row.get(2).toString());
rowData.add("");
rowData.add(row.get(3).toString());
}
res.add(rowData);
}
// 排序
Collections.sort(res, new Comparator<List<String>>() {
@Override
public int compare(List<String> o1, List<String> o2) {
// 先比较年份
// int yearCompare = o1.get(0).compareTo(o2.get(0));
// if (yearCompare != 0) {
// return yearCompare;
// }
// 年份相同,比较学段
int stageCompare = o1.get(1).compareTo(o2.get(1));
if (stageCompare != 0) {
return stageCompare;
}
// 学段相同,比较区域分类
int areaCompare = o1.get(2).compareTo(o2.get(2));
if (areaCompare != 0) {
return areaCompare;
}
// 区域分类相同,比较总量分类
return o1.get(3).compareTo(o2.get(3));
}
});
for (List<String> re : res) {
writer.writeRow(re);
}
reader.close();
writer.flush();
writer.close();
//打开文件所在目录,并聚焦文件
Runtime.getRuntime().exec("explorer.exe /e,/select," + output);
}
}

@ -1,67 +0,0 @@
package com.dsideal.base.Tools.Test;
import com.dsideal.base.DataEase.Model.DataEaseModel;
import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil;
import com.jcraft.jsch.JSchException;
import java.io.File;
import java.io.IOException;
import java.util.List;
import com.jfinal.plugin.activerecord.Record;
public class ExportExcel {
public static DataEaseModel dm = new DataEaseModel();
public static void main(String[] args) throws IOException, JSchException {
LocalMysqlConnectUtil.Init();
//Excel的保存目录
String exportPath = "D:/360Downloads/Excel";
File directory = new File(exportPath);
// 检查目录是否存在
if (!directory.exists()) {
directory.mkdirs();
}
String privinceName = "云南省";
//一、导出省的数据集
System.out.println("正在处理省数据集...");
List<Record> list = dm.getDataSetByIdentityId(1,null);
System.out.println("数据集个数=" + list.size());
for (Record record : list) {
String tableName = record.getStr("table_name");
String dataSetName = record.getStr("dataset_name");
System.out.println("正在处理数据集:" + dataSetName);
dm.exportExcel(1, tableName, exportPath, privinceName);
}
//二、导出市的数据集
System.out.println("正在处理市数据集...");
String city_name = "昆明市";
list = dm.getDataSetByIdentityId(2,null);
System.out.println("数据集个数=" + list.size());
for (Record record : list) {
String tableName = record.getStr("table_name");
String dataSetName = record.getStr("dataset_name").replace("\\", "").replace("/", "");
System.out.println("正在处理数据集:" + dataSetName);
Record cityRecord = dm.getAreaByName(city_name);
String cityName = cityRecord.getStr("area_name");
dm.exportExcel(2, tableName, exportPath, cityName);
}
//三、导出县区的数据集
System.out.println("正在处理县区数据集...");
String area_name = "寻甸县";
list = dm.getDataSetByIdentityId(3,null);
System.out.println("数据集个数=" + list.size());
for (Record record : list) {
String tableName = record.getStr("table_name");
String dataSetName = record.getStr("dataset_name").replace("\\", "").replace("/", "");
System.out.println("正在处理数据集:" + dataSetName);
Record areaRecord = dm.getAreaByName(area_name);
String areaName = areaRecord.getStr("area_name");
dm.exportExcel(3, tableName, exportPath, areaName);
}
System.out.println("导出完成!");
}
}

@ -1,66 +0,0 @@
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.ExcelKit.ExcelKit;
import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.xwpf.usermodel.XWPFChart;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestBadExcel {
//开始读取市州word文档
static String parentPath = "D:\\dsWork\\YunNanDsBase\\Doc\\全省及州市县区人口与教育报告集20241023\\16个州市报告2022\\分析报告20240510";
//示例Excel
static String sampleExcelPath = "D:\\dsWork\\YunNanDsBase\\Doc\\待处理\\市\\【11】教育资源配置发展预测\\教育资源配置发展预测(人).xlsx";
public static void main(String[] args) throws IOException, InvalidFormatException {
//初始化数据库连接
LocalMysqlConnectUtil.Init();
//实例化
//找到parentPath下一级目录中所有文件
List<File> files = FileUtil.loopFiles(parentPath, file -> true);
int rowIndex = 0;
//处理这个目录
if (files != null) {
for (File file : files) {
//判断file是不是目录是目录的需要跳过
if (file.isDirectory()) continue;
//城市名称
DataEaseModel dm=new DataEaseModel();
String cityName = dm.getCityName(file.getName());
String fileName = file.getName();
//判断是否为docx文件
if (fileName.endsWith(".docx") && !fileName.startsWith("~")) {
System.out.println("正在处理" + cityName + "市州文件...");
//读取文件
String inputUrl = file.getAbsolutePath();
InputStream is = new FileInputStream(inputUrl);
ZipSecureFile.setMinInflateRatio(-1.0d);
XWPFDocument doc = new XWPFDocument(is);
//排序后的图表
List<XWPFChart> charts = ExcelKit.getSortListForXWPFChart(doc.getCharts());
//数据在图表36教职工总量
int firstChartNumber = 36;
if(cityName.contains("西双版纳州")){
System.out.println("he");
}
charts.get(firstChartNumber - 1).getWorkbook();
}
}
}
}
}

@ -1,43 +0,0 @@
package com.dsideal.base.Tools.Test;
import com.dsideal.base.Tools.FillData.ExcelKit.ExcelKit;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFChart;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestC2 {
public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException {
//处理这个目录
//判断file是不是目录是目录的需要跳过
//城市名称
File file = new File("D:\\dsWork\\YunNanDsBase\\Doc\\全省及州市县区人口与教育报告集20241023\\16个州市报告2022\\分析报告20240510\\昭通市人口变化及其对教育的影响20240416.docx");
String fileName = file.getAbsolutePath();
InputStream is = new FileInputStream(fileName);
ZipSecureFile.setMinInflateRatio(-1.0d);
XWPFDocument doc = new XWPFDocument(is);
//排序后的图表
List<XWPFChart> charts = ExcelKit.getSortListForXWPFChart(doc.getCharts());
System.out.println("图表个数=" + charts.size());
//第34个图表读取不出来
XSSFWorkbook workbook = charts.get(33).getWorkbook();
System.out.println("正在读取第34个图表数据...");
List<List<String>> data = ExcelKit.readSheet(workbook, 2);
System.out.println("数据条数=" + data.size());
is.close();
ExcelKit.printTable(data);
}
}

@ -1,23 +0,0 @@
package com.dsideal.base.Tools.Test;
import com.dsideal.base.Tools.FillData.ExcelKit.ExcelKit;
import java.io.*;
import java.util.List;
public class TestCallPython {
public static void main(String[] args) throws InterruptedException, IOException {
//哪个word文档
String docPath = "D:\\dsWork\\YunNanDsBase\\Doc\\全省及州市县区人口与教育报告集20241023\\16个州市报告2022\\分析报告20240510\\丽江市人口变化及其对教育的影响20240418.docx";
//第几个图表
int tuBiaoNum = 1;
//Excel文件生成位置
String excelPath = "c:/task.xlsx";
//读取生成的EXCEL,使用POI就可以了
List<List<String>> sheetList = ExcelKit.readSheet(excelPath, 1);
System.out.println(sheetList);
}
}

@ -1,27 +0,0 @@
package com.dsideal.base.Tools.Test;
import com.dsideal.base.DataEase.Model.DataEaseModel;
import com.dsideal.base.Tools.Util.LocalMysqlConnectUtil;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import java.util.List;
public class TestCityArea {
public static void main(String[] args) throws Exception {
LocalMysqlConnectUtil.Init();
//实例化
DataEaseModel dm=new DataEaseModel();
List<String> list = dm.getCityNameList();
for (String s : list) {
String sql = "select id from t_dm_area where area_name=?";
String area_id = Db.queryStr(sql, s);
sql = "select * from t_dm_area where parent_id=?";
List<Record> records = Db.find(sql, area_id);
for (Record record : records) {
String area_name = record.getStr("area_name");
System.out.println(s+" "+area_name);
}
}
}
}

@ -1,49 +0,0 @@
package com.dsideal.base.Tools.Test;
import com.dsideal.base.Tools.FillData.ExcelKit.ExcelKit;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFChart;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestMulti {
public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException {
String path = "D:\\dsWork\\YunNanDsBase\\Doc\\全省及州市县区人口与教育报告集20241023\\16个州市报告2022\\分析报告20240510";
//获取此目录下所有的文件需要以docx结尾并且不能以~开头
File file = new File(path);
File[] files = file.listFiles();
for (File f : files) {
if (f.getName().endsWith(".docx") && !f.getName().startsWith("~")) {
String sourceWord = f.getAbsolutePath();
InputStream is = new FileInputStream(sourceWord);
ZipSecureFile.setMinInflateRatio(-1.0d);
XWPFDocument doc = new XWPFDocument(is);
//直接输出图表数量
//System.out.println("doc.getCharts=" + doc.getCharts().size());
List<XWPFChart> chartList = doc.getCharts();
//排序后的图表
chartList = ExcelKit.getSortListForXWPFChart(chartList);
//遍历输出
for (int i = 0; i < chartList.size(); i++) {
XWPFChart chart = chartList.get(i);
XSSFWorkbook workbook = chart.getWorkbook();
XSSFSheet sheet = workbook.getSheetAt(0);
if (sheet.getPhysicalNumberOfRows() == 0) {
System.out.println(sourceWord + ",第" + (i + 1) + "个图表需要人工编辑一下Sheet名称否则无法读取===");
}
}
//关闭流
is.close();
}
}
}
}

@ -1,35 +0,0 @@
package com.dsideal.base.Tools.Test;
import com.dsideal.base.Tools.FillData.ExcelKit.ExcelKit;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class TestRead {
public static void main(String[] args) throws IOException {
//待读取的EXCEL文件
String filePath = "C:\\Users\\Administrator\\全省及州市县区人口与教育报告集20241023\\全省及州市县区人口与教育报告集20241023\\133个县区报告2022\\县区研究报告\\文山州各县市报告8\\马关县\\马关县教育发展规模数据收集表-20240418.xlsx";
//表格正文上方的文字
String keyword = "自动计算招生数、在校生数";
//遍历每个Sheet
for (int k = 0; k < 4; k++) {
//为什么headRows=2?答因为有一行是关键字下一行是表头共2行
//letterIndex=K,表示第二个表格最后一列是字母K
List<List<String>> dataList = ExcelKit.readSecondTable(filePath, k, keyword, 2, "K");
//输出数据
for (int i = 0; i < dataList.size(); i++) {
for (int j = 0; j < dataList.get(i).size(); j++) {
System.out.print(dataList.get(i).get(j) + " ");
}
System.out.println();
}
}
}
}

@ -1,25 +0,0 @@
package com.dsideal.base.Tools.Test;
import com.dsideal.base.Tools.FillData.ExcelKit.ExcelKit;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.dom4j.DocumentException;
import java.io.IOException;
import java.util.*;
public class TestXml {
public static void main(String[] args) throws DocumentException, IOException, InterruptedException, InvalidFormatException {
String sourceDoc = "c:/西双版纳州人口变化及其对教育的影响20240420.docx";
List<List<String>> res = ExcelKit.getChartData(sourceDoc, 1,0);
ExcelKit.printTable(res);
// for (int chartNumber = 1; chartNumber <= 37; chartNumber++) {
// String xml = ExcelKit.DocxUnzipDirectory + "word\\charts\\chart" + chartNumber + ".xml";
// List<List<String>> res = ExcelKit.getChartDataByXml(xml);
// //输出转置后的数据
// System.out.println("正在输出第" + chartNumber + "个图表的数据");
// ExcelKit.printTable(res);
// }
}
}
Loading…
Cancel
Save