Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 9 von 9
  1. #1
    Neuer Benutzer
    Registriert seit
    11.08.2017
    Ort
    Ganderkesee
    Beiträge
    4

    Standard Steuerzeichen in Memo Feld beim Öffnen einer Datei

    Ich arbeite mit Advantage Database Server 8.1 (ads81r) und möchte mit Advantage Database Architekt (oder anderem Programm?)
    eine Datenbank-Datei (Endung ADT) in eine Excel-Datei exportieren.

    Enthalten ist u.a. ein Memo-Feld und in diesem Feld sehe ich neben dem von mir benötigten Text zusätzlich den Richtext-Code:

    Beispiel:

    {\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Tahoma;}}\viewkind4\uc1\pard\lang1031\f0\fs18 - Schleifen\par auf 60mm\par\par}

    Wie kann ich eine Excel-Datei erzeugen, in der diese Felder ohne den Richtext-Code gefüllt sind:

    Mein Beispiel-Feld müsste folgenden Inhalt haben:

    Schleifen auf 60mm

  2. #2
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.245

    Standard

    Tja, ich würde mich als erstes fragen, wie der Text da rein gekommen ist.
    EMail Programme tragen im Body gern mal verschiedene Varianten ein.

    Wenn es bereits ein Programm gibt, dass die ADT Daten verarbeitet, wäre das m.E. ein Ansatzpunkt.
    Ansonsten ein geeignetes Export Format wählen und ein RTF Konverter Tool einsetzen oder nach VBA Makro / -Code suchen, der RTF Formatierung entfernt.
    Gruß, defo

  3. #3
    Neuer Benutzer
    Registriert seit
    11.08.2017
    Ort
    Ganderkesee
    Beiträge
    4

    Standard

    Hallo defo,

    erstmal danke für Deine Antwort.

    Der Feldinhalt stammt aus einem Wawi-Programm namens "metropolis", wo er in
    einem Memofeld eingetragen wird. Ich arbeite mit Windows10 und Excel2016.

    Bin bis heute noch nicht weiter. Wenn nichts geht, werde ich in Excel mit "Suchen und ersetzen"
    arbeiten, aber das wäre extrem aufwendig. Die Excel-Datei hat mehr als 60000 Datensätze

    Wie setze ich VBA Code ein? Ich kenne mich damit nicht aus. Komme aus der Welt der iSeries.
    Solltest Du Code haben, wäre es toll, wenn Du mir die Stellen nennen könntest, an denen
    Variablen durch meine Feld-/Dateinamen ersetzt werden müssten:

    Dateiname: artikel.xlsx
    Feldname: Bearbeitung

    Danke

    Gruß
    Frank

  4. #4
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.144

    Standard

    Irgendwo muss hier Programmlogik untergebracht werden.
    Da es ja aus der DB raus soll, wäre es erstmal gut, wenn die DB reguläre Ausdrücke beherrscht.
    Anhand eines Beispiel kann man wenig sagen.
    Aber
    - löschen von \par
    - löschen von }
    - regulärer Ausdruck, der von { bis zum ersten Leerzeichen löscht
    Dann bleibt noch "- " ggf. zum löschen.
    Damit sollte man schon einiges erreichen.
    Nützt alldings nix, wenn immer wieder sowas dann in die DB geschrieben wird
    Christian

  5. #5
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.245

    Standard

    Zitat Zitat von FrankAs Beitrag anzeigen
    Wie setze ich VBA Code ein?
    Schreibe den Beispielcode in Excel Zelle A1
    Erzeuge ein Makro das den Code unten aufruft, z.B.
    Code:
    Sub testrtf()
    '
    ' testrtf Makro
    '
        Range("B1").Value = RemoveRTFFromString(Range("A1").Value)
    End Sub
    http://www.ozgrid.com/forum/showthre...70465&p=732781
    http://www.ozgrid.com/forum/showthre...781#post732781


    probiere, ob er alles erwischt, ich hab nur eine kurze Probe gemacht.
    GGf. musst Du nachbessern.


    Code:
     Public Function RemoveRTFFromString(ByVal str As String) As String
        If str <> "" Then
            Dim resStr As String
            Dim regEx1 As Object
             
            Set regEx1 = CreateObject("VBScript.RegExp")
            With regEx1
                .Global = True
                .IgnoreCase = False
                .MultiLine = True 'Only changes how script reads newlines (FALSE = treats entire string as one line.  TRUE = treats each line of text [up to newline chars] as one line)
            End With
             
             'Remove all {\code}  ,  \code  ,  and  }}  kinds of patterns
            regEx1.Pattern = "({\\)(.*)(}+)|(\\)([a-zA-Z0-9_;-]+)|(\}*)(\s*)(\}*)$"
            resStr = regEx1.Replace(str, "")
             
             'Replace all non-tab and space \s chars with a space " " (so lines of text are seperated)
            regEx1.Pattern = "\r|\n|\v|\f"
            resStr = regEx1.Replace(resStr, " ")
             
             'Trim ends
            regEx1.Pattern = "^( +)|( +)$"
            resStr = regEx1.Replace(resStr, "")
             
            Set regEx1 = Nothing
             
             RemoveRTFFromString = resStr
        Else
             RemoveRTFFromString = str
        End If
    End Function
    Gruß, defo

  6. #6
    Neuer Benutzer
    Registriert seit
    11.08.2017
    Ort
    Ganderkesee
    Beiträge
    4

    Standard

    ich habe ein Makro in meiner Excel-Datei erstellt unter
    - Entwicklertools
    - Visual Basic
    erstellt und dort sehe ich den Code auch im Fenster "Projekt - VBAProjekt" unter "Module" in "Modul1".
    Der zu überarbeitende Text befindet sich in Spalte D und ich möchte des `neuen` Text in Spalte E übertragen:

    _____

    Sub testrtf()
    '
    ' testrtf Makro
    '
    Range("E1").Value = RemoveRTFFromString(Range("D1").Value)
    End Sub
    ____

    Wie aber bekomme ich jetzt den Beispielcode (Funktion RemoveRTFFromString) in die Zelle A1? Und warum genau
    in diese Zelle? Kannst Du mir das mal exakt Schrittweise erläutern?

    Ich bitte um Nachsicht, dass ich mich so schwer tue, aber die ganze Thematik ist für mich Neuland.
    Ich bin ins kalte Wasser geworfen worden.

  7. #7
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.245

    Standard

    Zitat Zitat von FrankAs Beitrag anzeigen
    ich habe ein Makro in meiner Excel-Datei erstellt unter
    - Entwicklertools
    - Visual Basic
    erstellt und dort sehe ich den Code auch im Fenster "Projekt - VBAProjekt" unter "Module" in "Modul1".
    Der zu überarbeitende Text befindet sich in Spalte D und ich möchte des `neuen` Text in Spalte E übertragen:

    _____

    Sub testrtf()
    '
    ' testrtf Makro
    '
    Range("E1").Value = RemoveRTFFromString(Range("D1").Value)
    End Sub
    ____

    Wie aber bekomme ich jetzt den Beispielcode (Funktion RemoveRTFFromString) in die Zelle A1? Und warum genau
    in diese Zelle? Kannst Du mir das mal exakt Schrittweise erläutern?
    Das Makro hast Du ja schon richtig angepasst. In dieser Form ist es nur ein Test, der nicht eine Spalte durchläuft, sondern lediglich eine Zelle verarbeitet.

    Deine Frage zu Code in A1 verstehe ich nicht. Gemäß meines Beispiels standen die RTF Quelldaten in Zelle A1. Das hast Du ja offenbar anders vorliegen.
    Falls Du den Funktionscode meinst, der gehört nicht ins Sheet, Zelle A1, sondern in den VBA Code Bereich. Wenn du das Makro editierst, kannst Du die RTF Function einfach hinter das Macro kopieren. Falls Dir nicht klar ist, wie die Daten an die Funktion übergeben werden, das geschieht im Makro, das Du bereits auf Deine Bedürfnisse angepasst hast. A1 wird dann offenbar für diesen Vorgang nicht mehr benötigt.


    Was am Ende dann fehlt, ist eine Operation, die den Funktionsaufruf nicht nur einmalig durchführt, sondern für die gesamte Spalte (solange Daten vorliegen)

    Falls Du mit dem VBA Zeug Probleme hast, ich nutze das nur alle Jubeljahre und bin sicher kein versierter Helfer. In dem Forum, aus dem der Link oben stammt oder in dutzenden anderen derartigen Foren findest Du ziemlich sicher auch gute Antworten zu Deinen Fragen. Ansonsten kann Du weitere Fragen zu VBA natürlich auch hier posten, aber mit Advantage DB Server hat das wohl nichts zu tun. Weiß grad nicht auswendig, ob in diesem Forum auch VBA Bereich sind.
    Gruß, defo

  8. #8
    Neuer Benutzer
    Registriert seit
    11.08.2017
    Ort
    Ganderkesee
    Beiträge
    4

    Standard

    Ich danke Dir; Deine Ausführungen haben mir schon sehr geholfen.

    Das mit dem Anhängen der Funktion im Makro klappt :-)

    Das Lesen des nächsten Datensatzes habe ich ebenfalls hin, indem ich "Do" und "Loop" im Makro eingebaut habe.

    Was mir jetzt nur noch fehlt, das ist die Verarbeitung der jeweils aktuellen Zeile, um Spalte D dieser
    Zeile nach Spalte E - ggf. nach Überarbeitung - zurückzuschreiben, also sozusagen Aufbau von Variablen
    mit Inhalt 'Dnnnnn' und 'Ennnnn' (nnnnn = Zeilennummer).

    Vielleicht hat da noch jemand Infos für mich!?!

    Gruß
    Frank

  9. #9
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.245

    Standard

    Vielleicht machst Du Dir als erstes geläufig, wie relative und absolute Zelladressierung in Spreadsheets funktioniert.
    Nimm dir ein paar Werte in einem sheet und lege eine Formel an, die daraus etwas errechnet
    Die Formel kopierst du spalten- oder zeilenweise im Sheet umher. Dabei justiert Excel selbst die Zelladressierung innerhalb der Formel, abhängig davon, wie Du die Zellbezüge eingetragen hast.
    Bekommst Du es hin, eine Formel zu schreiben, die sowohl die aktuelle Zeile mit einer festen Spalte berücksichtigt, als auch eine konstante Zelle, also Zeile und Spalte fix (die meinetwegen einen (editierbaren) Vorgabewert für die Formel enthält, wie bspw. Mwst)?

    Naja nur als Übung oder Idee, keine Ahnung wie bewandert Du da bist.
    Wenn Du irgendwo in den angesprochenen Foren ein Beispiel mit einer Loop findest, wirst du auch eins finden, das innerhalb der Loop Zellen ausliesst und Ergebnisse zurückschreibt (in andere Zellen der gleichen Zeile)
    Gruß, defo

 

 

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •