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.
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);
Peut-être pourriez-vous essayer d'utiliser le DateTime.FromOADate
méthode de conversion entre Excel et .net.
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
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
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
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