Announcement

Collapse
No announcement yet.

Steuerzeichen in Memo Feld beim Öffnen einer Datei

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    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

    Comment


    • #3
      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

      Comment


      • #4
        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

        Comment


        • #5
          Originally posted by FrankAs View Post
          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

          Comment


          • #6
            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.

            Comment


            • #7
              Originally posted by FrankAs View Post
              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

              Comment


              • #8
                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

                Comment


                • #9
                  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

                  Comment

                  Working...
                  X