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

时间:2016-10-28 17:17:10

标签: c# vsto excel-interop listobject

是否可以在表格中删除和插入多行?假设我想删除一系列行,例如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

1 个答案:

答案 0 :(得分:1)

如果你想和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];