2017-02-22 97 views
3

我正在处理C#应用程序中的excel文件。C#Excel范围管理

我不知道为什么这个代码不工作:

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

现在我发现这工作得很好:

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

回答

4

因为你不能传递给Range()一个Cells()物业,您需要将其设置为2个参数Cells()

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

或(使用严格的单元格属性):

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

实际上,您可以使用'Range'属性来访问单个单元格或多个单元格。第二个参数是可选的。签出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]]'当你传递一个字符串时,你可以传递一个参数,但另一个使用Cells的重载需要2个参数 – jonathana

+0

错误,第二个参数是**可选** –

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

+0

感谢您的回答,只为未来访问者修复: 'var value1 = ws。范围[“D7”]。值;' – Zag

+0

好点,我会更新答案。 –

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

这让我觉得,在理论上.Range应该需要2个Range参数Application.UnionApplication.Intersect做,好在它接受几乎任何字符串表达式,在Excel中地址栏中的作品。例如:

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

此外,ws.Cells[7,4]Range所以.Range(Range)并没有太大的意义。