![]() |
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? |
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:
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??
// Tabelle einfügen
WordTable := NewDoc.Tables.Add(WordApp.Selection.Range, iCols, iRows); Mfg Frank |
Re: Stringgrid in Word
okey danke...das mit range hatte ich nicht kappiert. jetzt geht's!
dankeschön |
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 |
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: ![]() Freundliche Grüße |
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 |
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? |
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