2015-05-27 7 views
0

Я пытаюсь скопировать рабочий лист из существующего файла Excel в текущую книгу. У меня есть Excel надстройки со следующим кодом:Копия Worksheet Excel VSTO C#

 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.

ответ

1

Дело в том, что вы пытаетесь использовать объекты из разных процессов/потоков:

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

w экземпляр belog к примеру недавно созданного Excel, но параметр происходит от надстройки, например.

Если вам нужно скопировать рабочий лист, вам нужно открыть его в существующем экземпляре Excel.

+0

Имеет смысл на самом деле, если бы были более подробные исключения из VSTO :-) Я попробую сегодня вечером и дам вам знать. – Martin

+0

Это решило, что я теперь открываю файл в экземпляре надстройки и копирует его в порядке. – Martin

Смежные вопросы