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时,警告我该数字已存储为文本.
请注意,我知道简单地避免调用ToString()可以解决问题,但在实际情况下,我正在处理一个遗留应用程序,它想要在excel中存储多种数据,包括基本类型和用户定义的数据,以及ToString( )是所有这些类型上唯一可用的方法,可以在Excel中提供所需的结果,而无需检查类型并决定传递给set_Value的内容.
所以我不是问如何修改我的代码以使其工作.我只是想了解为什么在框架的两个版本中行为是不同的.这非常重要,因为我宁愿在用户发现错误之前修改我的代码.
解决方法 “ToString”方法的输出不是一成不变的,取决于您的线程正在运行的当前cultureinfo.如果您在使用其他语言包的PC上运行该程序,则输出可能会更改.
另一个原因可能是当前线程在代码中的其他位置设置为某个culturinfo.
请尝试以下示例.
static voID Main(string[] args){ decimal d = 12.56m; // Different thread cultureinfo Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE"); Console.Writeline(d); Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); Console.Writeline(d); Console.Writeline(d.ToString( new System.Globalization.CultureInfo("de-DE").NumberFormat)); Console.Writeline(d.ToString( new System.Globalization.CultureInfo("en-US").NumberFormat)); Console.Read();}总结
以上是内存溢出为你收集整理的在C#中将Excel单元格值设置为小数. .NET 2和.NET 4之间的差异全部内容,希望文章能够帮你解决在C#中将Excel单元格值设置为小数. .NET 2和.NET 4之间的差异所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)