【问题标题】:Cells.Formula="=CONCATENATE(...)" Exception 0x800A03ECCells.Formula="=CONCATENATE(...)" 异常 0x800A03EC
【发布时间】:2013-05-22 10:13:32
【问题描述】:

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

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

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

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

下一行不会引发异常。 (它只是上面的行,开头没有=。它没有引发异常的事实意味着索引被正确使用;我将在以下段落中删除它们以简化符号)。另外,如果我在 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 对象库

感谢您的帮助!

【问题讨论】:

  • Pixels(PixelIndex) 的值是多少?此错误代码非常笼统,可能意味着从错误编写的公式到缺少名称、混合 R1C1 和 A1 样式等。
  • 另外,您在 Excel 中使用的是什么语言?您是否使用逗号 (,) (如英国英语版)或分号(;)(如欧洲版)分隔参数。

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


【解决方案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 参考以获取有关此内容的更多详细信息以及您可能遇到的特殊情况:

(结束编辑)

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

【讨论】:

  • 您好!非常感谢您的详细解答!首先,直到明天早上(CEST 时间),我才能测试您的更正,但让我补充一下,您实际上可能是对的:您已经看到我的“语言环境”之间存在不匹配的事实Excel 版本和我的 Visual Studio 之一。事实上,Excel 在欧洲语言环境(“;”)中,而 Visual Studio 应该在 en-US 中。如果输入的公式的某种验证也由 Visual Studio 运行,那么它可以清楚地解释异常。如果此解决方案不起作用,我很乐意提供更多信息!
  • 伙计,你是对的!我把逗号放在 VB.NET 代码中,当它在 Excel 中复制公式时,它把它改回分号。谢谢!
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多