Word Automation

17. März 2010 00:01

Hallo Zusammen,
ich möchte aus NAV direkt ein Word Dokument erstellen.
Dazu habe ich eine Word Vorlage mit einer Textmarke (MB01) erstellt.
Diese Textmarke spreche über meine Code an. Soweit alles ok.

Ich möchte jetzt aber pro Datensatz jeweils eine neue Seite erstellen. Also ein Dokument mit beliebig vielen Seiten kreieren.

Dazu müsste ich ja die Vorlage irgendwie duplizieren. Ich weiß nur nicht wie. Kann mir einer helfen?

Danke und Gruß

Anbei mein Code zum Erstellen einer Datei mit einer Seite:
Code:
Item.FINDFIRST;

TemplateName := 'C:\Item.dot';

IF ISCLEAR(wdApp) THEN
  IF NOT CREATE(wdApp, FALSE) THEN
    ERROR('Konnte keine Word-Instanz erstellen!');

IF NOT EXISTS(TemplateName) THEN
  ERROR('Wordvorlage %1 existiert nicht!', TemplateName);

wdDoc := wdApp.Documents.Add(TemplateName);
wdBookMarks := wdDoc.Bookmarks;

NameBookmark := 'BM01';
IF wdBookMarks.Exists(NameBookmark) THEN BEGIN
  wdBookMark := wdBookMarks.Item(NameBookmark);
  wdRange := wdBookMark.Range;
  wdRange.Text(Item.Description);
  wdRange.Bold(1);
END;

Path := 'C:\' + Item."No.";
wdDoc.SaveAs(Path);

wdApp.Visible(TRUE);
wdApp.ScreenUpdating(TRUE);
wdApp.Activate;

CLEAR(wdDoc);
CLEAR(wdApp);
CLEAR(wdRange);
CLEAR(wdBookMarks);
CLEAR(wdBookMark);


Variablen
Code:
Name   DataType   Subtype   Length
wdApp   Automation   'Microsoft Word 11.0 Object Library'.Application   
wdDoc   Automation   'Microsoft Word 11.0 Object Library'.Document   
wdRange   Automation   'Microsoft Word 11.0 Object Library'.Range   
wdBookMarks   Automation   'Microsoft Word 11.0 Object Library'.Bookmarks   
wdBookMark   Automation   'Microsoft Word 11.0 Object Library'.Bookmark   
Item   Record   Item   
TemplateName   Text      30
NameBookmark   Text      30
Path   Text      30

Re: Word Automation

17. März 2010 00:09

[Beitrag aus dem Problemforum nach NAV 5.xx verschoben, da es ein produktbezogenes Problem ist (und nichts mit diesem Board zu tun hat).]

Gruß, Kai
MSDynamics.de-Team


P.S. Herzlich Willkommen im Forum!

Re: Word Automation

17. März 2010 10:01

Ein Dokument mit vielen Seiten oder viele Dokumente?

Code:
Path := 'C:\' + Item."No.";
wdDoc.SaveAs(Path);


Dies bedeutet für jeden Artikel ein neues Dokument.

Re: Word Automation

17. März 2010 15:13

Hallo,
aktuell kann ich für jeden Datensatz ein neues Dokument erstellen.

Ich benötige aber ein Dokument, und für jeden Datensatz eine neue Seite.

Ich brauche also etwas wie:
Code:
wdDoc := wdApp.Documents.Add(TemplateName);
...
  repat
    // Erzeuge eine neue Seite auf Basis der Vorlage
  until
...
Path := 'C:\' + Item."No.";
wdDoc.SaveAs(Path);

Re: Word Automation

17. März 2010 17:38

Deurges hat geschrieben:Ich benötige aber ein Dokument, und für jeden Datensatz eine neue Seite.


Hast Du schon mal nach Seriendruck oder Serienbrief gesucht?

Volker

Re: Word Automation

19. März 2010 20:17

vsnase hat geschrieben:
Deurges hat geschrieben:Ich benötige aber ein Dokument, und für jeden Datensatz eine neue Seite.


Hast Du schon mal nach Seriendruck oder Serienbrief gesucht?

Volker


Hallo Volker,
ja habe ich schon. Leider keine Lösung gefunden...

Prinzipiell muss es gehen. Wenn ich die Seriendruck Funktion aus Word heraus starte und eine externe Quelle einbinde, dann erzeugt er mir genau meine Anforderung.

Allerdings ist es für den Anwender wesentlicher schicker, wenn er direkt aus NAV ein Word Dokument kreiert "bekommt".
Außerdem muss ich in das Dokument Bilder integrieren. Von daher kann ich keine CSV oder ähnliches exportieren.

Hat keiner eine Idee?

Gruß Mike

Re: Word Automation

20. März 2010 15:01

Hallo Mike,

kannst Du mal Deinen Brief näher beschreiben? Was soll drin stehen? Von wo kommen die Daten? Wo sind die Bilder? Wie wird der Brief gestartet?

Volker

Re: Word Automation

22. März 2010 11:11

vsnase hat geschrieben:Hallo Mike,

kannst Du mal Deinen Brief näher beschreiben? Was soll drin stehen? Von wo kommen die Daten? Wo sind die Bilder? Wie wird der Brief gestartet?

Volker


Hallo Volker,
eigentlich kann man die Details meinem ersten Posting entnehmen.

Die Grundlage für den Brief ist irgend eine NAV Tabelle. In meinem Beispiel die Tabelle "Item".
Ich erstelle dann eine Wordvorlage, hinterlege dort eine Textmarke 'BM01' und füge diese in der Wordvorlage ein. Die Vorlage speicher ich unter C:\Item.dot.

Jetzt öffne ich direkt aus NAV mit Hilfe eines Office "Automaton Control" die Vorlage und fülle die Textmarke mit der Artikelbeschreibung. Soweit funktioniert auch alles bestens.

Mein Beispiel bezieht sich jetzt auf einen Artikel und erstellt ein Dokument. Ich benötige jetzt aber viele Artikel und weiterhin ein Dokument mit n-Seiten.

Ich brauche also einen Befehl, um auf Basis der Wordvorlage eine neue Seite innerhalb des Dokuments zu erstellen.

Der Quellcode müsste strukturell wahrscheinlich folgender Maßen aussehen. Wobei das "?????" zu definieren wäre:

Code:
IF Item.FINDFIRST THEN BEGIN

  i := 0;
  TemplateName := 'C:\Item.dot';

  IF ISCLEAR(wdApp) THEN
    IF NOT CREATE(wdApp, FALSE) THEN
      ERROR('Konnte keine Word-Instanz erstellen!');

  IF NOT EXISTS(TemplateName) THEN
    ERROR('Wordvorlage %1 existiert nicht!', TemplateName);

  REPEAT

    i += 1;
    if i > 1 then
      // Ab dem zweiten Datensatz, erstelle eine neue Seite auf Basis der Vorlage
      ?????

    wdDoc := wdApp.Documents.Add(TemplateName);
    wdBookMarks := wdDoc.Bookmarks;

    NameBookmark := 'BM01';
    IF wdBookMarks.Exists(NameBookmark) THEN BEGIN
      wdBookMark := wdBookMarks.Item(NameBookmark);
      wdRange := wdBookMark.Range;
      wdRange.Text(Item.Description);
      wdRange.Bold(1);
    END;

  UNTIL Item.NEXT = 0;

  Path := 'C:\' + Item."No.";
  wdDoc.SaveAs(Path);

  wdApp.Visible(TRUE);
  wdApp.ScreenUpdating(TRUE);
  wdApp.Activate;

  CLEAR(wdDoc);
  CLEAR(wdApp);
  CLEAR(wdRange);
  CLEAR(wdBookMarks);
  CLEAR(wdBookMark);
END;


Eventuell muss man auch für jeden Datensatz ein eigenes Dokument erstellen und diese dann nachträglich miteinander verbinden.

Gruß Mike

Re: Word Automation

23. März 2010 09:24

Hi Mike,

so ganz abwegig fand ich die Frage nicht, schließlich gibt es für Kontakte sowas im NAV-Standard. Vielleicht bin ich auch blind, aber wo kommen die Bilder her? Aus NAV, Dateisystem, Drittanbieter-DB,...?

Am einfachsten wäre es, wenn die Bilder im Dateisystem lägen. Dann könntest Du alles in eine Steuerdatei (z. B. Excel) exportieren, diese Steuerdatei vorher mit der Wordvorlage verknüpfen und die Wordvorlage von NAV aus starten. Zur Integration von Bildern aus dem Dateisystem in Serienbriefe gibt es genug Seiten im Internet. Wenn die Bilder in der DB sind, könnte man diese ggf. in ein Temp-Verzeichnis exportieren und nach der Artikel-Nr. benennen (z. B. ArtNr.bmp) und auch dann wieder über eine Steuerdatei gehen.

Volker