Word OLE

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Meridian
Beiträge: 12
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

Word OLE

Beitrag von Meridian »

Hallo zusammen,
ich bin neu hier im Forum und weiß nicht, ob ich das hier richtig mache, aber ein Versuch ist es wert.

In meinem neuen Programm bin ich soweit, dass ich Word starten kann (über OLE), füge eine neue Seite ein und dann eine Tabelle. Bis dahin alles OK.
Nun möchte ich die Tabelle formatieren. Ich scheitere jetzt gerade daran, die Zeilenhöhe anzupassen.

varTabelle := varDokument.Tables.Add(varWdApp.Selection.Range, 1, 1); 'Tabelle einfügen/erstellen...

Wie kann ich jetzt z.B. die Zeilenhöhe oder Breite anpassen?

Vielen Dank für eure Unterstützung.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Word OLE

Beitrag von theo »

Würdest du das nicht besser bei Microsoft nachschlagen (-fragen)?
Z.B. hier https://docs.microsoft.com/en-us/office ... s.setwidth

Hier gibt's noch was:
https://www.delphi-treff.de/tipps-trick ... n-steuern/

Meridian
Beiträge: 12
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

Re: Word OLE

Beitrag von Meridian »

Unter Delphi habe ich dieses Programm vor über 10 Jahren geschrieben, aber der Programm-Code funktioniert jetzt bei Lazarus bzw. Free Pascal eben nicht oder anders.

Danke.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Word OLE

Beitrag von theo »

Meridian hat geschrieben:
Do 3. Mär 2022, 10:28
Unter Delphi habe ich dieses Programm vor über 10 Jahren geschrieben, aber der Programm-Code funktioniert jetzt bei Lazarus bzw. Free Pascal eben nicht oder anders.
Das entspricht aber nicht deiner Frage.
Was funktioniert nicht (mehr)?
Wie sieht denn der Delphi Code aus, der nun nicht funktioniert?
Ist es vielleicht eine andere Word Version?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Word OLE

Beitrag von af0815 »

Ich habe mit Delphi früher mit Word OLE arbeiten (müssen). Das hat oft nach kurzer Zeit nicht funktioniert, das M$ bei den Updates und neuen Versionen oft die OLE API geändert hat. Bei den Updates nicht viel, aber auch Kleinigkeiten stören bei OLE. Aber auch bei VBA war das ebenso (ver)störend.

Aber du sprichst im ersten Post von einem neuen Programm und im zweiten von 10 Jahre alten Code.

Und Lazarus/FPC ist nicht Delphi !! Da Lazarus eine eigen RAD-Umgebung für Pascal ist, kann man nicht vorausetzen das alles aus Delphi in Lazarus gleich funktioniert, vor allen, wenn etwas komplett auf eine Plattform (MS mit Win) wie OLE (und auch ActiveX) zugeschnitten ist. Lazarus muss auch andere Betriebssysteme und Widgetsets abdecken.

Da war dein erster Versuch mit dem einfachen Programm genau richtig und mit dem solltest du einmal die 'nicht kompatiblen' Sachen untersuchen. Vor allen, wenn dir wer helfen soll, dann bitte um kompilierbaren Code (ohne die kompilierten Teile) zum Testen. Das wird gerade bei Word OLE zum Problem, weil zB. ich ausg guten Grunde seit Jahren kein Word mehr verwende. Auch die Info welcher Lazarus/FPC ist oft von Bedeutung.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Word OLE

Beitrag von six1 »

Oh ja, da habe ich auch meine Erfahrungen.
Man muss erst mal die verwendete Type Library exportieren und in das Projekt einbinden.
Gruß, Michael

Meridian
Beiträge: 12
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

Re: Word OLE

Beitrag von Meridian »

Hier der Delphi-Code, der gut funktionierte.

procedure TfrmWordCreate.Tabelle_Kopf_erste_Seite;
var
GesB:integer;
LinkToFile, SaveWithDocument:OleVariant;
begin
// Rahmenbreite aus der Datenbank...
GesB:=DaMo.SePaTabB.Value+2;

// Rahmen 1 einfügen
begin
TabRahmen1:=Doc.Tables.Add(Word.Selection.Range, 1, 1, EmptyParam, EmptyParam);

with Word.Selection.Tables.Item(1) do
begin
Borders.OutsideLineStyle:=wdLineStyleNone;
Borders.InsideLineStyle:=wdLineStyleNone;

TabRahmen1.Cell(1, 1).Range.Font.Size:=6;

// Spaltenbreite setzen...
Columns.Item(1).Width:=(Word.CentimetersToPoints(GesB/10));

// Zeilenhöhe setzen...
Rows.HeightRule:=wdRowHeightExactly;
Rows.Item(1).Height:=(Word.CentimetersToPoints(26.5));
end;
end;
end;

######### mein heutiger Code, der an vielen Stellen nicht funktioniert ##########

procedure Tfrm_WordCreate.Tabelle_Kopf_erste_Seite;
var
GesB:integer;
LinkToFile, SaveWithDocument, varTabelle:OleVariant;
wdLineStyleNone, wdRowHeightExactly, wdCellAlignVerticalCenter, wdAlignParagraphCenter:OleVariant;
begin
wdLineStyleNone:=0; // Kein Rahmen
wdRowHeightExactly:=2; // Die Zeilenhöhe entspricht einem genauen Wert.
wdAlignParagraphCenter:=1; // Zentriert ausgerichtet

GesB:=datamodul_uni.DataModule1.SePaTabB.Value+2;

// Rahmen 1 einfügen
begin
//TabRahmen1:=varWdApp.Tables.Add(varWdApp.Selection.Range, 1, 1, EmptyParam, EmptyParam);
varTabelle:=varDokument.Tables.Add(varWdApp.Selection.Range, 1, 1);
TabRahmen1:=varTabelle;

// with varWdApp.Selection.Tables.Item(1) do
begin
//varWdApp.Selection.Tables.Item(1).Borders.OutsideLineStyle:=wdLineStyleNone;
//varWdApp.Selection.Tables.Item(1).Borders.InsideLineStyle:=wdLineStyleNone;
//varWdApp.Selection.Borders.InsideLineStyle:=wdLineStyleNone;
//TabRahmen1.Borders.OutsideLineStyle:=wdLineStyleNone;

varTabelle.Cell(1, 1).Range.Font.Size:=8;
varTabelle.Cell(1, 1).Height:=265; // das funktiniert nicht -> (varWdApp.CentimetersToPoints(26.5));

// Zeilenhöhe setzen...
//varWdApp.Selection.Rows.HeightRule:=wdRowHeightExactly;

//varWdApp.Selection.Rows.Item(1).Height:=(varWdApp.CentimetersToPoints(26.5));
//TabRahmen1.Selection.Rows.Item(1).Range.Height:=(varWdApp.CentimetersToPoints(26.5));
//TabRahmen1.Cell(1, 1).Height:=(varWdApp.CentimetersToPoints(26.5));
//varDokument.Tables.Item(1).Columns.Height:=(varWdApp.CentimetersToPoints(26.5));

//varWdApp.Selection.Height:=(varWdApp.CentimetersToPoints(26.5));

// Spaltenbreite setzen...
varWdApp.Selection.Columns.Item(1).Width:=(varWdApp.CentimetersToPoints(GesB/10));

//Helmut TabRahmen1:=Unassigned;
end;
end;
end;

Nächste Frage ist, wie setze ich eine 2 oder 3 spaltige Fusszeile?

Gruß aus dem Norden.

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Word OLE

Beitrag von PascalDragon »

af0815 hat geschrieben:
Do 3. Mär 2022, 12:47
Und Lazarus/FPC ist nicht Delphi !! Da Lazarus eine eigen RAD-Umgebung für Pascal ist, kann man nicht vorausetzen das alles aus Delphi in Lazarus gleich funktioniert, vor allen, wenn etwas komplett auf eine Plattform (MS mit Win) wie OLE (und auch ActiveX) zugeschnitten ist. Lazarus muss auch andere Betriebssysteme und Widgetsets abdecken.
FPCs OLE Schnittstelle ist Delphi-kompatibel und wenn da was nicht funktioniert, dann ist es ein Bug.
six1 hat geschrieben:
Do 3. Mär 2022, 12:50
Oh ja, da habe ich auch meine Erfahrungen.
Man muss erst mal die verwendete Type Library exportieren und in das Projekt einbinden.
FPC unterstützt auch Late Binding, da braucht es keine Type Library.
Meridian hat geschrieben:
Do 3. Mär 2022, 13:21
Hier der Delphi-Code, der gut funktionierte.
1. würdest du deinen Code bitte in [ code=pascal ]…[ /code ]-Blöcke (ohne die Leerzeichen) packen, damit man das besser lesen kann?
2. welche Lazarus/FPC Version nutzt du?
3. wenn du sagst es funktioniert nicht, bekommst du nur einfach nicht das gewünschte Ergebnis oder bekommst du eine Exception?
4. funktioniert denn das alte Delphi Programm auf deinem aktuellen System?
FPC Compiler Entwickler

Antworten