我正在编写一个生成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对象库
感谢您的帮助!
答案 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参考,以获取有关此更多详细信息以及您可能遇到的特殊情况:
(结束编辑)
如果这不起作用,那么我们可能需要更多信息 - 请参阅我对原始问题的评论。