2016-04-13 5 views
1

Uzun zaman okuyucusu, ilk kez poster.C#, Visual Studio, excel'i açmak ve daha sonra verileri birleşik kutuya koymak

Son birkaç saat için bir excel çalışma kitabından sayfa adları çekmeye ve bir açılan kutuda seçim için görüntülemeye çalışırken bir sorun yaşadım. Çalışmayı başardım ama biraz ham ve çok verimli değil.

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

     } 
     } 
    } 

Herhangi bir öneri çok takdir edilecektir.

+0

: enter image description here

enter image description here

Sonra using OfficeOpenXml;

sac adlarının listesini alın:

Nuget paket yöneticisinden epplus kütüphane yükleyin Bu kodu sağlamlaştırmak için. Excel ile bitirmeden önce excelApp.Quit() 'yi çağırmalısınız. Ayrıca, kapsam dışında kalmadan önce her COM örneğinde ** bulunan 'System.Runtime.InteropServices.Marshal.ReleaseComObject (instance)' işlevini de çağırmanız gerekir. Yukarıdaki kodunuzda ayrıca "excelApp.Workbooks.Open (...)' da "excelApp.Workbooks" referansını da içerecektir - açık çağrılmadan önce excelApp.Workbooks'a bir başvuru yapmanız ve referansı serbest bırakmanız gerekir. bitirmeden önce. Her referansta çok dikkatli olmalısınız. – Enigmativity

+0

Teşekkür ederim Enigmativity, Bunu aklımda tutacağım. –

cevap

0

Xlsx Excel formatı ile ilgilenilecekse EPPLUS'u öneririm. Yapacak işin biraz var

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

Teşekkürler Abbas, Bu mükemmel çalışıyor. Gerçekten takdir et! –

1

Bunun için 3. parti kitaplığı kullanmayı düşünmelisiniz ki, hayatınızı interop ile uğraşmaktan daha kolay hale getireceksiniz.

Excel Data Reader

Bu tüm sayfa adları almak ve sonra ancak bunun dışında ne gerekiyorsa veri almak istiyorum erişebileceği bir DataTable veri okumak izin verir. GitHub Beni Oku sayfasında, sorununuzu sizin için çözmesi gereken basit örnekler var.

+0

Cevabınız için teşekkürler Dmitry, Büyük beğeni topladı. –