2015-10-08 5 views
2

Рассмотрим пример этой таблицы, но мне нужно общее решение для работы в качестве надстройки VSTO Excel.Сообщите, когда формула обновляет ячейку Excel

  • A1: содержит номер .
  • B1: содержит функцию =(A1*3), которая отображает .

При внесении изменений в А1, я хочу, чтобы получить уведомление об этом и обновлении получающейся формулы в B1.

Использование VSTO, я могу разорвать событие Application.SheetChange, которое предоставляет диапазон, представляющий A1, но я не получаю уведомление о том, что отображаемое значение B1 также изменилось. Я обнаружил событие Application.SheetCalculate, но у него нет полезных аргументов.

Application.SheetChange += (sheet, range) => Debug.WriteLine($"Column: {range.Column}, Row: {range.Row}"); 
Application.SheetCalculate += sh => 
{ 
    var sheet = sh as Excel.Worksheet; 
    Debug.WriteLine($"Sheet: {sheet.Name}"); // need a Range 
}; 

В абстрактной реализации, возможно, чтобы получить уведомление, когда ячейка, содержащая функцию (B1 выше) обновляет представленное значение?

+2

Чтобы обнаружить изменения, вам необходимо сохранить значения интересующей ячейки (я) и проверить наличие обновлений при возникновении события «SheetCalculate». –

+0

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

+0

Вы хотите получить уведомление, если пересчет не изменит результат? –

ответ

0

В дополнение к комментариям к OP нечего добавить. Спасибо, Тим Уильямс и Блэкхок.

Таким образом, можно создать ориентированный граф при загрузке электронной таблицы, а затем использовать график в событии SheetCalculate, чтобы определить, какие ячейки затронуты в книге. Главный недостаток заключается в том, что решение недостаточно хорошо масштабируется для больших электронных таблиц, так как построение графика является операцией O (n^3).

[EDIT] Оказалось, что цели бизнеса, которые мы пытаемся достичь, уже выполнены. https://support.office.com/en-us/article/What-you-can-do-with-Spreadsheet-Inquire-ebaf3d62-2af5-4cb1-af7d-e958cc5fad42. В сочетании с Microsoft ACM и DRA Servers это сладкий набор.

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