Organigramme sind unerlässlich, um die Struktur von Teams, Abteilungen und Berichtslinien innerhalb eines Unternehmens zu visualisieren. Sie helfen dem Management und den Mitarbeitern, die Hierarchie und die Beziehungen zwischen den Rollen in einer Organisation zu verstehen. Die Automatisierung der Erstellung dieser Diagramme in C# ermöglicht es Entwicklern, dynamisch Visualisierungen aus HR‑Datenbanken, Projektteams oder Unternehmensverzeichnissen zu erzeugen, ohne manuellen Designaufwand in Visio oder anderen Diagrammwerkzeugen.
Dieses Tutorial erklärt, wie man ein Organigramm in C# programmgesteuert mit einer Diagrammbibliothek erstellt. Sie lernen, hierarchische Knoten hinzuzufügen, Formen mit Verbindern zu verbinden und das Diagramm automatisch mit dem CompactTree-Algorithmus zu layouten, um ein sauberes und professionelles Erscheinungsbild zu erzielen.
Warum ein Organigramm programmgesteuert erstellen?
- Automatisieren Sie HR‑Workflows, um Diagramme zu erstellen und zu aktualisieren, wenn Personal‑ oder Strukturänderungen auftreten.
- Erstellen Sie klare und standardisierte Hierarchiediagramme, ohne sie manuell in Visio zeichnen zu müssen.
- Sparen Sie Zeit, indem Sie die Diagrammerstellung in bestehende Systeme wie das Mitarbeitermanagement oder Reporting‑Dashboards integrieren.
- Stellen Sie ein konsistentes Design sicher, indem Sie programmgesteuert Formstile, Verbinder und Layout‑Regeln anwenden.
- Exportieren Sie Diagramme direkt in das Visio‑Format (VSDX) zum Teilen und ggf. zur weiteren Bearbeitung.
Organigramm in C# erstellen
- Fügen Sie die Diagrammbibliothek zu Ihrem C#‑Projekt hinzu, um auf die Visio‑Erstellungs‑ und Layout‑APIs zuzugreifen.
- Initialisieren Sie ein neues
Diagram‑Objekt und laden Sie Grundformen und Verbinder aus einer Visio‑Stencil‑Datei. - Definieren Sie eine hierarchische Struktur oder einen Datensatz, der die organisatorischen Beziehungen darstellt.
- Fügen Sie für jeden Knoten in der Hierarchie dynamisch Formen hinzu und speichern Sie deren IDs für die Verbindungszuordnung.
- Verwenden Sie Verbinder, um Kindformen mit ihren übergeordneten Knoten zu verbinden und so den hierarchischen Baum zu bilden.
- Wenden Sie einen automatischen Layout‑Algorithmus (wie CompactTree) an, um die Knoten ordentlich zu organisieren.
- Speichern Sie das resultierende Diagramm im Visio‑VSDX‑Format.
// Load masters from any existing diagram, stencil or template
string visioStencil = dataDir + "BasicShapes.vss";
const string rectangleMaster = "Rectangle";
const string connectorMaster = "Dynamic connector";
const int pageNumber = 0;
const double width = 1;
const double height = 1;
double pinX = 4.25;
double pinY = 9.5;
// Define values to construct the hierarchy
List<string> listPos = new List<string>(new string[] {
"0", "0:0", "0:1", "0:2", "0:3", "0:4", "0:5", "0:6",
"0:0:0", "0:0:1", "0:3:0", "0:3:1", "0:3:2", "0:6:0", "0:6:1"
});
// Define a Hashtable to map the string name to long shape id
System.Collections.Hashtable shapeIdMap = new System.Collections.Hashtable();
// Create a new diagram
Aspose.Diagram.Diagram diagram = new Aspose.Diagram.Diagram(visioStencil);
diagram.Pages[pageNumber].PageSheet.PageProps.PageWidth.Value = 11;
// Add shapes for each hierarchy node
foreach (string orgnode in listPos)
{
long rectangleId = diagram.AddShape(pinX++, pinY++, width, height, rectangleMaster, pageNumber);
Aspose.Diagram.Shape shape = diagram.Pages[pageNumber].Shapes.GetShape(rectangleId);
shape.Text.Value.Add(new Aspose.Diagram.Txt(orgnode));
shape.Name = orgnode;
shapeIdMap.Add(orgnode, rectangleId);
}
// Create connections between parent and child nodes
foreach (string orgName in listPos)
{
int lastColon = orgName.LastIndexOf(':');
if (lastColon > 0)
{
string parendName = orgName.Substring(0, lastColon);
long shapeId = (long)shapeIdMap[orgName];
long parentId = (long)shapeIdMap[parendName];
Aspose.Diagram.Shape connector1 = new Aspose.Diagram.Shape();
long connecter1Id = diagram.AddShape(connector1, connectorMaster, pageNumber);
diagram.Pages[pageNumber].ConnectShapesViaConnector(parentId,
Aspose.Diagram.Manipulation.ConnectionPointPlace.Right,
shapeId, Aspose.Diagram.Manipulation.ConnectionPointPlace.Left,
connecter1Id);
}
}
// Auto layout CompactTree chart
Aspose.Diagram.AutoLayout.LayoutOptions compactTreeOptions = new Aspose.Diagram.AutoLayout.LayoutOptions
{
LayoutStyle = Aspose.Diagram.AutoLayout.LayoutStyle.CompactTree,
Direction = Aspose.Diagram.AutoLayout.LayoutDirection.DownThenRight,
EnlargePage = false
};
diagram.Pages[pageNumber].Layout(compactTreeOptions);
// Save diagram
diagram.Save(dataDir + "ORGChart_out.vsdx", Aspose.Diagram.SaveFileFormat.Vsdx);
Dieses Codebeispiel erstellt eine Organisationshierarchie, verbindet Eltern‑ und Kindknoten mithilfe dynamischer Verbinder und wendet ein automatisches CompactTree‑Layout für eine klare Struktur an. Jede Form stellt einen Organisationsknoten dar, der gemäß der Hierarchieliste beschriftet ist, und die endgültige Ausgabe wird als Visio‑VSDX‑Datei gespeichert.
Fazit
Das Erstellen von Organigrammen in C# bietet eine dynamische Möglichkeit, Teamstrukturen, Berichtshierarchien und Abteilungsbeziehungen zu visualisieren, ohne sie manuell in Visio zu zeichnen. Mit automatischer Anordnung und Verbindungsverwaltung können Sie klare, lesbare Diagramme direkt aus Datenquellen erzeugen. Der oben gezeigte Ansatz vereinfacht das HR‑Reporting, verbessert die Konsistenz und ermöglicht die Integration in Geschäftsautomatisierungs‑Workflows.
