Как создать новый лист
Я хотел бы подкласс NetOffice.ExcelApi.Worksheet
класс, потому что мне нужен "пользовательский" лист с дополнительными полями. Как часть конструкции экземпляра этого нового класса, я хотел бы просто вызвать конструктор базового класса. То есть в принципе мне нужен обычный Worksheet
но нужно установить несколько дополнительных полей и добавить пару дополнительных функций.
Как мне создать и новый Worksheet
? Пока что я использовал только Add
метод из Sheets
класс, который автоматически делает это для вас, а затем добавляет его на листы. Насколько я могу судить, конструктор Worksheet
класс должен получить родительский объект (что не является проблемой) и переданный COM-прокси. Как мне это сделать?
2 ответа
Прежде всего: я пытаюсь ответить на codeplex в течение нескольких дней, но я получил уведомление о деградации системы. (Codeplex в настоящее время не работает на диктатуре. Полное обсуждение: http://netoffice.codeplex.com/discussions/587938)
Не уверен, что я вас правильно понял, или, может быть, вы не поняли, как работает COM. Каждый раз, когда вы звоните Application.ActiveSheet, вы получаете новый!!! экземпляр (прокси из приложения) Конечно, это тот же экземпляр на COM-сервере (если текущий лист не изменился), но вы получаете новый экземпляр / прокси каждый раз, когда вы запрашиваете. (Вам не нужно явно располагать каждый экземпляр / прокси-сервер в NetOffice, более того, вы можете легко сравнить локальные экземпляры прокси с "==" или "!=", Но это всего лишь магия NetOffice)
Вы должны пересчитывать экземпляр Worksheet каждый раз, когда запрашиваете или используете стратегию кэширования.
Что я могу сделать для вас, так это провести мероприятие в NetOffice Factory Core. Что-то вроде этого:
//Event Trigger Example
private NetOfficeCore_OnCreateInstance(object newInstance, ref Type replaceTo)
{
Worksheet sheet = newInstance as WorkSheet;
if(null != sheet && sheet.Name = "MySheet")
{
replaceTo = typeof(MyCustomWorkSheet);
}
}
В этом примере все листы с именем "MySheet" должны автоматически заменяться вашим пользовательским типом. (Вы все еще должны конвертировать Application.ActiveSheet в ваш пользовательский тип курса)
Дайте мне знать, что вы думаете * чтобы я мог создать это событие сегодня и создать новый релиз.
* Себастьян (отказ от ответственности: автор из NetOffice)