2017-02-22 7 views
3

私はC#アプリケーションでExcelファイルを処理しています。このコードは動作しませんなぜ私は思ったんだけどC#Excelの範囲管理

int i = 7; 
var value1 = ws.Range["D" + i.ToString()].Value; 

答えて

4

あなたはRange()単一Cells()プロパティに渡すカントので:

var value1 = ws.Range[ws.Cells[7,4]].Value; 

をするためには、今私は、これが正常に動作することを発見しましたCells()の2つのパラメータで設定する必要があります。

var value1 = ws.Range[ws.Cells[7,4],ws.Cells[7,4]].Value; 

または(厳密セルプロパティを使用):

var value1 = ws.Cells[7,4].Value; 
+0

実際には、単一のセルまたは複数のセルにアクセスするために 'Range'プロパティを使うことができます。 2番目のパラメータはオプションです。チェックアウトhttps://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.range.aspx –

+0

"A1"はセルのプロパティではありませんセルの "A1"は 'ws.Range [ws.Cells [1,1]、ws.Cells [1,1]] '文字列を渡すときに1つのパラメータを渡すことができますが、Cellを使用するもう1つのオーバーロードには2つのパラメータが必要です – jonathana

+0

間違っている、第2パラメータは**オプション** –

1

は、私はこれがあなた

using Excel = Microsoft.Office.Interop.Excel; 
var value1 =(ws.Cells[7, 4] as Excel.Range).Value; 
2

役立つws.Range[]の最初のパラメータはA1スタイルの表記

にでなければなりません願って、これを試してください

アクセスするには

ws.Cells[7,4] 

することができますこのコードを試してください:

var value1 = ws.Range["D7"].Value; 

thisをチェックしてください。私は理論的には.RangeApplication.UnionApplication.Intersect行うなど2つのRangeパラメータを要求すべきであると思いますが、幸いそれはかなりExcelのアドレスバーで働く任意の文字列表現を受け入れ

+0

あなたの答えをありがとう、将来の訪問者のためのちょうど修正: 'var value1 = ws。範囲["D7"]値; ' – Zag

+0

良い点、私は答えを更新します。 –

1
operator Example 
Range  A1:A1 
Union  A1,A1 
Intersect A1 A1 

。たとえば:

string address = ws.Range["offset(a1,1,2,3,4)"].Address[0, 0]; // "C2:F4" 

また、ws.Cells[7,4]Rangeがそう.Range(Range)あまり意味がありませんです。