Доступ к листу Excel в файле класса C # с помощью VSTO - PullRequest
4 голосов
/ 17 августа 2011

Я создал надстройку Excel, используя шаблон VSTO (VS2010, Excel2007).В обозревателе решений у меня есть группа с именем Excel, а под ней - файл с именем ExcelAddIn.cs.Это имеет доступ к активному рабочему листу через код, такой как

public partial class MyAddIn
{
    Excel.Worksheet activeWorksheet = (Excel.Worksheet)Application.Activesheet;
    Excel.Range firstRow = activeWorksheet.get_Range("A1",missing);
}

и т. Д.Этот код работает нормально, т.е.Я могу получить модель Excel.

Вместо того, чтобы поместить весь мой код обработки в этот один файл класса, я бы хотел поработать с данными рабочей таблицы Excel в другом файле класса.Я создал этот файл, но не могу использовать в нем код, подобный приведенному выше, т.е.Я не могу получить доступ к модели Excel из этого файла.Я продублировал ссылки «с помощью Microsoft.Office.Tools.Excel», но вставив строку вроде:

Excel.Worksheet activeWorksheet = (Excel.Worksheet)Application.Activesheet;

, я получаю «Имя« Приложение »не существует в текущем контексте»ошибка.

Любые идеи о том, какие ссылки / изменения мне нужно сделать, чтобы получить в модели Excel из этого отдельного файла класса?

Кстати.Работающий файл ссылается на объект «Excel.Application» для этой первой строки кода, второй неработающий файл ссылается на объект «Microsoft.Office.Interop.Excel».

Спасибо, Пит

==== НАЙТИ ОТВЕТ ==== Чтобы получить доступ к своим рабочим листам из других классов, которые вы добавляете, просто введите

Globals.ThisAddIn.Application.ActiveSheet;

, например:

Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddin.Application.ActiveSheet;

где 'ThisAddIn' - это имя класса, созданного вашим мастером (возможно, вы его переименовали).

Итак, используйте Globals для доступа к объектам Excel вне кода ThisAddin.

Ответы [ 2 ]

6 голосов
/ 30 июля 2012

Ваш собственный ответ здесь:

Чтобы получить доступ к своим рабочим листам из других добавленных вами классов, просто введите

Globals.ThisAddIn.Application.ActiveSheet;

, например:

Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddin.Application.ActiveSheet;

где 'ThisAddIn' - это имя класса, созданного вашим мастером (возможно, вы его переименовали).

Итак, используйте Globals для доступа к объектам Excel вне кода ThisAddin.

0 голосов
/ 17 августа 2011

Это может быть из-за того, что приложение существует только при запуске исполняемого файла Excel? Имейте в виду, что надстройки специально разработаны для этого и могут иметь «особый соус» на заднем плане, который позволяет им взаимодействовать с классами Office.

Я не думаю, что вы сможете вызывать Application.Activesheet из другого класса, поскольку тот класс, из которого вы вызываете, совершенно не знает о существовании приложения.

Я понимаю, что, возможно, я немного болтаю, надеюсь, кое-что из этого имело смысл:)

Короче говоря, нет, я не верю, что вы можете вызывать Application.Activesheet таким образом, если только возможно вы не передали объект 'Application' через конструктор в вашем экземпляре класса.

т.

MyClass c = new MyClass(this.Application);

...

public class MyClass
{
    public MyClass(Application app)
    {
        // And from here manipulate the Application object (just be sure you've added the reference to the namespace that the Application object uses)
    }

}

Я не уверен, что это сработает, хотя моя виртуальная машина не загружается:)

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...