如何在 C# 中将 Excel 值转换为日期时间格式

本文关键字:转换 日期 时间 格式 Excel 中将 | 更新日期: 2023-09-27 18:37:06

我正在尝试使用Excel Interop从Excel工作表中提取数据。 此处使用区域中的单元格包含日期/时间值。 我已经设法将值作为文本获取,但是如何将其转换为可用于比较操作的数字或日期/时间格式?

using System;
using Excel = Microsoft.Office.Interop.Excel;
class Program
{
    static void Main(string[] args)
    {
        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        Excel.Range range;
        string str;
        int rCnt = 0;
        int cCnt = 0;
        xlApp = new Excel.Application();
        xlWorkBook = xlApp.Workbooks.Open("Wind_Speed.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "'t", false, false, 0, true, 1, 0);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
        range = xlWorkSheet.UsedRange;
        for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
        {
            for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
            {
                // here I can get a string value... how to make it date/time
                str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Text                                
                Console.WriteLine(str);
                Console.ReadLine();                       
            }
        }
        xlWorkBook.Close(true, null, null);
        xlApp.Quit();
        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);
        Console.ReadLine();
    }

如何在 C# 中将 Excel 值转换为日期时间格式

如果原始数据是Excel中的"日期"值(而不是文本),您应该能够使用DateTime.FromOADate方法提取该值并将其转换为DateTime:

double dateValue = range.Cells[rCnt, cCnt].Value2;  // not "Text"
DateTime dateTime = DateTime.FromOADate(dateValue);

另请注意,使用 Office 互操作逐个单元拉取数据通常比将所有数据拉取到一个大数组中然后在 C# 中处理数组要慢得多:

    range = xlWorkSheet.UsedRange;
    object[,] rangeDate = (object[,])range.Value;
    for (rCnt = 0; rCnt <= Array.GetLength(rangeDate, 0) ; rCnt++)
    {
        for (cCnt = 0; cCnt <= Array.GetLength(rangeDate, 1); cCnt++)
        {
           object value = rangeDate[rCnt, cCnt] ;
           ...
        }
    }

目前还不清楚你在问什么,但可能需要获取值,而不是文本

//some code here
{
    var rangeValue = (range.Cells[rCnt, cCnt] as Excel.Range).Value
    //do whatever you need 
}