如何从Windows窗体项目中显示/打开/启动Excel工作簿项目(Sheet1)?

时间:2013-01-10 12:06:39

标签: c# excel project

如标题所示,假设我在一个解决方案中有两个项目。我有三个,最后一个只是一个例子。一个项目是ExcelWorkbook,名为EWB

enter image description here

另一个名为WindowsForm,名为Core。我想从EWB显示/打开/启动此Core。我添加了对第一个的引用:

enter image description here

我可以看到该特定工作簿的表格。当你从另一个项目展示形式时,它就不那么容易了。仅供注意,EWB.Sheet1不包含带0个参数的构造函数,其构造函数有两个参数,......

以下是这些论点:

  • Microsoft.Office.Tools.Excel.Factory factory
  • IServiceProvider serviceProvider

对于这个项目,它说如下:

enter image description here

我想在按钮点击事件上打开该工作簿,但我不知道如何:

  • 开始吧
  • 显示
  • 打开它
  • 或......

知道如何做到这一点?任何帮助将不胜感激!

这是我如何从另一个项目打开表单,这是我想打开的方式 EWB

using WindowsFormsApplication1;

private void CoreBtn_Click(object sender, EventArgs e)
        {
            Form1 newForm = new Form1();
            newForm.Show();
        }

4 个答案:

答案 0 :(得分:3)

添加对Microsoft.Office.Interop.Excelusing Excel = Microsoft.Office.Interop.Excel;

的引用

以下是一些简单的代码,可以帮助您入门:

Excel.Application xlApp = new Excel.Application();  // create new Excel application
xlApp.Visible = true;                               // application becomes visible
xlApp.Workbooks.Open(@"C:\workbook.xlsx");          // open the workbook from file path

xlApp.Quit();                                       // close the application when you are done

有关更多信息, Excel对象模型看起来here

答案 1 :(得分:1)

Excel项目与他们的VBA对应物非常相似:如果您的项目涉及只能在打开特定工作簿时访问的功能,那么您在VBA编辑器中将该VBA代码写在特定工作簿的“后面” - VSTO是一个“工作簿”项目,在Excel 2007+中它是一个支持宏的工作簿(.xlsm),在早期版本中它是一个运行代码(宏)的工作簿。

但是,如果您的项目涉及在应用程序(Excel)级别“运行”并且无论是否打开工作簿都可用的功能 - 更不用说是否打开了特定的工作簿,那么您正在编写Excel添加 - 在。 Excel启动时加载加载项并“监听”任何感觉,让您在打开的工作簿具有此类或此类文件名前缀时启用特定功能,或者当激活的工作表具有某些特定标签/名称时,显示表单(WinForms)或窗口(WPF),获取,插入,更新和删除数据库记录,与Web服务通信等等。

要从正在运行的加载项打开工作簿,将使用Excel对象模型(Application.Workbooks.Open())打开该文件,并且该问题的工作簿不需要包含在解决方案中。只有 工作簿需要运行宏时才需要工作簿项目(在这种情况下,您还有VBA选项),或者如果为了完整性,则将其包含为“模板”,版本化目的。

要解决这个问题,为了使用来自任何其他WinForms应用程序的特定工作簿启动Excel,只使用无参数构造函数和Show()方法,您必须自己包装一些具有无参数构造函数的启动程序公开Show()方法(然后http://office.microsoft.com/en-us/excel-help/command-line-switches-for-excel-HA010158030.aspx命令行Excel文档可能很方便 - 或引用Excel对象模型,如Porkbutts的回答所示)。可能还有其他方法,但我认为命令行启动是最简单的,如果通过VSTO不是您的独立WinForms应用程序中的选项。

答案 2 :(得分:0)

如何在ExcelWorkbook项目中创建一些程序集进程,并在Windows窗体Core中检查进程是否处于活动状态。

您可以使用System.Diagnostics.Process

检测正在运行的进程的开始和停止

答案 3 :(得分:0)

首先这假设很多,因为我不知道你的项目范围,即代码(DLL,LIBS,EXE)

我假设ExcelWorkbook是一个Windows窗体项目。

构建ExcelWorkbook项目。您现在应该有一个Exectuable文件:ExcelWorkbook.exe。

在“核心”项目中右键单击“参考”并选择“添加”。

选择浏览按钮并找到ExcelWorkbook.exe的可执行文件,选择确定。

您现在应该看到对ExcelWorkbook项目的引用。

在您想要使用ExcelWorkbook项目的类/表格中,您将添加using语句

使用eBook = ExcelWorkbook //或您想要的任何可用名称

所以现在您可以引用ExcelWorkbook项目

public eBook.Form1 _excelWorkbookProject;


_excelWorkbookProject = new eBook.Form1()

如果它是一个表格然后显示它 _excelWorkbookProject.ShowDialog(); //如果您希望它保持在顶级窗口。

_excelWorkbookProject.Show();