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

如何用C#将Excel中符合特定属性的整行数据复制到另一个文件

解决Excel Interop复制特定属性行的问题

嘿,我明白你的需求了——你现在的代码是固定复制A1:C100的范围,但实际需要复制符合特定属性的整行,而且还不知道源数据的总行数对吧?我来帮你调整代码:

核心思路

  1. 先获取源工作表的最后一行行号,避免硬编码固定范围
  2. 遍历每一行,检查是否符合你需要的特定属性条件
  3. 把符合条件的行复制到目标工作表的空行位置

修改后的完整代码

Excel.Application excelApplication = new Excel.Application();
string srcPath = "C:\\Users\\sn314708\\Desktop\\Excel\\1.xlsx";
Excel.Workbook srcworkBook = excelApplication.Workbooks.Open(srcPath);
Excel.Worksheet srcworkSheet = (Microsoft.Office.Interop.Excel.Worksheet)srcworkBook.Sheets.get_Item(1);

string destPath = "C:\\Users\\sn314708\\Desktop\\Excel\\2.xlsx";
Excel.Workbook destworkBook = excelApplication.Workbooks.Open(destPath, 0, false);
Excel.Worksheet destworkSheet = (Microsoft.Office.Interop.Excel.Worksheet)destworkBook.Sheets.get_Item(1);

// 获取源工作表的最后一行行号(以A列为例,可改成你数据所在的列)
int srcLastRow = srcworkSheet.Cells[srcworkSheet.Rows.Count, "A"].End(Excel.XlDirection.xlUp).Row;
// 目标工作表的起始粘贴行(从第1行开始,可根据需求调整)
int destCurrentRow = 1;

// 遍历源工作表的每一行(假设第1行是表头,从第2行开始遍历数据行,可自行调整)
for (int i = 2; i <= srcLastRow; i++)
{
    // 这里替换成你的特定属性判断条件,比如检查B列的值是否等于"合格"
    string cellValue = srcworkSheet.Cells[i, "B"].Value?.ToString();
    if (cellValue == "合格") // 按需修改为你的实际判断逻辑
    {
        // 复制当前行的A到C列(可改成你需要的列范围)
        Excel.Range fromRow = srcworkSheet.Range[$"A{i}:C{i}"];
        Excel.Range toRow = destworkSheet.Range[$"A{destCurrentRow}:C{destCurrentRow}"];
        fromRow.Copy(toRow);
        
        // 目标行号递增,准备下一次粘贴
        destCurrentRow++;
    }
}

// 保存新文件
destworkBook.SaveAs($"C:\\Users\\sn314708\\Desktop\\Excel\\2 {DateTime.Now.ToString("MM_dd_yyyy")}.xlsx");

// 记得释放COM对象,避免Excel进程在后台残留
srcworkBook.Close();
destworkBook.Close();
excelApplication.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(srcworkSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(destworkSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(srcworkBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(destworkBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApplication);

关键说明

  • 动态获取最后一行:用End(xlUp)从列底往上定位最后一个有数据的单元格,不管数据有多少行都能准确覆盖
  • 自定义属性判断:你需要把cellValue == "合格"替换成你的实际判断逻辑,比如判断数值范围、单元格包含特定文本等
  • 释放COM对象:Excel Interop的对象需要手动释放,否则会导致Excel进程在后台驻留占用资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:17:46