4

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

在此处输入图像描述

另一个WindowsForm称为 ( Core)。我想显示/打开/EWBCore. 我添加了对第一个的引用:

在此处输入图像描述

我可以看到该特定工作簿的表格。当您显示来自另一个项目的表单时,这并不容易。请注意,EWB.Sheet1不包含带0参数的构造函数,它的构造函数有两个参数,...

以下是这些论点:

  • Microsoft.Office.Tools.Excel.Factory工厂
  • IServiceProvider服务提供者

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

在此处输入图像描述

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

  • 启动它
  • 展示下
  • 打开它
  • 或者 ...

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

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

using WindowsFormsApplication1;

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

4 回答 4

3

Microsoft.Office.Interop.Excel添加对和的引用using 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 对象模型的更多信息,请查看此处

于 2013-01-17T21:51:50.183 回答
1

Excel 项目与其 VBA 对应项目非常相似:如果您的项目涉及仅在打开特定工作簿时才能访问的功能,则您正在 VBA 编辑器中编写该特定工作簿“后面”的 VBA 代码 - 在 VSTO 中“工作簿”项目,在 Excel 2007+ 中,它是启用宏的工作簿 (.xlsm),在早期版本中,它是运行代码(宏)的工作簿。

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

若要从正在运行的加载项打开工作簿,请使用 Excel 对象模型 ( Application.Workbooks.Open()) 打开文件,并且相关工作簿不需要包含在解决方案中。仅当工作簿需要运行宏(在这种情况下您还具有 VBA 选项)时,或者如果出于完整性考虑将其包含为“模板”以用于版本控制时,您才需要该工作簿项目。

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

于 2013-01-22T04:35:08.567 回答
0

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

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

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

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

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

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

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

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

所以现在您可以参考 ExcelWorkbook 项目

public eBook.Form1 _excelWorkbookProject;


_excelWorkbookProject = new eBook.Form1()

如果它是一个表单然后显示它 _excelWorkbookProject.ShowDialog();//如果你希望它保持顶层窗口。

或者

_excelWorkbookProject.Show();
于 2013-01-17T22:48:34.483 回答
0

如何在 ExcelWorkbook 项目中创建一些组装过程并在 windows 窗体 Core 中检查该过程是否处于活动状态。

您可以使用 System.Diagnostics.Process 检测正在运行的进程的启动和停止

于 2013-01-10T12:45:19.297 回答