【发布时间】:2014-03-29 04:29:02
【问题描述】:
我有一个处理 Excel 文件的 WinForm。现在它是一个.exe,它具有硬编码的文件加载或创建方法(仅用于测试)。我需要能够通过 Excel 文件打开.exe,然后将该文件(可能作为某个事件的发送者?)添加到表单中进行操作。
下面是我现在如何将 Excel 文件加载到表单中的示例。
public Excel.Application EXCEL_FILE;
public frmMain()
{
InitializeComponent();
this.EXCEL_FILE = new Excel.Application();
this.EXCEL_FILE.SheetSelectionChange += new Excel.AppEvents_SheetSelectionChangeEventHandler(activeCellChanged);
ExcelHandling.LoadExcelFile();
}
public static void LoadExcelFile()
{
frmMain._frmMain.EXCEL_FILE.Workbooks.Open(@"F:\dsa.xlsx", 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
frmMain._frmMain.EXCEL_FILE.Visible = true;
}
总结一下我需要建立的工作流程是:打开一些 Excel 文件->调用 WinForm(通过插件或其他方式?)->将调用 WinForm 的 Excel 文件加载到其中。
【问题讨论】:
-
对,那么到目前为止您尝试过什么?您可以使用
Shell命令从 VBA 打开 *.exe 文件。较难的部分是通过您打开的那个 .exe 来获取已处理文件的句柄,但如果使用 winAPI 轻松打开 Excel 文件,您可以获取句柄 -
到目前为止,我偶然发现了这个命令
=EMBED("WinForms.Control.Host",""),我正在研究它作为一种方式,但我不确定它是否会有所帮助,这就是为什么我问是否有人知道一种做我所要求的方法。 -
@mehow 我的第一个想法是制作一个对话框将文件加载到表单中,但问题是客户希望能够通过 excel 文件调用表单,因为它以前是使用 VBA 编写的加载项/用户表单,他们希望保留以前的工作流程。
-
对,那么它一定是exe吗?那么为什么不将它用作用户表单呢?如果它只是一个 Excel 的用户表单,那么它将消除调用外部 exe 的复杂性,只是为了完成一个非常简单的任务
-
当时的想法是用户表单功能需要增长,而 VBA 代码变得非常难以维护和扩展,因此我将用户表单重写为更可扩展的 winform。我可以将 WinForm 用作用户表单吗?
标签: c# .net winforms excel vba