如何用C#将Excel中符合特定属性的整行数据复制到另一个文件
解决Excel Interop复制特定属性行的问题
嘿,我明白你的需求了——你现在的代码是固定复制A1:C100的范围,但实际需要复制符合特定属性的整行,而且还不知道源数据的总行数对吧?我来帮你调整代码:
核心思路
- 先获取源工作表的最后一行行号,避免硬编码固定范围
- 遍历每一行,检查是否符合你需要的特定属性条件
- 把符合条件的行复制到目标工作表的空行位置
修改后的完整代码
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
相关产品推荐
相关产品推荐

