web-dev-qa-db-fra.com

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

lorsqu’on essaie de lire la valeur du type date-heure 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 ça, je reçois une valeur de type double. Plus tard, je convertis cette valeur double en utilisant timespan, mais je ne la complète pas avec succès 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.

79
Pranav

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

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

Peut-être pourriez-vous essayer d'utiliser le DateTime.FromOADate méthode de conversion entre Excel et .net.

11
Tom

Lecture de la valeur datetime à partir de la feuille Excel: essayez cela fonctionnera.

string sDate = (xlRange.Cells[4, 3] as Excel.Range).Value2.ToString();

double date = double.Parse(sDate);

var dateTime = DateTime.FromOADate(date).ToString("MMMM dd, yyyy");

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

0
rsapru

Vous voudrez peut-être essayer une fonction simple que j'ai publiée sur un autre fil lié à la lecture de la valeur de date à partir d'une feuille Excel.

Il prend simplement le texte de la cellule en entrée et donne DateTime en sortie.

Je serais heureux de voir une amélioration de mon exemple de code fournie pour le bénéfice de la communauté de développement .Net.

Voici le lien pour le fil C # ne lisant pas la date Excel dans le tableur

0
Kasim Husaini

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

0
joXin

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
0
Thomas