我有一个2010 Excel功能区加载项。当您按下按钮时,它只会将一些数据行写入excel应用程序。为了编写这些数据,我需要获取活动工作表。为了获得活动工作表,我需要activeWorkBook。我可以使用
获得xlAppxlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
它检索xlApp很好但每当我尝试获取活动工作簿时它返回null。无论。除非我重新启动计算机。然后它工作,但只是第一次。下面是上下文中的整个代码块。我想知道如何修复xlApp.ActiveWorkBook为空。这样我就可以得到活动的工作表。然后将数据写入活动工作表。
public void sendData()
{
Excel.Application xlApp = null;
Excel.Workbook xlWorkBook = null;
Excel.Workbooks xlWorkBooks = null;
Excel.Worksheet xlWorkSheet = null;
object misValue = System.Reflection.Missing.Value;
try
{
xlApp = new Excel.Application();
//xlWorkBooks = xlApp.Workbooks;
//xlWorkBook = xlWorkBooks.Add(Properties.Settings.Default.FileToSend);
//xlWorkSheet = xlWorkBook.Sheets[1];
xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
xlWorkBook = (Excel.Workbook)xlApp.ActiveWorkbook;
xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
}
catch (Exception ex)
{
// handle error...
}
finally
{
if (xlWorkSheet != null)
Marshal.ReleaseComObject(xlWorkSheet);
if (xlWorkBook != null)
Marshal.ReleaseComObject(xlWorkBook);
if (xlWorkBooks != null)
Marshal.ReleaseComObject(xlWorkBooks);
if (xlApp != null)
Marshal.ReleaseComObject(xlApp);
}
提前致谢!
答案 0 :(得分:1)
您可能通过拨打GetActiveObject
来获取错误的Excel实例。使用传递到COM加载项OnConnection
的应用程序引用(或者您的功能区代码是自举的)。
如果您正在使用Excel-DNA框架制作托管Excel加载项,那么您可以通过调用ExcelDnaUtil.Application
来获取正确的Application对象。