Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stringgrid in Word (https://www.delphipraxis.net/87218-stringgrid-word.html)

netscanner 25. Feb 2007 12:06


Stringgrid in Word
 
Hallo,
ich habe folgende Codes bei gefunden...

Der hier "kopiert" ein Stringgrid in ein Worddokument.
Delphi-Quellcode:
uses
  ComObj;

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

  // Show Word
  // Word anzeigen
  WordApp.Visible := True;

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

  // Get number of columns, rows
  // Spalten, Reihen ermitteln
  iCols := StringGrid1.ColCount;
  iRows := StringGrid1.RowCount;

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

  // Fill up the word table with the Stringgrid contents
  // Tabelle ausfüllen mit Stringgrid Daten
  for iGridRows := 1 to iRows do
    for jGridCols := 1 to iCols do
      WordTable.Cell(iGridRows, jGridCols).Range.Text :=
        StringGrid1.Cells[jGridCols - 1, iGridRows - 1];

  // Here you might want to Save the Doc, quit Word...
  // Hier evtl Word Doc speichern, beenden...

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

und spricht eine Textmarke an:
Delphi-Quellcode:
uses
  ComObj;

procedure TForm1.Button1Click(Sender: TObject);
const
  // Word Document to open
  // Dein Word Dokument
  YourWordDocument = 'c:\test\worddoc.doc';
var
  BookmarkName, Doc, R: OleVariant;
begin
  // Start a Word instance
  // Word Instanz Starten
  try
    WordApp := CreateOleObject('Word.Application');
  except
    ShowMessage('Could not start MS Word!');
  end;
  // Open your Word document
  // Dok. öffnen
  WordApp.Documents.Open(YourWordDocument);
  Doc := WordApp.ActiveDocument;

  // name of your bookmark
  // Name der Textmarke
  BookmarkName := 'MyBookMark';

  // Check if bookmark exists
  // Überprüfen, ob Textmarke vorhanden
  if Doc.Bookmarks.Exists(BookmarkName) then
  begin
    R := Doc.Bookmarks.Item(BookmarkName).Range;
    // Add text at our bookmark
    // Text bei Textmarke einfügen
    R.InsertAfter('Text bei Textmarke');
    // You make a text formatting like changing its color
    // Man kann nun auch den Text formatieren. z.B die Farbe wechseln.
    R.Font.Color := clRed;
  end;

  // Save your document and quit Word
  // Dokument Speichern und Word beenden.
  if not VarIsEmpty(WordApp) then
  begin
    WordApp.DisplayAlerts := 0;
    WordApp.Documents.Item(1).Save;
    WordApp.Quit;
    BookmarkName := Unassigned;
    R := Unassigned;
    WordApp := Unassigned;
  end;
end;


Nun zu meiner Frage: Wie bekomme ich es hin, dass das Stringgrid (Code1) in an die steller einer Textmarke(Code2) kopiert wird und nicht an den Dokumentenanfang?

Keldorn 25. Feb 2007 12:49

Re: Stringgrid in Word
 
Hallo

was hast du denn bisher probiert? Die 2 Beispielcodes für dein Problem abzuändern und die relavanten codebausteine aus dem ersten codebsp ins 2. einzufügen sollte doch nicht die Schwierigkeit sein.

Delphi-Quellcode:
  // Tabelle einfügen
  WordTable := NewDoc.Tables.Add(WordApp.Selection.Range, iCols, iRows);
wordselection.range--> damit fügst du die Tabelle immer an der aktuellen Stelle ein. Also wenn du zuerst zu Bookmark gesprungen bist oder diese Range-angibst, wird die Tabelle auch dort eingefügt. Wo liegt dein Problem??

Mfg Frank

netscanner 25. Feb 2007 13:06

Re: Stringgrid in Word
 
okey danke...das mit range hatte ich nicht kappiert. jetzt geht's!

dankeschön

Christoph Frank 8. Mär 2007 17:59

Re: Stringgrid in Word
 
Ich habe Deinen Beitrag mit Interesse gelesen, aber genau da setzt meine Frage an:


WordTable.Cell(iGridRows, jGridCols).Range.Text :=
StringGrid1.Cells[jGridCols - 1, iGridRows - 1];

Woher kennst Du die Befehle und deren Parameter, die Du in Word verwenden darsft? Ich möchte auch eine Tabelle aus meinem Programm in Word erstellen. Diese Tabelle soll anschließend in einen Serienbrief "gemergt" werden, d.h. also die Einträge aus der Tabelle an die entsprechenden Platzhalter des Dokuments bringen.
Ich habe schon versucht aus Makros mir Befehle zusammenzubauen.

Das einzige was mir gelungen ist, ist MSWord.CreateTable; das entspricht dem Menüausgang in Word/Tabelle Zeichnen/. Bei allen anderen Versuchen erhalte ich immer die Meldung:

'Die Methode 'xxxxxxxx' wird vom Automatisierungsobjekt nicht unterstützt' Exception EOleError

Hast Du vielleicht 'nen Tipp für mich?

Gruß Christoph

marabu 8. Mär 2007 18:46

Re: Stringgrid in Word
 
Herzlich willkommen in der Delphi-PRAXiS, Christoph.

Das Programmiermodell für die Word-Automation findest du in der Word-Online-Hilfe, welche du - wenn du kein MS Office installiert hast - bei Microsoft herunterladen kannst: Word VBA Language Reference

Freundliche Grüße

matashen 8. Mär 2007 19:05

Re: Stringgrid in Word
 
Hallo zusammen,

Du kannst auch unter Excel die Befehle der VBA sehr schön ausprobieren indem du z.B. auf Makro aufzeichnen gehst und dann irgendwas machst. Anschließend öffnest du Visual Basic und schon kannst du die Befehle ablesen. mußt nur noch so kleinigkeiten umbauen.

Gruß Matthias

Christoph Frank 9. Mär 2007 09:35

Re: Stringgrid in Word
 
Wow,

kleine Ursache, große Wirkung, herzlichen Dank.

Erstmals eine Anfrage gestellt und sofort Antworten erhalten, super!!! Wenn ich weitere Probleme habe, werde ich mich wieder an Euch wenden. Anbei noch eine Frage, kann ich immer nur innerhalb eines Beitrags antworten oder gibt es hier auch ein chat?

marabu 9. Mär 2007 12:58

Re: Stringgrid in Word
 
Den Chat hast du bestimmt schon entdeckt, er ist aber mehr dem social engineering gewidmet. "Fachbeiträge" gehören ins Forum - schon alleine wegen deren Lebensdauer.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz