通过自动化打开Excel时,Excel UDF不可用

在使用自动化启动Excel时,我遇到了在Excel中使用Excel UDF类的问题。 当我从第三方应用程序启动Excel时,我正在写一个插件,需要这个插件。

这是我的理解,这是通过devise,但我需要有一种方法来使我的UDF可供用户通过自动化打开Excel时。

我为Excel 2007创build了一个VSTO插件和UDF类。我复制了代码,并按照所写的内容按照来自此网页的说明进行操作,除非我按照指示更换了GUID。 http://csharpramblings.blogspot.ca/2011/09/communicating-between-vsto-and-udfs-in.html

当我打开Excel时,我看到了我的新加载项,UDF显示在函数列表(插入函数)中。 所以我知道这是工作。

然后我创build了一个使用Excel自动化来打开Excel的应用程序。
这是一个Windows窗体应用程序,我把一个button放在Form1上。 我添加了一个对Microsoft.Office.Interop.Excel(版本1.6.0.0)的引用,它解决了(在我的机器上)到C:\ Windows \ assembly \ GAC \ Microsoft.Office.Interop.Excel \ 12.0.0.0__71e9bce111e9429c \ Microsoft。 Office.Interop.Excel.dll

我从http://support.microsoft.com/kb/302084获得了下面的代码,虽然我删除了一些将数据放入工作表单元格的代码,因为我不需要它 – 我只想要一个打开Excel的例子使用自动化。

我的示例程序的Form1的C#代码:

using System; using System.Reflection; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; namespace ExcelAutomationTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, System.EventArgs e) { Excel.Application oXL; Excel._Workbook oWB; Excel._Worksheet oSheet; Excel.Range oRng; try { //Start Excel and get Application object. oXL = new Excel.Application(); oXL.Visible = true; //Get a new workbook. oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value)); oSheet = (Excel._Worksheet)oWB.ActiveSheet; //Add table headers going cell by cell. oSheet.Cells[1, 1] = "First Name"; oSheet.Cells[1, 2] = "Last Name"; oSheet.Cells[1, 3] = "Full Name"; oSheet.Cells[1, 4] = "Salary"; //Make sure Excel is visible and give the user control //of Microsoft Excel's lifetime. oXL.Visible = true; oXL.UserControl = true; } catch (Exception theException) { String errorMessage; errorMessage = "Error: "; errorMessage = String.Concat(errorMessage, theException.Message); errorMessage = String.Concat(errorMessage, " Line: "); errorMessage = String.Concat(errorMessage, theException.Source); MessageBox.Show(errorMessage, "Error"); } } } 

构build自动化Excel的Windows窗体应用程序。 运行应用程序。 它将启动Excel。 转到“公式”选项卡,然后单击“插入函数”。 查看“所有”function。 在我的机器上,MYINT不在列表中。

使用自动化打开Excel时是否可以使MYINTfunction可用? 有人build议我可以使用VSTO的ThisAddIn_Startup()中的Excel.Application对象来加载UDF,但是我找不到如何做这个的样本,帮助我的人也不知道。

我在MSDN的Excel和VSTO论坛上寻求帮助,无法清楚地了解下一步该做什么。 有一些类似的问题,但没有什么完全相同的,围绕StackOverflow。 有没有人有任何想法?

我在Techiella的博客上接受了这个build议,似乎解决了这个问题。

我的C#代码如下 – 我把它放在ThisAddIn_Startup:

 foreach (AddIn addin in ThisApplication.AddIns) { if (addin.Title == "MyUdf.Functions") { addin.Installed = false; addin.Installed = true; break; } } 

当从ac#代码打开Excel文件时,将不会加载所有其他加载项(这就是为什么在“公式”选项卡中未findUDF函数的原因),所以必须使代码调用加载项你需要: