select工作簿Excel已经用button单击方法打开

我有一个问题,我想用button单击方法插入数据,但此方法是在function区菜单(VSTO)中创build的。

为了更好地理解这一点,我想对一个数据库进行查询,把它发送给一个人员列表,然后在Excel上打印出我想要看到的人。 例如,我只想看名字和生日,或名字,身份证和职业。

为此,我需要select运行应用程序时打开的工作簿。 所以我试试这个:

private void button1_Click(object sender, RibbonControlEventArgs e) { Excel.Workbook wb = (Excel.Workbook)Globals.ThisWorkbook.InnerObject; Excel.Worksheet ws = wb.Sheets["Sheet1"]; ws.Cells[1, 2] = "teste"; } 
  • 使用Excel = Microsoft.Office.Tools.Excel;
  • 使用ExcelTools = Microsoft.Office.Tools;
  • 使用Microsoft.Office.Interop.Excel;

但是我得到这个错误: **"Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Tools.Excel.Workbook'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{B74CBB86-9C9F-4172-9AE7-3CE4A7BFA5EB}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))."**

也许比我所看到的更容易,但是我太累了,我需要完成这个…

男人试试这个:

 using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Tools.Excel; using Office = Microsoft.Office.Core; using Microsoft.VisualStudio.Tools.Applications.Runtime; Excel.Worksheet wsheet = (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet; 

以下应该工作(删除.InnerObject)

 private void button1_Click(object sender, RibbonControlEventArgs e) { Excel.Workbook wb = (Excel.Workbook)Globals.ThisWorkbook; Excel.Worksheet ws = wb.Sheets["Sheet1"]; ws.Cells[1, 2] = "teste"; } 

InnerObject属性返回对基础(读取COM)工作簿的引用。 返回types是Microsoft.Office.Interop.Excel.Workbook(而不是Microsoft.Office.Tools.Excel.Workbook这是工作簿的.Net包装版本)

这同样适用于床单:
如果您访问本地Com工作簿的Sheets集合,它将返回一个Microsoft.Office.Interop.Excel.WorkSheet并访问Excel.Workbook将返回一个Excel.WorkSheet

有关vsto包装对象的更多信息,请参见: this