我有一个操纵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文件加载到其中。
答案 0 :(得分:3)
您可以从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#-Program中读取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文件是只读的,因为它可能仍然是打开的,我还没有测试过,
但这将是最佳选择。
答案 1 :(得分:0)
我要在这里发布我的完整解决方案,因为我认为它可能对人们有用。
您将使用此代码在user1567896
建议的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");
}
注意:我已经打开几个窗口测试了这个,GetActiveObject("Excel.Application")
总是返回通过Excel调用WinForm的那个。
希望这会有所帮助。