diff --git a/src/main/java/com/dsideal/base/Tools/InitDataEaseDataSet.java b/src/main/java/com/dsideal/base/Tools/InitDataEaseDataSet.java index 4d98a105..f1aa47fc 100644 --- a/src/main/java/com/dsideal/base/Tools/InitDataEaseDataSet.java +++ b/src/main/java/com/dsideal/base/Tools/InitDataEaseDataSet.java @@ -1,20 +1,27 @@ package com.dsideal.base.Tools; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.file.PathUtil; import com.dsideal.base.DataEase.Model.DataEaseModel; import com.dsideal.base.Plugin.YamlProp; +import com.dsideal.base.Util.ExcelCommonUtil; +import com.jfinal.kit.FileKit; +import com.jfinal.kit.PathKit; import com.jfinal.kit.Prop; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; +import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.dialect.MysqlDialect; import com.jfinal.plugin.hikaricp.HikariCpPlugin; import com.jfinal.plugin.activerecord.Record; import java.io.File; +import java.io.IOException; import java.util.List; public class InitDataEaseDataSet { - public static void main(String[] args) { + public static void main(String[] args) throws IOException { //加载配置文件 String configFile = "application_dev.yaml"; Prop PropKit = new YamlProp(configFile); @@ -72,6 +79,14 @@ public class InitDataEaseDataSet { break; } + //Excel的保存目录 + String exportPath = "D:/360Downloads/Excel"; + File directory = new File(exportPath); + // 检查目录是否存在 + if (!directory.exists()) { + directory.mkdirs(); + } + List list = dm.getDataSetByIdentityId(i); System.out.println("数据集个数=" + list.size()); total += list.size(); @@ -79,6 +94,14 @@ public class InitDataEaseDataSet { int id = record.getInt("id"); String tableName = record.getStr("table_name"); System.out.println("正在处理数据集:" + tableName); + //对此表中的数据进行直接导出EXCEL + String sql = "select * from `" + tableName + "`"; + List tableData = Db.use(DataEaseModel.DB_NAME).find(sql); + //表tableData中如果有一列叫id,那么去掉这一列 + for (Record tableDatum : tableData) { + tableDatum.remove("id"); + } + ExcelCommonUtil.writeExcel(tableData, exportPath + "/" + tableName + ".xlsx"); } } System.out.println("恭喜,所有数据处理完毕,共生成数据集数量=" + total + "个。"); diff --git a/src/main/java/com/dsideal/base/Util/ExcelCommonUtil.java b/src/main/java/com/dsideal/base/Util/ExcelCommonUtil.java index d7a5db84..7a64c678 100644 --- a/src/main/java/com/dsideal/base/Util/ExcelCommonUtil.java +++ b/src/main/java/com/dsideal/base/Util/ExcelCommonUtil.java @@ -17,6 +17,7 @@ import org.apache.poi.ss.util.RegionUtil; import org.apache.poi.xssf.usermodel.*; import java.io.*; +import java.sql.ResultSetMetaData; import java.util.*; @SuppressWarnings("unchecked") @@ -843,4 +844,91 @@ public class ExcelCommonUtil { } sheet.removeMergedRegion(index);//移除合并单元格 } + + /** + * 将List数据写入到Excel中 + * + * @param records + * @param filePath + * @throws IOException + */ + public static void writeExcel(List records, String filePath) throws IOException { + if (records == null || records.isEmpty()) { + throw new IllegalArgumentException("The list of records must not be empty."); + } + + // 获取第一个Record的元数据以确定列名 + Record firstRecord = records.getFirst(); + String[] headers = firstRecord.getColumnNames(); + int columnCount = headers.length; + + // 创建Excel工作簿 + Workbook workbook = new XSSFWorkbook(); + // 创建一个Excel工作表 + Sheet sheet = workbook.createSheet("Sheet1"); + + // 创建标题行 + Row titleRow = sheet.createRow(0); + // 设置标题行的样式 + CellStyle titleStyle = workbook.createCellStyle(); + Font font = workbook.createFont(); + font.setBold(true); + font.setFontHeightInPoints((short) 14); + titleStyle.setFont(font); + titleStyle.setBorderBottom(BorderStyle.THIN); + titleStyle.setBorderLeft(BorderStyle.THIN); + titleStyle.setBorderRight(BorderStyle.THIN); + titleStyle.setBorderTop(BorderStyle.THIN); + + // 填充标题行 + for (int i = 1; i <= columnCount; i++) { + Cell cell = titleRow.createCell(i - 1); + cell.setCellValue(headers[i - 1]); + cell.setCellStyle(titleStyle); + } + + // 创建数据行的样式 + CellStyle dataStyle = workbook.createCellStyle(); + font = workbook.createFont(); + font.setFontHeightInPoints((short) 14); + dataStyle.setFont(font); + dataStyle.setBorderBottom(BorderStyle.THIN); + dataStyle.setBorderLeft(BorderStyle.THIN); + dataStyle.setBorderRight(BorderStyle.THIN); + dataStyle.setBorderTop(BorderStyle.THIN); + + // 填充数据行 + int rowNum = 1; + for (Record record : records) { + Row row = sheet.createRow(rowNum++); + int cellNum = 0; + for (int i = 1; i <= columnCount; i++) { + Cell cell = row.createCell(cellNum++); + Object value = record.get(headers[i - 1]); + cell.setCellValue(value == null ? "" : value.toString()); + cell.setCellStyle(dataStyle); + } + } + + // 设置最小列宽 + int minColumnWidth = 100 * 256 / 7; // 将像素转换为字符单位(Excel的单位是1/256个字符宽度) + for (int i = 0; i < headers.length; i++) { + sheet.setColumnWidth(i, Math.max(minColumnWidth, sheet.getColumnWidth(i))); + } + + // 自动调整列宽 + for (int i = 0; i < headers.length; i++) { + sheet.autoSizeColumn(i); + int columnWidth = sheet.getColumnWidth(i); + int newColumnWidth = Math.max(minColumnWidth, columnWidth); + sheet.setColumnWidth(i, newColumnWidth); + } + + // 将工作簿写入文件 + try (FileOutputStream fileOut = new FileOutputStream(filePath)) { + workbook.write(fileOut); + } + // 关闭工作簿 + workbook.close(); + } }