You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个DataTable导出到单个Excel工作表及PDF文件?

实现多DataTable导出至同一Excel工作表及单个PDF文件

一、导出多个DataTable到同一Excel工作表(基于EPPlus库)

核心逻辑是创建单个工作表,按顺序写入每个DataTable的表头和数据,控制好行号避免内容重叠。

using OfficeOpenXml;
using System.Data;
using System.IO;

public void ExportToSingleExcelSheet(DataTable[] dataTables, string savePath)
{
    using (var excelPackage = new ExcelPackage())
    {
        // 创建唯一的工作表
        var sheet = excelPackage.Workbook.Worksheets.Add("合并数据");
        int currentRow = 1;

        foreach (var dt in dataTables)
        {
            // 写入表头
            for (int colIndex = 0; colIndex < dt.Columns.Count; colIndex++)
            {
                sheet.Cells[currentRow, colIndex + 1].Value = dt.Columns[colIndex].ColumnName;
                sheet.Cells[currentRow, colIndex + 1].Style.Font.Bold = true;
            }
            currentRow++;

            // 写入数据行
            for (int rowIndex = 0; rowIndex < dt.Rows.Count; rowIndex++)
            {
                for (int colIndex = 0; colIndex < dt.Columns.Count; colIndex++)
                {
                    sheet.Cells[currentRow, colIndex + 1].Value = dt.Rows[rowIndex][colIndex];
                }
                currentRow++;
            }

            // 表格间留空行分隔(可按需删除)
            currentRow++;
        }

        // 自动调整列宽
        sheet.Cells.AutoFitColumns();
        // 保存文件
        File.WriteAllBytes(savePath, excelPackage.GetAsByteArray());
    }
}

使用时传入你的DataTable数组和输出路径,替换之前创建多工作表的逻辑即可。

二、导出多个DataTable到单个PDF文件(基于iTextSharp库)

创建单个PDF文档,将每个DataTable转为PDF表格后依次添加到文档中,实现单PDF导出。

using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Data;
using System.IO;

public void ExportToSinglePdf(DataTable[] dataTables, string savePath)
{
    using (var fileStream = new FileStream(savePath, FileMode.Create))
    {
        var pdfDoc = new Document(PageSize.A4, 20, 20, 20, 20);
        PdfWriter.GetInstance(pdfDoc, fileStream);
        pdfDoc.Open();

        foreach (var dt in dataTables)
        {
            // 创建对应列数的PDF表格
            var pdfTable = new PdfPTable(dt.Columns.Count);
            pdfTable.WidthPercentage = 100; // 表格占满页面宽度

            // 添加表头
            foreach (DataColumn col in dt.Columns)
            {
                var headerCell = new PdfPCell(new Phrase(col.ColumnName, FontFactory.GetFont(FontFactory.HELVETICA_BOLD)));
                headerCell.BackgroundColor = BaseColor.LIGHT_GRAY;
                pdfTable.AddCell(headerCell);
            }

            // 添加数据行
            foreach (DataRow row in dt.Rows)
            {
                foreach (var cellValue in row.ItemArray)
                {
                    pdfTable.AddCell(new Phrase(cellValue?.ToString() ?? string.Empty));
                }
            }

            // 将表格加入文档
            pdfDoc.Add(pdfTable);
            // 添加空段落分隔不同表格
            pdfDoc.Add(new Paragraph("\n"));
        }

        pdfDoc.Close();
    }
}

如果需要自定义样式(比如边框、字体大小、单元格对齐方式),直接修改PdfPCell的属性即可调整。

内容的提问来源于stack exchange,提问作者Anubhav kalra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:18:11