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

时间:2010-12-03 01:50:25

标签: c# excel vsto

我试图将excel中的单元格转换为csharp,但不确定读取它的最佳变量类型是什么。

如果我将变量设为字符串且单元格值为double,则会出现解析错误。如果我将变量设为double,那么当单元格是一个字符串时它就不会工作。

这是我正在运行的代码:

 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());
}

5 个答案:

答案 0 :(得分:4)

将它设为一个对象,然后在从单元格中取出值后找出正确的类型。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

简单地

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

将获取double值或抛出异常(无需捕获它,如果没有任何上游捕获它,它将在Excel的对话框中正确显示)。

答案 3 :(得分:0)

我更喜欢直接获取文本值,并且不希望在大多数情况下处理基础数据类型。我得到了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;
}

答案 4 :(得分:0)

 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());
}