Anzeige mehrerer Spalten im gerenderten Gantt-Diagrammbild

Übersicht

In Microsoft Project können Projektdaten sowohl in Textform als auch grafisch als Diagramme dargestellt werden. Zu den häufigsten Diagrammtypen gehören das Gantt-Diagramm, die Aufgabenverwendung und die Ressourcennutzung. Aspose.Tasks for .NET unterstützt das Rendern von Projektdaten als grafische Diagramme.

Dieser Artikel beschreibt zwei Ansätze zur Anpassung der in einem Gantt-Diagramm angezeigten Projektspalten und zeigt, wie das Diagramm als Bild gerendert werden kann.

Gantt-Diagramm

Ein Gantt-Diagramm ist eine zeitbasierte grafische Darstellung von Projektaufgaben, unterteilt nach Tagen, Wochen oder Monaten. Ein Projekt besteht typischerweise aus Aufgaben, die Ressourcen zugewiesen sind. Eine einzelne Aufgabe kann in Unteraufgaben unterteilt werden. Jede Aufgabe hat ein Start- und Enddatum, das ihre Dauer bestimmt. Ein Gantt-Diagramm in Microsoft Project bietet eine visuelle Übersicht über diese Informationen.

Der folgende Screenshot zeigt ein typisches Gantt-Diagramm in Microsoft Project:

Gantt-Diagramm in Microsoft Project

Gantt-Diagrammbild in Aspose.Tasks for .NET

In Aspose.Tasks for .NET ist die Klasse Project die Hauptklasse für die Arbeit mit Projektdateien. Sie stellt mehrere Überladungen der Methode Save zur Verfügung, um Projektdaten in verschiedenen Formaten zu exportieren.

Zum Beispiel die Überladung Save(string, SaveOptions):

SaveOptions-Typ

Das Renderverhalten kann über Eigenschaften der Klasse SaveOptions oder ihrer Ableitungen angepasst werden. Zum Beispiel:

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

Es gibt mindestens zwei Ansätze, um das Erscheinungsbild des gerenderten Gantt-Diagramms anzupassen.

Gantt-Spalten mit ProjectView anpassen

Dieser Ansatz gilt als veraltet und wird in zukünftigen Versionen voraussichtlich nicht weiterentwickelt. Die Klasse ProjectView bietet nur begrenzte Funktionalität und erlaubt es, eine Reihe von Spalten für das Ausgabebild anzugeben.

Dazu erstellen Sie eine Liste von GanttChartColumn-Instanzen und übergeben sie an den Konstruktor von ProjectView. Weisen Sie diese Ansicht dann der Eigenschaft SaveOptions.View zu.

 1// Spalten für die Ansicht erstellen
 2var columns = new List<GanttChartColumn>();
 3columns.Add(new GanttChartColumn("Name", 100, new TaskToColumnTextConverter(TaskName)));
 4columns.Add(new GanttChartColumn("Notizen", 100, new TaskToColumnTextConverter(TaskNotes)));
 5columns.Add(new GanttChartColumn("Ressourcen", 200, new TaskToColumnTextConverter(TaskResources)));
 6
 7// Ansicht erstellen
 8ProjectView projectView = new ProjectView(columns);
 9
10// SaveOptions erstellen
11PdfSaveOptions saveOptions = new PdfSaveOptions()
12{
13    CustomPageSize = new SizeF(800, 600),
14    View = projectView
15};
16
17// Projekt als PDF speichern
18project.Save("output.pdf", saveOptions);

Der Konstruktor von GanttChartColumn akzeptiert drei Argumente: Spaltenname, Spaltenbreite und einen Delegaten TaskToColumnTextConverter, der Aufgabendaten in Text umwandelt. Beispielimplementierungen:

 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}

Nachfolgend Beispiele von exportierten Bildern mit obigem Code:

Ergebnis HTML exportiert mit Aspose.Tasks 1
Ergebnis HTML exportiert mit Aspose.Tasks 2

Gantt-Spalten mit View anpassen

Die Verwendung der Klasse View und ihrer Ableitungen ist der empfohlene Ansatz zur Anpassung der Diagrammausgabe. Die Klasse View entspricht den Ansichtseinstellungen in Microsoft Project und bietet eine reichhaltigere API im Vergleich zu ProjectView.

Eine bestehende Ansicht kann aus der Views-Sammlung (bei MPP-Dateien) abgerufen, angepasst und über die Eigenschaft SaveOptions.ViewSettings an die Methode Project.Save übergeben werden.

Das folgende Beispiel zeigt, wie eine vorhandene Ansicht aus einer MPP-Datei abgerufen, eine neue Spalte eingefügt und diese Ansicht für das Rendern des Gantt-Diagramms verwendet wird.

 1Project project = new Project("input.mpp");
 2
 3// Bestehende Ansicht abrufen
 4var view = (GanttChartView) project.Views.GetByName("&Gantt Chart");
 5
 6// Neue Spalte definieren und einfügen
 7TableField field = new TableField()
 8{
 9    AlignData = StringAlignment.Far,
10    Width = 50,
11    Field = Field.TaskName,
12    Title = "Aufgabenname"
13};
14
15view.Table.TableFields.Insert(1, field);
16
17PdfSaveOptions saveOptions = new PdfSaveOptions()
18{
19    ViewSettings = view
20};
21
22project.Save("output.pdf", saveOptions);

Fazit

Aspose.Tasks for .NET bietet verschiedene Optionen zur Anpassung der Gantt-Diagramm-Ausgabe. Obwohl ProjectView eine grundlegende Konfiguration ermöglicht, ist seine Funktionalität eingeschränkt und gilt als veraltet.

Für erweiterte Steuerung und eine engere Übereinstimmung mit der visuellen Struktur von Microsoft Project wird die Verwendung von View und den zugehörigen Klassen empfohlen. Dieser Ansatz bietet mehr Flexibilität und eignet sich sowohl für vordefinierte Ansichten in MPP-Dateien als auch für programmatisch erstellte Layouts.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.