Interop.Excel.Range 对比动态

Interop.Excel.Range vs dynamic

当我尝试为 excel 文件中的一系列单元格设置数字格式时,我发现了一个非常奇怪的行为。 有两个示例代码:

// First example uses the Microsoft.Office.Interop.Excel.Range interface.
void SetupFormat(Range range)
{
    range.NumberFormat = "0" + CultureInfo.InstalledUICulture.NumberFormat.CurrencyDecimalSeparator + "00%";
}

// Second one uses a dynamic.
void SetupFormat(dynamic range)
{
    range.NumberFormat = "0" + CultureInfo.InstalledUICulture.NumberFormat.CurrencyDecimalSeparator + "00%";
}

当我使用第一种方法时,我得到的数字是 012%,当我使用第二种方法时,我得到的数字是 12.34%(如预期)。 当我在数字格式中使用句点时,第一种方法工作正常。有人知道为什么这些方法有不同的行为吗?

似乎是 dynamic 调用 NumberFormat 调度到 NumberFormatLocal 属性. excel API 中传递的所有数据都应以 excel 不变文化(语言环境 1033,explanation)编码。因此,您也必须传递 1033 语言环境中的所有格式和此类语言环境中的数据。 如果将 static NumberFormat 替换为 NumberFormatLocal 就可以了。