如何将多个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
相关产品推荐
相关产品推荐

