Introducción a las fórmulas
Aspose.Tasks for .NET API admite la lectura y escritura de fórmulas en archivos de Microsoft Project (MPP).
Las fórmulas se utilizan para calcular valores personalizados para tareas, recursos y campos del proyecto basados en datos de proyecto existentes.
La Fórmula propiedad de la ExtendedAttributeDefinition
class proporciona una interfaz para asignar y leer fórmulas.
Si se asigna una cadena de fórmula no válida , se lanzará una FormatException
excepción.
Esta página ofrece una introducción a la gramática utilizada en las fórmulas, los operadores compatibles, las funciones y ejemplos.
Gramática de Fórmulas
Microsoft Project utiliza la siguiente gramática para las fórmulas, que también sigue 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 | + | -
Elementos admitidos
1. Campos
Puede usar cualquier nombre de campo válido de Microsoft Project (p. ej., [Duration]
, [Actual Duration]
, [Standard Rate]
).
2. Operadores
Las fórmulas admiten:
- Operadores aritméticos:
+
,-
,*
,/
,MOD
,^
- Operadores de comparación:
=
,<>
,<
,>
- Operadores lógicos:
AND
,OR
,NOT
- Concatenación de cadenas:
&
3. Funciones
La mayoría de las funciones estándar de Microsoft Project son compatibles, incluyendo:
- Funciones de fecha y hora (p. ej.,
DateDiff
,Now
) - Funciones matemáticas (p. ej.,
Round
,Abs
,IIf
) - Funciones de cadena (p. ej.,
Len
,Instr
,Left
,Right
)
Ejemplos
Ejemplo 1: Aritmética simple
1var attr = ExtendedAttributeDefinition.CreateTaskDefinition(
2 CustomFieldType.Number,
3 ExtendedAttributeTask.Number1,
4 "WorkPerDay");
5
6attr.Formula = "[Work] / [Duration]";
Esta fórmula calcula el trabajo promedio por día para una tarea.
Ejemplo 2: Expresión condicional
1var attr = ExtendedAttributeDefinition.CreateTaskDefinition(
2 CustomFieldType.Text,
3 ExtendedAttributeTask.Text1,
4 "TaskStatus");
5
6attr.Formula = "IIf([% Complete] = 100, \"Done\", \"In Progress\")";
Esta fórmula establece el valor del campo personalizado en “Hecho” si la tarea está completa, de lo contrario a “En progreso”.
Manejo de errores
- Si una fórmula es sintácticamente incorrecta, se lanzará una
FormatException
excepción al asignarla. - Si una fórmula hace referencia a un campo o función inexistente, puede causar un error durante el cálculo.
- Los delimitadores específicos de la cultura (
;
frente a,
) deben considerarse al trabajar con archivos de proyecto XML. En archivos MPP, el delimitador es siempre una coma,
.