2016-04-13 6 views
1

ロングタイムリーダー、初めてのポスター。C#、Visual Studio、Excelを開いてコンボボックスにデータを入力

私は過去数時間にわたってExcelブックからシート名を取り出し、コンボボックスでの選択を表示しようとしました。私はそれを稼働させることができましたが、私はその原油とそれほど効率的ではないと少し気になりました。

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

     } 
     } 
    } 

アドバイスをいただければ幸いです。

+0

あなたがやるべき仕事のビットを持っていますこのコードを堅牢にする。 Excelを終了する前に 'excelApp.Quit()'を呼び出す必要があります。また、スコープ外に出る前に**すべてのCOMインスタンス**で 'System.Runtime.InteropServices.Marshal.ReleaseComObject(インスタンス)'を呼び出す必要があります。上記のコードでは、 'excelApp.Workbooks.Open(...)'の 'excelApp.Workbooks'リファレンスも含まれています - あなたはopenを呼び出してからリファレンスをリリースする前に' excelApp.Workbooks'への参照を取得する必要があります仕上げの前に。すべての単一の参照に非常に注意する必要があります。 – Enigmativity

+0

ありがとうございます、私はこれを念頭に置いておきます。 –

答えて

0

xlsx Excel形式を扱う場合はEPPLUSをお勧めします。

nugetパッケージマネージャからepplusライブラリをインストールします。次に enter image description here

enter image description here

using OfficeOpenXml;

シート名のリストを取得します:

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

ありがとうAbbas、これは完璧に動作しています。心から感謝する! –

1

これは、相互運用性を邪魔するよりもはるかに簡単になるサードパーティのライブラリを使用してください。

Excel Data Reader

これは、すべてのシート名を取得し、あなたはしかし、あなたはそれのうち必要なものは何でもデータを取得したいアクセスできるのDataTableにデータを読み取ることができます。 [お読みください]ページには、問題を解決するための簡単な例があります。

+0

ご返信ありがとうございますドミトリー、大変感謝しています。 –

関連する問題