2010-02-19 116 views
5

我目前正在做这得到了单元格的值:如何按行索引和列索引

string cellValue = sheet.get_Range("A12", _missing).Value2.ToString(); 

这一工程,但我真的需要通过行和列的索引来选择单元格。

我得到一个空的异常当我尝试

string cellValue = ((Range)sheet.Cells[row, column]).Value2.ToString(); 

什么想法?

+0

[我如何使用VSTO/C#中的行和列号获取Excel范围?](http://stackoverflow.com/questions/2333202/how-do-i-get-an-excel-使用行和列的数字在-vsto-c) – nawfal 2014-01-05 06:37:33

回答

7

ArgumentNullException在哪里出现?尝试分离出这样的代码,并逐步完成它:

object rangeObject = sheet.Cells[row, column]; 
Range range = (Range)rangeObject; 
object rangeValue = range.Value2; 
string cellValue = rangeValue.ToString(); 

这将向您显示null对象的位置。

+0

NullReferenceException发生在 string cellValue = rangeValue.ToString(); 因为range.Value2为空。我知道我的表单很好,但我认为sheet.Cells [row,column]是真正的罪魁祸首。 – CurlyFro 2010-02-19 21:40:08

+0

那么我认为,null'range.Value2'表示该单元格没有值。如果你看看Excel中的单元格,它是空的吗? – 2010-02-19 21:46:00

+2

另外,Excel interop使用基于1的索引。问题可能是您正在使用引用空单元格的基于零的索引。如果是这样的话,那么你所需要做的就是使用'row + 1'和'column + 1'来获得正确的单元格。 – 2010-02-19 21:50:02

0

我有同样的问题。当我读取的单元格为空时,会发生nullref。

string foo = (((Range) ActiveWorksheet.Cells[row, column]).Value2 != null 
      ? ((Range) ActiveWorksheet.Cells[row, column]).Value2.ToString() 
      : "Coalesce some false string here..."); 

请注意,您必须前检查null 您尝试转换或铸造的价值。