Display Multiple Columns in Rendered Gantt Chart Image

Overview

In Microsoft Project, project data can be represented both in textual form and graphically as charts. The most common chart types include Gantt Chart, Task Usage, and Resource Usage. Aspose.Tasks for .NET supports rendering project data as graphical charts.

У цій статті описані два підходи для налаштування стовпців проекту, відображених у діаграмі Ганта, і демонструє, як передати діаграму на зображення.

Gantt Chart

A Gantt chart is a timeline-based graphical representation of project tasks, segmented by days, weeks, or months. A project typically consists of tasks assigned to resources. An individual task may be divided into subtasks. Each task has a start and end date that defines its duration. A Gantt chart in Microsoft Project provides a visual overview of this information.

The following screenshot shows a typical Gantt chart in Microsoft Project:

Gantt chart represented by Microsoft Project

Зображення діаграми Ганта в Aspose.Tasks для .NET

В Aspose.Tasks для .NET клас Project є основним класом для роботи з файлами проекту. Він надає кілька перевантажень методу Save для експорту даних проекту в різні формати.

Наприклад, перевантаження Save(string, SaveOptions):

Тип SaveOptions

Поведінку рендерингу можна налаштувати за допомогою властивостей класу SaveOptions або одного з його спадкоємців. Наприклад:

1PdfSaveOptions saveOptions = new PdfSaveOptions()
2{
3CustomPageSize = new SizeF(800, 600),
4LegendOnEachPage = false
5};

Існує щонайменше два підходи до налаштування зовнішнього вигляду відображеної діаграми Ганта.

Налаштування стовпців діаграми Ганта за допомогою ProjectView

Цей підхід вважається застарілим і навряд чи буде розширено в майбутніх випусках. Клас ProjectView надає обмежену функціональність і дозволяє вказати набір стовпців, які будуть включені до вихідного зображення.

Щоб використовувати його, створіть список екземплярів GanttChartColumn і передайте їх конструктору ProjectView. Потім призначте це представлення властивості 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);

The GanttChartColumn constructor accepts three arguments: the column name, column width, and a TaskToColumnTextConverter delegate that converts task data to display text. Example implementations:

 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

Customize Gantt Chart Columns Using View

Using the View class and its inheritors is the recommended approach for customizing chart output. The View class corresponds to the view settings in Microsoft Project and provides a richer API compared to ProjectView.

An existing view can be retrieved from the Views collection (for MPP files), customized, and passed to the Project.Save method via the SaveOptions.ViewSettings property.

The following example demonstrates how to retrieve an existing view from an MPP file, insert a new column into it, and use this view for rendering the Gantt chart.

 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);

Висновок

Aspose.Tasks для .NET надає кілька варіантів налаштування візуалізації діаграми Ганта. Хоча ProjectView дозволяє базову конфігурацію, його функціональність обмежена і вважається застарілим.

Для більш розширеного контролю та узгодження з візуальною структурою Microsoft Project рекомендується використовувати View та пов’язані з ним класи. Цей підхід забезпечує кращу гнучкість і підходить для роботи з представленнями, визначеними у файлах MPP, або для програмного налаштування нових макетів представлень.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.