From 57e1080d0124dad946866bf4033eec196563a9e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Thu, 21 Dec 2023 18:50:04 +0800 Subject: [PATCH] 'commit' --- .../UnitTest/ImportExcel/ImportExcelData.java | 7 +- .../ImportExcel/TestDiffrentColor.java | 31 -- .../ImportExcel/TestReadMergeCell.java | 61 ---- .../com/dsideal/QingLong/Util/ExcelUtil.java | 296 +++++++++--------- src/main/resource/Excel/school.xlsx | Bin 32186 -> 33977 bytes 5 files changed, 150 insertions(+), 245 deletions(-) delete mode 100644 src/main/java/UnitTest/ImportExcel/TestDiffrentColor.java delete mode 100644 src/main/java/UnitTest/ImportExcel/TestReadMergeCell.java diff --git a/src/main/java/UnitTest/ImportExcel/ImportExcelData.java b/src/main/java/UnitTest/ImportExcel/ImportExcelData.java index bac99de2..59b77e58 100644 --- a/src/main/java/UnitTest/ImportExcel/ImportExcelData.java +++ b/src/main/java/UnitTest/ImportExcel/ImportExcelData.java @@ -1,12 +1,11 @@ package UnitTest.ImportExcel; -import com.dsideal.QingLong.Util.AsposeUtil; import com.dsideal.QingLong.Util.ExcelUtil; import com.jfinal.kit.PropKit; import com.jfinal.kit.StrKit; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; -import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory; +import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.dialect.PostgreSqlDialect; import com.jfinal.plugin.hikaricp.HikariCpPlugin; import org.apache.poi.openxml4j.util.ZipSecureFile; @@ -31,8 +30,6 @@ public class ImportExcelData { public static String person_id = "c8ef14f2-5dcc-4b62-8964-2282b68ba21d"; public static void main(String[] args) throws IOException, ParseException { - //加载License - AsposeUtil.getLicense(); // 延迟解析比率 ZipSecureFile.setMinInflateRatio(-1.0d); //告之配置文件位置 @@ -51,6 +48,7 @@ public class ImportExcelData { String f1 = path + File.separator + upload_excel_filename; //用户上传的填充完的EXCEL文件 String f2 = path + File.separator + "school.xlsx"; + //对比两个EXCEL文件 是不是格式一致,也就是是不是上传了正确的模板文件 int sheetCnt = ExcelUtil.getSheetCount(upload_excel_filename); for (int i = 0; i < sheetCnt; i++) { @@ -72,7 +70,6 @@ public class ImportExcelData { XSSFSheet sheet = wb.getSheetAt(i); //移除所有批注 ExcelUtil.RemoveAllComment(sheet); - //数据起始行 Record r = ExcelUtil.getSheetConfig(upload_excel_filename, i); int data_start_row = r.getInt("data_start_row"); diff --git a/src/main/java/UnitTest/ImportExcel/TestDiffrentColor.java b/src/main/java/UnitTest/ImportExcel/TestDiffrentColor.java deleted file mode 100644 index f84dbee4..00000000 --- a/src/main/java/UnitTest/ImportExcel/TestDiffrentColor.java +++ /dev/null @@ -1,31 +0,0 @@ -package UnitTest.ImportExcel; - -import com.dsideal.QingLong.Util.ExcelUtil; -import org.apache.poi.xssf.usermodel.*; - -import java.io.FileOutputStream; -import java.io.IOException; - -public class TestDiffrentColor { - - - public static void main(String[] args) throws IOException { - XSSFWorkbook wb = new XSSFWorkbook(); - XSSFSheet sheet = wb.createSheet("RichTextStringExample"); - - XSSFRow row = sheet.createRow(0);//行号 - XSSFCell cell = row.createCell(0);//单元格 - cell.setCellValue("我是原来的内容"); - - //添加重点提示符*和Comment - ExcelUtil.addStar(wb, cell); - //添加Comment - ExcelUtil.addComment(wb, cell, "此单元格内容必须输入!"); - - //输出 - FileOutputStream fileOut = new FileOutputStream("c:\\workbook.xlsx"); - wb.write(fileOut); - fileOut.close(); - wb.close(); - } -} diff --git a/src/main/java/UnitTest/ImportExcel/TestReadMergeCell.java b/src/main/java/UnitTest/ImportExcel/TestReadMergeCell.java deleted file mode 100644 index 492bb1a9..00000000 --- a/src/main/java/UnitTest/ImportExcel/TestReadMergeCell.java +++ /dev/null @@ -1,61 +0,0 @@ -package UnitTest.ImportExcel; - -import com.dsideal.QingLong.Util.ExcelUtil; -import com.jfinal.kit.StrKit; -import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.xssf.usermodel.XSSFCell; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; - -import java.io.*; - -public class TestReadMergeCell { - /** - * 功能:判断一个单元格是不是被合并了 - * - * @param sheet - * @param row - * @param col - * @return - */ - public static boolean isMerged(XSSFSheet sheet, int row, int col) { - // 判断单元格是否被合并 - for (CellRangeAddress range : sheet.getMergedRegions()) { - if (row >= range.getFirstRow() && row <= range.getLastRow() - && col >= range.getFirstColumn() && col <= range.getLastColumn()) { - return true; - } - } - return false; - } - - public static void main(String[] args) throws IOException { - String source = "D:\\dsWork\\QingLong\\src\\main\\resource\\Excel\\source.xlsx"; - int row = 3; // 假设要判断的单元格的行号 - int col = 1; // 假设要判断的单元格的列号 - - InputStream is = new FileInputStream(source); - XSSFWorkbook wb = new XSSFWorkbook(is); - XSSFSheet sheet = wb.getSheetAt(0); - - for (int i = row; i <= sheet.getLastRowNum(); i++) { - if (isMerged(sheet, i, col)) { - XSSFCell cell = sheet.getRow(i).getCell(col); - String value = ExcelUtil.getValue(cell).toString(); - if (StrKit.isBlank(value)) { - for (int j = i - 1; ; j--) { - String prev = ExcelUtil.getValue(sheet.getRow(j).getCell(col)).toString(); - if (!StrKit.isBlank(prev)) { - System.out.println(prev); - break; - } - } - } else { - System.out.println(ExcelUtil.getValue(cell)); - } - - } - } - } - -} \ No newline at end of file diff --git a/src/main/java/com/dsideal/QingLong/Util/ExcelUtil.java b/src/main/java/com/dsideal/QingLong/Util/ExcelUtil.java index fecc78b9..05f747fb 100644 --- a/src/main/java/com/dsideal/QingLong/Util/ExcelUtil.java +++ b/src/main/java/com/dsideal/QingLong/Util/ExcelUtil.java @@ -19,18 +19,6 @@ import java.util.*; import static org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted; public class ExcelUtil { - /** - * 功能:移除小括号,以及小括号内的文字内容 - * - * @param str - * @return - */ - public static String removeKuoHao(String str) { - str = str.replace("\n", ""); - String output = str.replaceAll("\\(.*?\\)", ""); - output = output.replaceAll("\\(.*?\\)", ""); - return output; - } /** * ) @@ -88,53 +76,6 @@ public class ExcelUtil { return list; } - /** - * 功能:判断表是不是存在 - * - * @param tableName - * @return - */ - public static boolean isTableExist(String tableName) { - String sql = "select count(*) as c from pg_class where relname = ?"; - return Db.findFirst(sql, tableName).getInt("c") == 1; - } - - /** - * 功能:获取指定模板+指定Sheet的全部配置信息 - * - * @param upload_excel_filename - * @param sheet_index - * @return - */ - public static Record getSheetConfig(String upload_excel_filename, int sheet_index) { - String sql = "select * from t_importexcel_config where upload_excel_filename=? and sheet_index=?"; - return Db.findFirst(sql, upload_excel_filename, sheet_index); - } - - /** - * 功能:获取指定模板+指定Sheet的个数 - * - * @param upload_excel_filename - * @return - */ - public static int getSheetCount(String upload_excel_filename) { - String sql = "select * from t_importexcel_config where upload_excel_filename=?"; - List list = Db.find(sql, upload_excel_filename); - return list.size(); - } - - /** - * 功能:获取指定模板+指定Sheet中所有列的限制条件 - * - * @param upload_excel_filename - * @param sheet_index - * @return - */ - public static List getSheetMapping(String upload_excel_filename, int sheet_index) { - String sql = "select * from t_importexcel_mapping where upload_excel_filename=? and sheet_index=?"; - return Db.find(sql, upload_excel_filename, sheet_index); - } - /** * 功能:检查两个EXCEL文件的指定行+指定列是不是内容一致,返回值是不一致的位置集合,位置用数对 Map.Entry描述 * @@ -352,107 +293,51 @@ public class ExcelUtil { String sql = "drop table if exists " + tableName; Db.update(sql); } - /** - * 功能:判断一个单元格是不是被合并了 + * 功能:判断表是不是存在 * - * @param sheet + * @param tableName * @return */ - public static boolean isMerged(XSSFSheet sheet, XSSFCell cell) { - // 判断单元格是否被合并 - for (CellRangeAddress range : sheet.getMergedRegions()) { - if (cell.getRowIndex() >= range.getFirstRow() && cell.getRowIndex() <= range.getLastRow() - && cell.getColumnIndex() >= range.getFirstColumn() && cell.getColumnIndex() <= range.getLastColumn()) { - return true; - } - } - return false; + public static boolean isTableExist(String tableName) { + String sql = "select count(*) as c from pg_class where relname = ?"; + return Db.findFirst(sql, tableName).getInt("c") == 1; } /** - * 功能:导入数据 + * 功能:获取指定模板+指定Sheet的全部配置信息 * - * @throws ParseException + * @param upload_excel_filename + * @param sheet_index + * @return */ - public static void importData(String upload_excel_filename, XSSFWorkbook wb, - int sheetIdx, String bureau_id, String person_id) throws ParseException { - //读取sheet页 - XSSFSheet sheet = wb.getSheetAt(sheetIdx); - //通过表名获取到它的读取起始行,终止列 + public static Record getSheetConfig(String upload_excel_filename, int sheet_index) { String sql = "select * from t_importexcel_config where upload_excel_filename=? and sheet_index=?"; - Record record = Db.findFirst(sql, upload_excel_filename, sheetIdx); - String table_name = record.getStr("table_name"); - - //先删除 - sql = "delete from " + table_name + " where bureau_id=?"; - Db.update(sql, bureau_id); - - int data_start_row = record.getInt("data_start_row"); - int column_num = record.getInt("column_num"); - - //获取字段与EXCEL列的映射信息 - sql = "select * from t_importexcel_mapping where upload_excel_filename=? and sheet_index=?"; - List list = Db.find(sql, upload_excel_filename, sheetIdx); - Map _map = new HashMap<>(); - for (Record r : list) { - int excel_column_idx = r.getInt("excel_column_idx"); - String column_name = r.getStr("column_name"); - String column_type = r.getStr("column_type"); - Record rt = new Record(); - rt.set("column_name", column_name); - rt.set("column_type", column_type); - _map.put(excel_column_idx, rt); - } - //开始读取数据 - List writeList = new ArrayList<>(); - for (int i = data_start_row; i <= sheet.getLastRowNum(); i++) { - //获得行 - XSSFRow row = sheet.getRow(i); + return Db.findFirst(sql, upload_excel_filename, sheet_index); + } - //遍历列 - if (row != null) { - Record writeRecord = new Record(); - writeRecord.set("bureau_id", bureau_id); - writeRecord.set("person_id", person_id); - for (int j = 0; j < column_num; j++) { - XSSFCell cell = row.getCell(j); - String colType = _map.get(j).getStr("column_type"); - String colName = _map.get(j).getStr("column_name"); + /** + * 功能:获取指定模板+指定Sheet的个数 + * + * @param upload_excel_filename + * @return + */ + public static int getSheetCount(String upload_excel_filename) { + String sql = "select * from t_importexcel_config where upload_excel_filename=?"; + List list = Db.find(sql, upload_excel_filename); + return list.size(); + } - //cell可能是被合并的单元格 - if (isMerged(sheet, cell)) { - String value = ExcelUtil.getValue(cell).toString(); - if (StrKit.isBlank(value)) { - for (int k = i - 1; ; k--) { - String prev = ExcelUtil.getValue(sheet.getRow(k).getCell(j)).toString(); - if (!StrKit.isBlank(prev)) { - value = prev; - break; - } - } - } - writeRecord.set(colName, value); - } else { - if (colType.equals("Integer")) - writeRecord.set(colName, (int) Double.parseDouble(getValue(cell).toString())); - else if (colType.equals("String")) - writeRecord.set(colName, getValue(cell).toString()); - else if (colType.equals("Double")) - writeRecord.set(colName, Double.parseDouble(getValue(cell).toString())); - else if (colType.equals("Date")) { - String dateString = getValue(cell).toString(); - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - Date date = dateFormat.parse(dateString); - writeRecord.set(colName, date); - } - } - } - writeList.add(writeRecord); - } - } - // 写入数据 - Db.batchSave(table_name, writeList, 100); + /** + * 功能:获取指定模板+指定Sheet中所有列的限制条件 + * + * @param upload_excel_filename + * @param sheet_index + * @return + */ + public static List getSheetMapping(String upload_excel_filename, int sheet_index) { + String sql = "select * from t_importexcel_mapping where upload_excel_filename=? and sheet_index=?"; + return Db.find(sql, upload_excel_filename, sheet_index); } @@ -692,4 +577,119 @@ public class ExcelUtil { return false; } } + /** + * 功能:判断一个单元格是不是被合并了 + * + * @param sheet + * @return + */ + public static boolean isMerged(XSSFSheet sheet, XSSFCell cell) { + // 判断单元格是否被合并 + for (CellRangeAddress range : sheet.getMergedRegions()) { + if (cell.getRowIndex() >= range.getFirstRow() && cell.getRowIndex() <= range.getLastRow() + && cell.getColumnIndex() >= range.getFirstColumn() && cell.getColumnIndex() <= range.getLastColumn()) { + return true; + } + } + return false; + } + + /** + * 功能:移除小括号,以及小括号内的文字内容 + * + * @param str + * @return + */ + public static String removeKuoHao(String str) { + str = str.replace("\n", ""); + String output = str.replaceAll("\\(.*?\\)", ""); + output = output.replaceAll("\\(.*?\\)", ""); + return output; + } + + /** + * 功能:导入数据 + * + * @throws ParseException + */ + public static void importData(String upload_excel_filename, XSSFWorkbook wb, + int sheetIdx, String bureau_id, String person_id) throws ParseException { + //读取sheet页 + XSSFSheet sheet = wb.getSheetAt(sheetIdx); + //通过表名获取到它的读取起始行,终止列 + String sql = "select * from t_importexcel_config where upload_excel_filename=? and sheet_index=?"; + Record record = Db.findFirst(sql, upload_excel_filename, sheetIdx); + String table_name = record.getStr("table_name"); + + //先删除 + sql = "delete from " + table_name + " where bureau_id=?"; + Db.update(sql, bureau_id); + + int data_start_row = record.getInt("data_start_row"); + int column_num = record.getInt("column_num"); + + //获取字段与EXCEL列的映射信息 + sql = "select * from t_importexcel_mapping where upload_excel_filename=? and sheet_index=?"; + List list = Db.find(sql, upload_excel_filename, sheetIdx); + Map _map = new HashMap<>(); + for (Record r : list) { + int excel_column_idx = r.getInt("excel_column_idx"); + String column_name = r.getStr("column_name"); + String column_type = r.getStr("column_type"); + Record rt = new Record(); + rt.set("column_name", column_name); + rt.set("column_type", column_type); + _map.put(excel_column_idx, rt); + } + //开始读取数据 + List writeList = new ArrayList<>(); + for (int i = data_start_row; i <= sheet.getLastRowNum(); i++) { + //获得行 + XSSFRow row = sheet.getRow(i); + + //遍历列 + if (row != null) { + Record writeRecord = new Record(); + writeRecord.set("bureau_id", bureau_id); + writeRecord.set("person_id", person_id); + for (int j = 0; j < column_num; j++) { + XSSFCell cell = row.getCell(j); + String colType = _map.get(j).getStr("column_type"); + String colName = _map.get(j).getStr("column_name"); + + //cell可能是被合并的单元格 + if (isMerged(sheet, cell)) { + String value = ExcelUtil.getValue(cell).toString(); + if (StrKit.isBlank(value)) { + for (int k = i - 1; ; k--) { + String prev = ExcelUtil.getValue(sheet.getRow(k).getCell(j)).toString(); + if (!StrKit.isBlank(prev)) { + value = prev; + break; + } + } + } + writeRecord.set(colName, value); + } else { + if (colType.equals("Integer")) + writeRecord.set(colName, (int) Double.parseDouble(getValue(cell).toString())); + else if (colType.equals("String")) + writeRecord.set(colName, getValue(cell).toString()); + else if (colType.equals("Double")) + writeRecord.set(colName, Double.parseDouble(getValue(cell).toString())); + else if (colType.equals("Date")) { + String dateString = getValue(cell).toString(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date date = dateFormat.parse(dateString); + writeRecord.set(colName, date); + } + } + } + writeList.add(writeRecord); + } + } + // 写入数据 + Db.batchSave(table_name, writeList, 100); + } + } diff --git a/src/main/resource/Excel/school.xlsx b/src/main/resource/Excel/school.xlsx index ab4907bb1d3302f649fbf9a93faf3e55b3aea4b3..9ed7cbed719ed61b9b435094fce7ed7c121c012c 100644 GIT binary patch literal 33977 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 O;xmrOfZe_qSN{i{K0pBg delta 21935 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