使用C#删除Excel指定联系人行时误删全部行的问题求助
Fix: Your Excel Row Deletion Code Clears All Rows Instead of the Targeted One
我立刻就发现了问题的根源——你调用Delete方法的方式完全错了!ws.Rows.EntireRow.Delete(row)这种写法会把工作表里所有行都清空,因为你先选中了整个Rows集合,再调用Delete,传入的row参数根本没起到指定目标行的作用。
修正后的代码
using System.Runtime.InteropServices; // 需要添加这个命名空间用于释放COM对象 public static void deleterow(string path, int sheetnumber, int row) { _Application excel = new Application(); Workbook wb = excel.Workbooks.Open(path); Worksheet ws = wb.Worksheets[sheetnumber]; // 关键修正:先定位到指定行,再删除整行 ws.Rows[row].EntireRow.Delete(); wb.Save(); wb.Close(); // 务必释放Excel COM对象,避免后台残留进程 Marshal.ReleaseComObject(ws); Marshal.ReleaseComObject(wb); Marshal.ReleaseComObject(excel); }
为什么原来的代码会出错?
- 你写的
ws.Rows.EntireRow会选中当前工作表的所有行,此时调用Delete方法,不管传入什么参数,都会一次性删除全部行内容。 - 正确的逻辑是先通过
ws.Rows[row]精准定位到你要删除的那一行,再调用EntireRow.Delete()来删除整行数据。
额外提醒
操作Excel的COM对象后,一定要手动释放这些对象(就像代码里加的Marshal.ReleaseComObject),否则Excel进程会一直留在后台占用系统资源,这是很多人用Interop操作Excel时容易忽略的坑。
内容的提问来源于stack exchange,提问作者AKASAKAd
相关产品推荐
相关产品推荐

