我有一个旧的 Excel 插件(用 VBA 编写),现在我使用 .NET、ExcelDNA、NetOffice 重新编写了旧的插件。在旧插件中,有一个 UDF,比如说,OldUDF,在新插件中,有一个 NewUDF,两个 UDF 做同样的事情并接受相同的参数。但它们有不同的函数名称。由于遗留原因,一些客户端有旧插件,一些客户端有新插件。有些客户两者都有。当他们安装了两个 Excel 插件时,我想提供一个复选框,在新插件中将 oldUDF 转发到 newUDF。选中该复选框时,oldUDF 将作为 newUDF 转发。不勾选复选框时,oldUDF 不会被转发。我在新插件中定义了 oldUDF 和 newUDF,但不知道在未选中复选框时如何删除 oldUDF 的定义。谢谢
编辑:
这是我尝试过的,但它不起作用。
#if FORWARD
public static object OldUDF([ExcelArgument(AllowReference = true, Name = "Symbol",
Description = "is a futures symbol as defined in *** Database.")]string symbol,
[ExcelArgument(AllowReference = true, Name = "Column",
Description = "is a column associated with a symbol")]string column,
[ExcelArgument(AllowReference = true, Name="Date",
Description = "is the date for which you want the value")]object onDate,
object fillOpt, object frequency)
{
return NewUDF(symbol, column, onDate, fillOpt, frequency);
}
#endif
在 AutoOpen() 中,我将从文件中读取转发值(真或假),如果转发为真,
var forward = Helper.ReadForwardOldUDFSettingFromAFile();
if(forward)
{
#define FORWARD
}
但我得到一个编译错误
再次编辑:我成功注册我将OldUDF的声明放在一个单独的dll中,比如oldUDF.dll创建另一个oldUDF.xll,oldUDF.dna。
在 AutoOpen 中,我将检查转发值(来自文件)是否为真,我将执行 Excel.Application.RegisterXLL("olderUDF.xll"); 这工作正常。
但是,如果前向值为 false,我找不到在 C# 中取消注册或删除 XLL 的方法吗?
编辑:我找到了http://msdn.microsoft.com/en-us/library/office/bb687866.aspx,但不知道如何在 C# 中使用它
谢谢