当我使用自动化启动 Excel 时,我无法让 Excel UDF 类在 Excel 中可用。我正在编写一个加载项,当从第三方应用程序启动 Excel 时该加载项需要工作。
我的理解是这是设计使然,但是当通过自动化打开 Excel 时,我需要有一种方法让用户可以使用我的 UDF。
我为 Excel 2007 创建了一个 VSTO 插件和 UDF 类。我复制了代码并完全按照该网页上的说明进行操作,只是按照说明替换了 GUID。 http://csharpramblings.blogspot.ca/2011/09/communicating-between-vsto-and-udfs-in.html
当我打开 Excel 时,我看到了我的新加载项,并且 UDF 在函数列表(插入函数)中显示为可用。所以我知道它正在工作。
然后,我创建了一个使用 Excel 自动化打开 Excel 的应用程序。
这是一个 Windows 窗体应用程序,我在 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");
}
}
}
构建自动化 Excel 的 Windows 窗体应用程序。运行应用程序。它将启动 Excel。转到“公式”选项卡,然后单击“插入函数”。查看“所有”功能。在我的机器上,MYINT 不在列表中。
是否可以在使用自动化打开 Excel 时使 MYINT 功能可用?有人建议我可以使用 VSTO ThisAddIn_Startup() 中的 Excel.Application 对象来加载 UDF,但我找不到如何执行此操作的示例,帮助我的人也不知道。
我在 MSDN Excel 和 VSTO 论坛上寻求帮助,但无法清楚地了解下一步该做什么。StackOverflow 周围有一些类似的问题,但没有完全相同的问题。有没有人有任何想法?