Вступ до формул
Aspose.Tasks for .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
буде викинуто при її призначенні. - Якщо формула посилається на неіснуюче поле або функцію, це може спричинити помилку під час обчислення.
- Роздільники, що залежать від культури (
;
та,
) слід враховувати під час роботи з XML-файлами проєкту. У файлах MPP, роздільником завжди є кома,
.