main
黄海 2 years ago
parent fcbfb443d3
commit 82a38e2755

@ -1,9 +1,7 @@
package UnitTest.ImportExcel;
import cn.hutool.core.io.FileUtil;
import com.aspose.cells.Workbook;
import com.dsideal.QingLong.Util.AsposeUtil;
import com.dsideal.QingLong.Util.ImportUtil;
import com.dsideal.QingLong.Util.ExcelUtil;
import com.jfinal.kit.Kv;
import com.jfinal.kit.PropKit;
import com.jfinal.kit.StrKit;
@ -21,42 +19,42 @@ import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class CreateTableAndTemplate {
public static String path = "D:\\dsWork\\QingLong\\src\\main\\resource\\Excel\\";
//用户上传的模板
public static String userUploadExcel = "source.xlsx";
//我处理后的模板
//我处理后的模板,提供给学校下载用的模板
public static String upload_excel_filename = "b61a2af2-223f-4058-a675-b212e4dd9487" + ".xlsx";
/**
*
*
* @param toDoKvList
* @param kList
* @return
*/
public static void changeData(List<Kv> toDoKvList) {
public static void changeData(List<Kv> kList) {
int sheetIdx = 0;
for (Kv kv : toDoKvList) {
List<Record> _list = (List<Record>) kv.get("list");
for (Kv kv : kList) {
List<Record> list = (List<Record>) kv.get("list");
int colIdx = 0;
for (Record record : _list) {
for (Record record : list) {
record.set("column_type", "varchar(2048)");
//下拉
//1、模拟生成下拉
if (sheetIdx == 0 && colIdx == 3) {//第一个Sheet表的品牌型号列
record.set("options", "华为,中兴,思科");//生成下拉框
}
//台数必需填写+品牌型号必需填写
//2、模拟必填写项台数必需填写+品牌型号必需填写
if ((sheetIdx == 0 && colIdx == 3) || (sheetIdx == 0 && colIdx == 5))
record.set("allow_blank", false);
else
record.set("allow_blank", true);
//数据类型:台数
//3、设置固定数据类型:台数
if (sheetIdx == 0 && colIdx == 5)
record.set("column_type", "int4");
//下一列
colIdx++;
}
sheetIdx++;
@ -65,9 +63,6 @@ public class CreateTableAndTemplate {
}
public static void main(String[] args) throws Exception {
//加载License
AsposeUtil.getLicense();
//告之配置文件位置
PropKit.use("application.properties");
HikariCpPlugin hp = new HikariCpPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"),
@ -88,23 +83,23 @@ public class CreateTableAndTemplate {
//复制成我自己的,随便折腾
FileUtil.copy(path + File.separator + userUploadExcel, source, true);
Workbook asposeWb = new Workbook(source);
int sheetCount = asposeWb.getWorksheets().getCount();//Sheet表数量
//解析上传EXCEL中的每个Sheet解析出表头信息表名描述等信息
InputStream is = new FileInputStream(source);
XSSFWorkbook wb = new XSSFWorkbook(is);
int sheetCount = wb.getNumberOfSheets();//Sheet表数量
List<Kv> kvList = new ArrayList<>();
for (int i = 0; i < sheetCount; i++) {
try {
Kv kv = ImportUtil.getTableStruct(wb, i);
Kv kv = ExcelUtil.getTableStruct(wb, i);
if (!kv.getBoolean("success")) {
System.out.println("发现错误:" + kv.getStr("message"));
return;
}
kv.set("upload_excel_filename", upload_excel_filename);
kvList.add(kv);
} catch (Exception err) {
System.out.println("“" + wb.getSheetName(i) + "”表配置错误,请检查后重新上传!");
System.out.println(err);
wb.close();
return;
}
@ -118,13 +113,13 @@ public class CreateTableAndTemplate {
//开发时暴力删除掉原表,在正式上线前要注意:不能简单粗暴的删除!!
for (Kv kv : kvList) {
String tableName = kv.getStr("table_name");
ImportUtil.dropTable(tableName);
ExcelUtil.dropTable(tableName);
}
//判断表是不是已存在
for (Kv kv : kvList) {
String tableName = kv.getStr("table_name");
if (ImportUtil.isTableExist(tableName)) {
if (ExcelUtil.isTableExist(tableName)) {
System.out.println("表" + tableName + "已存在,不能删除,程序无法继续!");
return;
}
@ -133,8 +128,9 @@ public class CreateTableAndTemplate {
//检查通过,处理建表逻辑
for (Kv kv : kvList) {
String tableName = kv.getStr("table_name");
ImportUtil.createTable(tableName, kv, upload_excel_filename);//创建表
ExcelUtil.createTable(tableName, kv);//创建表
}
//检查是不是需要对指定列进行加红星+Comment操作
int sheetIdx = 0;
for (Kv kv : kvList) {
@ -151,8 +147,8 @@ public class CreateTableAndTemplate {
if (StrKit.isBlank(cell.getStringCellValue())) {
cell = wb.getSheetAt(sheetIdx).getRow(start_row).getCell(colIdx);
}
ImportUtil.addStar(wb, cell);
ImportUtil.addComment(wb, cell, "此单元格内容必须输入!");
ExcelUtil.addStar(wb, cell);
ExcelUtil.addComment(wb, cell, "此单元格内容必须输入!");
}
colIdx++;
}
@ -168,17 +164,19 @@ public class CreateTableAndTemplate {
for (Record record : list) {
String options = record.getStr("options");
if (!StrKit.isBlank(options)) {
ImportUtil.addValidation(wb, sheetIdx, options, data_start_row, data_start_row + 20000, colIdx, colIdx);//范围
ExcelUtil.addValidation(wb, sheetIdx, options, data_start_row, data_start_row + 20000, colIdx, colIdx);//范围
}
colIdx++;
}
sheetIdx++;
}
// 取消每一个表单的激活状态
for (int i = 0; i < kvList.size(); i++) wb.getSheetAt(i).setSelected(false);
// 设置活动表单为第一个表单
wb.setActiveSheet(0);
//保存
FileOutputStream fileOut = new FileOutputStream(source);
wb.write(fileOut);
//关闭Excel

@ -1,7 +1,7 @@
package UnitTest.ImportExcel;
import com.dsideal.QingLong.Util.AsposeUtil;
import com.dsideal.QingLong.Util.ImportUtil;
import com.dsideal.QingLong.Util.ExcelUtil;
import com.jfinal.kit.PropKit;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
@ -52,9 +52,9 @@ public class ImportExcelData {
//用户上传的填充完的EXCEL文件
String f2 = path + File.separator + "school.xlsx";
//对比两个EXCEL文件 是不是格式一致,也就是是不是上传了正确的模板文件
int sheetCnt = ImportUtil.getSheetCount(upload_excel_filename);
int sheetCnt = ExcelUtil.getSheetCount(upload_excel_filename);
for (int i = 0; i < sheetCnt; i++) {
List<Map.Entry<Integer, Integer>> chayi = ImportUtil.checkYiZhi(f1, f2, i);
List<Map.Entry<Integer, Integer>> chayi = ExcelUtil.checkYiZhi(f1, f2, i);
if (chayi.size() > 0) {
System.out.println("第" + (i + 1) + "个Sheet表检查过程中发现与要求上传的模板不一致请重新下载模板填写完成后再次上传");
return;
@ -71,18 +71,18 @@ public class ImportExcelData {
//Sheet表
XSSFSheet sheet = wb.getSheetAt(i);
//移除所有批注
ImportUtil.RemoveAllComment(sheet);
ExcelUtil.RemoveAllComment(sheet);
//数据起始行
Record r = ImportUtil.getSheetConfig(upload_excel_filename, i);
Record r = ExcelUtil.getSheetConfig(upload_excel_filename, i);
int data_start_row = r.getInt("data_start_row");
//恢复背景色
ImportUtil.resetStyle(wb, sheet, data_start_row);
ExcelUtil.resetStyle(wb, sheet, data_start_row);
//数据有效行数
int lastRowNum = sheet.getLastRowNum();
//遍历每一列
List<Record> list = ImportUtil.getSheetMapping(upload_excel_filename, i);
List<Record> list = ExcelUtil.getSheetMapping(upload_excel_filename, i);
for (Record record : list) {//列
int excel_column_idx = record.getInt("excel_column_idx");//第几列
String column_type = record.getStr("column_type");//类型
@ -93,9 +93,9 @@ public class ImportExcelData {
// 非空项目未填写
for (int j = data_start_row; j <= lastRowNum; j++) {//行
XSSFCell cell = sheet.getRow(j).getCell(excel_column_idx);
if (StrKit.isBlank(ImportUtil.getValue(cell).toString())) {
ImportUtil.addComment(wb, cell, "此处不能为空!");
ImportUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex());
if (StrKit.isBlank(ExcelUtil.getValue(cell).toString())) {
ExcelUtil.addComment(wb, cell, "此处不能为空!");
ExcelUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex());
flag = false;
}
}
@ -104,11 +104,11 @@ public class ImportExcelData {
if (!StrKit.isBlank(options)) {
for (int j = data_start_row; j <= lastRowNum; j++) {//行
XSSFCell cell = sheet.getRow(j).getCell(excel_column_idx);
String value = ImportUtil.getValue(cell).toString();
String value = ExcelUtil.getValue(cell).toString();
if (StrKit.isBlank(value)) value = "&*^&Y&*(&*(&*()*(";
if (options.indexOf(value) < 0) {
ImportUtil.addComment(wb, cell, "未从指定范围内选择有效值!");
ImportUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex());
ExcelUtil.addComment(wb, cell, "未从指定范围内选择有效值!");
ExcelUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex());
flag = false;
}
}
@ -116,19 +116,19 @@ public class ImportExcelData {
// 检查数据类型是不是和规定的不兼容
for (int j = data_start_row; j <= lastRowNum; j++) {//行
XSSFCell cell = sheet.getRow(j).getCell(excel_column_idx);
Object obj = ImportUtil.getValue(cell);
Object obj = ExcelUtil.getValue(cell);
if (column_type.equals("Integer") && !ImportUtil.isInteger(obj.toString())) {//要求整数,实际不是整数
ImportUtil.addComment(wb, cell, "要求是整数,实际数据类型不是整数!");
ImportUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex());
if (column_type.equals("Integer") && !ExcelUtil.isInteger(obj.toString())) {//要求整数,实际不是整数
ExcelUtil.addComment(wb, cell, "要求是整数,实际数据类型不是整数!");
ExcelUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex());
flag = false;
} else if (column_type.equals("Double") && !ImportUtil.isDouble(obj.toString())) {//要求是浮点数,实际不是浮点数
ImportUtil.addComment(wb, cell, "要求是小数,实际数据类型不是小数!");
ImportUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex());
} else if (column_type.equals("Double") && !ExcelUtil.isDouble(obj.toString())) {//要求是浮点数,实际不是浮点数
ExcelUtil.addComment(wb, cell, "要求是小数,实际数据类型不是小数!");
ExcelUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex());
flag = false;
} else if (column_type.equals("Date") && !ImportUtil.isDate(obj.toString())) {//要求是日期,实际不是日期
ImportUtil.addComment(wb, cell, "要求是日期格式,实际数据类型不是日期格式!");
ImportUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex());
} else if (column_type.equals("Date") && !ExcelUtil.isDate(obj.toString())) {//要求是日期,实际不是日期
ExcelUtil.addComment(wb, cell, "要求是日期格式,实际数据类型不是日期格式!");
ExcelUtil.fillColor(wb, cell, IndexedColors.YELLOW.getIndex());
flag = false;
}
}
@ -151,7 +151,7 @@ public class ImportExcelData {
}
// 检查通过,导入数据
for (int i = 0; i < sheetCnt; i++) ImportUtil.importData(upload_excel_filename, wb, i, bureau_id, person_id);
for (int i = 0; i < sheetCnt; i++) ExcelUtil.importData(upload_excel_filename, wb, i, bureau_id, person_id);
System.out.println("恭喜,所有数据成功导入!");
//关闭Excel

@ -1,6 +1,6 @@
package UnitTest.ImportExcel;
import com.dsideal.QingLong.Util.ImportUtil;
import com.dsideal.QingLong.Util.ExcelUtil;
import org.apache.poi.xssf.usermodel.*;
import java.io.FileOutputStream;
@ -18,9 +18,9 @@ public class TestDiffrentColor {
cell.setCellValue("我是原来的内容");
//添加重点提示符*和Comment
ImportUtil.addStar(wb, cell);
ExcelUtil.addStar(wb, cell);
//添加Comment
ImportUtil.addComment(wb, cell, "此单元格内容必须输入!");
ExcelUtil.addComment(wb, cell, "此单元格内容必须输入!");
//输出
FileOutputStream fileOut = new FileOutputStream("c:\\workbook.xlsx");

@ -1,8 +1,7 @@
package UnitTest.ImportExcel;
import com.dsideal.QingLong.Util.ImportUtil;
import com.dsideal.QingLong.Util.ExcelUtil;
import com.jfinal.kit.StrKit;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
@ -42,17 +41,17 @@ public class TestReadMergeCell {
for (int i = row; i <= sheet.getLastRowNum(); i++) {
if (isMerged(sheet, i, col)) {
XSSFCell cell = sheet.getRow(i).getCell(col);
String value = ImportUtil.getValue(cell).toString();
String value = ExcelUtil.getValue(cell).toString();
if (StrKit.isBlank(value)) {
for (int j = i - 1; ; j--) {
String prev = ImportUtil.getValue(sheet.getRow(j).getCell(col)).toString();
String prev = ExcelUtil.getValue(sheet.getRow(j).getCell(col)).toString();
if (!StrKit.isBlank(prev)) {
System.out.println(prev);
break;
}
}
} else {
System.out.println(ImportUtil.getValue(cell));
System.out.println(ExcelUtil.getValue(cell));
}
}

@ -18,7 +18,7 @@ import java.util.*;
import static org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted;
public class ImportUtil {
public class ExcelUtil {
/**
*
*
@ -259,9 +259,10 @@ public class ImportUtil {
* @param input
* @return
*/
public static Kv createTable(String tableName, Kv input, String upload_excel_filename) {
public static Kv createTable(String tableName, Kv input) {
List<Record> list = (List<Record>) input.get("list");
String sheetName = input.getStr("sheet_name");
String upload_excel_filename = input.getStr("upload_excel_filename");
String colSql = "", commentSql = "";
for (Record record : list) {
String column_name = record.getStr("column_name").toLowerCase();
@ -421,10 +422,10 @@ public class ImportUtil {
//cell可能是被合并的单元格
if (isMerged(sheet, cell)) {
String value = ImportUtil.getValue(cell).toString();
String value = ExcelUtil.getValue(cell).toString();
if (StrKit.isBlank(value)) {
for (int k = i - 1; ; k--) {
String prev = ImportUtil.getValue(sheet.getRow(k).getCell(j)).toString();
String prev = ExcelUtil.getValue(sheet.getRow(k).getCell(j)).toString();
if (!StrKit.isBlank(prev)) {
value = prev;
break;
Loading…
Cancel
Save