奇怪啊,我好像没有发现你说的问题啊。
无论是用.NET(调用COM)访问EXCEL,还是在EXCEL中写宏,得到的结果都正确的啊。

解决方案 »

  1.   

    在Excel中输入内容之前,把A1设为字符格式,B1设为时间格式.
    下面是全部代码,B1单元格的类型是双精度型,是一串数字,不能转成时间格式,
    请各位帮忙看一下.谢谢string FileName=null;
    OpenFileDialog dlg=new OpenFileDialog();
    if(dlg.ShowDialog()==DialogResult.OK)
        FileName=dlg.FileName;
    else
        return;
    Excel.ApplicationClass excel=new Excel.ApplicationClass ();
    Excel.Workbook workbook=excel.Workbooks.Open(FileName,Missing.Value,Missing.Value,Missing.Value,null,null,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);
    Excel.Sheets sheets=workbook.Sheets;
    Excel.Worksheet worksheet=(Excel.Worksheet)sheets.get_Item(1);
    Excel.Range rangea=worksheet.get_Range(worksheet.Cells[1,1],worksheet.Cells[1,1]);
    string s1=rangea.Value.GetType().ToString ();
    MessageBox.Show(s1);//System.String类型
    DateTime dt1=Convert.ToDateTime(rangea.Value);//没问题
    MessageBox.Show(dt1.ToString());
    Excel.Range rangeb=worksheet.get_Range(worksheet.Cells[1,2],worksheet.Cells[1,2]);
    string s2=rangeb.Value.GetType().ToString ();
    MessageBox.Show(s2);//System.Double类型
    DateTime dt2=Convert.ToDateTime(rangeb.Value);//不能转换成时间类型 值是0.88208333333333344这样的数字
    MessageBox.Show(dt2.ToString());
    excel.Quit();
      

  2.   

    我知道你的问题出在哪里了!!!!
    请比较Range对象的Text属性和Value属性,你应该用Text。
    :)
      

  3.   

    To 无锋
       多谢.已经解决了,另外想问一下,Value和Text两个属性有什么区别,两个属性
    各应该用在什么地方.谢谢.
      

  4.   

    不用客气。
    你不问这个问题,我倒也从来没注意过它。
    照我看来(未必说的完全正确),Text其实就是单元格中显示出来的内容,即被格式化过了的Value,甚至有时格子不够宽的时候,内容会显示成"#######",此时读出来的Text就是"#######";而Value就是单元格中真正的内容。
    但是有一种格式好像是例外(我的猜测),那就是日期。比如在A1中输入123,然后将A1格式化为日期型,此时读取的Value是1900-5-2,而它的Text是你看到的“值”,具体看你选择那种日期格式了。