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

如何用C#将Excel指定列中符合条件的数据复制到另一个工作簿

C#实现Excel指定列筛选并复制数据到新工作簿

核心思路

使用Excel Interop的AutoFilter功能对目标列进行筛选,获取符合条件的可见行后复制到新工作簿。这种方式无需逐行判断单元格值,效率更高且支持任意列作为筛选列。

完整代码示例

using Excel = Microsoft.Office.Interop.Excel;
using System;
using System.Runtime.InteropServices;

class Program
{
    static void Main(string[] args)
    {
        Excel.Application excelApp = null;
        Excel.Workbook sourceWorkbook = null;
        Excel.Worksheet sourceSheet = null;
        Excel.Workbook destWorkbook = null;
        Excel.Worksheet destSheet = null;

        try
        {
            // 初始化Excel应用程序
            excelApp = new Excel.Application();
            excelApp.Visible = false; // 后台运行(调试时可设为true查看界面)

            // 打开源工作簿
            string sourcePath = @"C:\Users\你的路径\源文件.xlsx";
            sourceWorkbook = excelApp.Workbooks.Open(sourcePath);
            sourceSheet = sourceWorkbook.Worksheets[1]; // 获取第一个工作表

            // 确定包含表头和所有数据的完整范围
            Excel.Range dataRange = sourceSheet.UsedRange;

            // 设置筛选规则:请根据实际列位置修改filterColumnIndex
            // 示例:若"职位"在H列(第8列),则将值改为8
            int filterColumnIndex = 5; 
            dataRange.AutoFilter(
                Field: filterColumnIndex, 
                Criteria1: "trainee", 
                Operator: Excel.XlAutoFilterOperator.xlFilterValues
            );

            // 获取筛选后的可见行数据
            Excel.Range filteredRange = dataRange.SpecialCells(Excel.XlCellType.xlCellTypeVisible);

            // 创建目标工作簿并获取工作表
            destWorkbook = excelApp.Workbooks.Add();
            destSheet = destWorkbook.Worksheets[1];

            // 复制筛选数据到目标工作表
            filteredRange.Copy();
            destSheet.Range["A1"].PasteSpecial(Excel.XlPasteType.xlPasteAll);

            // 保存目标工作簿
            string destPath = @"C:\Users\你的路径\实习生数据.xlsx";
            destWorkbook.SaveAs(destPath);

            Console.WriteLine("筛选并复制完成!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"操作出错:{ex.Message}");
        }
        finally
        {
            // 强制释放COM对象,避免Excel进程后台残留
            if (destSheet != null) Marshal.ReleaseComObject(destSheet);
            if (destWorkbook != null)
            {
                destWorkbook.Close();
                Marshal.ReleaseComObject(destWorkbook);
            }
            if (sourceSheet != null) Marshal.ReleaseComObject(sourceSheet);
            if (sourceWorkbook != null)
            {
                sourceWorkbook.Close();
                Marshal.ReleaseComObject(sourceWorkbook);
            }
            if (excelApp != null)
            {
                excelApp.Quit();
                Marshal.ReleaseComObject(excelApp);
            }
        }
    }
}

关键注意事项

  • 筛选列调整:务必修改filterColumnIndex的值,使其对应你的"职位"列的索引(第一列为1,第二列为2,以此类推)。
  • 资源清理:finally块中的代码必须保留,否则Excel进程会在后台持续运行占用系统资源。
  • 依赖准备:确保项目已通过NuGet安装Microsoft.Office.Interop.Excel包,或手动引用对应程序集。
  • 调试技巧:开发阶段可将excelApp.Visible设为true,直观查看Excel的筛选和复制过程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:49:04