Mostrar varias columnas en la imagen renderizada del diagrama de Gantt
**Visión general
En Microsoft Project, los datos del proyecto pueden representarse tanto en forma textual como gráficamente en forma de diagramas. Los tipos de gráficos más comunes son el diagrama de Gantt, el uso de tareas y el uso de recursos. Aspose.Tasks para .NET admite la representación de datos de proyectos como diagramas gráficos.
En este artículo se describen dos métodos para personalizar las columnas de un proyecto que aparecen en un diagrama de Gantt y se muestra cómo convertir el diagrama en una imagen.
Gantt Chart
Un diagrama de Gantt es una representación gráfica cronológica de las tareas de un proyecto, segmentadas por días, semanas o meses. Un proyecto suele constar de tareas asignadas a recursos. Una tarea individual puede dividirse en subtareas. Cada tarea tiene una fecha de inicio y otra de finalización que definen su duración. Un diagrama de Gantt en Microsoft Project proporciona una visión general de esta información.
La siguiente captura de pantalla muestra un diagrama de Gantt típico en Microsoft Project:
Gantt Chart Image en Aspose.Tasks para .NET
En Aspose.Tasks para .NET, la clase Project
es la clase principal para trabajar con archivos de proyecto. Expone múltiples sobrecargas del método Save
para exportar los datos del proyecto a varios formatos.
Por ejemplo, la sobrecarga Save(string, SaveOptions)
:
- El primer parámetro especifica el nombre del archivo de salida.
- El segundo parámetro acepta una instancia de una clase derivada de
SaveOptions
, comoPdfSaveOptions
para el formato PDF.
SaveOptions Tipo
El comportamiento de renderizado puede personalizarse utilizando las propiedades de la clase SaveOptions
o una de sus herederas. Por ejemplo:
- Utilice
SaveOptions.CustomPageSize
para definir el tamaño de la página de salida. - Utilice
SaveOptions.LegendOnEachPage
para controlar si aparece una leyenda en cada página.
1PdfSaveOptions saveOptions = new PdfSaveOptions()
2{
3 CustomPageSize = new SizeF(800, 600),
4 LegendOnEachPage = false
5};
Existen al menos dos enfoques para personalizar la apariencia del diagrama de Gantt renderizado.
Personalizar las columnas del diagrama de Gantt con ProjectView
Este enfoque se considera obsoleto y es improbable que se amplíe en futuras versiones. La clase ProjectView
ofrece una funcionalidad limitada y permite especificar un conjunto de columnas para incluir en la imagen de salida.
Para usarla, cree una lista de instancias de GanttChartColumn
y páselas al constructor de ProjectView
. A continuación, asigne esta vista a la propiedad SaveOptions.View
.
1// Create the view columns
2var columns = new List<GanttChartColumn>();
3columns.Add(new GanttChartColumn("Name", 100, new TaskToColumnTextConverter(TaskName)));
4columns.Add(new GanttChartColumn("Notes", 100, new TaskToColumnTextConverter(TaskNotes)));
5columns.Add(new GanttChartColumn("Resources", 200, new TaskToColumnTextConverter(TaskResources)));
6
7// Create the view
8ProjectView projectView = new ProjectView(columns);
9
10// Create SaveOptions
11PdfSaveOptions saveOptions = new PdfSaveOptions()
12{
13 CustomPageSize = new SizeF(800, 600),
14 View = projectView
15};
16
17// Save the project to PDF
18project.Save("output.pdf", saveOptions);
El constructor GanttChartColumn
acepta tres argumentos: el nombre de la columna, su ancho y un delegado TaskToColumnTextConverter
que convierte los datos de la tarea en texto para mostrar. Ejemplos de implementación:
1private string TaskName(Task task)
2{
3 StringBuilder res = new StringBuilder();
4 for (int i = 1; i < task.OutlineLevel; i++)
5 {
6 res.Append(" ");
7 }
8
9 res.AppendFormat("{0}. {1}", task.Id, task.Name);
10 return res.ToString();
11}
12
13private string TaskNameHtml(Task task)
14{
15 StringBuilder res = new StringBuilder();
16 for (int i = 1; i < task.OutlineLevel; i++)
17 {
18 res.Append(" ");
19 }
20
21 res.AppendFormat("{0}. {1}", task.Id, task.Name);
22 return res.ToString();
23}
24
25private string TaskNotes(Task task)
26{
27 return task.NotesText ?? string.Empty;
28}
29
30private string TaskResources(Task task)
31{
32 StringBuilder res = new StringBuilder();
33 Project project = task.ParentProject;
34 bool bFirst = true;
35 foreach (ResourceAssignment assignment in project.GetResourceAssignmentsByTask(task))
36 {
37 if (assignment.Resource != null)
38 {
39 if (!bFirst)
40 {
41 res.Append(", ");
42 }
43
44 res.Append(assignment.Resource.Name);
45 bFirst = false;
46 }
47 }
48
49 return res.ToString();
50}
Below are examples of resulting images exported using the above code:
Personalizar columnas de diagrama de Gantt con View
Se recomienda usar la clase View
y sus herederas para personalizar la salida del diagrama. La clase View
corresponde a la configuración de vista en Microsoft Project y proporciona una API más completa que ProjectView
.
Se puede recuperar una vista existente de la colección Views
(para archivos MPP), personalizarla y pasarla al método Project.Save
mediante la propiedad SaveOptions.ViewSettings
.
El siguiente ejemplo muestra cómo recuperar una vista existente de un archivo MPP, insertar una nueva columna en ella y usarla para generar el diagrama de Gantt.
1Project project = new Project("input.mpp");
2
3// Get existing view
4var view = (GanttChartView) project.Views.GetByName("&Gantt Chart");
5
6// Define and insert new column
7TableField field = new TableField()
8{
9 AlignData = StringAlignment.Far,
10 Width = 50,
11 Field = Field.TaskName,
12 Title = "Task name"
13};
14
15view.Table.TableFields.Insert(1, field);
16
17PdfSaveOptions saveOptions = new PdfSaveOptions()
18{
19 ViewSettings = view
20};
21
22project.Save("output.pdf", saveOptions);
Conclusión
Aspose.Tasks para .NET ofrece múltiples opciones para personalizar la representación de diagramas de Gantt. Si bien ProjectView
permite una configuración básica, su funcionalidad es limitada y se considera obsoleto.
Para un control más avanzado y una mayor alineación con la estructura visual de Microsoft Project, se recomienda usar View
y sus clases asociadas. Este enfoque proporciona mayor flexibilidad y es adecuado para trabajar con vistas definidas en archivos MPP o para configurar nuevos diseños de vista mediante programación.