Dezember 05, 2021, 06:26:35

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


RichText richtig darstellen

Begonnen von Tom1212, November 08, 2021, 13:52:13

⏪ vorheriges - nächstes ⏩

Tom1212

November 08, 2021, 13:52:13 Letzte Bearbeitung: November 10, 2021, 15:20:13 von Tom1212
Bitte um eure Hilfe bei folgendem Problem:

Quelle: Verknüpfte Tabelle, Spalte [Notizblock] Felddatentyp: langer Text, Textformat: Nur-Text
Ziel: Bericht mit RichText-Feld richtig dargestellt

Beispiel für [Notizblock]:
"{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1031{\fonttbl{\f0\fnil\fcharset0 Arial;}}
{\colortbl ;\red0\green0\blue0;} {\*\generator Riched20 10.0.19041}\viewkind4\uc1\pard\cf1\b\fs16 VPE=5Stk.\b0\fs20\par}" 

Inhalt: VPE=5 Stk. (+Formatierung)

Da die verknüpfte Tabelle nicht geändert werden kann, habe ich dazu zwei Ansätze probiert:

1. Kopieren in eine neue Spalte [z.B. RTFText] Felddatentyp: langer Text, Textformat: Rich-Text
  Aktualisierungsabfrage: Feld: RTFText  Aktualisieren: [Notizblock]
  Um den Inhalt zu sehen muss man in das Feld klicken, erst dann wird der Inhalt richtig dargestellt.

2. Im Formular/Bericht habe ich ein weiteres Feld eingefügt mit Textformat Rich-Text und
  folgendes kopiert: =[Notizblock] Ich erhalte nur ein leeres Feld.

Baue ich diese Möglichkeiten in eine Testversion ein, scheint alles einwandfrei zu funktionieren.
Sobald ich aber mit der bestehenden verknüpfte Tabelle arbeite kommt es zu den oben beschriebenen Effekten.

Bei der Testversion habe ich den Formular/Berichtsassistenten verwendet, vermutlich wird dort ein
Parameter anders gesetzt.

Würde mich sehr freuen über eure Ideen.

Tom1212

Um das Problem besser zu verdeutlichen anbei der Screenshot zur Aktualisierungsabfrage.

Die Darstellung ist selbstverständlich auch im Bericht falsch.

Fragen:
Warum erfolgt die richtige Darstellung erst nach Klick auf das Feld?
Gibt es eine Möglichkeit den Klick zu simulieren?
Kann man die richtige Darstellung durch eine Einstellung erzwingen?

Freue mich auf eure Antworten.

markus888

Das hat vermutlich damit zu tun, dass Access kein Richtext verwendet, auch wenn das Format so heißt.
Ich würde - nachdem der Text richtig angezeigt wird - den Inhalt des Feldes mal per VBA auslesen und mit dem vergleichen was rein kopiert wurde.
Auch wenn Access das Format Rich-Text nennt so wird dennoch HTML für die Formatierung verwendet.
Mich wundert überhaupt, dass die Anzeige korrigiert wird - vermutlich wird der Inhalt irgendwie konvertiert.
10 Jahre Access

Tom1212

Hallo Markus,

es ist richtig, dass der Rich-Text intern konvertiert wird:

Der Rich-Text: {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1031{\fonttbl{\f0\fnil\fcharset0 Arial;}} wird zu:

<div><font size=3 color=black>&nbsp;&nbsp;</font><font size=1 color=black><strong>VPE=5Stk.</strong></font></div>

Das wäre auch so in Ordnung, leider erfolgt die Konvertierung aber erst, wenn ich in das Feld Klicke.

markus888

Zitat von: Tom1212 am November 11, 2021, 09:44:27leider erfolgt die Konvertierung aber erst, wenn ich in das Feld Klicke.

Ich finde es erstaunlich, dass überhaupt konvertiert wird.
Aber auf die Idee Richtext direkt einzufügen, wäre ich auch nie gekommen - da man in Access damit ja nichts zu tun hat.

Da müsste ich mir eine Lösung auch erstmal erarbeiten.
10 Jahre Access

PhilS

Zitat von: markus888 am November 11, 2021, 11:04:00
Zitat von: Tom1212 am November 11, 2021, 09:44:27leider erfolgt die Konvertierung aber erst, wenn ich in das Feld Klicke.
Ich finde es erstaunlich, dass überhaupt konvertiert wird.
Aber auf die Idee Richtext direkt einzufügen, wäre ich auch nie gekommen - da man in Access damit ja nichts zu tun hat.
Kleine Hintergrund-Info: Access hat einige Zeit, von A95 bis 2003(?), das "echte" Richt-Text-Format unterstützt (mehr oder weniger). Daher/Dafür sind vielleicht noch irgendwelche Konvertierungsfunktionen irgendwo vorhanden, die man vielleicht irgendwie auslösen kann. - Offiziell dokumentiert ist das meines Wissens nicht.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

Tom1212

Ich habe folgende Ansätze gefunden:

Tools mit ActiveX Control:
https://www.fmsinc.com/MicrosoftAccess/RichTextMemo.html (kostenpflichtig)
https://www.lebans.com/richtext.htm (wird nicht mehr supported)
--------------------------------------------------------------------------------------------------------
Rich-Text to Plaintext:
Der folgenden Code konvertiert den RTF-Code in lesbaren Plain-Text und fügt Ihn in die neue Spalte ein. Tabellenname, Spaltenname und "neuer" Spaltenname bitte in den Konstanten an deine Situation anpassen.

Public Function ConvRTFtoText( _
  ByVal strRTF As String, _
  Optional booSingleRun As Boolean) _
  As String

' Converts RTF formatted string to plain text using RTF ActiveX control.
' When finished, Rich Text object is removed if booSingleRun is True.
'
' 2001-05-27. Cactus Data ApS, CPH.
 
  Static objRTF As Object
  Static booErr As Boolean
  Dim strText   As String
 
  On Error GoTo Err_ConvRTFtoText
 
  If objRTF Is Nothing Then
    Set objRTF = CreateObject("RICHTEXT.RichtextCtrl")
  End If
 
  With objRTF
    .TextRTF = strRTF
    strText = .Text
  End With
 
  If booSingleRun = True Then
    Set objRTF = Nothing
  End If
 
  ConvRTFtoText = strText
 
Exit_ConvRTFtoText:
  Exit Function

Err_ConvRTFtoText:
  If booErr = False Then
    MsgBox "Error " & Err.Number & ". " & Err.Description & "!", _
           vbExclamation + vbOKOnly, _
           "Rich Text converter"
    ' Only show error message once per session.
    booErr = True
  End If
  Resume Exit_ConvRTFtoText
 
End Function

Sub ConvertRichtextColumnToPlaintextColumn()
    On Error Resume Next
    'Variablen
    Dim rec As Recordset, rtf as Object
    ' Konstanten
    ' Name der Tabelle
    Const TABLENAME = "Testdaten"
    ' Name des Feldes in dem der Richtext-String steht
    Const FIELDNAME = "Beschreibung"
    ' Name der neuen Spalte die erzeugt wird
    Const FIELDNAME_NEW = "Beschreibung_Neu"
    ' --------
    'RTF Control erzeugen
    Set rtf = CreateObject("RICHTEXT.RichtextCtrl")
    With CurrentDb
        ' neue Spalte der Tabelle hinzufügen
        .Execute "ALTER TABLE " & TABLENAME & " ADD " & FIELDNAME_NEW & " MEMO"
        'Recordset öffnen
        Set rec = .OpenRecordset(TABLENAME)
        rec.MoveFirst
        ' Jede Zeile durchlaufen und umgewandelten Richtext der neuen Spalte zuweisen
        While Not rec.EOF
            rtf.TextRTF = rec.Fields(FIELDNAME).Value
            rec.Edit
            rec.Fields(FIELDNAME_NEW).Value = Application.PlainText(rtf.Text)
            rec.Update
            rec.MoveNext
        Wend
    End With
    Set rtf = Nothing
    MsgBox "Verabeitung abgeschlossen", vbInformation
End Sub
--------------------------------------------------------------------------------------------------------

Hat jemand damit Erfahrung und/oder gibt es auch andere Ideen?

markus888

Zitat von: Tom1212 am November 17, 2021, 11:30:18Rich-Text to Plaintext:
Der folgenden Code konvertiert den RTF-Code in lesbaren Plain-Text und fügt Ihn in die neue Spalte ein.

Ich dachte du willst RichText zu HTML.

Ich erinnere mich Lösungen gesehen zu haben, die das Word-Objektmodell nutzen. Richtext einfügen und HTML auslesen.
Hab auch schon Lösungen mit Excel gesehen.

In allen Fällen ist aber Voraussetzung, dass du in Access mit einem Formular arbeitest.
Aber ich dachte bei einem Formular wird die Konvertierung eh automatisch durchgeführt? Dann erledigt sich das Thema eh.
Was man noch testen könnte: Wenn man Richtext in das Clipboard kopiert - ob da nicht auch HTML automatisch erzeugt wird. Hab echt keine Ahnung - falls du dich aber mit Programmieren etwas auskennst kannst du das versuchen.
Du fügst das ja auch mittels copy&paste ein. Vielleicht erzeugt die Source Anwendung ja auch automatisch HTML, wenn das den Text beim Kopieren in die Zwischenablage einfügt.
10 Jahre Access

Tom1212

Ich möchte echten Rich-Text {\rtf1... in einem Bericht als formatierten Text darstellen.
(Nur-Text wäre nur eine Notlösung und HTML ist das Ergebnis der Access Konvertierung.)

Bisher habe ich nur Teilerfolge mit Einschränkungen aber noch keinen kompletten funktionierenden Weg.

Danke für deine Hinweise werde ich mir im Detail anschauen und ausprobieren.

ebs17

Zitatechten Rich-Text
Wo kommt das RTF-Format heute noch wirklich vor?

Ich würde an den Quellen arbeiten: RTF-Dokument in Word öffnen und als HTML abspeichern. Von diesem HTML das heutige Office-"RichText" ableiten (einige Tags sollten ja entfallen) und dieses speichern, das einmalig.
Einen solchen Vorgang könnte man auch automatisieren.
Mit freundlichem Glück Auf!

Eberhard

Tom1212

Die Basis ist ein aktuelles ERP-System mit vielen MEMO-Feldern (Rich-Text, langer Text, Nur-Text) für Artikelbeschreibungen und Kommentaren. Da ich die Basis leider nicht ändern kann, brauche ich eine Lösung direkt in Access.   


ebs17

Die Tabellen des ERP-Systems sind direkt wegen Hochaktualität der Daten in Dein Access-FE verknüpft? Dort würde eine Live-Konvertierung nötig werden.

Bei allem aber, was nach Export/Import klingt, hat man es mit einer Schnittstelle zu tun, wo man auch in einem einmaligen Vorgang geeignete Datenstrukturen für sich selber wie auch Formatierungen erzeugen kann, um sie nachhaltig vorteilhaft zu nutzen. Bei Einmaligkeit kann man ungestraft eine Menge mehr Aufwand treiben, zumal wenn man es dann auf die jeweils nur neuen Daten reduziert.

ERP klingt doch nach ein paar mehr Daten als die heimische CD-Sammlung. Da dürfte es recht schnell in Laufzeiten eingehen, ob ich auf gespeicherte unmittelbar verwendbare Inhalte zugreife oder da eine jeweilige Neuberechnung ausführen muss. Das Thema Indexnutzung und somit zusätzlich mögliche (und nötige?) Performance setzt dann unmittelbar auf den Block gespeichert/berechnet auf.






Mit freundlichem Glück Auf!

Eberhard