-1

Я пытаюсь создать Excel (2007) Добавить в том, что будет реагировать на изменения сводной таблицы, используя этот код:Как развернуть файл .dna из ExcelDna?

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    Excel.Worksheet sh = this.Application.ActiveSheet; 

    sh.PivotTableUpdate += new 
Excel.DocEvents_PivotTableUpdateEventHandler(sh_PivotTableUpdate); 
} 

void sh_PivotTableUpdate(Excel.PivotTable TargetPivotTable) 
{ 
    MessageBox.Show("sh_PivotTableUpdate event fired"); 
} 
private void ThisAddIn_Shutdown(object sender, System.EventArgs e) 
{ 
} 

После .dll был создан, развернув его/генерируя .xll файл стал вызов; Я использовал this post для руководства там, и теперь у вас есть .xll-файл.

Мне удалось добавить это в таблицу Excel (файл .xlsx), на которую я хочу ответить на код (через File> Excel Options> Add-Ins> Go ...> Browse), но получите это err тзд на добавление .xll файла:

enter image description here

Я вижу, что есть * .dna файл здесь \ пакеты \ ExcelDna.AddIn.0.33.9 \ контента \ ExcelDna-Template.dna

... но создав копию этого файла и изменив его имя на [projectName] .dna (Excel2010AddInForRptRunner-AddIn.dna), а затем скопируем его в то же место, что и файл .xll с файл .xlsx не является решением (каламбур не предназначен). Изменение сводной таблицы вручную не запускает событие/я не вижу сообщения «sh_PivotTableUpdate event».

.dna файл делает ссылку на DLL-файл, как так:

<ExternalLibrary Path="Excel2010AddInForRptRunner.dll" LoadFromBytes="true" Pack="true" /> 

Так что мне нужно сделать, чтобы решить Сообщение об ошибке я получаю и получить .xll файл, который будет принят в электронную таблицу, что его код будет запущен, а обработчик события PivotTableUpdate запущен?

+1

Вы должны игнорировать этот пост вам ссылку на - предложение переименовать файл в каталоге пакетов неверен. Пакет «ExcelDna.AddIn' NuGet настраивает все, что вам нужно, автоматически. – Govert

ответ

0

Есть два вопроса, которые я вижу в вашем фрагменте кода:

Первое, что вы, кажется, перепутали материал VSTO Office, с Excel-ДНК (я вижу это от ThisAddIn_... кода, который относится к VSTO) , Они не смешиваются вообще - вы не можете использовать Excel-DNA внутри проекта надстройки VSTO. Любые пространства имен, начинающиеся с Microsoft.Office.Tools..., указывают на наличие проблемы. Это может произойти, если вы начинаете с надстройки Office или надстройки Excel в качестве типа вашего проекта.

Существует также беспорядок в вашем проекте, связанный с пакетами NuGet - каким-то образом выходные файлы находятся внутри каталога пакета или каталог пакетов был каким-то образом перезаписан или изменен. Вы не должны когда-либо редактировать что-нибудь под packages\...

Если все правильно, то файлы, которые вы заинтересованы в будут найдены в bin\Debug и bin\Release в вашем каталоге проекта. Обычно вы можете перераспределять только один файл ...-AddIn-packed.xll (который вы также можете переименовать, если хотите).

Я предлагаю вам создать новый проект «Библиотека классов» (а не надстройку Office или что-то в этом роде) и снова установить пакет ExcelDna.AddIn. Затем следуйте инструкциям в файле ReadMe, который появляется, чтобы создать простую надстройку с помощью одной функции UDF, и убедитесь, что это выполняется, и можно отлаживать и развертывать правильно.

После того, как вы едите, что прекрасно работает, вы можете включить доступ к объектной модели COM в вашу надстройку, выполнив следующие два шага:

  • Добавить ссылку на сборки Excel Interop (Microsoft.Office.Interop.Excel и Office) , либо напрямую через «Добавить ссылку», либо путем установки сборки ExcelDna.Interop из NuGet.

  • Получить у основания Application корневой объект по телефону ExcelDnaUtil.Application. Возвращаемый объект может быть приведен к Microsoft.Office.Interop.Excel.Application и используется, чтобы добраться до всей COM объектной модели оттуда, и подключить обработчик событий и т.д.