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

无需NuGet,用C# Interop合并两个Excel工作表并保留样式

用C# Interop Excel实现工作表数据追加并保留样式

以下是完整的实现代码,基于你已有的基础代码扩展,实现将第二个工作簿的sheet2数据追加到第一个工作簿的sheet1现有数据之后,同时完整保留单元格样式:

using Microsoft.Office.Interop.Excel;
using System;

class ExcelDataAppend
{
    static void Main()
    {
        var excelApp = new Application();
        // 可选:设置Excel后台运行,不显示界面
        excelApp.Visible = false;
        excelApp.DisplayAlerts = false;

        try
        {
            // 打开源工作簿(包含要追加的sheet2)和目标工作簿(要追加到的sheet1)
            Workbook sourceBook = excelApp.Workbooks.Open(@"C:\Path\To\Source.xlsx");
            Worksheet sourceSheet = sourceBook.Worksheets[2]; // 第二个工作表sheet2

            Workbook targetBook = excelApp.Workbooks.Open(@"C:\Path\To\Target.xlsx");
            Worksheet targetSheet = targetBook.Worksheets[1]; // 第一个工作表sheet1

            // 获取sheet1的最后一行(有数据的行)
            int lastRowTarget = targetSheet.Cells[targetSheet.Rows.Count, 1].End[XlDirection.xlUp].Row;
            // 获取sheet2的已使用区域(包含所有有数据和样式的单元格)
            Range sourceRange = sourceSheet.UsedRange;
            // 计算目标区域的起始位置:最后一行的下一行,第一列
            Range targetRange = targetSheet.Cells[lastRowTarget + 1, 1];

            // 复制源区域,粘贴时保留全部格式
            sourceRange.Copy();
            targetRange.PasteSpecial(XlPasteType.xlPasteAll);

            // 保存目标工作簿
            targetBook.Save();

            Console.WriteLine("数据追加完成");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"操作出错:{ex.Message}");
        }
        finally
        {
            // 清理资源,避免Excel进程残留
            foreach (Workbook workbook in excelApp.Workbooks)
            {
                workbook.Close(false);
            }
            excelApp.Quit();

            // 释放COM对象
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
        }
    }
}

关键步骤说明

  • 定位目标起始行:通过End[XlDirection.xlUp]从列A的最后一行向上查找,找到sheet1最后一个有数据的行,确保追加到空白行
  • 复制源区域:使用UsedRange获取sheet2所有已使用的单元格(包含数据和样式),避免复制空白区域
  • 带格式粘贴:xlPasteAll参数会复制包括字体、颜色、边框、单元格格式在内的所有样式,完全保留源单元格的格式
  • 资源清理:必须手动关闭工作簿、退出Excel并释放COM对象,否则会有Excel进程在后台残留

注意事项

  • 替换代码中的文件路径为实际的源文件和目标文件路径
  • 确保本地安装了Microsoft Office,且项目引用了Microsoft.Office.Interop.Excel程序集(右键项目→添加引用→COM→找到Microsoft Excel xx.x Object Library)
  • 运行时需要足够的文件读写权限

内容的提问来源于stack exchange,提问作者Nilesh Patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:15:03