Как предотвратить введение/удаление столбцов Excel в C#C#

Место общения программистов C#
Ответить
Anonymous
 Как предотвратить введение/удаление столбцов Excel в C#

Сообщение Anonymous »

Я управляю надстройкой Excel VSTO, который работает на определенных файлах и не поддерживает вставку /удаление столбцов. Безопасные данные в файле. Я не могу сделать < /li>
[*] Я попытался использовать Appevents и более конкретно Sheetchange, но не нашел способ отменить изменения. Я полагаю, что нет ничего, но дайте мне знать, если я ошибаюсь, < /li>
Я знаю, что пакет отмены где -то существует, но не смотрел, работает ли он с событиями, потому что:
  • Я бы предпочел избегать внешних пакетов < /li> В моей ситуации будет запустить цепь Sheetchange , что, очевидно, не работает без добавления дополнительной сложности
< /ul>
Есть ли способ предотвратить вставку /удаление столбцов в листах Excel, в частности, C#, не блокируя что -либо еще и, если возможно, простым образом?

спасибо . < /p>
edit - update < /strong>

Я до сих пор настраивал импровизированное решение, которым я поделюсь здесь: < /p >

Код: Выделить всё

AppEvents_SheetChangeEventHandler EventSheetChangeHwnd;

private void ThisAddin_Startup(object sender, EventArgs e)
{
Application.SheetChange -= EventSheetChangeHwnd;
EventSheetChangeHwnd = new AppEvents_SheetChangeEventHandler(SheetChange_Event);
Application.SheetChange += EventSheetChangeHwnd;
}

private void SheetChange_Event(Object Sh, Range Target)
{
if(!Target.Address.Equals(Target.EntireColumn.Address)) // Can use Target.Row != 1 too to check faster and remove unwanted occurences
return;

Application.EnableEvents = false; // Prevents event from re-firing after undo
Application.Undo();               // Native undo method
Application.EnableEvents = true;

}
< /code>
Теперь это не является правильным решением, потому что: < /p>
[list]
[*] Событие запускает каждый раз, когда значение изменяется в Лист, если вы пишете ячейку данных по ячейке, она будет стрелять каждый раз и может добраться до точки, когда вы видите падение скорости обработки < /li>
 Он будет стрелять, если целый лист или В целом столбец вставлен вставлен - в основном он не проверяется специально для вставки/удаления столбцов
[*] Необходимость использования Application.enableEvents 
может иметь побочные эффекты и на самом деле требуется больше кода для обработки Правильно
[/list]

Подробнее здесь: https://stackoverflow.com/questions/794 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»