2016-04-13 4 views
1

Lange Zeit Leser, zum ersten Mal Poster.C#, Visual Studio, Öffnen Excel & dann setzen Daten in Kombinationsfeld

Ich hatte ein Problem für die letzten paar Stunden versucht, die Blattnamen aus einer Excel-Arbeitsmappe zu ziehen und zur Auswahl in einer Combobox anzuzeigen. Ich schaffte es, es zur Arbeit zu bringen, aber ich bin ein wenig besorgt sein Rohöl und nicht sehr effizient.

 private void btnChoose2_Click(object sender, RoutedEventArgs e) 
    { 
     OpenFileDialog openfileDialog1 = new OpenFileDialog(); 
     if (openfileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 

      openLabel.Text = openfileDialog1.SafeFileName; 
      String filename = DialogResult.ToString(); 

      var excelApp = new Microsoft.Office.Interop.Excel.Application(); 
      excelApp.Visible = false; 
      excelApp.Workbooks.Open(openfileDialog1.FileName); 

      int rcountTag = excelApp.Sheets.Count - 1; 

      for (int i = 1; i <= rcountTag + 1; i++) 
      { 
       Microsoft.Office.Interop.Excel.Sheets excelSheets = excelApp.Worksheets; 
       Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet) 

      excelSheets.get_Item(i); 
       comboBoxMapping.Items.Insert(i - 1, worksheet.Name); 

     } 
     } 
    } 

Jeder Rat würde sehr geschätzt werden.

+0

Sie haben ein wenig Arbeit zu tun um diesen Code robust zu machen. Sie müssen 'excelApp.Quit()' aufrufen, bevor Sie mit Excel fertig sind. Sie müssen auch 'System.Runtime.InteropServices.Marshal.ReleaseComObject (instance) 'auf ** jeder COM-Instanz ** aufrufen, bevor sie den Gültigkeitsbereich verlassen. In Ihrem obigen Code, der auch die Referenz "excelApp.Workbooks" in "excelApp.Workbooks.Open (...)" enthält, müssten Sie einen Verweis auf "excelApp.Workbooks" erhalten, bevor Sie den Verweis aufrufen und dann freigeben vor dem Beenden. Sie müssen sehr vorsichtig mit jeder einzelnen Referenz sein. – Enigmativity

+0

Danke Enigmatismus, das werde ich mir merken. –

Antwort

0

Ich würde EPPLUS empfehlen, wenn xlsx Excel-Format behandelt werden soll.

Installieren epplus Bibliothek von nuget Paket-Manager: enter image description here

enter image description here

Dann using OfficeOpenXml;

die Liste der Blattnamen Get:

ExcelPackage DocInv = new ExcelPackage(new FileInfo(ExcelDocument)); 
DocList = DocInv.Workbook.Worksheets.AsEnumerable().Select(x => x.Name).ToList(); 
+0

Danke Abbas, das funktioniert perfekt. Schätze es wirklich! –

1

Sie sollten mit der Verwendung einer 3rd-Party-Bibliothek für diese suchen, die Ihr Leben viel einfacher als das Mischen mit Interop machen wird.

Excel Data Reader

Diese werden Sie alle Blattnamen erhalten lassen und Daten in eine Datentabelle lesen, die dann aber Sie zugreifen können Sie alle Daten, Sie davon benötigen. Die GitHub Read Me-Seite enthält einfache Beispiele, die Ihr Problem für Sie lösen sollten.

+0

Danke für Ihre Antwort Dmitry, sehr geschätzt. –

Verwandte Themen