如何使用VSTO从excel中获取单元格值?

我想从Excel中获取单元格到csharp,但不知道什么是最好的variablestypes来读取它。

如果我使variables一个string和单元格的值是一个双我得到一个parsing错误。 如果我把variables加倍,那么当单元格是一个string它不会工作。

这是我正在运行的代码:

try { string i = Globals.Sheet1.Cells[7, 7].Value; double num; if (i == null) return; if (double.TryParse(i, out num)) { . . . } } catch (Exception e) { MessageBox.Show(e.ToString()); } 

把它作为一个对象,然后find正确的types后,你已经得到的价值单元格。

我不知道VSTO,但在Excel Interop程序集中,有一个Value2和一个Text属性,它们都返回对象,并且可以通过多态性转换为正确的types。 VSTO不提供这些吗?

你可以在对象上调用ToString(),然后执行double.TryParse()来查看该值是数字还是文本

只是

 double x = (double)Globals.Sheet1.Cells[7, 7].Value; 

会得到double值或抛出一个exception(不需要捕捉它,如果没有捕获它,它将在Excel中的对话框中正确显示)。

我更喜欢直接获取文本值,并且不希望大部分处理底层数据types。 我得到的TravisWhidden评论提到的文本值,这里是我的VSTO C#代码来实现从单元格读取,并返回一个文本值,无论基础对象。

这是我的扩展方法,工作表页面:

 public static string CellGetStringValue(this WorksheetBase theSheet, int row, int column) { var result = string.Empty; if (theSheet != null) { var rng = theSheet.Cells[row, column] as Excel.Range; if (rng != null) result = (string) rng.Text; } return result; } 
  try { dynamic mycell = Globals.Sheet1.Cells[7, 7]; double num; if (mycell.Value == null) return; //you can use mycell.Text too. if (double.TryParse(mycell.Text, out num)) { . . . } } catch (Exception e) { MessageBox.Show(e.ToString()); }