首页 文章

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

提问于
浏览
0

当我尝试将datagrid值导出为excel时,它会显示以下行的错误 .

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

Microsoft.Office.Interop.Excel.Range'不包含'get_Default'的定义,并且没有扩展方法'get_Default'接受类型为'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 回答

  • 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互操作的特定情况 . 如果您使用Object Explorer查看Range接口,现在可以看到:

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

    并且get_Default()不再存在 .

相关问题