2

Is it possible to delete and insert multiple rows within a table? Let's say I wanted to delete a range of rows, for example 210-560, 10-11 etc. Is it possible to do it within one line as I have in the example below, or will I need to create a loop with a range of numbers in order to delete a range?

C#

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

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

While using VBA one is able to use a simple method like this:

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

1 回答 1

3

如果您想在 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是 current 的实例Excel.Application。)

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

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

var sep = (string)application.International[XlApplicationInternational.xlListSeparator];
于 2016-10-28T18:25:24.487 回答