Введение в формулы
Aspose.Tasks для .NET API поддерживает чтение и запись формул в файлах Microsoft Project (MPP).
Формулы используются для вычисления пользовательских значений для задач, ресурсов и полей проекта на основе существующих данных проекта.
Свойство Formula класса ExtendedAttributeDefinition
предоставляет интерфейс для назначения и чтения формул.
Если некорректная строка формулы присваивается, FormatException
выбрасывается исключение.
Эта страница содержит введение в грамматику, используемую в формулах, поддерживаемые операторы, функции и примеры.
Грамматика формул
Microsoft Project использует следующую грамматику для формул, которой также следует Aspose.Tasks:
1 Formula -> Formula Binary_Op Primary | Primary
2 Primary -> (Formula) | Unary_Op Primary | Function | ValidFieldName | ValidDoubleValue | "StringLiteral"
3 Function -> ValidFunctionName(Args)
4 Args -> Args Delimiter Formula | Formula | |
5 Delimiter -> , | ; // Note: Delimiter is culture-specific in XML format ( , or ; ) and persistent in MPP ( , )
6 Binary_Op -> + | - | * | / | & | MOD | ^ | = | <> | < | > | AND | OR
7 Unary_Op -> NOT | + | -
Поддерживаемые элементы
1. Поля
Можно использовать любое действительное имя поля Microsoft Project (например, [Duration]
, [Actual Duration]
, [Standard Rate]
).
2. Операторы
Формулы поддерживают:
- Арифметические операторы:
+
,-
,*
,/
,MOD
,^
- Операторы сравнения:
=
,<>
,<
,>
- Логические операторы:
AND
,OR
,NOT
- Конкатенация строк:
&
3. Функции
Поддерживаются большинство стандартных функций Microsoft Project, включая:
- Функции даты и времени (например,
DateDiff
,Now
) - Математические функции (например,
Round
,Abs
,IIf
) - Строковые функции (например,
Len
,Instr
,Left
,Right
)
Примеры
Пример 1: Простая арифметика
1var attr = ExtendedAttributeDefinition.CreateTaskDefinition(
2 CustomFieldType.Number,
3 ExtendedAttributeTask.Number1,
4 "WorkPerDay");
5
6attr.Formula = "[Work] / [Duration]";
Эта формула вычисляет средний объём работы в день для задачи.
Пример 2: Условное выражение
1var attr = ExtendedAttributeDefinition.CreateTaskDefinition(
2 CustomFieldType.Text,
3 ExtendedAttributeTask.Text1,
4 "TaskStatus");
5
6attr.Formula = "IIf([% Complete] = 100, \"Done\", \"In Progress\")";
Эта формула задаёт значение пользовательского поля как “Готово” если задача выполнена, в противном случае — “В процессе”.
Обработка ошибок
- Если формула синтаксически некорректна,
FormatException
при её присвоении будет выброшено исключение. - Если формула ссылается на несуществующее поле или функцию, это может вызвать ошибку при вычислении.
- Культура-зависимые разделители (
;
vs,
) следует учитывать при работе с XML-файлами проекта. В файлах MPP, разделителем всегда является запятая,
.