lorsque j'essaie de lire la valeur de type datetime à partir de la feuille Excel, il renvoie une valeur double.Par exemple, si vous souhaitez lire une valeur '2007-02-19 14:11:45.730'
comme celle-ci, j'obtiens une valeur de type double. parce que 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();
Veuillez aider !!! Merci.
c#
excel
office-interop
Pranav
la source
la source
Vous pouvez peut-être essayer d'utiliser la
DateTime.FromOADate
méthode de conversion entre Excel et .net.la source
Lecture de la valeur Datetime à partir d'une feuille Excel: essayez ce sera le travail.
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");
la source
Value2
renvoie unedouble
valeur encadrée .Ou vous pouvez simplement utiliser OleDbDataAdapter pour obtenir des données d'Excel
la source
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
la source
Value
renverra unDateTime
si vous avez écrit unDateTime
àValue
mais undouble
si vous avez écrit unDateTime
àValue2
.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]); } } }
J'espère que cela aidera certains1 thx_joxin
la source
Vous voudrez peut-être essayer une fonction simple que j'ai publiée sur un autre fil lié à la lecture de la valeur de la 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 dans mon exemple de code fourni au profit de la communauté de développement .Net.
Voici le lien pour le fil C # ne lisant pas la date Excel de la feuille de calcul
la source
Une autre option: lorsque le type de cellule est inconnu au moment de la compilation et que la cellule est formatée comme Date
Range.Value
renvoie unDateTime
objet souhaité .public static DateTime? GetAsDateTimeOrDefault(Range cell) { object cellValue = cell.Value; if (cellValue is DateTime result) { return result; } return null; }
la source