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

