【发布时间】:2018-12-25 03:35:00
【问题描述】:
我正在使用 Interop 在 C# 中创建一个 VSTO 插件以与 Excel 进行通信。我一直在阅读这篇关于 Excel 中不同语言环境的文章:
https://docs.microsoft.com/sl-si/visualstudio/vsto/globalization-and-localization-of-excel-solutions
文章说:
默认情况下,您使用 Visual Studio 创建的 Office 解决方案 不受最终用户的区域设置影响,并且始终正常运行 好像语言环境是英语(美国)。例如,如果您 获取或设置 Microsoft.Office.Interop.Excel.Range.Value2* 属性 在 Excel 中,数据的格式必须按照区域设置 ID 1033 预计。如果您使用不同的数据格式,您可能会得到意想不到的结果 结果。
我当前的语言环境设置为德语,它使用 ; 作为列表分隔符,而不是使用 en-US 的 ,。
这是在我的机器上运行的代码:
using Microsoft.Office.Interop.Excel;
private void ButtonClick(object sender, RibbonControlEventArgs e)
{
var range = Worksheet.Range["A1:B1;C1:D1;E1:F1"];
}
这不起作用并引发通用HRESULT: 0x800A03EC 异常:
using Microsoft.Office.Interop.Excel;
private void ButtonClick(object sender, RibbonControlEventArgs e)
{
var range = Worksheet.Range["A1:B1,C1:D1,E1:F1"];
}
那是什么?我如何知道在我的代码中使用哪个语言环境?我认为始终使用 en-US 是安全的。
【问题讨论】:
-
"A1:B1,C1:D1,E1:F1"对Range是正确的,并且应该适用于所有语言环境(并且在从 VBA 调用时也适用)。问题必须是 VSTO 特有的。 -
您的问题得到解答了吗?
标签: c# excel com vsto excel-interop