C# 选择多个不连续单元格会引发异常0x800A03EC

C# 选择多个不连续单元格会引发异常0x800A03EC,c#,excel,vba,C#,Excel,Vba,通常在我的代码中,我需要定义多个不连续的单元格,因此我不能使用冒号:分隔符 要选择范围,我使用工作表.range[],即使在internet上我经常看到get_range方法,但它没有显示在IntelliSense建议中。不过,当使用Range[]或get_Range时,我没有注意到任何差异 文件上说 范围的名称。这必须是宏语言中的A1样式引用。它可以包括范围运算符冒号、相交运算符空格或联合运算符逗号。它也可以包括美元符号,但它们被忽略了。可以在范围的任何部分使用本地定义的名称。如果使用名称,则

通常在我的代码中,我需要定义多个不连续的单元格,因此我不能使用冒号:分隔符

要选择范围,我使用工作表.range[],即使在internet上我经常看到get_range方法,但它没有显示在IntelliSense建议中。不过,当使用Range[]或get_Range时,我没有注意到任何差异

文件上说

范围的名称。这必须是宏语言中的A1样式引用。它可以包括范围运算符冒号、相交运算符空格或联合运算符逗号。它也可以包括美元符号,但它们被忽略了。可以在范围的任何部分使用本地定义的名称。如果使用名称,则假定该名称使用宏的语言

因此,根据文档,union运算符是逗号

为了让图片更清晰,我将直接转到示例

这会引发异常:

cell.Formula = "=SUM(A1;B5;C6)";
worksheet.Range["A1,B5,C6"];
这个很好用

cell.Formula = "=SUM(A1,B5,C6)";
worksheet.Range["A1;B5;C6"];
这会引发异常:

cell.Formula = "=SUM(A1;B5;C6)";
worksheet.Range["A1,B5,C6"];
这个很好用

cell.Formula = "=SUM(A1,B5,C6)";
worksheet.Range["A1;B5;C6"];

这让我很困惑,到底哪一个是正确的,所以什么时候使用逗号,什么时候使用分号。

这并不是历史上第一次编程语言在不同函数之间的语法不一致。例如,PHP充满了这样的不一致性,底线是你只需要知道每个函数的语法,这使得编程变得更加困难和麻烦,但是没有简单的方法来解决这个问题。为什么你认为分号是有效的?A1:D4定义了一个矩形,其中A1和D4位于拐角处。A1定义单个单元格。A1:D4、E5、G6:H9定义了三个简单范围的并集。我假设您正在使用互操作。我从未使用过C中的InterOp,但在VB中,调用Excel时必须遵守Excel语法;若要合并单元格,请在按住ctrl键的同时选择单元格,而在代码中定义公式时必须使用,。按照惯例,在使用纯代码工作表.Range[]时,我会使用Excel GUI公式中使用的分号。而不是使用工作表.Range[A1,B5,C6],将其更改为工作表.RangeA1,B5,C6,并用括号代替括号。每当我在excel单元格中键入公式并手动选择不连续的范围时,它都使用逗号,而不是分号。文档似乎是正确的:使用逗号。为什么要强制使用分号?这并不是历史上编程语言在不同函数之间的语法不一致的第一次。例如,PHP充满了这样的不一致性,底线是你只需要知道每个函数的语法,这使得编程变得更加困难和麻烦,但是没有简单的方法来解决这个问题。为什么你认为分号是有效的?A1:D4定义了一个矩形,其中A1和D4位于拐角处。A1定义单个单元格。A1:D4、E5、G6:H9定义了三个简单范围的并集。我假设您正在使用互操作。我从未使用过C中的InterOp,但在VB中,调用Excel时必须遵守Excel语法;若要合并单元格,请在按住ctrl键的同时选择单元格,而在代码中定义公式时必须使用,。按照惯例,在使用纯代码工作表.Range[]时,我会使用Excel GUI公式中使用的分号。而不是使用工作表.Range[A1,B5,C6],将其更改为工作表.RangeA1,B5,C6,并用括号代替括号。每当我在excel单元格中键入公式并手动选择不连续的范围时,它都使用逗号,而不是分号。文档似乎是正确的:使用逗号。你为什么要强制使用分号?