Laden...

Tabellen formatieren in Powerpoint

Erstellt von Caveman vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.761 Views
Caveman Themenstarter:in
187 Beiträge seit 2009
vor 7 Jahren
Tabellen formatieren in Powerpoint

Hallo,
eine zweite Frage hinten nach.

In meiner Powerpoint-Anwendung werden Tabellen formatiert erstellt. Es gibt in der Anwendung derzeit vier verschiedene Tabellenformate.
Unterschiedliche Zellenfarben und unterschiedliche Textausrichtungen. Manche Zellen sind auch verbunden.
In meiner Ursprungsversion führte die Formatierung der Tabellen zu unübersichtlichem Spaghetti-Code.
Das will ich in meiner überarbeiteten Version vermeiden oder zumindest stark reduzieren.
Leider haben meine Ansätze in den letzten zwei Tagen keine nennenwerten Verbesserungen am Code zu Tage gebracht.
Wie sollte ich das am besten angehen, damit auch unterschiedliche Tabellenformate berücksichtigt werden?

5.658 Beiträge seit 2006
vor 7 Jahren

Hi Caveman,

In meiner Ursprungsversion führte die Formatierung der Tabellen zu unübersichtlichem Spaghetti-Code.
Das will ich in meiner überarbeiteten Version vermeiden oder zumindest stark reduzieren.
Leider haben meine Ansätze in den letzten zwei Tagen keine nennenwerten Verbesserungen am Code zu Tage gebracht.

Du schreibst weder, wie die ursprüngliche Version funktioniert hat, noch, was du für Verbesserungen gemacht hast. Wie sollen wir dir da weiterhelfen?

Siehe dazu auch [Hinweis] Wie poste ich richtig? Punkt 5: "Problem genau beschreiben".

Weeks of programming can save you hours of planning

Caveman Themenstarter:in
187 Beiträge seit 2009
vor 7 Jahren

Das liegt daran, dass ich mir zuerst mal nur allgemein gehaltene Antworten erhofft hatte.

Gut, bisher habe ich das so gemacht, dass ich je eine Methode für jede vorkommende Tabelle programmiert hatte. In dieser gibt es dann eine Aneinanderreihung von For- und Foreach-Schleifen für: Zellenbreiten, Zellenfarben, Vertikale Ausrichtung, Horizontale Ausrichtung, Rahmenlinien, usw.
Alles nicht schön! Aber da das mein erstes Projekt dieser Art war, war ich schon mal froh, dass ich es überhaupt hinbekommen hatte =)
Meine Überlegungen haben sich dahin verfestigt, dass ich z.B. eine Methode für die Einfärbung der Zellen habe. Die größte Schwierigkeit für mich ist jetzt, wie ich der Methode klarmache, welche Zellen einzufärben sind.

5.658 Beiträge seit 2006
vor 7 Jahren

Die größte Schwierigkeit für mich ist jetzt, wie ich der Methode klarmache, welche Zellen einzufärben sind.

Es liegt ja auf der Hand, daß man der Methode die Zellen (oder deren IDs) als Parameter übergeben mußt. Kannst du das Problem evtl. mal etwas genauer beschreiben? Das hat ja mit PowerPoint auch nur sehr indirekt zu tun.

Weeks of programming can save you hours of planning

Caveman Themenstarter:in
187 Beiträge seit 2009
vor 7 Jahren

Hier mal beispielhaft die Methoden zum Zeichnen der Rahmenlinien und zum Färben der Zellen.


        protected void DrawTableBorders(Office.MsoLineDashStyle borderStyle, int borderWeight, Office.MsoTriState borderVisibility, Color borderColor)
        {
            int intBorderColor = BitConverter.ToInt32(new byte[] { borderColor.R, borderColor.G, borderColor.B, 0x00 }, 0);

            for (int row = 1; row <= Table.Rows.Count; row++)
            {
                for (int col = 1; col <= Table.Columns.Count; col++)
                {
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderTop].DashStyle = borderStyle;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderTop].Weight = borderWeight;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderTop].ForeColor.RGB = intBorderColor;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderTop].Visible = borderVisibility;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderBottom].DashStyle = borderStyle;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderBottom].Weight = borderWeight;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderBottom].ForeColor.RGB = intBorderColor;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderBottom].Visible = borderVisibility;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderLeft].DashStyle = borderStyle;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderLeft].Weight = borderWeight;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderLeft].ForeColor.RGB = intBorderColor;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderLeft].Visible = borderVisibility;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderRight].DashStyle = borderStyle;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderRight].Weight = borderWeight;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderRight].ForeColor.RGB = intBorderColor;
                    Table.Cell(row, col).Borders[Powerpoint.PpBorderType.ppBorderRight].Visible = borderVisibility;
                }
            }
        }

        protected void FillTableColors(List<Color> cellColors)
        {
            int col = 0;
            for (int i = 0; i < cellColors.Count; i++)
            {
                col++;
                if (cellColors.ElementAt(i) == Colors.Transparent) continue;
                int intColumnColor = BitConverter.ToInt32(new byte[] { cellColors.ElementAt(i).R, cellColors.ElementAt(i).G, cellColors.ElementAt(i).B, 0x00 }, 0);
                for (int row = 1; row <= Table.Rows.Count; row++)
                {
                    Table.Cell(row, col).Shape.Fill.ForeColor.RGB = intColumnColor;
                }
            }
        }

Momentan passiert das Einfärben der Tabelle über eine Liste mit Farben - ein Listeneintrag pro Tabellenspalte. Mit Colors.Transparent teile ich mit, dass die Zelle unangetastet bleiben soll. Man sieht an der Methode auch, dass hier immer komplette Spalten eingefärbt werden. Das ist für einen Tabellentypen geeignet. Aber es ist halt für die weiteren Tabellenformate ungeeignet. Ich suche also nach einer universelleren Lösung. Ziel sollte auch sein, dass man relativ leicht weitere Tabellenformate hinzufügen kann (in einem Jahr oder so).

5.658 Beiträge seit 2006
vor 7 Jahren

Im Excel gibt es das Range-Objekt, mit dem man eine Auswahl von Zellen definieren und bearbeiten kann. Vielleicht gibt es sowas unter PowerPoint auch?

Weeks of programming can save you hours of planning