我有这段代码(这是真实代码的简化版本),它可以打开 excel 并设置单元格的值。请注意,我在意大利,我们使用,而不是. 分隔十进制数字。这意味着我在代码中使用 12.5,但ToString()
这个数字的结果是“12,5”,Excel 也显示 12,5。
using Xls = Microsoft.Office.Interop.Excel;
public class ExcelTest
{
public static void Test
{
object hmissing = System.Reflection.Missing.Value;
// create an instance of Excel and make it visible
Xls.Application anApp = new Xls.ApplicationClass();
anApp.Visible = true;
// add an empty workbook
Xls.Workbooks wbks = anApp.Workbooks;
wbks.Add(hmissing);
Marshal.ReleaseComObject(wbks);
// set the value of the first cell
Decimal d = 12.5m;
Xls.Range aRange = anApp.get_Range("A1", hmissing);
aRange.set_Value(Xls.XlRangeValueDataType.xlRangeValueDefault, d.ToString());
Marshal.ReleaseComObject(aRange);
}
}
多年来,使用 .NET 2 一切正常,但当我尝试切换到 .NET 4 时,Excel 警告我该数字已存储为 text。
请注意,我知道简单地避免调用 ToString() 可以解决问题,但在实际情况下,我正在处理一个遗留应用程序,它想要在 excel 中存储多种数据,包括基本类型和用户定义的数据,以及 ToString( ) 是所有这些类型上唯一可用的方法,它可以在 Excel 中给出所需的结果,而无需检查类型并决定将什么传递给 set_Value。
所以我不是在问如何修改我的代码以使其工作。我只是想了解为什么框架的两个版本中的行为不同。这很重要,因为我宁愿在用户发现有问题之前修改我的代码。