当我尝试将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 回答
您使用的是C#版本4,不再生成合成的get_Default()方法 . WorkSheet界面现在有一个真正的索引器,您可以像在其余代码中一样使用它 . 固定:
我将简要介绍一下get_Default()的内容 . COM Automation具有更灵活的属性概念,它支持索引属性 . 或者换言之,可以采用额外参数的属性 . 它还允许将属性声明为接口的默认属性 .
C#语言历来对此非常严格 . 它支持默认属性,但它有一个固定的名称:this . 一个类的索引器 . 在程序构建时,它被重命名为
Item
. 它必须有一个参数 . 这与COM互操作无法很好地结合,其中默认属性可以具有任何名称和任意数量的参数 . Range接口有这个问题,它有一个名为Value
的默认属性,它带有两个参数 . 它们也是可选的,C#中不支持的其他东西 . 因此,类型库导入器通过合成名为"Default"的虚假成员来解决该限制 . 并生成了get_Default()和set_Default()方法以支持两个参数 .C#版本4大大改进了这一点,它现在也支持索引属性 . 但仅限于COM互操作的特定情况 . 如果您使用Object Explorer查看Range接口,现在可以看到:
并且get_Default()不再存在 .