myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Office-Technologien » [gelöst] Liste an Word-Textmarke einfügen Open XML SDK
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[gelöst] Liste an Word-Textmarke einfügen Open XML SDK

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
PatchworkMember
myCSharp.de-Mitglied

Dabei seit: 05.07.2019
Beiträge: 2
Entwicklungsumgebung: Visual Studio 2017
Herkunft: Aachen


PatchworkMember ist offline

[gelöst] Liste an Word-Textmarke einfügen Open XML SDK

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich greife per Open XML SDK auf ein Word Dokument zu.

Nach dem Öffnen sammele ich alle Textmarken im Dokument ein und lege sie in einem Dictionary ab.

Ich kann problemlos einzeiligen Text an der Textmarke einfügen.

C#-Code:
private static bool SetTextValueToBookmark(Dictionary<string, BookmarkEnd> bmDict, string bmTextValue, string bmTitel)
        {
            if ((bmDict == null) || (string.IsNullOrEmpty(bmTitel)))
            {
                return false;
            }

            try
            {
                Text textElement = new Text(bmTextValue);
                Run runElement = new Run(textElement);
                BookmarkEnd end = bmDict[bmTitel];
                end.InsertAfterSelf(runElement);
            }
            catch
            {
                return false;
            }
            return true;
        }

Allerdings scheitere ich am Zeilenumbruch wenn ich mehrere Zeilen an der Textmarke einfügen möchte. Die Listeneinträge werden ohne Zeilenumbruch hintereinander eingefügt.
Meiner Meinung nach hätte ich mit dem wechselnden RUN-Element einen Umbruch erreichen müssen ...

C#-Code:
private static bool SetListValueToBookmark(Dictionary<string, BookmarkEnd> bmDict, List<string> bmTextValue, string bmTitel)
        {
            if ((bmDict == null) || (string.IsNullOrEmpty(bmTitel)))
            {
                return false;
            }

            try
            {
                BookmarkEnd end = bmDict[bmTitel];
                foreach (string textValue in bmTextValue)
                {
                    Text textElement = new Text(textValue);
                    Run runElement = new Run(textElement);
                    end.InsertAfterSelf(runElement);
                }
            }
            catch
            {
                return false;
            }
            return true;
        }

Vielleicht hat ja jemand einen Tipp für mich.
-> vorlaufender Dank.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von PatchworkMember am 07.07.2019 13:29.

05.07.2019 16:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
PatchworkMember
myCSharp.de-Mitglied

Dabei seit: 05.07.2019
Beiträge: 2
Entwicklungsumgebung: Visual Studio 2017
Herkunft: Aachen

Themenstarter Thema begonnen von PatchworkMember

PatchworkMember ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Da ich weiterhin an den Umbrüchen gescheitert bin, habe ich alternativ jetzt eine Tabelle eingefügt.
Nicht die sauberste Lösung, aber sie löst mein Problem.
Hier der Code:

C#-Code:
        private static bool SetListValueToBookmark(Dictionary<string, BookmarkEnd> bmDict, List<string> bmTextValue, string bmTitel)
        {
            if ((bmDict == null) || (string.IsNullOrEmpty(bmTitel)))
            {
                return false;
            }

            try
            {
                Table table01 = new Table();
                table01.AppendChild<TableProperties>(GetTablePropertiesForStdTable());

                BookmarkEnd end = bmDict[bmTitel];
                foreach (string textValue in bmTextValue)
                {
                    TableRow tr01 = new TableRow(GetTableRowPropertiesForStdCell());
                    AddCellToRow(tr01, textValue, 100);
                    table01.Append(tr01);
                }
                Run runElement = new Run(table01);
                end.InsertAfterSelf(runElement);
            }
            catch
            {
                return false;
            }
            return true;
        }

mit folgenden Assistenzfunktionen für den Tabellenbau

C#-Code:
        private static TableProperties GetTablePropertiesForStdTable()
        {
            return new TableProperties(
                new TableBorders(
                    new TopBorder() { Val = new EnumValue<BorderValues>(BorderValues.None), Size = 0 },
                    new BottomBorder() { Val = new EnumValue<BorderValues>(BorderValues.None), Size = 0 },
                    new LeftBorder() { Val = new EnumValue<BorderValues>(BorderValues.None), Size = 0 },
                    new RightBorder() { Val = new EnumValue<BorderValues>(BorderValues.None), Size = 0 },
                    new InsideHorizontalBorder() { Val = new EnumValue<BorderValues>(BorderValues.None), Size = 0 },
                    new InsideVerticalBorder() { Val = new EnumValue<BorderValues>(BorderValues.None), Size = 0 }
                ),
                new TableStyle() { Val = "TableGrid" },
                new TableWidth() { Width = "5000", Type = TableWidthUnitValues.Pct }
                );
        }

        private static TableRowProperties GetTableRowPropertiesForStdCell()
        {
            return new TableRowProperties
                (
                new TableRowHeight() { Val = Convert.ToUInt32("300"), HeightType = HeightRuleValues.AtLeast }
                );
        }

        private static void AddCellToRow(TableRow row, string cellTextValue, int cellWidth)
        {
            Paragraph para = new Paragraph();
            Run run = para.AppendChild(new Run());
            run.RunProperties = GetRunProp_StdText(false);
            run.AppendChild(new Text(cellTextValue));

            TableCell tc = new TableCell();
            tc.Append(new TableCellProperties(new TableCellWidth() { Type = TableWidthUnitValues.Pct, Width = (cellWidth * 50).ToString() }));
            tc.Append(para);
            row.Append(tc);
        }

        private static RunProperties GetRunProp_StdText(bool bold)
        {
            if (bold)
            {
                return new RunProperties(
                    new RunFonts() { Ascii = "Calibri" },
                    new Bold(),
                    new FontSize() { Val = "20" }
                    );
            }

            return new RunProperties(
                new RunFonts() { Ascii = "Calibri" },
                new FontSize() { Val = "20" }
                );
        }
07.07.2019 13:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 20.07.2019 07:56