我遇到问题,我希望使用按钮单击方法插入数据,但此方法是在功能区菜单(VSTO)中创建的。
为了更好地理解这一点,我想对数据库进行查询,将其发送给人员列表,并在excel上打印我想要从那些人那里看到的内容。例如,我只想看名字和生日,或姓名,身份和专业。
要执行此操作,我需要选择运行应用程序时打开的工作簿。所以我试试这个:
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";
}
但我收到此错误:
**"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))."**
可能比我看到的更容易,但我太累了,我需要完成这个......
答案 0 :(得分:4)
男人试试这个:
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;
答案 1 :(得分:3)
以下内容应该有效(删除.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 property返回对底层(读取COM)工作簿的引用。返回类型是Microsoft.Office.Interop.Excel.Workbook(而不是Microsoft.Office.Tools.Excel.Workbook,它是.Net包装的工作簿版本)
同样适用于床单:
如果您访问本机Com工作簿的Sheets集合,它将返回Microsoft.Office.Interop.Excel.WorkSheet并访问Excel.Workbook将返回Excel.WorkSheet
有关vsto包装对象的更多信息,请参阅:this