Interop.Excel.Range与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%(如预期)。 在数字格式中使用句点时,第一种方法工作正常。 有人知道为什么这种方法有不同的行为?

似乎是对NumberFormat的 dynamic调用分派到NumberFormatLocal属性。 在excel API中传递的所有数据都应该在excel不变的文化中进行编码(locale 1033, 解释 )。 所以你必须通过1033语言环境中的所有格式和这样的语言环境中的数据。 如果你用NumberFormatLocalreplace静态的NumberFormat就可以了。