从 Excel.Interop table 中删除和插入多行

Deleting and inserting multiple rows from a Excel.Interop table

是否可以在 table 中删除和插入多行?假设我想删除一系列行,例如 210-560、10-11 等。是否可以像我在下面的示例中那样在一行内执行此操作,或者我是否需要创建一个范围循环要删除一个范围的数字?

C#

xlWorkBook.Worksheets["Sheet1"].ListObjects["Table1"].ListRows(11,12).Range.Delete();

xlWorkBook.Worksheets["Sheet1"].ListObjects["Table1"].ListRows(11,12).Range.InsertRowRange();

在使用 VBA 时,可以使用如下简单的方法:

Rows("210:560").Delete
Rows("11:12").EntireRow.Insert

如果您想在 C# 中执行与 VBA 代码相同的操作,您只需编写:

var ws = xlWorkBook.Worksheets["Sheet1"];
ws.Range["210:560"].Delete();
ws.Range["11:12"].Insert();

您甚至可以一次指定多行:

ws.Range["210:560,722:838,917:917"].Delete();
ws.Range["11:12,15:17,19:19"].Insert();

对于单行,您必须像上面所示指定两次行号。

行字符串的大小限制为 255 个字符。如果您想一次处理比这更多的行,则必须合并范围。因此,例如这样的事情:

application.Union(ws.Range["2:5,7:8,9:9"], ws.Range["11:12,15:17,19:19"]).Delete();

(为了简洁起见,我在这个例子中没有显示任何大字符串。application 是当前 Excel.Application 的实例。)

唯一需要注意的是:您必须使用在控制面板的 Windows 区域设置中指定的列表分隔符。如果您在全球范围内或向未知用户(如 ISV)交付应用程序,这一点尤为重要。例如。对于德语用户,默认的列表分隔符是 ; 而不是像英语用户那样的 , 。但当然,它几乎可以由用户手动设置为任何值。

您可以使用以下方法从 Windows 区域设置中获取当前列表分隔符:

var sep = (string)application.International[XlApplicationInternational.xlListSeparator];