Excel

2010-07-22 15 views
27

पर डेटा लिखते समय सही तिथि प्रारूप कैसे बनाएं Iam Office interop का उपयोग कर Excel-फ़ाइल में डेटाटेबल निर्यात कर रहा है। समस्या यह है कि एक्सेल इस तरह की तारीखों को पहचान नहीं पाता है, बल्कि इसके बजाय यह संख्या प्रदर्शित करता है। एक और मामले में मैं एक स्ट्रिंग पास करता हूं जिसे बाद में एक तारीख के रूप में पहचानता है। दोनों मामलों में डेटा गड़बड़ हो गया है।Excel

मैंने नंबरफॉर्मैट @ की कोशिश की जो सेल को टेक्स्ट प्रारूप में स्टोर करना है, लेकिन यह या तो काम नहीं करता है।

  Application app = new Application(); 
      app.Visible = false; 
      app.ScreenUpdating = false; 
      app.DisplayAlerts = false; 
      app.EnableAnimations = false; 
      app.EnableAutoComplete = false; 
      app.EnableSound = false; 
      app.EnableTipWizard = false; 
      app.ErrorCheckingOptions.BackgroundChecking = false; 

      Workbook wb = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); 
      Worksheet ws = (Worksheet)wb.Worksheets[1]; 

      for (int j = 0; j < dt.Rows.Count; j++) 
      { 
       for (int i = 0; i < dt.Columns.Count; i++) 
       { 
        Range rng = ws.Cells[j+2, i+1]as Range; 
        rng.Value2 = dt.Rows[j][i].ToString(); 
        rng.NumberFormat = "@"; 
       } 
      }   

      wb.SaveAs(filename, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
        Missing.Value, XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 

      wb.Close(false, Missing.Value, Missing.Value);    

      app.Workbooks.Close(); 
      app.Application.Quit(); 
      app.Quit();  
      System.Runtime.InteropServices.Marshal.ReleaseComObject(ws); 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(wb); 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(app); 
      ws = null; 
      wb = null; 
      app = null; 
      GC.Collect(); 

मेरा नंबरफॉर्मेट @ काम क्यों नहीं करता? क्या टेक्स्टफॉर्मेट को सबकुछ प्रदर्शित नहीं करना चाहिए जैसा मैंने इसे रखा था?

उत्तर

31

क्या आपने पूरे कॉलम को डेट कॉलम के रूप में स्वरूपित करने का प्रयास किया था? कुछ इस तरह:

Range rg = (Excel.Range)worksheetobject.Cells[1,1]; 
rg.EntireColumn.NumberFormat = "MM/DD/YYYY"; 

दूसरी बात आप Excel सेल (में पाठ लोड करने से पहले स्ट्रिंग अभिव्यक्ति से पहले एक भी टिक डाल दिया जाएगा की कोशिश कर सकते यकीन नहीं है कि अगर मायने रखती है या नहीं, लेकिन यह टाइप करने के दौरान पाठ काम करता है सीधे एक सेल में)।

+0

प्रत्येक सेल को अलग से स्वरूपित करना अलग नहीं होना चाहिए। मैं पाठ के रूप में सबकुछ सही ढंग से कैसे प्रारूपित कर सकता हूं? – codymanix

+0

यदि आप चाहते हैं कि एक्सेल कॉलम को दिनांक कॉलम के रूप में मानें, तो वास्तव में दिनांक प्रारूप होना चाहिए, अन्यथा अजीब चीजें होती हैं, जिन्हें आपने पहले ही अनुभव किया है। हालांकि, आप एक और संभावित कामकाज के लिए अपने नवीनतम संपादन का उल्लेख कर सकते हैं। – dcp

7

DateTime.ToOADate() 

का उपयोग कर और डाल प्रयास है कि सेल में एक डबल के रूप में। मैक सिस्टम पर एक्सेल के साथ समस्याएं हो सकती हैं (यह एक अलग डेटाटाइम -> डबल रूपांतरण का उपयोग करती है), लेकिन इसे ज्यादातर मामलों के लिए अच्छी तरह से काम करना चाहिए।

उम्मीद है कि इससे मदद मिलती है।

+0

मेरा @ काम क्यों नहीं किया? मैं चाहता हूं कि सबकुछ वैसा ही दिखता जैसा मैंने इसे रखा था। – codymanix

+0

अच्छा समाधान ... बाकी सब कुछ असफल रहा! – Sheridan

+0

उपरोक्त! सबकुछ विफल होने पर काम किया! –

2

मुझे पता है कि यह प्रश्न पुराना है लेकिन वीएसटीओ के माध्यम से तिथियों के साथ एक्सेल सेलों को पॉप्युलेट करने में कुछ मिलचास हैं।

मैंने पाया फॉर्मूला के yyyy-mmm-DD स्वरूप के साथ तारीखों पर काम नहीं करते - भले ही कोशिकाओं दिनांक स्वरूप थे! फॉर्मूला में उपयोग के लिए आपको दिनांकों को डीडी/एमएम/वाई वाई प्रारूप में अनुवाद करना होगा।

उदाहरण के लिए तारीखों मैं एसक्यूएल सर्वर विश्लेषण से वापस आते हैं कर रहा हूँ और मैं उन्हें फ्लिप और उसके बाद करना पड़ा उन्हें स्वरूपित:

using (var dateRn = xlApp.Range["A1"].WithComCleanup()) 
{ 
    dateRn.Resource.Value2 = Convert.ToDateTime(dateRn.Resource.Value2).ToString("dd-MMM-yyyy"); 
} 


using (var rn = xlApp.Range["A1:A10"].WithComCleanup()) 
{ 
    rn.Resource.Select(); 
    rn.Resource.NumberFormat = "d-mmm-yyyy;@"; 
} 

अन्यथा सूत्र का दिनांक का उपयोग कर काम नहीं करता है - सेल में सूत्र सी 4 सी 3 के रूप में ही है:

enter image description here

1

पुराना सवाल है लेकिन अभी भी प्रासंगिक है।मैं एक शब्दकोश है कि प्रत्येक क्षेत्र के लिए उचित दिनांक प्रारूप हो जाता है बनाने के बाद, यहां सहायक वर्ग मैं उत्पन्न है:

https://github.com/anakic/ExcelDateTimeFormatHelper/blob/master/FormatHelper.cs

FWIW यह कैसे मैं इसके बारे में चला गया है:

  1. खोला एक्सेल , मैन्युअल रूप से कार्यपुस्तिका के पहले सेल में डेटाटाइम दर्ज किया गया
  2. नियंत्रण कक्ष में क्षेत्र संवाद को खोला
  3. एचडब्ल्यूएनडी के क्षेत्र combobox और लागू बटन को खोजने के लिए जासूस का उपयोग किया ताकि मैं SetFore का उपयोग कर सकूं ग्राउंडविंडो और सेंडकी क्षेत्र को बदलने के लिए (विंडोज एपीआई के माध्यम से क्षेत्र को कैसे बदला जा सकता है)
  4. सभी क्षेत्रों के माध्यम से पुनरावृत्त किया गया और प्रत्येक क्षेत्र के लिए Excel के उस सेल के नंबरफॉर्मैट के लिए एक्सेल से पूछा गया जिसमें तिथि शामिल थी, इस डेटा को इस में सहेजा गया एक फ़ाइल
+0

शायद यह प्रश्नकर्ता के दिमाग में जवाब नहीं है, लेकिन मुझे यह बहुत उपयोगी लगता है (लेकिन मुझे आशा है कि एक और सीधे आगे समाधान है ...)। अपना कोड साझा करने के लिए धन्यवाद! – habakuk

+1

हाँ, मैं एक आसान समाधान की तलाश में था लेकिन इस पर कई घंटों खर्च करने के बाद वहां निष्कर्ष निकाला गया कि वहां कोई नहीं था। एक्सेल प्रारूपण तिथियों के क्षेत्र-अज्ञेयवादी तरीके का खुलासा नहीं करता है। मैंने इसे पोस्ट किया क्योंकि स्वीकृत उत्तर इसे ध्यान में नहीं लेता है; यह अंग्रेजी और अन्य संस्कृतियों के लिए ठीक काम करता है लेकिन उदाहरण के लिए असफल होगा जर्मन, फ्रेंच और कई अन्य क्षेत्रों। हाँ, हो सकता है कि उत्तर ओपी योग्य न हो, लेकिन उत्तर की जरूरत है :) – anakic

0

यह मेरे लिए काम किया:

hoja_trabajo.Cells[i + 2, j + 1] = fecha.ToString("dd-MMM-yyyy").Replace(".", ""); 
0

यह मेरे लिए काम किया:

sheet.Cells[currentRow, ++currentColumn] = "'" + theDate.ToString("MM/dd/yy"); 

नोट टिक मीटर तारीख से पहले जोड़ा गया जहाज।

संबंधित मुद्दे