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:

Diagrama de Gantt representado por 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):

SaveOptions Tipo

El comportamiento de renderizado puede personalizarse utilizando las propiedades de la clase SaveOptions o una de sus herederas. Por ejemplo:

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("&nbsp;&nbsp;");
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:

resulting HTML exported by Aspose.Tasks 1
resulting HTML exported by Aspose.Tasks 2

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.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.