通过Excel打开WinForm
我有一个操作Excel文件的WinForm。 现在它是一个.exe
,它有一个硬编码的文件加载或创build方法(仅用于testing)。 我需要能够通过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; }
总结我需要build立的工作stream程是:打开一些Excel文件 – >调用WinForm(通过加载项或其他东西?) – >加载调用WinForm的Excel文件。
您可以从Excel文件启动C#-Exe,并通过VBA传递excel文件的文件名,如下所示:
Sub StartCSharpExe() Shell "<full path to your exe-file> " + ActiveWorkbook.FullName, 1 Application.Quit //optional to close Excel End Sub
然后你可以读取你的C#程序中的excel文件的文件名作为命令参数,如下所示:
private void GetCommands() { String[] arrCommands = Environment.GetCommandLineArgs(); foreach (String command in arrCommands) { MessageBox.Show(command); // just for debugging purpose / if you'd like to see all parameters // get the excel-file-name and open it... } }
也许excel文件是只读的,因为它可能仍然是开放的,我没有testing它,
但这将是一条路。
我将在这里发布我的完整解决scheme,因为我认为这可能对人们有用。
您将使用以下代码作为user1567896
build议调用Excel中的表单:
Sub StartCSharpExe() Shell "<full path to your exe-file> " + ActiveWorkbook.FullName, 1 Application.Quit //optional to close Excel End Sub
然后,将Excel文件保存为Excel加载项文件(.xla)。
之后(在Excel中),进入Developer Tab->Add-ins->[browse to your .xla file]->OK
然后,您可以通过以下方式将该加载项添加到Quick Access Toolbar
:
File->Options->Quick Access Toolbar->[Choose commands from:]Macros->YourAddin.xla
c#方法应该看起来像这样,并在表单初始化中调用:
using Excel = Microsoft.Office.Interop.Excel; public static void LoadExcelFile() { Excel.Application EXCEL_FILE = new Excel.Application(); EXCEL_FILE = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); }
注:我已经testing了几个窗口打开, GetActiveObject("Excel.Application")
总是返回通过Excel调用WinForm的那个。
希望这可以帮助。
- 在MSI安装程序中selectEveryone / Just Me选项有一些怪癖
- 使用C#/ .Net的Excel XLSTART问题
- 如何将图表从Excel导出为graphics
- 为Excel 2010构build的Excel加载项可以在Excel 2013中工作吗?
- Excel从两个不同的AppDomain调用.NET自动化服务器?
- 解决“Microsoft.ACE.OLEDB.12.0”提供程序问题,而不安装“Microsoft Access数据库引擎”
- 在Excel文件启动上折叠Excel透视表上的所有钻取
- 更新Excel工作表:无法更新“(expression式)”; 字段不可更新
- 读取Excel:列名称被截断为前64个字符