ketika saya mencoba membaca nilai tipe datetime dari lembar excel itu mengembalikan nilai ganda. misalnya jika ingin membaca nilai '2007-02-19 14:11:45.730'
seperti ini, saya mendapatkan nilai tipe ganda. selanjutnya saya mengubah nilai ganda ini menggunakan rentang waktu, tetapi tidak berhasil diselesaikan karena saya hanya mendapatkan nilai ini '2007-02-19 12:00:00 AM'
sekarang saya ingin nilai datetime yang sama persis seperti yang pertama. Kode saya seperti: -
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();
Tolong bantu!!! Terima kasih.
c#
excel
office-interop
Pranav
sumber
sumber
Mungkin Anda dapat mencoba menggunakan
DateTime.FromOADate
metode untuk mengonversi antara Excel dan .net.sumber
Membaca nilai Datetime Dari lembar Excel: Coba ini akan berhasil.
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");
sumber
Value2
mengembalikandouble
nilai dalam kotak .Atau Anda bisa menggunakan OleDbDataAdapter untuk mendapatkan data dari Excel
sumber
Atau, jika sel Anda sudah menjadi tanggal nyata, cukup gunakan .Value alih-alih .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
sumber
Value
akan mengembalikanDateTime
jika Anda menulisDateTime
ke,Value
tetapidouble
jika Anda menulisDateTime
keValue2
.Saya memiliki situasi yang sama dan saya menggunakan kode di bawah ini untuk membuatnya bekerja ..
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]); } } }
Semoga ini bisa membantu some1 thx_joxin
sumber
Anda mungkin ingin mencoba fungsi sederhana yang saya posting di yang lain utas terkait dengan membaca nilai tanggal dari lembar excel.
Ini hanya mengambil teks dari sel sebagai masukan dan memberikan DateTime sebagai keluaran.
Saya akan senang melihat peningkatan dalam kode sampel saya yang disediakan untuk kepentingan komunitas pengembangan .Net.
Ini adalah tautan untuk utas C # yang tidak membaca tanggal excel dari spreadsheet
sumber
Opsi lain: ketika tipe sel tidak diketahui pada waktu kompilasi dan sel diformat sebagai Tanggal
Range.Value
mengembalikanDateTime
objek yang diinginkan .public static DateTime? GetAsDateTimeOrDefault(Range cell) { object cellValue = cell.Value; if (cellValue is DateTime result) { return result; } return null; }
sumber