当前位置: 首页 > news >正文

Java工具类——实体类列表写入excel

Java工具类——实体类列表写入excel

/*** 将实体类 List 数据写入 Excel 文件* @param dataList 实体类对象列表* @param filePath Excel 文件路径* @param sheetName Sheet 名称* @param <T> 泛型类型* @throws IOException 文件操作异常* @throws IllegalAccessException 反射异常*/public static <T> void writeListToExcel(List<T> dataList, String filePath, String sheetName)throws IOException, IllegalAccessException {// 如果数据列表为空,直接返回if (dataList == null || dataList.isEmpty()) {return;}Workbook workbook;File file = new File(filePath);// 判断文件是否存在if (file.exists()) {// 文件存在,加载现有工作簿try (FileInputStream inputStream = new FileInputStream(file)) {workbook = new XSSFWorkbook(inputStream);}} else {// 文件不存在,创建新工作簿workbook = new XSSFWorkbook();}// 检查Sheet是否存在Sheet sheet = workbook.getSheet(sheetName);if (sheet != null) {// Sheet存在,先删除再创建(相当于清空)int sheetIndex = workbook.getSheetIndex(sheet);workbook.removeSheetAt(sheetIndex);sheet = workbook.createSheet(sheetName);} else {// Sheet不存在,直接创建sheet = workbook.createSheet(sheetName);}// 获取第一个对象的类信息Class<?> clazz = dataList.get(0).getClass();Field[] fields = clazz.getDeclaredFields();// 创建标题行Row headerRow = sheet.createRow(0);CellStyle headerStyle = createHeaderStyle(workbook);// 写入标题(属性名)for (int i = 0; i < fields.length; i++) {Cell cell = headerRow.createCell(i);cell.setCellValue(fields[i].getName());cell.setCellStyle(headerStyle);}// 写入数据行for (int i = 0; i < dataList.size(); i++) {Row row = sheet.createRow(i + 1);T item = dataList.get(i);for (int j = 0; j < fields.length; j++) {fields[j].setAccessible(true); // 允许访问私有字段Object value = fields[j].get(item);Cell cell = row.createCell(j);if (value != null) {if (value instanceof Number) {cell.setCellValue(((Number) value).doubleValue());} else if (value instanceof Boolean) {cell.setCellValue((Boolean) value);} else {cell.setCellValue(value.toString());}}}}// 自动调整列宽for (int i = 0; i < fields.length; i++) {sheet.autoSizeColumn(i);}// 写入文件try (FileOutputStream outputStream = new FileOutputStream(filePath)) {workbook.write(outputStream);} finally {workbook.close();}}/*** 创建标题行样式* @param workbook 工作簿* @return 单元格样式*/private static CellStyle createHeaderStyle(Workbook workbook) {CellStyle style = workbook.createCellStyle();Font font = workbook.createFont();font.setBold(true);style.setFont(font);style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());style.setFillPattern(FillPatternType.SOLID_FOREGROUND);style.setBorderBottom(BorderStyle.THIN);style.setBorderTop(BorderStyle.THIN);style.setBorderLeft(BorderStyle.THIN);style.setBorderRight(BorderStyle.THIN);return style;}

相关文章:

  • Java 工厂设计模式详解:用统一入口打造灵活可扩展的登录系统----掌握 Spring 源码的基础第一步
  • 【Semantic Kernel核心组件】Plugin:连接AI与业务逻辑的桥梁
  • EmbeddingBag介绍与案例
  • Android问题整理
  • 数据加盐/加密
  • CentOS 中安装 vim
  • qt中关于思源雅黑字体的使用
  • OpenCV 图形API(43)颜色空间转换-----将 BGR 图像转换为 LUV 色彩空间函数BGR2LUV()
  • 《vue3学习手记4》
  • 《前端面试题之 Vue 篇(第二集)》
  • await 在多线程,子线程中的使用
  • 大模型赋能工业制造革新:10个显效可落地的应用场景
  • 字符设备驱动程序的另一种注册方法
  • IoT FEM射频前端模组芯片(2.4G PA)三伍微电子GSR2401 兼容替代RFX2401
  • 408数据结构绪论刷题001
  • 3.Rust + Axum 提取器模式深度剖析
  • 红宝书第四十九讲:XSS/CSRF攻击防御策略解析
  • 从零上手GUI Guider学习LVGL——Button
  • AI与思维模型——耗散结构思维模型【64】
  • 第十七届“华中杯”大学生数学建模挑战赛题目A题 晶硅片产销策略优化 完整成品 代码 模型 思路 分享
  • 网站开通日期查询/海外网站
  • 教做详情页的网站/抖音推广怎么做
  • 临朐网站建设建站首选哪家公司/太原seo关键词排名优化
  • 交易类网站做支付宝功能/免费b站推广软件
  • 网站对网友发帖隐私做处理/百度 营销推广多少钱
  • 单页优化到首页/windows优化大师收费吗