Форум: "Основная";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
ВнизУправление Winword из Delphi Найти похожие ветки
← →
Anics (2002-12-18 06:04) [0]Уважаемые знатоки, подскажите кто знает как решить такую задачу
В Winword создан отчет из Delphi в формате rtf
далее требуется из Delphi программно выполнить
следующие действия
1)Сохранить этот отчет под определенным именем в определенную папку в формате doc или rtf
2)Закрыть сохраненный файл, чтобы осталась одна только оболочка Winword
3)Закрыть сам Winword
Прошу, помогите кто знает, и чтобы не так сложно было
← →
zavdim (2002-12-18 07:01) [1]Я это использовал, чтобы загрузить html c картинками и сохранить - вроде работает (под 98 с 97-м картинки не сохраняет сволачь - но там вроде офис сам по себе дурит). По аналогии делаешь свое. А что непонятно - лезешь в справку по VBA для Word"а и имеешь секс по полной программе. Тут могут покритиковать, но давно делал и главное пахает.
Unit Convertor;
Interface
Uses
ComObj,Windows, Classes, Registry, SysUtils, Variants, Controls, Forms;
Type
TConvertor = Class(TComponent)
private
Word: Variant;
Document: Variant;
FisValid: Boolean;
public
Constructor Create(AOwner: TComponent); override;
Destructor Destroy; override;
Property IsPresent: Boolean read FisValid;
Function Convert(Path: String): String;
End;
Implementation
Const
Encoding : String = "charset=win-1251";
var InitialDir : string = "";
Constructor TConvertor.Create(AOwner: TComponent);
Begin
Inherited Create(AOwner);
Try
Word := CreateOleObject("Word.Application");
FisValid := True;
Except
FisValid := False
End
End;
Destructor TConvertor.Destroy;
Begin
If FisValid = true Then
Begin
Word.Quit
End;
Inherited Destroy
End;
Function TConvertor.Convert(Path: String): String;
Var
Convertor : OleVariant; // Название конвертора
SaveDialog : TSaveDialog;
SaveFile : string;
OpenFile : string;
Buffer : TStringList;
LineBuf : String;
Reg : TRegistry;
Pozition : Longint;
i : Integer;
mr: TModalResult;
Begin
Result := "";
// Описание атрибутов диалога "Сохранить как..."
If Not FisValid Then
begin
Result :="Для конвертации файла на Вашей машине должен быть установлен Microsoft Word 97 или выше";
Exit
end;
SaveDialog := TSaveDialog.Create(Self);
SaveDialog.Filter := "Файлы Microsoft Word|*.doc|Файлы RTF|*.rtf|Текстовые файлы |*.txt";
Reg := TRegistry.Create;
Try
Reg.RootKey := HKEY_CURRENT_USER;
If Reg.OpenKey("\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", True) Then
Begin
if InitialDir="" then
begin
SaveDialog.InitialDir := Reg.ReadString("Personal");
InitialDir:=SaveDialog.InitialDir;
end;
Reg.CloseKey;
End;
Finally
Reg.Free;
End;
SaveDialog.FileName := ChangeFileExt(ExtractFileName(PAth), "");
while true do
begin
// Проверка параметров
If Not (SaveDialog.Execute)
Or (SaveDialog.FileName = "")
Or (Not DirectoryExists(ExtractFilePath(SaveDialog.FileName))) Then
begin
Result := "";
Exit
end;
Case SaveDialog.FilterIndex Of
1:
Begin
Convertor := 0;
SaveFile := ChangeFileExt(SaveDialog.FileName, ".doc");
End;
2:
Begin
Convertor := 6;
SaveFile := ChangeFileExt(SaveDialog.FileName, ".rtf");
End;
3:
Begin
Convertor := 3;
SaveFile := ChangeFileExt(SaveDialog.FileName, ".txt");
End;
End;
if FileExists(SaveFile) then
begin
mr := MessageDlg("Файл с таким именем уже существует. Хотите заменить его?", mtWarning, [mbYes, mbNo, mbCancel], 0);
if mr = mrYes then break else if mr = mrCancel then exit;
end
else
break
end;
Buffer := TStringList.Create;
Buffer.LoadFromFile(Path);
For i := 0 To Buffer.Count - 1 Do
Begin
LineBuf := Buffer.Strings[i];
Pozition := Pos("charset=windows-125", LineBuf);
If Pozition <> 0 Then
Begin
Delete(LineBuf, Pozition, Length("charset=windows-125"));
Insert(Encoding, LineBuf, Pozition);
End;
Buffer.Strings[i] := LineBuf;
End;
Buffer.SaveToFile(Path);
//Word.Visible:=true;
Try
OpenFile := Path;
Try
Screen.Cursor :=crHourGlass;
Document := Word.Documents.Open(OpenFile);
Except
try
Document := Word.Documents.Open(OpenFile);
except
on E:Exception do
begin
ShowMessage(E.Message);
Screen.Cursor :=crDefault;
Document := null;
raise Exception.Create("")
end
end
End;
try
try
Document.select;
Document.Range.Fields.Update;
Document.Range.Fields.Unlink;
Document.SaveAs(SaveFile, Convertor);
Document.Close;
Document := null;
except
raise Exception.Create("Часть операций не доступна на Вашей версии Word");
end
finally
Screen.Cursor :=crDefault
end
Except
Document := null;
Screen.Cursor :=crDefault
End;
Screen.Cursor :=crDefault
End;
End.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c