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.
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.
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.
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> </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.
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.
Zitat von: markus888 am November 11, 2021, 11:04:00Zitat 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.
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?
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.
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.
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.
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.
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.
Ich habe von FMS Total Access Memo getestet, damit lassen sich RTF Texte im Formular und im Bericht richtig darstellen.