Cells.Formula =“= CONCATENATE(...)”异常0x800A03EC

时间:2013-05-27 14:15:34

标签: vb.net excel exception concatenation excel-interop

我正在编写一个生成Excel文件的VB.NET应用程序。

我的目的是编写一个在单元格中使用CONCATENATE的特定公式。

现在,以下代码行触发了上述异常:

0) tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = 
   "=CONCATENATE(" & Pixels(PixelIndex) & ";Batches!J3)"

以下行不会引发异常。 (它只是上面没有=的行。事实上它没有引发异常意味着索引被正确使用;我将在以下段落中删除它们以简化表示法)。另外,如果我在同一个公式前面手动输入=,那么公式会给出正确的结果(它正确地抓取Batches!J3

1) tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = 
   "CONCATENATE(" & Pixels(PixelIndex) & ";Batches!J3)"

以下行也没有问题:

2) tSheet.Cells(indexes).Formula = "=CONCATENATE(" & Pixels(PixelIndex) & ")"

这条线也适用:

3) tSheet.Cells(indexes).Formula = "=CONCATENATE(Batches!J3)"

似乎只有2)和3)的组合才会引发异常。

我正在使用Visual Studio 2012,Excel 2007,我正在使用Microsoft Excel 12.0对象库

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你还没有提到你的语言环境,所以为了防止Excel期望参数分隔符为逗号(如en-UK语言环境)而不是分号(如de-DE语言环境),请尝试:

tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula = 
    "=CONCATENATE(" & Pixels(PixelIndex) & ",Batches!J3)"

(编辑)如果确实有效,那么您可以使用以下内容使其与区域设置无关:

Dim ci As CultureInfo = System.Globalization.CultureInfo.CurrentCulture
Dim listSep As String = ci.TextInfo.ListSeparator
tSheet.Cells(tIncRow + ItemIndex * PixelIndex + PixelIndex, 2).Formula =
    "=CONCATENATE(" & Pixels(PixelIndex) & listSep & "Batches!J3)"

这只是从Windows文化中获取数字列表分隔符。它假定Excel使用System.Globalization.CultureInfo.CurrentCulture运行,请参阅以下两个MSDN参考,以获取有关此更多详细信息以及您可能遇到的特殊情况:

(结束编辑)

如果这不起作用,那么我们可能需要更多信息 - 请参阅我对原始问题的评论。