繁体   English   中英

复制工作表Excel VSTO C#

[英]Copy Worksheet 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;
        }

我根据模板路径在后台打开了excel的第二个实例。 我找到工作表w。 一切正常,但是,我尝试将工作表复制到活动工作簿中却无法正常工作。 当前的错误是找不到Copy方法,但是当我删除参数时,它执行得很好。 因此,我认为我的问题出在Globals.ThisAddIn.Appllication.Workbooks [1]中。 计算该参数确实会返回在AddIn中处于活动状态的当前工作簿。

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

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

w实例将登录到新创建的Excel实例,但该参数来自外接程序实例。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM