2009-10-20 2 views
3

В настоящее время у меня есть C# Workbook-level Office 2007 Addin, который добавлен во время разработки, где я добавил методы и свойства к производному классу Worksheet.VSTO Программно добавление нового рабочего листа на основе существующего

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

Если это может быть достигнуто, пожалуйста, сообщите кому-нибудь, как это может быть достигнуто? C# демонстрационный код будет предпочтительно, хотя любой код .NET будет приемлемым.

Благодарю вас за ваше время.

ответ

1

Теперь я пришел к выводу, что фактически невозможно дублировать эти классы в их существующем состоянии, поскольку я искал.

В соответствии с Host Items and Host Controls Overview: в добавлении уровня документа элементы хоста не могут быть созданы программно, но только во время разработки. Это усиливается в следующих explanation of the programmatic limitations элементах хоста и элементах управления хостом, особенно для надстроек уровня документа.

+0

Согласен, я не думаю, что вы можете делать то, что задал ОП - дублировать существующий рабочий лист и продлить его во время выполнения. Но вы можете, согласно http://tinyurl.com/bqej98z, создать новые листы и получить созданные элементы хоста. – gap

2

Хорошо, хороший вопрос, и я буду следить за тем, что здесь происходит.

Несколько месяцев назад у меня была аналогичная проблема, и мне нужно было создать код и события на динамически созданных листах. Однако, чтобы это сделать, я создал объекты сценария VBA в листе.

Так что процесс был:

  1. пользователя нажатия кнопок в Excel
  2. процесс
  3. C# создает новый лист
  4. процесс C# создает объект VBA на листе и создает события и т.д.

    oBook = objExcel.ActiveWorkbook; 

    oModule = oBook.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule); 

    string sCode = "sub myVBASub()\r\n"+ 
      "msgbox("Hello")\r\n"+ 
      "End Sub\r\n"; 

    oModule.CodeModule.AddFromString(sCode); 

+0

Старый Nick: Спасибо, что поделился этим, я не думал о том, чтобы сделать это таким образом, я думаю, единственная проблема в том, что вы не можете назвать эти события из своей надстройки C#, не так ли? – jamiei

+0

Возможно .... Хотя единственное взаимодействие, которое я сделал, - это меню, добавленное в excel 2003, однако это (http://tinyurl.com/yfs665r) подразумевает, что вы можете подключиться к некоторым элементам управления, поскольку VSTO работает в то же пространство имен. –

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