2017-12-19 16 views
2

私はExcelでセルに読み書きをしたい場合、それらが人々によって使用されていた2つの方法を発見しました。C#を使用してExcelからセルを読み取る方法は?

宣言:

Excel.Application ExcelApp = new Excel.Application(); 
Excel.Workbook srcWorkBook = ExcelApp.Workbooks.Open(@"C:\test.xls"); 
Excel.Worksheet srcWorkSheet = srcWorkBook.Worksheets[1]; 
Excel.Range srcRange = srcWorkSheet.UsedRange; 

使用方法1:

srcWorkSheet.Cells[1, 1].value2 = "foo bar"; 

シンタックス2:使用するための最良の方法である1

srcRange.Cells[2, 2].Value2 = "foo bar"; 

?またはそれは.NETですべて問題ありませんか?

+0

ベストプラクティスは 'Interop'ライブラリを避け、.NET内に完全に実装された[EPPlus](https://www.nuget.org/packages/EPPlus)のようなものを使用することです。 –

+0

@MassimilianoKraus NPOIプロジェクトはどうですか? – Jarkid

+1

私はそれを一度も使ったことはありませんが、GitHubページからは面白いようです。また、xlsxだけでなくdocxファイルも扱うことができます。時間がある場合は、両方を試して比較してください。 –

答えて

5

非常にです。

srcWorkSheet.Cells[1, 1].value2 = "foo bar"; 

srcRange.Cells[2, 2].Value2 = "foo bar"; 
  • 2.使用量が2行、UsedRangeの2列のセルをとります。 ExcelでUsedRangeB2:D5であれば、それはC3で価値を置く:
  • Rangeクラスがあるよう Rangeという名前の変数を持つ

enter image description here


  • を本当にではなく、の素晴らしいアイデアです。 WorkSheetWorkBookについても同様です。
+0

アドバイスありがとう。これは例の変数名です。 – Jarkid

+1

@ジャッキード - あなたは大歓迎です。変数については、最初は正しく理解していなかったので、他の人にも問題があると思っていました。 – Vityata

+1

ありがとう、私は人々がそれを誤解させないための変数の名前を更新しました。 – Jarkid

1

いずれのオプションも機能しますが、ワークシートのレイアウトを変更するとすぐに乱雑になります。

オプションの場合は、名前付き範囲を追加することをおすすめします。これは、ワークブックの「開始」状態を変更できるテンプレートを使用している場合に特に効果的です。

列の列があり、そのうちの1つに「foo」という値が含まれているとします。 "fooColumn"のような名前を列全体または列の一番上のセルに追加できます。

次に、あなたがあなたのワークシート上の周りの要素を移動した場合、手動ですべての場所で行や列番号を編集することからあなたを守ります

worksheet.Range("fooColumn").Column 

を使用して列番号を取得することができます。


第2に、他の人が言ったことは、Interopの代わりにEPPlusを使用することです。引き続き名前付き範囲を使用できます。しかし、EPPlusは良いですし、COMオブジェクトがリリースされていないときにInteropはあらゆる種類の苦痛をもたらす可能性があります。 Interopはファイルを操作するアプリケーションを自動化します。 EPPlusはそのファイルで動作します。

関連する問題