【问题标题】:How to convert "double" to "datetime" between Excel and c#如何在 Excel 和 c# 之间将“double”转换为“datetime”
【发布时间】:2017-03-28 10:33:05
【问题描述】:

我有一个 c# 程序需要创建一个 excel 对象,并进行一些操作, 这是我的部分代码:

// c# code:

workSheet.Cells[1, 1] = "=2012/9/20";       //asign "2012/9/20" to cell[1,1] in Excel
double d = workSheet.Cells[1, 1].value();   // by default, Excel will return 11.17
Debug.Print(d.ToString());                  //c#:  d = 11.1777777777778

那么如何让输出再次变成“2012/9/20”呢?

我尝试了一些代码,但失败了:

DateTime str = DateTime.FromOADate(d);     //c#: str = 1/10/1900 4:16:00 AM
DateTime str = new DateTime((long)d);      //c#: str = 1/1/0001 12:00:00 AM

【问题讨论】:

    标签: c# excel datetime


    【解决方案1】:

    你可以试试这个:

    先在单元格中设置格式:

     ws.Cells[1,1].Style.Numberformat.Format = "yyyy/MM/dd";
    

    然后将值设置为日期时间:

    workSheet.Cells[1, 1] =new DateTime(2012,9,20);
    

    要获得价值,请使用以下内容:

    double d = double.Parse(workSheet.Cells[1, 1].value());
    DateTime conv = DateTime.FromOADate(d);
    

    【讨论】:

    • workSheet.Cells[1, 1] = "2012-9-20"; DateTime dt = workSheet.Cells[1, 1].value(); //Debug.Print(dt.ToOADate());
    【解决方案2】:

    输入 `=2012/9/20" 表示您告诉 Excel 这是一个公式。2012 除以 9,除以 20 等于 11.17777777778。

    尝试存储不带= 符号的日期。

    【讨论】:

    • 感谢您的建议。但它会向我报告以下消息:“无法将类型 'System.__ComObject' 隐式转换为 'string'”
    【解决方案3】:

    如果您想在 Excel 单元格中存储文字或预先格式化的值,请在值前加上单引号 '。例如,workSheet.Cells[1, 1] = "'2012/9/20";。

    【讨论】:

      【解决方案4】:

      老兄,你的 excel 值不是日期。去掉开头的等号。

      一旦你这样做了,你会得到一个合适的双精度值(可以通过 OADate 函数转换)。你现在得到的都是废话。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-25
        • 2021-07-25
        • 2013-03-07
        • 1970-01-01
        • 2014-05-06
        相关资源
        最近更新 更多