【问题标题】:How to read in DateTime in Excel Interop C# [duplicate]如何在 Excel Interop C# 中读取 DateTime [重复]
【发布时间】:2011-11-25 20:57:22
【问题描述】:

可能重复:
Reading Datetime value From Excel sheet

我正在尝试使用 C# 中的 Interop 从 Excel 电子表格中读取 DateTime 值。我所有时间都在我的工作表的“C”列中。我的代码如下:

    public void addTime(Microsoft.Office.Interop.Excel.Workbook workbook)
    {

        Excel.Worksheet ws = (Excel.Worksheet)workbook.Worksheets.get_Item("Time Series");
        Excel.Range range = ws.UsedRange;
        int num = 0;
        for (int row = 1; row <= range.Rows.Count; row++ )
        {
            String dtString = ((Excel.Range)ws.Cells[row, "C"]).Value2.ToString();
            DateTime dt = Convert.ToDateTime(dtString);

            this.addEdgeInstance(dt);
        }
    }

然而这并没有及时读取。字符串的读取工作,但转换功能不起作用。我是否以不同的方式阅读价值观?值可以变化吗? (即:我可以输入 '11/11' 或 '11/11/2011' 因为 Excel 在 Excel 中工作时会将这两个条目识别为 valie DateTime 值?)

【问题讨论】:

  • 你能举个例子说明在转换之前dtString是什么吗?
  • Excel 接受的任何有效日期/时间格式。例如:11/25/2011 5:47:47 PM 或 11/11/2011 或 11/11 等......

标签: c# excel excel-interop


【解决方案1】:

你去吧,芽。我为您稍微修改了代码以反映辅助转换函数的用法。转换发生在这一行: DateTime dt = DateTime.Parse(ConvertToDateTime(dtString));随意根据需要修改帮助函数以返回 DateTime 变量而不是字符串,但这本质上是相同的。希望这会有所帮助!

public void addTime(Microsoft.Office.Interop.Excel.Workbook workbook)  
{  
Excel.Worksheet ws = (Excel.Worksheet)workbook.Worksheets.get_Item("Time Series");  
Excel.Range range = ws.UsedRange;  
int num = 0;  
for (int row = 1; row <= range.Rows.Count; row++ )  
{  
    String dtString = ((Excel.Range)ws.Cells[row, "C"]).Value2.ToString();  
    DateTime dt = DateTime.Parse(ConvertToDateTime(dtString));  

    this.addEdgeInstance(dt);  
}  
}  


public static string ConvertToDateTime(string strExcelDate)
{
    double excelDate;
    try
    {
        excelDate = Convert.ToDouble(strExcelDate);
    }
    catch
    {
        return strExcelDate;
    }
    if (excelDate < 1)
    {
        throw new ArgumentException("Excel dates cannot be smaller than 0.");
    }
    DateTime dateOfReference = new DateTime(1900, 1, 1);
    if (excelDate > 60d)
    {
        excelDate = excelDate - 2;
    }
    else
    {
        excelDate = excelDate - 1;
    }
    return dateOfReference.AddDays(excelDate).ToShortDateString();
}

【讨论】:

    猜你喜欢
    • 2020-04-09
    • 2021-10-10
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多