Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
3-99032
Максим
2002-12-10 10:58
2002.12.30
fox базы - Language driver not found


6-99237
Zolen
2002-11-01 19:24
2002.12.30
создание HTML страницы


3-98984
dias
2002-12-09 18:29
2002.12.30
Мастера, подскажите, в чем причина


3-99013
boozer
2002-12-10 11:48
2002.12.30
Теперь проблема с DBEdit, DBLabel и им подобным


1-99085
19.12.2002
2002-12-19 17:50
2002.12.30
Изменение размера компонента





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский