使用POI导出Excel文件并写多个Sheet页

2023-05-16

import lombok.Data;

import java.util.List;

/**
 * @Description: Excel实体类
 * @Author 99231
 * @Date 2022/7/6
 * @Version V1.0
 **/
@Data
public class ExcelExp {
    //  sheet的名称
    private String fileName;
    //  sheet的标题
    private String[] handers;
    //  sheet里的数据集
    private List<String[]> dataset;

    public ExcelExp(String fileName, String[] handers, List<String[]> dataset) {
        this.fileName = fileName;
        this.handers = handers;
        this.dataset = dataset;
    }
}
import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.util.DateUtils;

import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.util.*;

/**
 * @Description: Excel写出工具类
 * @Author 99231
 * @Date 2022/7/5
 * @Version V1.0
 **/
@Slf4j
public class ExcelExportUtils {

    public static void exportExcel(String upload, String fileName, List<ExcelExp> mysheets) {
        // 创建工作薄
        HSSFWorkbook wb = new HSSFWorkbook();
        List<ExcelExp> sheets = mysheets;
        // 数据样式
        HSSFCellStyle style = wb.createCellStyle();
        // 数据垂直
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        // 数据水平
        style.setAlignment(HorizontalAlignment.CENTER);
        // 数据字体样式
        HSSFFont fontStyle = wb.createFont();
        fontStyle.setFontName("微软雅黑");
        fontStyle.setFontHeightInPoints((short) 10);
        style.setFont(fontStyle);
        // 数据自动换行
        style.setWrapText(true);
        for (ExcelExp excel : sheets) {
            // 获取该Sheet的名称
            HSSFSheet sheet = wb.createSheet(excel.getFileName());
            // 标题单元格合并
            sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 0, 0, excel.getHanders().length - 1));
            Row rowTitle = sheet.createRow(0);
            Cell cellOne = rowTitle.createCell(0);
            // 标题单元格值
            cellOne.setCellValue(excel.getFileName() + "-" + DateUtils.getDate("yyyyMMdd"));
            // 标题风格
            HSSFCellStyle cellTitleStyle = wb.createCellStyle();
            cellTitleStyle.setAlignment(HorizontalAlignment.CENTER);
            cellTitleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
            // 字体
            HSSFFont titleFont = wb.createFont();
            titleFont.setFontName("黑体");
            titleFont.setFontHeightInPoints((short) 12);
            cellTitleStyle.setFont(titleFont);
            cellOne.setCellStyle(cellTitleStyle);

            // 获取sheet的标题名
            String[] handers = excel.getHanders();
            // 第一个sheet的第一行位标题
            HSSFRow rowFirst = sheet.createRow(1);
            // 写标题
            for (int i = 0; i < handers.length; i++) {
                // 获取第一行的每个单元格
                HSSFCell cell = rowFirst.createCell(i);
                // 写数据
                cell.setCellValue(handers[i]);
                // 加样式
                cell.setCellStyle(cellTitleStyle);
                // 设置每列的列宽
                sheet.setColumnWidth(i, 6000);
                sheet.setDefaultRowHeight((short) 400);
            }
            // 写数据集
            List<String[]> dataset = excel.getDataset();
            for (int i = 0; i < dataset.size(); i++) {
                // 获取该对象
                String[] data = dataset.get(i);
                // 创建数据行
                HSSFRow row = sheet.createRow(i + 2);
                for (int j = 0; j < data.length; j++) {
                    // 判断数据中是否包含日期
                    // o.getCumulativeUnitDividendAssets().matches("[\u4e00-\u9fa5]+")
                    if (data[0].matches("[\u4e00-\u9fa5]+")) {
                        // 获取第一行的每个单元格
                        HSSFCell cellDate = row.createCell(j);
                        // 写数据
                        cellDate.setCellValue(data[j]);
                        // 加样式
                        cellDate.setCellStyle(cellTitleStyle);
                        // 设置每列的列宽
                        sheet.setColumnWidth(j, 6000);
                        sheet.setDefaultRowHeight((short) 400);
                    } else {
                        // 设置对应的值
                        HSSFCell cell = row.createCell(j);
                        cell.setCellValue(data[j]);
                        cell.setCellStyle(style);
                    }
                }
            }
        }
        // 创建写出流
        try {
            FileOutputStream output = new FileOutputStream(new File(upload + fileName));
            wb.write(output);
            output.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
   }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用POI导出Excel文件并写多个Sheet页 的相关文章

  • 如何将 xlsx 读取为 pandas 数据框,并将公式作为字符串

    我有一个包含一些计算列的 Excel 文件 例如 我在 a 列中有一些数据 而 b 列是使用 a 列中的值计算的 我需要将新数据附加到 a 列并计算 b 列并保存文件 import pandas as pd df pd DataFrame
  • 过滤所有独特的项目,例如 Google 文档

    是否有一种快速 简单的方法来过滤 Excel 2013 列中的所有唯一项目 类似于 Google Docs 唯一 功能 这不是一个漂亮的答案 但它有效 将其作为数组公式粘贴到单元格中B2 LOOKUP 2 1 COUNTIF B 1 B1
  • 延迟宏以允许事件完成

    在尝试从宏内访问外部 API 函数集时 我发现有必要添加延迟 以便外部 API 有时间处理选择 实现这一点会带来一些困难 因为使用 Application Wait 或 Application Sleep 不起作用 在线搜索让我尝试使用 G
  • 使用 Python 将 Excel 中的图表导出为图像

    我一直在尝试将 Excel 中的图表导出为 Python 中的图像文件 JPG 或 ING 我正在查看 WIn32com 这是我到目前为止所拥有的 import win32com client as win32 excel win32 ge
  • 使用 xlwings 排序(pywin32)

    我需要使用 python 按给定行对 Excel 电子表格进行排序 为了进行测试 我使用以下数据 在名为 xlwings sorting xlsx 的文件中 Numbers Letters Letters 2 7 A L 6 B K 5 C
  • 更改列标签?例如:将“A”列更改为“名称”列

    谁能告诉我如何更改列标签 例如 我想将列 A 更改为列 名称 Excel Excel 的版本是什么 一般来说 您无法更改列字母 它们是 Excel 系统的一部分 您可以使用工作表中的一行来输入您正在使用的表格的标题 表标题可以是描述性列名称
  • 从“查找”结果中出现“下标超出范围”错误

    我想在 Excel 工作表中查找一个字符串 Excel 单元格值是使用公式计算的 当我运行这段代码时 Set firstExcel CreateObject Excel application firstExcel Workbooks Op
  • 如何将 JavaScript 图表导出到 Excel 文件 (HighCharts)

    我必须将 Javascript 图表 HighCharts 导出到 Excel 文件中 图表在div中呈现 但excel不呈现javascript生成的html css内容 仅呈现没有样式的文本 一个解决方案是将图表渲染为图像 jpeg 但
  • VBA - HTML 抓取问题

    我正在尝试从网站上抓取拍卖数据https www rbauction com heavy equipment auctions https www rbauction com heavy equipment auctions 我当前的尝试是
  • Countif 不适用于小时和/或日期

    您好 我有 3 列内的数据 A 目的地 例如洛杉矶 B 承运人 例如 Ups C 发货时间 预计 4 00 使用的时间是24小时时间 不含Am Pm 我需要进行计数才能知道在特定时间我们有多少批货物 尝试过 COUNTIF A1 A100
  • Perforce Excel 文件差异

    我有一堆 excel 文件放在 perforce 上 我想对这些 excel 文件进行 diff 类似于我在 perforce 中对其他文件 如 java cs 等 所做的操作 我尝试寻找一个插件 发现 P4OFC 只适合对 word 文件
  • 使用 VBA 的下拉菜单

    我需要使用 VBA 从下拉菜单中选择特定选项 我怎样才能做到这一点 链接到我们试图从中提取的网页 IE document getElementsByName down count click 我尝试过的代码 Full Module Priv
  • 如何使用 Nodejs 创建 Excel 文件?

    我是一名 Nodejs 程序员 现在我有一个数据表 我想将其保存为 Excel 文件格式 我该怎么做呢 我找到了一些 Node 库 但其中大多数是 Excel 解析器而不是 Excel 编写器 我使用的是 Linux 服务器 因此需要一些可
  • 在合并的单元格中选择、插入照片并将其居中

    我是一名研发面包师 正在为我的团队制作食谱模板 模板中有照片 但我需要轻松地允许他们单击一个按钮 打开照片的文件选择器 然后将该照片放在合并的单元格中 我其实不太擅长做这个 Sub InsertPhotoMacro Dim photoNam
  • Excel 数字缩写格式

    这是我想要完成的任务 Value Display 1 1 11 11 111 111 1111 1 11k 11111 11 11k 111111 111 11k 1111111 1 11M 11111111 11 11M 11111111
  • 如何在Power Query中对N列求和

    我的数据每月都会更新 因此我尝试创建一个强大的查询表 该表将显示我创建的枢转 N 列的总和 但我似乎不知道如何在强大的查询中执行此操作 我目前有这个代码 旋转后 创建要求和的列的列表 添加索引列以限制每行 添加一列 该列对该行的列进行求和
  • Android Excel CSV 的 MIME 数据类型是什么?

    我尝试了 text csv 甚至 application vnd ms excel 但 Excel 不会显示在选择列表中 很多其他应用程序也可以 void shareCsv Uri uri Context context Intent in
  • SQL Excel VBA 运行时错误 3709 无效连接

    这是我的第一个问题 欢迎提出建设性的批评 我正在尝试从 Excel VBA 查询 Access 数据库并将返回信息放入 Excel 范围中 我收到此错误 错误消息 运行时错误 3709 连接无法用于 执行此操作 在此情况下它已关闭或无效 语
  • 使用 VBScript 在日期字段值上选择错误的数据

    我有一张包含以下数据的表 现在 Excel 共有 36 个任务 每个任务有 4 列 第一个任务 即 Task1 名称将始终从 L 列开始 144 列描述了 36 个任务 现在我们需要按行进行检查 并需要检查 TNStart 开始日期 你们能
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推

随机推荐