EPPlus - пользовательская функция в C # - обработка зависимостей ячеек вне электронной таблицы - PullRequest
0 голосов
/ 24 августа 2018

Что я делаю: добавил пользовательскую функцию во время выполнения EPPlus.Эта функция принимает текстовое выражение в качестве аргумента (конечно, текстовое выражение может быть указано в качестве аргумента или может быть помещено в какую-то ячейку таблицы, на которую мы ссылаемся). Пока все хорошо,

, тогда мы оценим этовыражение вне Excel / EPPlus - выражения могут обращаться к данным за пределами электронной таблицы, НО ТАКЖЕ могут ссылаться на другие ячейки электронной таблицы.

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

Вопрос: это можно исправить?Я имею в виду, когда функция оценки выражения обнаруживает, что выражение относится к ячейке электронной таблицы, может ли она сказать EPPlus сначала выполнить оценку этой ячейки?Или, по крайней мере, проанализируйте выражение и определите, каковы зависимости, затем передайте эту информацию как-нибудь EPPlus, чтобы он знал, в каком порядке выполнять вычисления?

=MYEVAL("doSomeStuff('arg 1', Sheet.E4, Sheet.C4)")

MYEVAL собираетсябыть запущенным во время вызова Worksheet.Calculate () - но внутри MYEVAL, как сообщить EPPlus, что мы хотим получить текущее значение ячеек E4 и C4, если эти ячейки вычисляются сами и могут изменять свое значение во время вычисления?

Меня не волнуют циклические ссылки, я могу убедиться, что циклов нет, просто прямой случай выполнения вычислений в правильном порядке.

Обновление: просто интересно, можем ли мы добавить любое числоаргументов для вызова, можем ли мы просто поместить наши зависимости в список аргументов, например:

=MYEVAL("doSomeStuff('arg 1', Sheet.E4, Sheet.C4)";E4;C4)

Тогда EPPlus будет знать, что перед вызовом MYEVAL необходимо вычислить E4 и C4клетки.Этого достаточно для обеспечения таких зависимостей?

1 Ответ

0 голосов
/ 27 августа 2018

ОК. Решение, представленное в Обновлении, в порядке / полезно и, похоже, работает. Но есть и очень простой подход, альтернативный: вы можете рассчитать отдельные ячейки с помощью API EPPlus (Worksheet.Cells [i, j] .Calculate ()) - тогда вам не нужно управлять зависимостями, просто вызовите Calculate для ячеек вам нужно, и это будет следовать фактическим зависимостям.

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