AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Word OLE -> Kopfzeile Textmarke

Ein Thema von darkhell · begonnen am 20. Jul 2011 · letzter Beitrag vom 22. Jul 2011
Antwort Antwort
darkhell

Registriert seit: 17. Nov 2008
30 Beiträge
 
#1

Word OLE -> Kopfzeile Textmarke

  Alt 20. Jul 2011, 15:41
Hi @ll,

hoffe ich bin im Richtigen Unterforum gelandet.

Verwende :
WinXP Pro
Word 2000
Delphi 2009

Prinzipiell ich hab heute den ganzen Tag schon irgendwie nach Hilfestellungen gegoogelt und verzweilfe, ev. hat mir einer von euch eine Idee.

WordApp.ActiveWindow.ActivePane.View.SeekView := wdSeekCurrentPageHeader; So ich gehe in den Header ...

WordApp.Selection.TypeText(Text:= 'blubbtest'); Einfach mal zum testen .. klappt auch hier wird einfach in die Kopfzeile blubbtest geschrieben ..

if WordApp.ActiveDocument.Bookmarks.Exists('Überschrift_Block_1') then BEGIN So dann Frag ich ob die Textmarke "Überschrift_Block_1" vorhanden ist ...
da geht er mir mit True weiter ...

  WordApp.Selection.GoTo(wdGoToBookmark,emptyParam,emptyParam,'Überschrift_Block_1'); Nur jetzt sagt er mir "Überschrift_Block_1" gibts nicht ...

Wenn die Textmarke im normalen Text ist und nicht in der Kopfeile .. klappt es wunderbar ...


hoffe einer von euch hat mir ne idee,

Danke schon mal

Gruß,
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Word OLE -> Kopfzeile Textmarke

  Alt 20. Jul 2011, 16:14
Zunächst solltest Du die Finger von "Überschrift.." lassen, "Ueberschrift kommt im Zweifel besser.
Das stimmt, aus irgendwelchen Gründen werden Bookmarks in Kopf und Fußzeilen nicht erkannt.
pack das Bookmark irgendwo in den Text (und lösch es nach Gebrauch) und hol Dir die Daten über {REF ...}

das funktioniert.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
darkhell

Registriert seit: 17. Nov 2008
30 Beiträge
 
#3

AW: Word OLE -> Kopfzeile Textmarke

  Alt 20. Jul 2011, 16:30
Hi K-H,

danke erst mal für die Fixe Antwort,

ah okee ja das ist ne gute Idee mit dem Ü .

Nur wenn ich das ganze über eine REF wieder hole und die Textmarke im Text lösche dann fehlt sie mir doch und sobald ich nun eine Seitenansicht machewars das doch mit den Daten oder ?
Alla "Fehler! Verweisquelle konnte nicht gefunden werden."

Ich will eben nicht nur ein PDF draus machen sondern das Word nur Vorausfüllen für Dokuarbeiten, wobei ich eben dann so n paar default stellen vor ausfüllen möchte.

Da meine Kopfzeile in Tabellen Aufgeteilt ist ist es für mich zumindest (bin OLE Anfänger ^^) arg schwierig da Vernünfgite Daten reinzubekommen.

Zudem nutze ich die Textmarken in meinem WordDokument im moment auch noch dazu bei einer neuen Seite dann eben die Kopfzeile Automatisch zu füllen (Seite1 hat eine Andere Kopfzeile wie Seite2...)


Hast du mir dazu noch eine Idee oder denke ich gerade falsch ?

Vielen Dank

Manuel
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Word OLE -> Kopfzeile Textmarke

  Alt 20. Jul 2011, 17:39
Also ich mache es so, daß ich eine .DOT habe mit allen Bookmarks und Feldern.
Aus dieser wird das das Ausgabedokument erstellt. Das kann ich dann Drucken, Speichern Editieren ....

Ich nutze Word als Word-File-Generator.

Du kannst ja auch problemlos in der zweiten Kopfzeile andere Bookmarks anziehen, wenn Du dort andere Daten benötigst.

Auch spricht ja nichts dagegen, das erstellte Dokument noch einmal zu editieren.

Gruß
K-H

Edith:
Ich hatte es übersehen da gibts so etwas wie "Felder aktualisieren" das sollte man natürlich ausführen bevor die Bookmarks im Orkus verschwinden. (und danach nicht mehr)
Ich komme heute nicht mehr an mein Word heran, kann aber morgen gerne noch einmal nachschauen.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (20. Jul 2011 um 17:43 Uhr)
  Mit Zitat antworten Zitat
darkhell

Registriert seit: 17. Nov 2008
30 Beiträge
 
#5

AW: Word OLE -> Kopfzeile Textmarke

  Alt 21. Jul 2011, 08:02
Hi,

uhm ^^ also genau das hab ich ja eigentlich auch vor. Also das teil als Word File Generator zu nutzen so Dinge wie "Erstellungs Datum" die Überschrift um was es geht .. das einfach schon mal vor Auszufüllen...

Wieso verwendest du eine .dot (einfach weils ne Vorlage ist oder, ists damit schneller ?)

Also ich habs gerade Probiert (rein in Word) wenn ich eine Referenz habe auf ne Textmarke die ich dann lösche und nun das Dokument Speichere kommt mir wieder "Fehler! Verweisquelle konnte nicht gefunden werden."

hmmz ich dreh noch durch ^^

Geändert von darkhell (21. Jul 2011 um 08:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Word OLE -> Kopfzeile Textmarke

  Alt 21. Jul 2011, 14:58
Es hat ein wenig gedauert weil es nicht so lief wie ich es im Kopf hatte.
Hiermit sollte es aber gehen:
Delphi-Quellcode:
var
  i,j : integer;
  sectcnt : integer;
  bkmkcnt : integer;
  bkmkrange : variant;
  bkmkName : string;
  headfootcnt:integer;
begin
  msword:=0;
  try
    msword:=createoleobject('WORD.APPLICATION');
  except
    showmessage('Word kann nicht gestartet werden!');
    exit;
  end;
  msword.Documents.Add('c:\temp\word_bookm_test.dot'); { mit Template!}
  bkmkcnt:=msword.ActiveDocument.Bookmarks.count;
  Memo1.Lines.Add(' Word-Dokument:'+msword.ActiveDocument.name);
  Memo1.Lines.Add(' Anzahl Bookmarks:'+inttostr(bkmkcnt));
  Memo1.Lines.Add('');
  Memo1.Lines.Add('Index BookmarkName');
  i:=1;
  if bkmkcnt>0 then
    repeat
      Memo1.Lines.add(inttostr(i)+') '+msword.ActiveDocument.bookmarks.item(i).name);
      inc(i,1);
    until i>bkmkcnt;
  Memo1.Lines.Add('');
  Memo1.Lines.Add(' Bookmark.Text');
  if bkmkcnt>0 then
    for i:=bkmkcnt downto 1 do begin
      try
        {-- so werden die bookmarks gelöscht aber derr Text eingetragen -----}
        //msword.ActiveDocument.bookmarks.item(i).select;
        //Memo1.Lines.add(msword.selection.range.text);
        //msword.selection.text:='wert ist '+inttostr(i);
        {-- so bleiben die Bookmarks erhalten -------------------------------}
        Memo1.Lines.add(msword.ActiveDocument.bookmarks.item(i).range.text);
        bkmkName:=msword.ActiveDocument.bookmarks.item(i).Name;
        bkmkRange:=msword.ActiveDocument.bookmarks.item(i).range;
        bkmkRange.Text:='Rangetext '+inttostr(i);
        msword.ActiveDocument.Bookmarks.Add(bkmkName,bkmkRange);
      except
        Memo1.Lines.add(inttostr(i)+'. Textmarke nicht gefunden!');
      end;
    end;

  bkmkcnt:=msword.ActiveDocument.Bookmarks.Count;
  Memo1.Lines.Add(' Nach Update vorhandene Bookmarks #'+inttostr(bkmkcnt));

  {-- ALLE Felder aktualisieren ---------------------}
  msword.ActiveDocument.select;
  msword.Selection.wholeStory;
  if not (msword.Selection.Fields.Update = 0) Then
    memo1.lines.add(' Field Update fehlgeschlagen ');

  sectcnt:=msword.ActiveDocument.Sections.count;
  if sectcnt>0 then begin
    for i:=1 to sectcnt do begin
      headfootcnt:=msword.ActiveDocument.Sections.Item(i).Footers.count;
      for j:=1 to headfootcnt do begin
        msword.ActiveDocument.Sections.Item(i).Footers.Item(j).Range.select;
        msword.Selection.wholeStory;
        if not (msword.Selection.Fields.Update = 0) Then
          memo1.lines.add(' Field Update fehlgeschlagen ');
      end;
      headfootcnt:=msword.ActiveDocument.sections.Item(i).Headers.count;
      for j:=1 to headfootcnt do begin
        msword.ActiveDocument.sections.Item(i).Headers.Item(j).Range.select;
        msword.Selection.wholeStory;
        if not (msword.Selection.Fields.Update = 0) Then
          Memo1.Lines.Add(' Field Update fehlgeschlagen ');
      end;
    end;
  end;

  msword.ActiveDocument.Saveas('C:\temp\word_bookm_test.doc');
  msword.ActiveDocument.close(0); {0=Keine Änderung sichern}
  msword.quit;
  msword:=unassigned;
end;
Unter Word2003 kann man damit auch Bookmarks im Header anspringen.
Die beiden Word.Dateien häng ich mal an.

Gruß
K-H

Edith:
Jo, die Fehlerbehandlung ist rudimentär!

Edith2:
So ist das Ende etwas besser
Angehängte Dateien
Dateityp: zip word_bookm_test.zip (3,0 KB, 29x aufgerufen)
Dateityp: zip word_bookm_test_dot.zip (2,8 KB, 20x aufgerufen)
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (21. Jul 2011 um 17:05 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz