如何在C#中将数据导出至已存在的Excel工作表?
C# 导出数据到已有带格式和数据验证的Excel工作表
方案一:使用EPPlus(推荐,支持.xlsx格式)
EPPlus会自动保留原有工作表的格式和数据验证规则,你只需定位目标单元格写入数据即可。
步骤与代码示例
- 安装EPPlus NuGet包:
Install-Package EPPlus - 实现代码:
using OfficeOpenXml; using System.IO; using System.Collections.Generic; // 非商业使用设置许可证上下文,商业场景需购买官方许可证 ExcelPackage.LicenseContext = LicenseContext.NonCommercial; var filePath = @"C:\YourExistingFile.xlsx"; FileInfo fileInfo = new FileInfo(filePath); using (ExcelPackage package = new ExcelPackage(fileInfo)) { // 获取目标工作表,可通过名称定位:package.Workbook.Worksheets["Sheet1"] ExcelWorksheet worksheet = package.Workbook.Worksheets[0]; // 模拟待导出数据 var dataList = new List<(string Name, int Age)> { ("张三", 25), ("李四", 30), ("王五", 28) }; // 从第2行开始写入,避免覆盖表头 int row = 2; foreach (var item in dataList) { // 写入单元格,原有格式会自动保留 worksheet.Cells[row, 1].Value = item.Name; worksheet.Cells[row, 2].Value = item.Age; row++; } // 可选:新增数据验证规则,原有验证不受影响 var validation = worksheet.DataValidations.AddListValidation("C2:C100"); validation.Formula.Values.AddRange(new[] { "男", "女" }); validation.ShowErrorMessage = true; validation.ErrorTitle = "输入错误"; validation.Error = "请选择正确的性别"; // 保存文件,直接覆盖原文件,也可指定新路径另存 package.Save(); }
方案二:使用NPOI(支持.xls和.xlsx格式)
NPOI同样支持保留原有格式与数据验证,兼容新旧Excel版本。
步骤与代码示例
- 安装NPOI NuGet包:
Install-Package NPOI - 实现代码(以.xlsx为例):
using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; using System.IO; using System.Collections.Generic; var filePath = @"C:\YourExistingFile.xlsx"; using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite)) { // 加载已有工作簿 XSSFWorkbook workbook = new XSSFWorkbook(fs); // 获取目标工作表 ISheet worksheet = workbook.GetSheetAt(0); // 模拟待导出数据 var dataList = new List<(string Name, int Age)> { ("张三", 25), ("李四", 30), ("王五", 28) }; // NPOI行索引从0开始,对应Excel第2行 int rowNum = 1; foreach (var item in dataList) { // 若行不存在则创建,避免空行报错 IRow row = worksheet.GetRow(rowNum) ?? worksheet.CreateRow(rowNum); // 写入单元格,保留原有格式 row.CreateCell(0).SetCellValue(item.Name); row.CreateCell(1).SetCellValue(item.Age); rowNum++; } // 可选:新增数据验证规则 IDataValidationHelper validationHelper = worksheet.GetDataValidationHelper(); IDataValidationConstraint constraint = validationHelper.CreateExplicitListConstraint(new[] { "男", "女" }); // 对应Excel的C2:C100区域 CellRangeAddressList addressList = new CellRangeAddressList(1, 99, 2, 2); IDataValidation validation = validationHelper.CreateValidation(constraint, addressList); validation.ShowErrorBox = true; validation.ErrorMessage = "请选择正确的性别"; worksheet.AddValidationData(validation); // 保存文件 fs.Position = 0; workbook.Write(fs); fs.SetLength(fs.Position); }
注意事项
- 操作前确保目标Excel文件未被其他程序占用,否则会抛出IO异常
- 若不想覆盖原文件,可指定新路径进行保存
- EPPlus商业使用需购买官方许可证,非商业场景可免费使用
内容的提问来源于stack exchange,提问作者angelica
相关产品推荐
相关产品推荐

