Cells.Formula =“= CONCATENATE(…)”exception0x800A03EC

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

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

现在,下面这行代码触发了上面的exception:

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

以下行不会引发exception。 (这只是上面的那一行,没有在开头就是这样,它不会引发exception,这意味着索引被正确使用了,下面的段落中我将把它们去掉以减轻这个表示)。 另外,如果我手动把excel放在同一个公式的前面,那么公式就会给出正确的结果(正确地抓取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 Object Library

谢谢你的帮助!

你还没有提到你的语言环境,所以为了防止Excel的参数分隔符是逗号(如在英国的语言环境中)而不是分号(如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参考,以获取有关此更多详细信息以及您可能遇到的特殊情况:

  • 创build用于多个国家/地区的Excel解决scheme使用Visual Studio Tools for Office (特别是“编写代码以检查区域设置”部分)
  • 创build用于多个国家/地区的Office解决scheme

(结束编辑)

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