Gezielte String-Formatierungen im Abstract via Makro?

Paul S. hinzugefügt 3 Monaten her
unbeantwortet

Hallo miteinander,

ich würde gerne folgendes umsetzen: Sagen wir im Bewertung-Feld steht das Wort "Apfel" und im Abstract-Feld steht "Der Apfel hängt am Baum". Das Makro soll dafür sorgen, dass das Wort "Apfel" im Abstract fett gedruckt wird: "Der Apfel hängt am Baum".

Ich glaube zu verstehen, dass bzgl. des Abstracts mehrere Elemente angesteuert werden können:

9814516965e850b5f06ef1402c4b9637

Ich könnte mir also beispielsweise reference.Abstract.TextHtml rausholen und die relevante Passage verändern.

Vorher ("Der Apfel hängt am Baum"):

<p style="margin:0pt"><span style="font-family:'Segoe UI'; font-size:11pt">Der Apfel hängt am Baum.</span></p>

Nachher ("Der Apfel hängt am Baum"):

<p style="margin:0pt 0pt 6pt"><span style="font-family:'Segoe UI'; font-size:11pt">Der </span><span style="font-family:'Segoe UI'; font-size:11pt; font-weight:bold">Apfel</span><span style="font-family:'Segoe UI'; font-size:11pt"> hängt am Baum.</span></p>


Gehen wir mal davon aus, dass die automatisierte Abänderung des html-codes irgendwie machbar ist, so stellt sich für mich vor allem die Frage ob es überhaupt reicht reference.Abstract.TextHtml mit dem abgeänderten html-code zu überschreiben. Führt dies nicht ggf. zu Problemen mit reference.Abstract.TextRtf ?


Übersehe ich etwas? Von welcher Seite könnte ich an die Sache herangehen?

Kommentare (1)

Foto
2

Am besten einfach Mal ausprobieren in einem Testprojekt; so mache ich alles, bis es funktioniert. TextRtf zu überschreiben geht jedenfalls, das mache ich auch, ist aber natürlich nicht so ganz trivial und wahrscheinlich noch komplexer, wenn man dem Makro keine weiteren Referenzen hinzufügen will.

Foto
1

Danke! Wärst du so freundlich mir die relevante Code-Zeile(n) aus dem Makro zu schicken, in welchem du TextRtf überschreibst? Ich habe so eine Vorahnung, dass mir das Probleme mit der Formatierung (also .ToString() usw.) erspart.

Foto
2

Ich mache da nichts spektakuläres mit, meine Aussage war eher, dass es geht… so habe ich etwa eine Funktion in meinem AddOn, welches die Textfarbe eines Wissenselements ändert, und das geht per

        
static void ChangeTextColor(this KnowledgeItem knowledgeItem, Color color)
        {
            RichTextBox richTextBox = new RichTextBox();
            richTextBox.Rtf = knowledgeItem.TextRtf;
            richTextBox.SelectAll();

            richTextBox.SelectionColor = color;

            knowledgeItem.TextRtf = richTextBox.Rtf;
        }
Das ist relativ problemlos. Was vielleicht grundsätzlich interessant ist: Die Methode funktioniert ja, indem ich eine RichTextBox erstelle, deren Inhalt sich erst einmal aus einer Citavi-Quelle – in meinem Fall Wissenselement, in Deinem Fall dann eben das Abstract-Feld – speist. Dann treffe ich eine Auswahl in dieser Textbox, und dieser Auswahl wird dann eine Eigenschaft – in meinem Fall Farbe, in Deinem Fall Fettung – zugewiesen. Und schließlich wird diese Textbox der Ausgangsquelle wieder zugewiesen. Das könntest Du im Prinzip genauso machen, der Trick wird nur darin bestehen, die Auswahl genauer zu machen. Einfach SelectAll() wie bei mir klappt ja nicht. Stattdessen wird man wohl in der richTextBox einen String suchen müssen, und dann durch die Liste der Treffer iterieren, und jeden Treffer in der Textbox auswählen und die Eigenschaftszuweisung zu machen.

Ich weiß aus dem Kopf nicht, ob das geht, aber es erscheint mir nicht unmöglich. Das hier etwa klingt vielversprechend für die Suche.

Die Klasse RichTextBox ist im Namespace System.Windows.Controls, das geht also auch ohne Aspose Words (das ist ein Kommentar, der für Drittleser dieses Threads ohne Kontext jetzt etwas verwirrend ist).

Foto