复制工作表Excel VSTO c#

本文关键字:VSTO Excel 工作 复制 | 更新日期: 2023-09-27 17:50:58

我正试图将工作表从现有的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;
        }

我在后台基于模板路径打开excel的第二个实例。我找到了工作表w。这一切都很好,但是,当我试图将工作表复制到活动工作簿时,我无法使其工作。当前的错误是无法找到Copy方法,但是当我删除参数时,它执行得很好。所以我认为我的问题是在globals . thisaddin . application . workbooks[1]。对该参数求值会返回在AddIn中活动的当前工作簿。

复制工作表Excel VSTO c#

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

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

w实例属于新创建的Excel实例,但参数来自外接程序实例。

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