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

Easy Excel动态表头的实现

步骤:

1.查找官方API文档理解实现

2.实现融入到代码里面

一:Easy Excel动态头实时生成头写入

动态头实时生成头写入

二:实现

目的:实现表头为,第一列是固定列,第二列为动态生成的时间段的每一天的日期

步骤:

1.查询数据

2.创建表头

3.填充数据

例子:

package com.test.cn.sales.service.impl;import com.alibaba.excel.EasyExcel;import java.io.File;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class DynamicExcelExport {public static void main(String[] args) {//1.模拟从数据库中获取数据List<String> keywords = getKeywordsFromDatabase();List<SalesData> salesDataList = getSalesDataFromDatabase();//2.创建表头List<String> dates = generateDateRange("2023-12-30", "2024-02-02");// 根据开始和结束时间动态生成日期List<List<String>> head = new ArrayList<>();head.add(new ArrayList<>(Arrays.asList("关键字"))); // 第一列固定为关键字dates.forEach(o -> head.add(new ArrayList<>(Arrays.asList(o))));//3.填充数据List<List<Object>> data = fillData(keywords, salesDataList, dates);String outputPath = "E:\\output.xlsx"; // 输出路径修改为 E 盘EasyExcel.write(new File(outputPath)).head(head).sheet("Sheet1").doWrite(data);System.out.println("Excel 文件导出成功!输出路径:" + outputPath);}private static List<String> getKeywordsFromDatabase() {// 模拟从数据库中获取关键字return new ArrayList<>(Arrays.asList("关键字1", "关键字2", "关键字3"));}private static List<SalesData> getSalesDataFromDatabase() {// 模拟从数据库中获取销售数据List<SalesData> salesDataList = new ArrayList<>();salesDataList.add(new SalesData("关键字1", 100.00, "2023-12-30"));salesDataList.add(new SalesData("关键字2", 200.00, "2024-02-02"));salesDataList.add(new SalesData("关键字3", 300.00, "2024-02-01"));return salesDataList;}private static List<List<Object>> fillData(List<String> keywords, List<SalesData> salesDataList, List<String> dates) {// 填充数据List<List<Object>> data = new ArrayList<>();for (String keyword : keywords) {List<Object> rowData = new ArrayList<>();rowData.add(keyword); // 添加关键字for (String date : dates) {Double sales = getSalesForKeywordAndDate(keyword, date, salesDataList);rowData.add(sales != null ? sales : 0); // 添加销量数据}data.add(rowData);}return data;}private static Double getSalesForKeywordAndDate(String keyword, String date, List<SalesData> salesDataList) {// 根据关键字和日期从销售数据列表中获取销量数据for (SalesData salesData : salesDataList) {if (salesData.getKeyword().equals(keyword) && salesData.getDate().toString().equals(date)) {return salesData.getSales();}}return null;}/*** 时间段生成** @param startDateStr 开始时间* @param endDateStr   结束时间* @return list*/public static List<String> generateDateRange(String startDateStr, String endDateStr) {List<String> dateRange = new ArrayList<>();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");LocalDate startDate = LocalDate.parse(startDateStr, formatter);LocalDate endDate = LocalDate.parse(endDateStr, formatter);while (!startDate.isAfter(endDate)) {dateRange.add(startDate.format(formatter));startDate = startDate.plusDays(1);}return dateRange;}
}class SalesData {private String keyword;private Double sales;private String date;public SalesData(String keyword, Double sales, String date) {this.keyword = keyword;this.sales = sales;this.date = date;}public String getKeyword() {return keyword;}public void setKeyword(String keyword) {this.keyword = keyword;}public Double getSales() {return sales;}public void setSales(Double sales) {this.sales = sales;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}
}

导出效果:

http://www.lryc.cn/news/294302.html

相关文章:

  • kvm qemu 优化 windows 虚拟机速度
  • 银行数据仓库体系实践(18)--数据应用之信用风险建模
  • 每日一练 | 华为认证真题练习Day179
  • [ubuntu]add-apt-repository 添加以及移除
  • PySpark(二)RDD基础、RDD常见算子
  • 修改MFC图标
  • springboot158基于springboot的医院资源管理系统
  • 【算法】枚举——蓝桥杯、日期统计、特殊日期(位数之和)、2023、特殊日期(倍数)、跑步锻炼
  • 基于flask的个人博客项目从0到1
  • 基于OpenCV灰度图像转GCode的单向扫描实现
  • JAVA生成Word文档
  • python将.db数据库文件转成Excel文档
  • [opencvsharp]C#基于Fast算法实现角点检测
  • 群晖NAS开启FTP服务结合内网穿透实现公网远程访问本地服务
  • ReactNative实现弧形拖动条
  • STM32F407移植OpenHarmony笔记9
  • telnet笔记
  • 【考研408】操作系统笔记
  • 从0开始搭建、上传npm包
  • 【Go】在 JSON 中解析 time.Duration
  • UE4 C++ UGameInstance实例化
  • 在工业制造方面,如何更好地实现数字化转型?
  • 【MySQL】-10 MySQL 存储过程
  • 3.闭包 - JS
  • Java实现批量视频抽帧2.0
  • MFC 原生LsitCtrl单元格嵌入图标
  • 黑马头条 - minio
  • 认识Tomcat (一)
  • SSH免密切换服务器案例-ssh协议(公钥和私钥)
  • AMH面板如何安装与公网远程访问本地面板界面