Kennt sich jemand mit OLE bezüglich Microsoft Word aus?
Ich versuche eine .DOCX per OLE als .RTF speichern zu lassen. Das Laden funktioniert, das Speichern aber nicht.
Ich verwende Lazarus v2.0.10 auf Windows 10 64bit mit Office 2021.
Der Fehler tritt immer bei Doc.SaveAs2() auf, egal welche Parameter ich bisher übergeben habe.
Danke und Grüße, Jörg
Code: Alles auswählen
uses ... Variants, ComObj;
function WordDoc_SaveAs(const aSrcFilename, aDestFilename: String): Boolean;
var
WordApp, Doc: Variant; // OleVariant?
begin
Result:=false;
if (aSrcFilename='') or (aDestFilename='') then Exit;
if not FileExists(aSrcFilename)
then begin ShowMessage('File not found'#13+aSrcFilename); Exit; end;
WordApp:=Unassigned; // Check for Unassigned with VarIsEmpty(). Check for an Undefined value with VarIsClear(). Check for a Null value with VarIsNull().
Doc:=Unassigned;
Result:=true;
try
WordApp:=CreateOleObject('Word.Application');
except
Result:=false;
ShowMessage('Could not find or start MS Word');
end;
if Result then
try
Doc:=WordApp.Documents.Open(aSrcFilename,false{noConfirm},true{ReadOnly},false{notRecentFiles});
except
Result:=false;
Doc:=Unassigned;
ShowMessage('Could not open file'#13+aSrcFilename);
end;
if Result and FileExists(aDestFilename) then Result:=DeleteFile(aDestFilename);
if Result then
try
Doc.SaveAs2(aDestFilename,6); // https://docs.microsoft.com/de-de/office/vba/api/word.saveas2
// Doc.SaveAs2(FileName:=aDestFilename, FileFormat:=6);
except
Result:=false;
ShowMessage('Could not save file'#13+aDestFilename);
end;
if not VarIsEmpty(Doc) then
try
Doc.Close(0); // 0 = don't SaveChanges
except
ShowMessage('Error at Doc.Close');
end;
Doc:=Unassigned;
if not VarIsEmpty(WordApp) then
try
WordApp.Quit; // doesn't close other Word windows opened by user
except
ShowMessage('Error at WordApp.Quit');
end;
WordApp:=Unassigned;
if Result then ShowMessage('YEAH! :)');
end;
procedure TForm1.Button1Click(Sender: TObject);
var Path: String;
begin
Path:=ExtractFilePath(ParamStr(0));
WordDoc_SaveAs(Path+'Test1.docx', Path+'Test2.rtf');
end;