如何使用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()); }