Excel-днк получить глобальные свойства

Я использую Excel-ДНК в качестве базовой функции, затем я вызываю функцию "vsto" из надстройки, чтобы вызвать запрос веб-службы на выбранную функцию. Моя проблема в том, что я хотел бы использовать функцию ДНК для анализа диапазонов, которые будут отправлены в сервис. В настоящее время он возвращает строку ("ожидание вызова службы..."), и, если методы VSTO вызывают функцию, он передает другую переменную для возврата чего-то еще.

Я не могу извлечь что-то кроме строки, объект возвращается пустым, когда я использую "оценивать" в VSTO.

Я думаю, что лучшим способом было бы получить глобальную переменную кэша, хранящуюся в надстройке vsto из функции excel-dna. Я не мог суметь к этому.

Кнопка надстроек push => addins оценивает Excel DNA => Хранить данные ДНК в VSTO Переменная Addin => VSTO вызывает сервис и вставляет возвращаемые данные.

Спасибо,

2 ответа

Решение

Хорошо, я узнал о: блог MSN

namespace AddIn{

    [ComVisible(true)]
    [Guid("****************************")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IAddinUtilities
    { void youraddinfunction();
    }

  [ClassInterface(ClassInterfaceType.None)]
    public partial class ThisAddIn : IAddinUtilities
    {
        protected override object RequestComAddInAutomationService()
        { return this; }

        public void yourfunction (){ DoSomething }   
}

В функции Excel днк:

var application = (Application)XL.ExcelDnaUtil.Application;

            var addin = application.COMAddIns.Item(AddinName);
            var what = addin.Object;
            what.youraddinfunction;

Подход Yoyo, строго говоря, правильный, но для подхода, который является более переносимым, я предлагаю объединить ExcelDNA с NetOffice. Вот фрагмент, чтобы вы начали. Обратите внимание, что вам необходимо очистить ссылки вашего приложения на COM-прокси-объекты в методе OnDisconnection. Для получения более подробной информации, ознакомьтесь с учебником по надстройке Excel надстройки

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
[ProgId("Sample.MyAddIn")]
public class MyRibbon : ExcelRibbon
{

   public override void OnConnection(object comApp, ext_ConnectMode ConnectMode, object objAddin, ref Array custom)
   {
     // glue NetOffice + Excel DNA
     m_ExcelApplication = new Application(null, m_ComApplication);
     // other initialization... 
   }
}
Другие вопросы по тегам