我有这个代码(这是真实代码的简化版本),它打开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);
}
}
Run Code Online (Sandbox Code Playgroud)
使用.NET 2,一切都运行良好多年,但当我尝试切换到.NET 4 Excel时,警告我该数字已存储为文本.
请注意,我知道简单地避免调用ToString()可以解决问题,但在实际情况下,我正在处理一个遗留应用程序,它想要在excel中存储多种数据,包括基本类型和用户定义的数据,以及ToString( )是所有这些类型上唯一可用的方法,可以在Excel中提供所需的结果,而无需检查类型并决定传递给set_Value的内容.
所以我不是问如何修改我的代码以使其工作.我只是想了解为什么在框架的两个版本中行为是不同的.这非常重要,因为我宁愿在用户发现错误之前修改我的代码.
小智 -1
尝试这个:
Excel.Application excel = new Excel.Application();
Excel.Workbook workbook = excel.Workbooks.Open(@"c:\test.xls", Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, false,
Missing.Value, Missing.Value);
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
decimal dec = 12.5m;
worksheet.get_Range("A1").Value = dec;
DateTime date = DateTime.Now.Date;
worksheet.get_Range("A2").Value = date;
string str = "Hello";
worksheet.get_Range("A3").Value = str;
Marshal.FinalReleaseComObject(worksheet);
workbook.Save();
workbook.Close(false, Type.Missing, Type.Missing);
Marshal.FinalReleaseComObject(workbook);
excel.Quit();
Marshal.FinalReleaseComObject(excel);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1560 次 |
| 最近记录: |