c# - 复制工作表 Excel VSTO C#

标签 c# excel vsto

我正在尝试将现有 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 实例中打开它。

关于c# - 复制工作表 Excel VSTO C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30475709/

相关文章:

excel - 使用VBA对Excel表格进行排序时如何引用列中的当前周单元格?

excel - Excel错误处理-查找和返回员工ID

vba - 将值分配给用户定义的数据类型

vsto安装程序-静默模式问题

visual-studio - 在运行时更改 XML 功能区中的按钮和标签

c# - 带有 native 代码 DLL 的 Excel 2016 VSTO 插件

c# - Property Getter中的缓存密集型计算

c# - 我如何从 Orchard 数据库中删除模块的数据?

c# - 使用 HttpPost 方法提交表单后 ASP.NET Core 重定向到同一页面

c# - 如何创建应用程序的 WPF 交互式导览