![]() |
Word Tabelle sortieren mit Delphi
Hi,
mein Problem ist, dass wenn ich etwas in eine Word Tabelle weggeschrieben habe diese nicht Sortiert bekomme. Ich würde die Tabelle gerne nach der ersten Spalte und dem darin enthaltenen Datum sortieren. Kann mir da vieleicht jemand helfen? Bin für jede Hilfe dankbar:thumb: |
AW: Word Tabelle sortieren mit Delphi
Kannst du die Tabelle zuerst sortieren und danach exportieren?
|
AW: Word Tabelle sortieren mit Delphi
So geht's z.B. (siehe Anweisung "WordTabelle.Sort()":
Code:
uses COMObj;
const wdBorderTop = -1; wdBorderLeft = -2; wdBorderBottom = -3; wdBorderRight = -4; wdLineStyleNone = 0; wdSortFieldNumeric = 1; wdSortOrderAscending = 0; procedure TForm1.Button1Click(Sender: TObject); var Doc: OleVariant; FieldNumber: OleVariant; OpenAsTemplate: OleVariant; SaveChanges: OleVariant; SortFieldType: OleVariant; SortOrder: OleVariant; Template: Olevariant; WordTabelle: OleVariant; rows: word; cols: word; i: integer; begin WordApp := CreateOleObject('Word.Application'); try Template := 'Normal'; OpenAsTemplate := False; Doc := WordApp.Documents; Doc := Doc.Add(Template, OpenAsTemplate, EmptyParam, EmptyParam); WordApp.Visible := True; rows := 10; cols := 5; //Tabelle erzeugen mit 10 Zeilen und 5 Spalten WordTabelle := doc.Tables.Add(WordApp.selection.range, rows, cols, emptyParam, emptyParam); // links, rechts, oben, unten ohne Rahmen WordTabelle.borders.item(wdBorderLeft).LineStyle := wdLineStyleNone; WordTabelle.Borders.item(wdBorderRight).LineStyle := wdLineStyleNone; WordTabelle.Borders.item(wdBorderTop).LineStyle := wdLineStyleNone; WordTabelle.Borders.item(wdBorderBottom).LineStyle := wdLineStyleNone; // 1.Spalte der Tabelle über alle Reihen mit Werten füllen randomize; for i := 1 to rows do WordTabelle.cell(i, 1).range.text := format('%d', [random(99) + 1]); // 10 Sek warten, um orginale Tabelleneinträge zu betrachten sleep(5000); WordTabelle.Sort(FieldNumber := 'Spalte1', SortFieldType := wdSortFieldNumeric, SortOrder := wdSortOrderAscending); // 10 Sek warten, um die nach Spalte 1 sortierte Tabelle zu betrachten sleep(5000); finally WordApp.Quit; // oder auch noch nicht WordApp := UnAssigned; end; end; Edit: Sorry, sleep(5000) sind natürlich nur 5 (und nicht 10) Sekunden Wartezeit |
AW: Word Tabelle sortieren mit Delphi
Hi,
also erst einmal vielen Dank für die Antworten. @Bjoerk Zitat:
@ASM Das sieht soweit ganz gut aus und ist hilfreich bei einigen weiteren Problemen die ich hatte:thumb: nur Leider gibt es die Tabelle in dem Word Dokument schon und es sind darin schon Daten vorhanden weswegen ich keine neue Tabelle erzeugen kann. Dadurch stelle ich mir jetzt die frage ???Wie kann ich die Wordtabelle ansprechen so wie du hier???:?:
Delphi-Quellcode:
Danke
WordTabelle.Sort(FieldNumber := 'Spalte1', SortFieldType := wdSortFieldNumeric,
SortOrder := wdSortOrderAscending); |
AW: Word Tabelle sortieren mit Delphi
Zitat:
Versuche die Lösung Deines Problems doch erst einmal selber anhand meiner folgenden Hinweise anstatt durch reines Kopieren (m)eines fertigen Codes. Letzteres würde Dir keine wirkliche Erfahrung im Umgang mit der OLE-Automation bringen. Erledige alles Folgende unmittelbar aus Deinem Delphi-Programm heraus: (1) Lade das von Dir gewünschte Dokument nach Winword: Hinweis:
Code:
(2) Springe im nun geöffneten Dokument zur Tabelle Nr.# (# = die lfd. Nummer der Tabelle im Dokument)
WordApp.Documents.Open(DocFileName)
und setze damit gleichzeitig die 'Selection' des OLEObjects auf diese Tabelle Hinweis:
Code:
(3) Sortiere die Spalte 1 der Tabelle wie zuvor gezeigt (auf- oder absteigend)
WordApp.Selection.GoTo(wdGoToTable, wdGoToFirst, #);
Hinweis: Code der Sortierung wie gehabt (4) Falls erforderlich: springe zu einer weiteren Tabelle Nr.# und selektiere damit diese Tabelle Hinweis: siehe (2) (5) Sortiere die Spalte 1 (oder eine andere Spalte) der Tabelle wie zuvor gezeigt (auf- oder absteigend) (..) wiederhole (4) und (5) für evt. weitere Tabellen des Dokuments abschließend: Springe entweder an den Anfang oder aber an das Ende des Dokuments, wodurch auch die vorherige Selektion aufgelöst wird. Hinweis: (a) an den Anfang:
Code:
(b) an das Ende:
WordApp.Selection.GoTo(EmptyParam);
Code:
Zugabe: speichere das geänderte Dokument per SaveAs(filename)-Anweisung des OleObjects
WordApp.ActiveDocument.ActiveWindow.Selection.EndKey(wdStory, EmptyParam);
Hinweis:
Code:
Wichtig:
WordApp.ActiveDocument.SaveAs(DocFileName);
Kapsele den gesamten Block der verschiedenen Anweisungen mittels
Code:
damit bei einer evt. im Verlauf der Anweisungen auftretenden Exception das Winword auf jeden Fall nicht (unsichtbar) im Speicher hängen bleibt.
WordApp := CreateOLEObject('Word.Application');
Try {.. hier alle Anweisungen an das OLEObject..} finally WordApp.Quit; WordApp := UnAssigned; end; |
AW: Word Tabelle sortieren mit Delphi
Hi,
also 1. Nein es ist keine Hausaufgabe! 2. Ich kenne mich wirklich nicht gut mit OLE aus aber würde mich halt gerne etwas mehr damit beschäftigen. 3. Habe ich NICHTS! aus (d)einem fertigem Code kopiert ich bin schon lange mich selber daran am Versuchen und möchte den Quelltext von mir nur durch Hilfen von euch hier verfeinern und vereinfachen. Danke Trotzdem. |
AW: Word Tabelle sortieren mit Delphi
Zitat:
Daraus jetzt einen lauffähigen Code zu basteln sollte Dir keine ernsthaften Probleme mehr bereiten. Falls aber doch, gerne rückfragen und dann möglichst mit genaueren Angaben zum Aufbau des besagten Word-Dokuments. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 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