2011-03-03 7 views
12

त्रुटि जब एक एक्सेल शीट को एक datagrid दृश्य में डेटा निर्यात छपी:।पुराना प्रारूप या अमान्य प्रकार पुस्तकालय। (HRESULT से अपवाद: 0x80028018 (TYPE_E_INVDATAREAD))

त्रुटि (ओल्ड प्रारूप या अमान्य प्रकार लायब्रेरी (अपवाद HRESULT से: 0x80028018 (TYPE_E_INVDATAREAD)))

इस लाइन पर

:

Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing); 

मैं इस समस्या को कैसे ठीक करूं?

मेरा पूरा कोड:

private void button1_Click(object sender, EventArgs e) 
{ 
    System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCulture; 
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); 

    // Creating Excel Application 
    Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); 
    System.Threading.Thread.CurrentThread.CurrentCulture = oldCI; 

    // Creating new WorkBook within Excel application 
    Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing); 

    // Creating new Excel sheet in workbook 
    Microsoft.Office.Interop.Excel._Worksheet worksheet = null; 

    // See the Excel sheet behind the program 
    //Funny 
    app.Visible = true; 

    // Get the reference of first sheet. By default its name is Sheet1. 
    // Store its reference to worksheet 
    try 
    { 
     // Fixed:(Microsoft.Office.Interop.Excel.Worksheet) 
     worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets["Sheet1"]; 
     worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.ActiveSheet; 

     // Changing the name of active sheet 
     worksheet.Name = "Exported from Ketoan"; 

     // Storing header part in Excel 
     for (int i = 1; i < DGData.Columns.Count + 1; i++) 
     { 
      worksheet.Cells[1, i] = DGData.Columns[i - 1].HeaderText; 
     } 

     // Storing each row and column value to Excel sheet 
     for (int i = 0; i < DGData.Rows.Count - 1; i++) 
     { 
      for (int j = 0; j < DGData.Columns.Count; j++) 
      { 
       worksheet.Cells[i + 2, j + 1] = DGData.Rows[i].Cells[j].Value.ToString(); 
      } 
     } 

     // Save the application 
     string fileName = String.Empty; 
     SaveFileDialog saveFileExcel = new SaveFileDialog(); 

     saveFileExcel.Filter = "Excel files |*.xls|All files (*.*)|*.*"; 
     saveFileExcel.FilterIndex = 2; 
     saveFileExcel.RestoreDirectory = true; 

     if (saveFileExcel.ShowDialog() == DialogResult.OK) 
     { 
      fileName = saveFileExcel.FileName; 

      //Fixed-old code: 11 para->add 1:Type.Missing 
      workbook.SaveAs(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
     } 
     else 
      return; 

     // Exit from the application 
     //app.Quit(); 
    } 
    catch (System.Exception ex) 
    { 

    } 
    finally 
    { 
     app.Quit(); 
     workbook = null; 
     app = null; 
    } 
} 
+0

क्या आप इसे प्रारूपित कर सकते हैं ताकि यह सुगम हो। –

+0

आपने पहले ही इस प्रश्न से पूछा है: http://stackoverflow.com/questions/5179196/error-when-export-datagrid-view-to-excel-sheet/5179312#5179312 –

+1

इसकी वजह से ओएस की क्षेत्रीय भाषा " en-US "। मैंने पहले से ही hyperneed.com में इसका उत्तर दिया है। उत्तर देखने के लिए नीचे दिए गए लिंक पर जाएं: http://www.hyperneed.com/ShowSearchAnswers.aspx?searchstring=&category=Programming&questionid=5afa16f5-653a-4f2e-afcb-c83dce5bc4e4 – michael

उत्तर

5

आपका कोड कार्यालय पर 2007 + वी.एस. 2010 क्या संस्करणों का उपयोग कर रहे ठीक काम करता है? माईबी आपने इंटरऑप रिफर्निस का गलत संस्करण चुना है: Office 2007 = 12.0.0.0, Office 2010 = 14.0.0.0

आप http://support.microsoft.com/default.aspx?scid=kb;en-us;320369 पर देख सकते हैं, यह आपकी समस्या का समाधान कर सकता है।

5

वास्तविक कारण क्षेत्रीय सेटिंग्स को उपयोगकर्ता के लिए कॉन्फ़िगर किया गया है जो थ्रेड लॉन्च करता है। यह एक बग के रूप में प्रलेखित है।

http://support.microsoft.com/default.aspx?scid=kb;en-us;320369

+0

यह वास्तविक कारण है और समाधान बस सेट करना है बंद होने के बाद पुरानी संस्कृति को खोलने और वापस करने से पहले एक्सेल संस्कृति की संस्कृति। – kuklei

6

पर विचार करें:

System.Threading.Thread.CurrentThread.CurrentCulture = oldCI; 

यह लाइन हटाएं या रेखा के नीचे ले जाएँ जो एक्सेल एप्लिकेशन को बंद करता है।

यह मेरे लिए काम करता है।

0

आप इस लाइन टाइप करना चाहिए:

System.Threading.Thread.CurrentThread.CurrentCulture = oldCI; 

ऐसा करें आप अपने एक्सेल आवेदन बंद करने के बाद; वर्कबुक जोड़ने से पहले आपको इस लाइन का उपयोग नहीं करना चाहिए।

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