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-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)
:
- Der erste Parameter gibt den Namen der Ausgabedatei an.
- Der zweite Parameter akzeptiert eine Instanz einer von
SaveOptions
abgeleiteten Klasse, z. B.PdfSaveOptions
für das PDF-Format.
SaveOptions-Typ
Das Renderverhalten kann über Eigenschaften der Klasse SaveOptions
oder ihrer Ableitungen angepasst werden. Zum Beispiel:
- Verwenden Sie
SaveOptions.CustomPageSize
, um die Seitengröße der Ausgabe festzulegen. - Verwenden Sie
SaveOptions.LegendOnEachPage
, um festzulegen, ob eine Legende auf jeder Seite angezeigt wird.
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(" ");
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:
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.