复制工作表Excel VSTO C#

我试图将工作表从现有的Excel文件复制到我目前的工作簿。 我有一个Excel加载项与下面的代码:

string wsName = "template." + ((System.Windows.Forms.Button)sender).Tag + "." + ((System.Windows.Forms.Button)sender).Text; Microsoft.Office.Interop.Excel.Application x = new Microsoft.Office.Interop.Excel.Application(); x.Visible = false; x.ScreenUpdating = false; x.Workbooks.Open(Properties.Settings.Default.TemplatePath); try { foreach (Worksheet w in x.Worksheets) if (w.Name == wsName) w.Copy(Type.Missing, Globals.ThisAddIn.Application.Workbooks[1].Worksheets[1]); } catch { } finally { x.DisplayAlerts = false; x.Workbooks.Close(); x.DisplayAlerts = true; // close application with disabled alerts x.Quit(); x.Visible = true; x.ScreenUpdating = true; x = null; } 

我基于模板path在后台打开了第二个excel实例。 我find了工作表w。 这一切工作正常,但是,我试图将工作表复制到活动工作簿,我无法使其工作。 目前的错误是方法复制无法find,但是当我删除参数它执行正常。 所以我假设我的问题是在Globals.ThisAddIn.Appllication.Workbooks [1]。 评估该参数确实会返回当前在AddIn中处于活动状态的工作簿。

事实是,您正在尝试使用来自不同进程/线程的对象:

  w.Copy(Type.Missing, Globals.ThisAddIn.Application.Workbooks[1].Worksheets[1]); 

w实例logging到新创build的Excel实例,但该参数来自加载项实例。

如果您需要复制工作表,则需要在现有的Excel实例中打开它。