Announcement

Collapse
No announcement yet.

Bookmarks im Word-Dok

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

  • Bookmarks im Word-Dok

    Hallo zusammen,
    wenn ich jedem Absatz des Textes ein Bookmark zuordne, (bei Übergabe des Textes an Word)kann ich diese hinterher auch wieder auslesen. Das Problem ist nur der Bezug zum absatz ist weg! Soll heissen mit:
    wordapplication.activedocument.paragraphs.item(k) gehe ich durch das gesamte Dokument, wenn ich aber in
    index := k; // index ist OLEVariant
    name := wordapplication.activedocument.bookmarks.item(inde x).name den namen abfrage, stimmt dieser nicht mit dem gesetzten überein.
    weiss jemand Rat?
    ralph

  • #2
    Welchen Bookmark erhälst du denn anstatt?<p>
    Wenn Du einen kompletten Absatz einschließt, kann ich mir vorstellen, dass Dein Bookmark einen Abstatz früher offiziell beginnt. Was ist denn Dein Ziel vom Vergleich? Wenn Du gezielt einen Bookmark auswählst, wird er dann falsch selektiert?<p>
    Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      hallo mario,

      also, die bookmarks sind alphabetisch geordnet,trotz der zuweisung wdsortbylocation.

      das ziel ist, einen absatz anhand des bookmarks zu identifizieren (bei bestimmten namen bestimmte formatierung zuweisen.

      ich hab auch schon versucht, nur die bookmarks eines absatzes auszulesen, hat nicht geklappt. sicherlich irgendwo ein denkfehler, wie der bookmark anzusprechen ist.

      WordApp.ActiveDocument.Paragraphs.item(k).Range.Bo okmarks

      gibt ebenfalls alle bookmarks des doks zurück (und nicht nur den des Absatzes).;-(

      mfg ralp

      Comment


      • #4
        Normalerweise nutzt Du Bookmarks um Bereiche zu ermitteln:<p>
        OleStr := 'NameBookmark';<br>
        WordApp.ActiveDocument.Bookmarks.Item(OleStr).Rang e.?<p>
        Dazu musst Du natürlich der Namen kennen. Aber es sollte statt OleStr auch eine Zahl nutzbar sein.<p>
        Bookmarks eines bestimmten Absatzes auslesen macht aus meiner Sichtweise wenig Sinn, schliesslich sind sie ja dazu da, Stellen dokumentenweit einfach zu finden. Dann kannst Du gleich den Absatz-Bereich nutzen.<p>
        Schöne Grüße, Mario Noac
        Schöne Grüße, Mario

        Comment


        • #5
          Hallo Ralph,

          ich verwende Sektionen innerhalb der Worddokumente.

          Hier mal eine kleine Funktion aus einem Projekt von mir.
          <pre>
          function GetBandType(aWinWord: Word97._Application; aDokName: OLEVariant;
          const aIndex: integer; var BandName: string): TWordReportBandType;
          var
          il_count: integer;
          il_temp: integer;
          tl_temp: TWordReportBandType;
          sl_temp: string;
          ole_temp: OLEVariant;
          begin
          result := btInvalide;
          with aWinWord.Documents.Item(aDokName).Sections.Item(aI ndex).Range do begin
          il_count := Bookmarks.count;
          if il_count > 0 then
          for il_temp := 1 to il_count do begin
          ole_temp := il_temp;
          sl_temp := Bookmarks.Item(ole_temp).Name;
          // durch alle Bandtypen iterieren
          for tl_temp := low(TWordReportBandType) to high(TWordReportBandType) do
          if AnsiCompareTextStartingWith(cWordBandTypeName[tl_temp], sl_temp) then begin
          result := tl_temp;
          BandName := sl_temp;
          exit;
          end;
          end;
          end;
          end;
          </pre>

          Das vollständige Projekt ist ein Reportgenerator für Word, d.h. es gibt verschiedene Bandtypen (z.B. Reporttitle, Pageheader, Masterdata,Masterfooter, Subdetaildata, Groupheader, Reportsummary usw.)

          Der Bandtyp wird an Hand einer Textmarke innerhalb des jeweiligen Sektors über den Namen dieser Textmarke erkannt.

          Tschüß

          Torste

          Comment


          • #6
            hallo mario,

            ich benutze ja auch den absatz-bereich, nur war meine idee eben, den absatz anhand eines bookmarks zu identifizieren.

            also mal ein wenig ausführlicher:

            in einer for-schleife durch alle worddoc.paragraphs soll eine bestimmte formatierung gesetzt werden, wenn in diesem paragraph ein bookmark zum beispiel mit name = 'datum' auftaucht.

            somit haben dann in einem veranstaltungsplan alle datums-uhrzeit angaben die gleiche formatierung und alle bezeichnungen der veranstaltung eine andere.

            benuzte ich nun den range des bookmarks, (so wie du vorgeschlagen hast) ist der start des range immer position null, das ende ist korrekt. dies hat zur folge, dass der letzte bookmark das komplette dokument formatiert.

            aber vielleicht gibt es ja bessere möglichkeiten, absätze zu typisieren?

            mfg ralp

            Comment


            • #7
              Hallo Ralph,<p>
              Das der Start vom Range Null sein soll, kann ich nicht reproduzieren und normal sollte das auch nicht sein! Ich habe gerade mal in einem Dokument den Range verschiedenster Bookmarks ermittelt und ausgeben lassen. Der Start und End-Wert war immer korrekt. Der angedachte Weg ist ja eigentlich OK! Warum Du aber die Paragraphs durchläufst, verstehe ich noch nicht ganz. Versuche doch mal:<br>
              <i>aWordDocument.Bookmarks.Item(OleStr).Range;</i><p>
              Ich arbeite mit Delphi 6.02, den Office97-Bibliotheken die dabei waren und auf diesem Rechner hier WordXP mit allen Service-Packs.<p>
              Schöne Grüße, Mario Noac
              Schöne Grüße, Mario

              Comment


              • #8
                nach vielem rumprobieren hab ich jetzt 'ne loesung (zwei verschachtelte for-schleifen).

                nicht wirklich zufriedenstellend, aber funktioniert, und wie immer ist die zeit knapp.

                wenn ich mal viel zeit habe kram ich das problem (vielleicht) noch mal raus ;-))

                mfg ralp

                Comment

                Working...
                X