Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Word Dokument fernsteuern, Tutorial? (https://www.delphipraxis.net/40130-word-dokument-fernsteuern-tutorial.html)

JPSelter 11. Feb 2005 10:31


Word Dokument fernsteuern, Tutorial?
 
Ich habe ein Programm, das Besprechungs-Protokolle verwalten soll. Zum Ausdrucken eines Protokolls wollte ich die Daten an ein Word-Dokument übergeben, damit der Benutzer selbst noch kleinere Änderungen vornehmen kann, bevor gedruckt wird. Aber wie kann ich die Daten in ein Word-Dok übertragen? Ich habe sowas noch nie gemacht. Bisher habe ich erfolgreich die Befehle WordDocument1.Connect usw. angewandt, aber wie fülle ich das Dok mit Inhalt? Gibts sowas wie WordDocument1.AddTable und .AddText(kursiv,größe20) oder sowas ähnliches? Insgesamt brauche ich jede Menge Tabellen, eine davon beinhaltet eine Grafik.

Schuster 11. Feb 2005 10:48

Re: Word Dokument fernsteuern, Tutorial?
 
Vielleicht hilft dier der Link

JPSelter 11. Feb 2005 10:59

Re: Word Dokument fernsteuern, Tutorial?
 
Den Link hatte ich eben schon gefunden, aber da steht nicht viel drin. Ich bräuchte etwas umfangreicherers, z.B. eine komplette Dokumentation über dieses WordApplication.

Robert Marquardt 11. Feb 2005 11:11

Re: Word Dokument fernsteuern, Tutorial?
 
Die Hilfe zu TWordApplicaton etc ist in Word enthalten. Es ist die VBA-Hilfe zu Word.
Oeffne "Extras : Makros : Visual Basic Editor" dort "Ansicht : Objekt-Katalog" oeffnen bzw F2 druecken.
Das ist der COM-Objektbaum von Word. F1 liefert spezifische Hilfe.

JPSelter 11. Feb 2005 11:32

Re: Word Dokument fernsteuern, Tutorial?
 
OK, ich schau da mal rein. Ich habe jetzte "Hello World!" im Dokument stehen :D Aber nun möchte ich eine Tabelle erschaffen. Da läuft mir der Datentyp "Range" über den Weg, mit dem ich nichts anfangen kann. Hat jemand ein Beispiel, wie sowas aussieht? -> WordApplication1.Selection.Tables.Add(*range-datentyp*,2,2);

toms 11. Feb 2005 11:36

Re: Word Dokument fernsteuern, Tutorial?
 
Hi,

Habe hier einen Code, um ein TStringGrid in ein Worddokument zu exportieren.
(Hab's ohne die Server Komponente gemacht)
Vielleicht hilf's dir ja ein wenig weiter.

Delphi-Quellcode:
uses
  ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  WordApp, NewDoc, tabelle: OLEVariant;
  iRows, iCols, iGridRows, jGridCols: Integer;
begin
  try
    // Word Instanz erzeugen
    WordApp := CreateOleObject('Word.Application');
  except
    // Fehler....
    Exit;
  end;

  // Word anzeigen
  WordApp.Visible := True;

  // Neues Dok einfügen
  NewDoc := WordApp.Documents.Add;

  // Spalten, Reihen ermitteln
  iCols := StringGrid1.ColCount;
  iRows := StringGrid1.RowCount;

  // Tabelle einfügen
  tabelle := NewDoc.Tables.Add(WordApp.Selection.Range, iCols, iRows);

  // Tabelle ausfüllen mit Stringgrid Daten
  for iGridRows := 1 to iRows do
    for jGridCols := 1 to iCols do
      tabelle.Cell(iGridRows, jGridCols).Range.Text :=
        StringGrid1.Cells[jGridCols - 1, iGridRows - 1];

  // Hier evtl Word beenden...

  // Cleanup...
  WordApp := Unassigned;
  NewDoc := Unassigned;
  tabelle := Unassigned;
end;

JPSelter 11. Feb 2005 12:19

Re: Word Dokument fernsteuern, Tutorial?
 
Danke, das hilft mir sehr weiter :)

Trotzdem noch eine kleine Frage, vielleicht weiss es ja eben jemand: Wie kann ich die Tabellen-Grenzen grau machen, also so, dass sie nicht gedruckt werden?

toms 11. Feb 2005 12:28

Re: Word Dokument fernsteuern, Tutorial?
 
Zitat:

Zitat von JPSelter
Danke, das hilft mir sehr weiter :)

Trotzdem noch eine kleine Frage, vielleicht weiss es ja eben jemand: Wie kann ich die Tabellen-Grenzen grau machen, also so, dass sie nicht gedruckt werden?

Hmmm, bei mir werden gar keine Linien gezeigt..
Kannst aber mal das probieren:


Delphi-Quellcode:
const
{ wdLineStyleSingle = 1;}
 wdLineStyleNone = 0;
begin
   //...
  tabelle := NewDoc.Tables.Add(WordApp.Selection.Range, iCols, iRows);
   //...
  tabelle.Borders.OutsideLineStyle := wdLineStyleNone ;
  tabelle.Borders.InsideLineStyle := wdLineStyleNone ;  //...

JPSelter 11. Feb 2005 12:40

Re: Word Dokument fernsteuern, Tutorial?
 
for i := 1 to 100000000 do
showmessage('Danke!');

:)

Robert Marquardt 11. Feb 2005 14:03

Re: Word Dokument fernsteuern, Tutorial?
 
Der zweite Trick ist es ein Word-Makro aufzuzeichnen und sich dann die Source im Makro-Editor anzuschauen.

JPSelter 4. Mär 2005 11:10

Re: Word Dokument fernsteuern, Tutorial?
 
Da bin ich malwieder!
Diesmal frage ich mich, wie ich eine Tabellenzelle auf "Blocksatz" stellen kann. Laut Makro müsste so ähnlich aussehen:
Delphi-Quellcode:
WordApp.Selection.ParagraphFormat.Alignment:='wdAlignParagraphJustify';
Aber das klappt so nicht. Falls es über WordApp.Selection geht, wie bekomme ich dann den Cursur in diese Zelle?

toms 6. Mär 2005 08:29

Re: Word Dokument fernsteuern, Tutorial?
 
Neue Frage, neuer Thread!

Ykcim 11. Jun 2007 22:05

Re: Word Dokument fernsteuern, Tutorial?
 
Hallo Zusammen,

ich hoffe, mir kann jemand helfen: Ich habe wie beschrieben versucht, die Daten aus einem StringGrid in eine WordTabelle zu exportieren. Auf den ersten Blick scheint es auch zu funktionieren - Word wird gestartet, eine Tabelle wird erstellt und die Spaltenüberschriften eingetragen. Und dann bricht das Programm ab mit dem Hinweis "Das angeforderte Element ist nicht in der Sammlung enthalten." Zugegeben, ich bin nur ein kleiner HobbyBastler, aber vielleicht ist es für Euch ein Klacks und Ihr könnte mir weiterhelfen, obwohl dieser Thread schon so alt ist.

Ich habe die Prozedure unten noch einmal angehängt...

Delphi-Quellcode:
uses ComObj;

...

procedure TProjekt_verlauf.Button1Click(Sender: TObject);
var
  WordApp,NewDoc,WordTable:OLEVariant;
  iRows,iCols,iGridRows,jGridCols:Integer;
begin
  try

    // Word Instanz erzeugen
    WordApp:=CreateOleObject( 'Word.Application');
  except

    // Fehler . . . .
    Exit;
  end;
 
  // Word anzeigen
  WordApp.Visible:=True;
 
  // Neues Dok einfügen
  NewDoc:=WordApp.Documents.Add;
 
  // Spalten , Reihen ermitteln
  iCols:=StringGrid.ColCount;
  iRows:=StringGrid.RowCount;

  // Tabelle einfügen
  WordTable:=NewDoc.Tables.Add( WordApp.Selection.Range,iCols,iRows);

  // Tabelle ausfüllen mit Stringgrid Daten
  for iGridRows:=1 to iRows do
  for jGridCols:=1 to iCols do
  WordTable.Cell( iGridRows,jGridCols).Range.Text:=
  StringGrid.Cells[jGridCols-1,iGridRows-1];

  WordApp:=Unassigned;
  NewDoc:=Unassigned;
  WordTable:=Unassigned;
end;
Vielen Dank im Voraus.

Mike07 10. Apr 2008 15:02

Re: Word Dokument fernsteuern, Tutorial?
 
@JPSelter:
Die Frage hatte ich mir auch schonmal gestellt,
die Lösung ist die Methode "ParagraphFormat" auf Range (und .Range auf .Cell) zu beziehen!
Bei mir sieht das dann folgendermaßen aus:

T1.Cell(i, j).Range.ParagraphFormat.Alignment := wdAlignParagraphRight;

T1 ist meine Tabelle,
mit for-Schleifen kann man jetzt alle notwendigen Zellen ansprechen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 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