Итак, я работаю над Excel AddIn (обычный проект VSTO), который использует RibbonBar и некоторые внешние DLL.
Поскольку требуется импортировать некоторые пользовательские функции (UDF) в Excel, я прочитал, что вы можете сделать это только путем регистрации его с помощью COM, я сделал это с помощью интерфейса для функций и т. Д.
Я сделал регистрацию, как было показано на https://theofficecontext.com/2013/06/08/update-creating-excel-udfs-in-c/
Регистрация работала нормально, и мои импортированные функции можно вызывать внутри Excel.
Я использую некоторые диалоги, чтобы позволить пользователю устанавливать некоторые переменные, которые используются для UDF, и я обнаружил, что эти две вещи управляются в отдельных объектах AddIn.
И в этом проблема. Поскольку это два разных объекта, UDF не может получить доступ ко всем материалам, которые я ввел в диалогах.
OnConnection () вызывается из Excel, когда пользовательские функции загружаются при взаимодействии с рабочим листом.
namespace myExcelAddin
{
public partial class ThisAddIn
{
public static int iUser = 0;
// .. some other static variables
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
// some startup work
}
}
}
namespace myExcelAddin
{
[ComVisible(true)]
public interface IFunctions
{
// ... some functions
}
[ComVisible(true)]
[GuidAttribute("1D3001F4-5307-49A6-98F2-B3B76B3D0AA3"),
ProgId("myExcelAddin.Functions"),
ClassInterface(ClassInterfaceType.None),
ComDefaultInterface(typeof(IFunctions))]
public partial class Connect : Object, Extensibility.IDTExtensibility2, IFunctions
{
// ... implementation of interface functions
}
public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
// get a reference to the instance of the add-in
Application = application as Excel.Application;
thisAddIn = addInInst;
}
[ComRegisterFunctionAttribute]
public static void RegisterFunction(Type type)
{
//... registration work
}
[ComUnregisterFunctionAttribute]
public static void UnregisterFunction(Type type)
{
// ... unregistration work
}
}
Так есть ли возможность получить материал, введенный пользователем?
Потому что глобалы для обоих тоже обрабатываются по-разному ...