2013-12-05 9 views
0

, когда я пытаюсь экспортировать значение datagrid, чтобы превзойти его ошибку show в следующей строке.«Microsoft.Office.Interop.Excel.Range» не содержит определения для 'get_Default'

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

Microsoft.Office.Interop.Excel.Range «не содержит определение для „“get_Default и не метода расширения„get_Default“принимающего на первый аргумент типа» Microsoft.Office.Interop. Excel.Range»может быть найдено (вы пропали без вести с помощью директивы или ссылка на сборку?)


некоторый код

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; 
     } 
    } 
} 
+0

Поскольку такой метод не существует в интерфейсе Range: http://msdn.microsoft.com/en-us/library/office/microsoft.office.interop.excel.range_methods.aspx – Vinzz

+0

@mehow может помочь любую альтернативу третьей строке кода – Nisar

+0

@ Майли, что вы пытаетесь сделать, используя так называемый 'get_Default'? –

ответ

2

Вы используете C# версию 4, синтетический метод get_Default() больше не генерируется. Интерфейс WorkSheet теперь имеет реального индексатора, вы используете его так же, как и в остальной части вашего кода. Fix:

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

Вкратце опишите, что такое get_Default(). COM Automation обладает более гибким понятием свойств, поддерживает с индексом. Или, другими словами, свойства, которые могут принимать дополнительные аргументы. Он также позволяет объявлять свойство как свойство по умолчанию для интерфейса.

Язык C# исторически был очень строго об этом. Он поддерживает свойство по умолчанию, но имеет фиксированное имя: это. Индексатор класса. Он будет переименован в Item, когда будет построена программа. И это должно иметь один аргумент. Это не так хорошо сочеталось с COM-взаимодействием, где свойство по умолчанию может иметь любое имя и произвольное количество аргументов. Интерфейс Range имеет эту проблему, у него есть свойство по умолчанию Value, которое принимает два аргумента. Они также являются необязательными, что-то еще, что не поддерживалось на C#. Таким образом, импортер библиотеки типов работал над этим ограничением, синтезируя поддельный элемент с именем «По умолчанию». И сгенерировали методы get_Default() и set_Default() для поддержки двух аргументов.

C# версия 4 значительно улучшила это, теперь она поддерживает индексированные свойства. Но только в конкретном случае COM-взаимодействия. Если вы посмотрите на интерфейс Range с помощью Проводника объектов теперь вы не увидите:

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

И get_Default() больше нет.

Смежные вопросы