package UnitTest; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.dialect.PostgreSqlDialect; import com.jfinal.plugin.hikaricp.HikariCpPlugin; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; public class TestExportExcel { public static void main(String[] args) { //读取库 HikariCpPlugin hp = new HikariCpPlugin("jdbc:postgresql://10.10.14.71:5432/szjz_db", "postgres", "DsideaL147258369", "org.postgresql.Driver"); hp.start(); ActiveRecordPlugin arp = new ActiveRecordPlugin(hp); arp.setDialect(new PostgreSqlDialect()); arp.start(); //表名 String table_name = "ds_job_5_0"; //读取表的结构信息 String sql = "select column_name,excel_column_idx,original_name from t_collect_mapping where table_name= ?"; List list = Db.find(sql, table_name); Map _map = new HashMap<>(); for (Record record : list) { Record r = new Record(); r.set("column_name", record.getStr("column_name")); r.set("original_name", record.getStr("original_name")); _map.put(record.getInt("excel_column_idx") + 1, r); } //读取表的注释 sql = "SELECT obj_description(?::regclass, 'pg_class') as memo"; String memo = Db.findFirst(sql, table_name).getStr("memo"); //获取数据 sql = "select t1.*,t2.org_name as bureau_name from " + table_name + " as t1 inner join t_base_organization as t2 on t1.bureau_id=t2.bureau_id"; List data = Db.find(sql); // 创建工作簿和工作表 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(memo); // 创建单元格样式对象 CellStyle headerStyle = workbook.createCellStyle(); // 设置水平居中 headerStyle.setAlignment(HorizontalAlignment.CENTER); // 设置垂直居中 headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 设置边框样式 headerStyle.setBorderTop(BorderStyle.THIN); headerStyle.setBorderBottom(BorderStyle.THIN); headerStyle.setBorderLeft(BorderStyle.THIN); headerStyle.setBorderRight(BorderStyle.THIN); // 创建字体对象并设置字体颜色为白色 Font font = workbook.createFont(); font.setFontHeightInPoints((short) 14); font.setBold(true); font.setFontName("黑体"); font.setColor(IndexedColors.BLACK.getIndex()); // 设置背景色为浅蓝色 #d2f4f2 headerStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex()); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 将字体应用于样式 headerStyle.setFont(font); // 在第一行创建单元格并设置样式 Row headerRow = sheet.createRow(0); Cell headerCell = headerRow.createCell(0); headerCell.setCellValue("单位"); headerCell.setCellStyle(headerStyle); for (int i = 0; i < list.size(); i++) { headerCell = headerRow.createCell(i + 1); headerCell.setCellValue(_map.get(i + 1).getStr("original_name")); headerCell.setCellStyle(headerStyle); } // 创建字体对象并设置字体大小为12 font = workbook.createFont(); font.setFontHeightInPoints((short) 12); // 创建单元格样式对象并将字体应用于样式 CellStyle style = workbook.createCellStyle(); style.setFont(font); // 设置行高度为28 sheet.setDefaultRowHeightInPoints(28); // 设置每个单元格的宽度为30 sheet.setDefaultColumnWidth(30); // 设置边框样式 style.setBorderTop(BorderStyle.THIN); style.setBorderBottom(BorderStyle.THIN); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); // 设置水平居中 style.setAlignment(HorizontalAlignment.CENTER); // 设置垂直居中 style.setVerticalAlignment(VerticalAlignment.CENTER); // 填充数据集的其余行 for (int i = 1; i <= data.size(); i++) { Row row = sheet.createRow(i); Record record = data.get(i - 1); Cell cell = row.createCell(0); cell.setCellValue(record.getStr("bureau_name")); cell.setCellStyle(style); for (int j = 0; j < list.size(); j++) { cell = row.createCell(j + 1); cell.setCellValue(record.getStr(_map.get(j + 1).getStr("column_name"))); cell.setCellStyle(style); } } // 保存Excel文件 try (FileOutputStream outputStream = new FileOutputStream("c:/example.xlsx")) { workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } } }