एक्सेल शीट से डेटटाइम मान पढ़ना


87

जब मैं एक्सेल शीट से डेटाइम टाइप वैल्यू को पढ़ने की कोशिश कर रहा हूं तो यह एक डबल वैल्यू लौटा रहा है। उदाहरण के लिए अगर '2007-02-19 14:11:45.730'इस तरह से वैल्यू पढ़ना चाहते हैं , तो मुझे एक डबल टाइप वैल्यू मिल रही है। फिर भी मैं टाइमपेन का इस्तेमाल करके इस डबल वैल्यू को कन्वर्ट कर रहा हूं, लेकिन पूरी तरह से नहीं। क्योंकि मुझे केवल यही मूल्य मिल रहा है, '2007-02-19 12:00:00 AM'
मैं पहले वाले के समान सटीक डेटाटाइम मूल्य चाहता हूं। मेरा कोड इस प्रकार है: -

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();

कृपया सहायता कीजिए!!! धन्यवाद।

जवाबों:


222

आपको तिथि प्रारूप को OLE स्वचालन से .net प्रारूप में DateTime.FromOADate का उपयोग करके परिवर्तित करना होगा।

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

1
क्या आप उत्तर को वोट करने और इसे सही मानने के लिए भी दयालु होंगे?
मिकेल स्वेनसन 15

वोट अप के लिए 15 प्रतिष्ठा की आवश्यकता है लेकिन मेरे पास केवल 6 हैं क्योंकि मैं नया उपयोगकर्ता हूं, लेकिन मैंने उत्तर को सही माना है।
प्रणव

4
+1 स्पष्ट रूप से upvoting के लिए प्रतिबंध किसी के अपने प्रश्नों पर लागू नहीं होना चाहिए।
माइक रोसेनब्लम

1
मैं वह समझ गया। सिर्फ इशारा करते हुए कि हर कोई आपसे सहमत नहीं होगा यह व्यवहार एक बग है।
jwg

1
यह सबसे आसान तरीका है जो मैंने पाया। धन्यवाद।
अशोक

13

शायद आप DateTime.FromOADateएक्सेल और .net के बीच कनवर्ट करने के लिए विधि का उपयोग करने की कोशिश कर सकते हैं ।


6

एक्सेल शीट से डेटाटाइम वैल्यू पढ़ना: कोशिश करें कि यह काम करेगा।

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");

4
वैसे आपका कोड स्वीकृत उत्तर से कैसे भिन्न है?
प्रणव

Downvoted। यह अक्षम है, कारण जब सेल की तारीख होती है, तो Value2एक बॉक्सिंग doubleमूल्य देता है ।
dbardakov

0

या आप केवल Excel से डेटा प्राप्त करने के लिए OleDbDataAdapter का उपयोग कर सकते हैं


0

वैकल्पिक रूप से, यदि आपका सेल पहले से ही एक वास्तविक तिथि है, तो बस का उपयोग करें। इसके बजाय .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

1
मुझे लगता है कि यह उससे थोड़ा अधिक जटिल है। Valueएक वापस आ जाएगी DateTimeअगर आप एक ने लिखा DateTimeकरने के लिए Value, लेकिन एक doubleअगर आप एक ने लिखा DateTimeकरने के लिए Value2
jwg

0

मेरे पास एक समान स्थिति थी और मैंने इसे काम करने के लिए नीचे दिए गए कोड का उपयोग किया।

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]);
        }
    }
}

उम्मीद है कि यह मदद करता है कुछ thx_joxin


2
इस उत्तर के उपयोग के लिए Aspose.Cells उत्पाद का लाइसेंस और संबंधित स्थापना आवश्यक है। यह एक महान उत्पाद है, लेकिन ऐसा कुछ नहीं है जिसके लिए सभी डेवलपर्स का उपयोग हो।
ज़ेरेफेथ

0

आप एक्सेल शीट से पढ़ने के मूल्य से संबंधित एक और सूत्र पर पोस्ट किए गए सरल फ़ंक्शन को आज़माना चाह सकते हैं ।

यह केवल इनपुट के रूप में सेल से टेक्स्ट लेता है और आउटपुट के रूप में डेटटाइम देता है।

मुझे .Net विकास समुदाय के लाभ के लिए प्रदान किए गए अपने नमूना कोड में सुधार देखकर खुशी होगी।

यहां थ्रेडशीट से थ्रेड सी # नहीं पढ़ने की तारीख के लिए लिंक दिया गया है


0

एक अन्य विकल्प: जब सेल प्रकार संकलित समय पर अज्ञात होता है और सेल फॉर्मेट हो जाता है क्योंकि दिनांक Range.Valueवांछित DateTimeवस्तु देता है ।


public static DateTime? GetAsDateTimeOrDefault(Range cell)
{
    object cellValue = cell.Value;
    if (cellValue is DateTime result)
    {
        return result;
    }
    return null;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.