91 votes

Lecture de la valeur Datetime à partir d'une feuille Excel

lorsque j'essaie de lire la valeur de type datetime de la feuille Excel, il renvoie une valeur double. Par exemple, si vous voulez lire la valeur '2007-02-19 14:11:45.730' comme ceci, j'obtiens une valeur de type double. Utilisation de timespan, mais pas complète car je n’obtiens que cette valeur '2007-02-19 12:00:00 AM'
Maintenant, je veux exactement la même valeur datetime que la première. Mon code est comme: -

 TimeSpan datefromexcel = new TimeSpan(Convert.ToInt32((range.Cells[rCnt, cCnt] as Excel.Range).Value2), 0, 0, 0);

  DateTime inputdate = new DateTime(1900, 1, 1).Add(datefromexcel);

   arrrow2[cCnt - 1] = inputdate.ToString();
 

S'il vous plaît aider !!! Merci.

245voto

Mikael Svenson Points 18243

Vous devez convertir le format de date d'OLE Automation au format .net à l'aide de DateTime.FromOADate.

 double d = double.Parse(b);
DateTime conv = DateTime.FromOADate(d);
 

14voto

Tom Points 2410

Vous pourriez peut-être essayer d’utiliser la méthode DateTime.FromOADate pour convertir entre Excel et .net.

0voto

rsapru Points 310

Ou vous pouvez simplement utiliser OleDbDataAdapter pour obtenir des données à partir d'Excel

0voto

Thomas Points 453

Sinon, si votre cellule est déjà une date réelle, utilisez simplement .Value au lieu de .Value2:

 excelApp.Range[namedRange].Value
{21/02/2013 00:00:00}
    Date: {21/02/2013 00:00:00}
    Day: 21
    DayOfWeek: Thursday
    DayOfYear: 52
    Hour: 0
    Kind: Unspecified
    Millisecond: 0
    Minute: 0
    Month: 2
    Second: 0
    Ticks: 634970016000000000
    TimeOfDay: {00:00:00}
    Year: 2013

excelApp.Range[namedRange].Value2
41326.0
 

0voto

joXin Points 13

J'ai eu une situation similaire et j'ai utilisé le code ci-dessous pour que cela fonctionne ..

 Aspose.Cells.LoadOptions loadOptions = new Aspose.Cells.LoadOptions(Aspose.Cells.LoadFormat.CSV);

Workbook workbook = new Workbook(fstream, loadOptions);

Worksheet worksheet = workbook.Worksheets[0];

dt = worksheet.Cells.ExportDataTable(0, 0, worksheet.Cells.MaxDisplayRange.RowCount, worksheet.Cells.MaxDisplayRange.ColumnCount, true);

DataTable dtCloned = dt.Clone();
ArrayList myAL = new ArrayList();

foreach (DataColumn column in dtCloned.Columns)
{
    if (column.DataType == Type.GetType("System.DateTime"))
    {
        column.DataType = typeof(String);
        myAL.Add(column.ColumnName);
    }
}


foreach (DataRow row in dt.Rows)
{
    dtCloned.ImportRow(row);
}



foreach (string colName in myAL)
{
    dtCloned.Columns[colName].Convert(val => DateTime.Parse(Convert.ToString(val)).ToString("MMMM dd, yyyy"));
}


/*******************************/

public static class MyExtension
{
    public static void Convert<T>(this DataColumn column, Func<object, T> conversion)
    {
        foreach (DataRow row in column.Table.Rows)
        {
            row[column] = conversion(row[column]);
        }
    }
}
 

Espérons que cela aide certains thx_joxin

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X