OLE Worddokument speichern dot > doc
OLE Worddokument speichern dot > doc
Hallo zusammen,
ich öffne ein Wordvorlage mit
vMSWord := CreateOleObject('Word.Application');
usw. ..
Anschliessend ersetze ich Textmarken.
Nun soll der Benutzer des Programms die Datei ändern und drucken. Dabei soll beim speichern die Wordvorlage aber nicht gändert werden.
In Delphi 6 wird automatisch beim speichern name.doc angegeben, so das die Vorlgage nicht geändert wird.
Eine von Lazarus geöffnete Vorlage kann ich aber ausversehen überschreiben, ändern.
Meine Frage, gibt es eine Möglichkeit in Lazarus automatisch von geöffneter dot auf doc (docx) zu wechseln?
Besten Gruß
Gerald
ich öffne ein Wordvorlage mit
vMSWord := CreateOleObject('Word.Application');
usw. ..
Anschliessend ersetze ich Textmarken.
Nun soll der Benutzer des Programms die Datei ändern und drucken. Dabei soll beim speichern die Wordvorlage aber nicht gändert werden.
In Delphi 6 wird automatisch beim speichern name.doc angegeben, so das die Vorlgage nicht geändert wird.
Eine von Lazarus geöffnete Vorlage kann ich aber ausversehen überschreiben, ändern.
Meine Frage, gibt es eine Möglichkeit in Lazarus automatisch von geöffneter dot auf doc (docx) zu wechseln?
Besten Gruß
Gerald
Re: OLE Worddokument speichern dot > doc
Das hat mMn so gut wie nichts mit Lazarus zu tun.
Hat das OleObject keine "SaveAs" Methode?
Hat das OleObject keine "SaveAs" Methode?
Re: OLE Worddokument speichern dot > doc
Der user soll entscheiden ob er speichert wo und mit welchem Namen. Er soll nur nicht die Vorlage ausversehen ändern können.
Re: OLE Worddokument speichern dot > doc
und was spricht da gegen "SaveAs" ?
Re: OLE Worddokument speichern dot > doc
Einfaches speichern überschreibt die Vorlage. Und das bei mehreren Benutzern über einen längeren Zeitraum.
Re: OLE Worddokument speichern dot > doc
"SaveAs" überschreibt nur, wenn der Benutzer das eindeutig will.
Wenn du das absolut verhindern willst, dann musst du die Vorlage von Word im ReadOnlyMode lesen lassen.
Das geht aber nur mit MS-Word97 bis MS-Word 2010, Office 2013 liest zwar noch im Readonlymode, aber man kann dann das gelesene Dokument nicht ändern.
Wenn du das absolut verhindern willst, dann musst du die Vorlage von Word im ReadOnlyMode lesen lassen.
Das geht aber nur mit MS-Word97 bis MS-Word 2010, Office 2013 liest zwar noch im Readonlymode, aber man kann dann das gelesene Dokument nicht ändern.
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
Re: OLE Worddokument speichern dot > doc
Hallo,
könntest du uns etwas mehr von deinem Quellcode zeigen.
Normalerweise erstellst du in Word ein Dokument (doc) und gibst diesem ein Parameter mit,
auf welcher Dokumentenvorlage (dot) dieses Dokument basiert.
Gruß
könntest du uns etwas mehr von deinem Quellcode zeigen.
Normalerweise erstellst du in Word ein Dokument (doc) und gibst diesem ein Parameter mit,
auf welcher Dokumentenvorlage (dot) dieses Dokument basiert.
Gruß
-
- Beiträge: 203
- Registriert: Di 22. Sep 2009, 13:08
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: OLE Worddokument speichern dot > doc
Versuch mal die Vorlage auf schreibgeschützt zu setzen... Als ich Vorlagen automatischgtmind hat geschrieben: Eine von Lazarus geöffnete Vorlage kann ich aber ausversehen überschreiben, ändern.
ausgefüllt habe, habe ich immer die Vorlagen geschützt (ggf. im Code direkt vor dem öffnen).
In Word hatte ich dann beim öffnen ein ausfüllbares *.doc.
Um etwas Lazarus ins Spiel zu bringen:
Was ist der Stand an Libraries in FreePascal für *.doc oder *odt?
Oder kann jemand eine bezahlbare Library (*.dll) empfehlen? (Für Excel nehme ich LibXL.dll)
Bearbeiten von Dokumenten über OLE war immer eine Quälerei. Es ist elend langsam und
bei JEDER neuen Word-Version gibt es irgendwelche Kompatibilitätsprobleme..
Re: OLE Worddokument speichern dot > doc
Zum Erstellen gibt's hier was: http://wiki.lazarus.freepascal.org/fpve ... nt_Support
Re: OLE Worddokument speichern dot > doc
Das Problem ist wenn die Wordvorlage einmal geöffnet ist kann der Benutzer dies durch "Datei->Speichern" bzw. Strg.+S überschreiben. Diese Vorlagen sollen aber im Originalzustand bleiben.
In Delphi wird die Vorglage geöffnet und wenn der Benutzer im Menü auf "Datei->Speichern" geht bekommt dieser die Frage unter welchen Dateinamen also wie bei Speicerhn unter.
Meiner Meinung nach muss ich bei Lazarus irgendwo angeben das dies genaus so geschehen soll.
In Delphi wird die Vorglage geöffnet und wenn der Benutzer im Menü auf "Datei->Speichern" geht bekommt dieser die Frage unter welchen Dateinamen also wie bei Speicerhn unter.
Meiner Meinung nach muss ich bei Lazarus irgendwo angeben das dies genaus so geschehen soll.
Code: Alles auswählen
procedure TfrmMain.OpenDocument(FileName: String);
const
// 1. Parameter (Quit)
wdDoNotSaveChanges = $00000000;
wdSaveChanges = $FFFFFFFF;
wdPromptToSaveChanges = $FFFFFFFE;
// 2. Parameter (Quit)
wdWordDocument = $00000000;
wdOriginalDocumentFormat = $00000001;
wdPromptUser = $00000002;
var
varWdApp : oleVariant;
varDokument : oleVariant;
varBookmark : oleVariant;
varFileName : oleVariant;
varTmp : oleVariant;
SaveChanges : OleVariant;
FileExt : String;
i : Integer;
begin
FileExt:=ExtractFileExt(FileName);
if (FileExt = '.xls') or
(FileExt = '.xlsx')
then
begin
ShowMessage('Excel');
end else
if (FileExt = '.doc' ) or
(FileExt = '.docx') or
(FileExt = '.dot' ) or
(FileExt = '.dotx')
then
begin
try
varWdApp := CreateOleObject('Word.Application'); // erstellt das Wordobjekt
varWdApp.Visible := True;
except
WriteLn('MS Word kann nicht gestartet werden.'); // Fehlerbehandlung
Exit;
end;
varFileName := FileName;
varDokument := varWdApp.Documents.Open(varFileName);
for i := 1 to sgSet.RowCount -1 do
begin
varBookmark := sgSet.Cells[0,i];
if varDokument.Bookmarks.Exists(varBookmark) then
begin
varBookmark := varDokument.Bookmarks.Item(varBookmark);
varTmp := UTF8ToUTF16(sgSet.Cells[1,i]); // Umlaute
varBookmark.Range.Text := varTmp;
end;
end;
varWdApp := Unassigned;
end;
end;
Re: OLE Worddokument speichern dot > doc
Das hat aber AFAIK gar nichts mit Delphi oder Lazarus zu tun, sondern mit der MS-Word-Version.gtmind hat geschrieben:In Delphi wird die Vorglage geöffnet und wenn der Benutzer im Menü auf "Datei->Speichern" geht bekommt dieser die Frage unter welchen Dateinamen also wie bei Speicerhn unter.
da kannst du im ReadOnlyMode lesen, sofern es nicht Office 2013 betrifft.gtmind hat geschrieben:varDokument := varWdApp.Documents.Open(varFileName);
Re: OLE Worddokument speichern dot > doc
Die Lösung ist eigentlich ganz einfach wenn man es weiss ...
die Zeile:
ändern in
die Zeile:
Code: Alles auswählen
varDokument := varWdApp.Documents.Open(varFileName);
Code: Alles auswählen
varDokument := varWdApp.Documents.Add(varFileName);