gpt4 book ai didi

c# - 在 C# 中将 Excel 单元格值设置为小数。 .NET 2 和 .NET 4 之间的差异

转载 作者:太空狗 更新时间:2023-10-29 20:41:55 26 4
gpt4 key购买 nike

我有打开 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 警告我数字已存储为文本

请注意,我知道只要避免调用 ToString() 就可以解决问题,但在实际情况中,我正在处理一个遗留应用程序,它希望在 excel 中存储多种数据,包括基本类型和用户定义的数据, ToString() 是唯一可用于所有这些类型的方法,它可以在 Excel 中提供所需的结果,而无需检查类型并决定将什么传递给 set_Value。

所以我不是在问如何修改我的代码以使其工作。我只是想了解为什么两个版本的框架中的行为不同。这非常重要,因为我更愿意在用户发现问题之前修改我的代码。

最佳答案

“ToString”方法的输出并不是一成不变的,它取决于您的线程正在运行的当前文化信息。如果您在带有其他语言包的 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# - 在 C# 中将 Excel 单元格值设置为小数。 .NET 2 和 .NET 4 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18636312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com