'Microsoft.Office.Interop.Excel.Range'不包含'get_Default'的定义

时间:2013-12-05 10:01:41

标签: c# excel

当我尝试将datagrid值导出为ex​​cel时,它会显示以下行的错误。

range = (Range)worksheet.Cells.get_Default(num2 + 10, num);
  

Microsoft.Office.Interop.Excel.Range'不包含定义   对于'get_Default'并且没有扩展方法'get_Default'接受a   “Microsoft.Office.Interop.Excel.Range”类型的第一个参数可以是   发现(您是否缺少using指令或程序集引用?)


更多代码

for (int k = inFirstCol; k < dgv.Columns.Count; k++)
{
    range = (Range)worksheet.Cells.get_Default(num2 + 10, num);

    if (dgv[k, j].Style.Font != null)
    {
        if (dgv[k, j].Style.Font.Bold)
        {
            range.Font.Bold = true;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您使用的是C#版本4,不再生成合成的get_Default()方法。 WorkSheet界面现在有一个真正的索引器,您可以像在其余代码中一样使用它。修正:

  range = (Range)worksheet.Cells[num2 + 10, num];

我将简要介绍一下get_Default()的内容。 COM Automation具有更灵活的属性概念,它支持索引属性。或者换言之,可以采用额外参数的属性。它还允许将属性声明为接口的默认属性。

C#语言在历史上一直非常非常严格。它支持默认属性,但它有一个固定的名称: this 。一个类的索引器。在构建程序时,它会重命名为Item。它必须只有一个参数。这与COM互操作无法很好地结合,其中默认属性可以具有任何名称和任意数量的参数。 Range接口有这个问题,它有一个名为Value的默认属性,它带有两个参数。它们也是可选的,C#中不支持的其他东西。因此,类型库导入器通过合成名为“Default”的虚假成员来解决该限制。并生成了get_Default()和set_Default()方法以支持两个参数。

C#版本4大大改进了这一点,它现在也支持索引属性。但仅限于COM互操作的特定情况。如果您使用对象资源管理器查看Range接口,您现在可以看到:

  dynamic this[[object RowIndex = System.Type.Missing], 
               [object ColumnIndex = System.Type.Missing]] 
  { set; get; }

并且get_Default()不再存在。