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

如何在C#中将数据导出至已存在的Excel工作表?

C# 导出数据到已有带格式和数据验证的Excel工作表

方案一:使用EPPlus(推荐,支持.xlsx格式)

EPPlus会自动保留原有工作表的格式和数据验证规则,你只需定位目标单元格写入数据即可。

步骤与代码示例

  1. 安装EPPlus NuGet包:Install-Package EPPlus
  2. 实现代码:
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版本。

步骤与代码示例

  1. 安装NPOI NuGet包:Install-Package NPOI
  2. 实现代码(以.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:24:31