0 / 0 / 1 Регистрация: 21.04.2015 Сообщений: 2 |
|
1 |
|
07.07.2016, 13:25. Показов 3142. Ответов 2
всем привет. как мне сделать проверку на то открыт ли документ(любой не конкретный) Word(Exel) или нет. Если открыт, то скопировать его содержимое в txt.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
07.07.2016, 13:25 |
2 |
Почетный модератор 64279 / 47578 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
|
07.07.2016, 13:49 |
2 |
то скопировать его содержимое в txt. Что за глупость? Интересно как таблицы и диаграммы Экселя копировать в txt?
0 |
Raund 0 / 0 / 1 Регистрация: 21.04.2015 Сообщений: 2 |
||||
08.07.2016, 09:14 [ТС] |
3 |
|||
Сообщение было отмечено Raund как решение РешениеСкопировать именно текстовую часть(это касается по большей части Word) диаграмм, картинок и т.п. в них не будет. Не правильно сформулировал вопрос. Я в первый раз на подобном форуме. Можно в принципе и сам документ скопировать. Добавлено через 12 часов 15 минут
Помогла книжка http://bourabai.ru/library/korniakov.pdf
0 |
← →
Miralex
(2003-08-26 12:50)
[0]
Уважаемые мастера подскажите мне как на Delphi проверить запущен ли Word и если нет — то запустить его.
← →
Skier
(2003-08-26 12:54)
[1]
GetActiveOleObject(…) ?
← →
h@1f-e1f
(2003-08-26 12:56)
[2]
FindWindow(…)?
← →
Miralex
(2003-08-26 13:04)
[3]
Так в том то и дело!
Я пишу:
var MSWord: Variant;
begin
try
MsWord := GetActiveOleObject(«Word.Application»);
except
try
MsWord := CreateOleObject(«Word.Application»);
MsWord.Visible := True;
except
Exception.Create(«Error»);
end;
end;
end;
И если ворд запущен то все ок!… если нет — то вылетаю с ошибкой!
← →
Skier
(2003-08-26 13:08)
[4]
function WordIsRunning : Boolean;
var
MSWord : Variant;
begin
try
MsWord := GetActiveOleObject(«Word.Application»);
Result := True;
except
Result := False;
end; //try
end;
← →
Miralex
(2003-08-26 13:18)
[5]
Спасибо!
Все работает!
Вот тока мне интересно что в моем примере неправильно!
← →
Skier
(2003-08-26 13:20)
[6]
>Miralex © (26.08.03 13:18)
> Вот тока мне интересно что в моем примере неправильно!
-Неправильно рабораешь с блоком try-except-end
-Exception.Create(«Error»); здесь лишнее
← →
Doctor Deejay
(2003-08-26 15:15)
[7]
> -Exception.Create(«Error»); здесь лишнее
Вместо него можно написать showMessage(«Ворд не запущен»);
|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
… (продолжение следует) …
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки бан.
Мат в разделе — бан на три месяца…
Как проверить Word на любой машине….
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Junior Рейтинг (т): 0 |
Надо открыть документ в MS-Word из Delphi корректно.
Var APP : variant; old_Text,new_text, SS:string; begin //создали новый документ APP:= CreateOleObject(‘Word.Application’); APP.Visible := False; APP.Documents.Add; // Вставляем файл SS:=WebBrowser1.LocationURL; APP.Selection.InsertFile(SS ,»,false,false,false); // Меняем old_Text на new_Text APP.Selection.Find.Execute(old_Text, False, False, False, False, False, True, 0, False, new_Text, 2, EmptyParam, EmptyParam, EmptyParam, EmptyParam); APP.Selection.MoveDown; APP.Visible := true; Пожалуйста помогите кто чем может! |
Bas |
|
В реестре искать номер версии ворда. Delphi Russian Knowledge Base |
SergSW |
|
Full Member Рейтинг (т): 14 |
А так не проще???
try APP:= CreateOleObject(‘Word.Application’); APP.Visible := False; APP.Documents.Add; // Вставляем файл SS:=WebBrowser1.LocationURL; APP.Selection.InsertFile(SS ,»,false,false,false); // Меняем old_Text на new_Text APP.Selection.Find.Execute(old_Text, False, False, False, False, False, True, 0, False, new_Text, 2, EmptyParam, EmptyParam, EmptyParam, EmptyParam); APP.Selection.MoveDown; APP.Visible := true; except Application.MessageBox(‘Нет Word-a’,’Error!!!’); end; |
DELPHIna |
|
Junior Рейтинг (т): 0 |
Цитата SergSW @ 24.08.04, 14:32 А так не проще???
try APP:= CreateOleObject(‘Word.Application’); APP.Visible := False; APP.Documents.Add; // Вставляем файл SS:=WebBrowser1.LocationURL; APP.Selection.InsertFile(SS ,»,false,false,false); // Меняем old_Text на new_Text APP.Selection.Find.Execute(old_Text, False, False, False, False, False, True, 0, False, new_Text, 2, EmptyParam, EmptyParam, EmptyParam, EmptyParam); APP.Selection.MoveDown; APP.Visible := true; except Application.MessageBox(‘Нет Word-a’,’Error!!!’); end;
Интересно….может так и проще…
uses Registry; function IsWordInstalled: Boolean; var Reg: TRegistry; s: string; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_CLASSES_ROOT; Result := Reg.KeyExists(‘ Word .Application’); finally Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if IsWordInstalled then ShowMessage(‘MS Word is installed.’); end; И поди разбери, что лучше??? |
Voice |
|
что 100%-но работает — то и лучше
Reg.KeyExists(‘ Word .Application’); пробелов много (может, так и должно быть) |
Miscђka |
|
Корректно из Delphi откроется документ ворда при помощи shellExecute() |
Voice |
|
2 Mischka |
Miscђka |
|
Цитата DELPHIna, 24.08.04, 14:05 Где тут написано про автоматизацию OLE? |
<Dron> |
|
Junior Рейтинг (т): 4 |
Я лично пользуюсь следующим методом:
procedure OpenWordFiles(FileName: String); var FilePath : OleVariant; WApp : variant; IsRunning : boolean; OnlyRead : Olevariant; WordApp : TWordApplication; begin if not IsOLEObjectInstalled(‘Word.Application’) then raise Exception.Create(‘На компьютере не установлен Word !’); // проверка запущен ли уже Word IsRunning:=True; try WApp:=GetActiveOleObject(‘Word.Application’); // пытаемся найти запущенный объект except IsRunning:=False; end; if (not IsRunning) or not Assigned(WordApp) then begin WordApp := TWordApplication.Create(nil); // если не запущен, то создаём WordApp.ConnectKind := ckRunningOrNew; end; WordApp.Connect; FilePath := FileName; WordApp.Documents.Open(FilePath,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); // отобразим word правильно WordApp.Visible := true; if WordApp.WindowState = TOLEEnum(wdWindowStateMinimize) then WordApp.WindowState := TOLEEnum(wdWindowStateNormal); WordApp.ScreenUpdating := true; end; Сообщение отредактировано: <Dron> — 25.08.04, 06:21 |
DELPHIna |
|
Junior Рейтинг (т): 0 |
Цитата Voice @ 24.08.04, 15:25
Reg.KeyExists(‘ Word .Application’); пробелов много (может, так и должно быть) не…так не должно быть…пробелы лишние Добавлено в 25.08.04, 07:12: Цитата <Dron> @ 25.08.04, 09:18 Я лично пользуюсь следующим методом:
procedure OpenWordFiles(FileName: String); var FilePath : OleVariant; WApp : variant; IsRunning : boolean; OnlyRead : Olevariant; WordApp : TWordApplication; begin if not IsOLEObjectInstalled(‘Word.Application’) then raise Exception.Create(‘На компьютере не установлен Word !’); ********************* end; Упустил наверное…:
function IsOLEObjectInstalled(Name: String): boolean; var ClassID: TCLSID; Rez : HRESULT; begin // Ищем CLSID OLE-объекта Rez := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID); if Rez = S_OK then // Объект найден Result := true else Result := false; end; |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,0336 ] [ 16 queries used ] [ Generated: 13.04.23, 22:37 GMT ]
Доступ к приложению Word осуществляется, как правило, посредством основных двух объектов, Word.Application и Word.Document. Они же обеспечивают доступ и к другим объектам Word (текст, таблицы, кнопки, меню и т.д.). Наиболее легкий метод работы с COM-сервером Word базируется на использовании переменных типа Variant.
Давайте на примере рассмотрим создание документа Word помощью Delphi.
Для начала создадим новый проект (File | New | VCL Foms Application-Delphi) и поместим на него 4 кнопки (TButton). Поменяем заголовки (свойство Caption) этих кнопок на: «Создать документ Word», «Открыть документ Word», «Сохранить документ Word», «Закрыть документ Word». Как понятно из названий, мы будем открывать, создавать, сохранять и закрывать документ Word при нажатии на эти кнопки.
Чтобы начать работать с Word необходимо в модуле формы указать ссылку на использование библиотеки ComObj, поэтому в разделе uses мы дописываем ComObj. Также нам необходимо объявить переменную типа Variant. Давайте создадим обработчик события OnClick для кнопки «Создать документ Word» и напишем код:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);
end;
Если сейчас запустить нашу программу и нажать на кнопку «Создать документ Word», то приложение Word будет запущено, но его окно не будет отображено на экране монитора. В память компьютера будет загружен объект Application, который обеспечивает доступ ко всем внутренним объектам, коллекциям и свойствам. Сейчас нас интересует свойство Visible этого объекта. Если значение этого свойства установить в True, то окно приложения Word станет видимым. Поэтому давайте допишем еще одну строчку в наш код:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);// запуск приложения Word
w.Visible:=true; // делаем Word видимым
end;
Вот теперь если запустить программу и нажать на кнопку «Создать документ Word», то наше приложение Word станет видимым и отобразится на экране монитора.
Для того чтобы создать новый документ, необходимо использовать метод Add, коллекции Documents. Поэтому если мы хотим создать новый документ Word с помощью Delphi, необходимо написать:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);// запуск приложения Word
w.Documents.Add; // создание нового документа
w.Visible:=true; // делаем Word видимым
end;
В этом коде, после выполнения метода Add, будет создан новый документ, который отобразится в окне приложения Word. Обратите внимание, что видимым наш документ (w.Visible:=true) я делаю в самую последнюю очередь. При формировании отчетов, рекомендуется так делать. Это сокращает время создания отчетов и повышает производительность работы приложений.
С созданием документа Word в Delphi разобрались. Теперь перейдем к открытию документа Word. Для этого создаем обработчик события OnClick для кнопки «Открыть документ Word» и напишем следующее:
Код
procedure TForm1.Button2Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);// запуск приложения Word
w.Documents.Open(ExtractFilePath(paramstr(0))+’/Delphi and MS Word.doc’); //открываем документ Word находящийся в папке с программой
w.Visible:=true; // делаем Word видимым
end;
Синтаксис метода Open глядит следующим образом:
Код
Documents.Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format)
Давайте рассмотрим аргументы метода Open, их типы и функциональное значение:
FileName: string — путь и имя файла;
ConfirmConversions: boolean — False — не открывать диалоговое окно «Преобразование файла» при открытии файла, формат которого не соответствует формату Word (doc или docx)
ReadOnly:boolean — True — открыть документ в режиме «Только для чтения»
AddToRecentFiles: boolean — True, чтобы добавить документ в список недавно открытых документов.
PasswordDocument: string — пароль для открытия документа
PasswordTemplate: string — пароль для открытия шаблона
Revert : boolean — True, чтобы вернуться к сохраненному документу, если этот документ открывается повторно.
WritePasswordDocument: string — пароль для сохранения измененного документа в файле
WritePasswordTemplate:string — пароль для сохранения изменений в шаблоне
Format:integer — формат открываемого документа.
Обязательным параметром метода Open является только FileName, остальные параметры могут отсутствовать, как отсутствуют в вышеприведенном примере кода. Но если вдруг нам понадобится воспользоваться некоторыми из этих параметров, то их необходимо явно указать при вызове метода. Например, если мы решим открыть файл в режиме «Только для чтения», то код будет выглядеть следующим образом:
Код
procedure TForm1.Button2Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);// запуск приложения Word
w.Documents.Open(ExtractFilePath(paramstr(0))+’/DelphiSchool.doc’, ReadOnly:=true); // открываем документ Word находящийся в папке с программой в режиме «Только для чтения»
w.Visible:=true; // делаем Word видимым
end;
С открытием документа Word тоже разобрались. Переходим к сохранению документа. Для кнопки «Сохранить документ Word» создаем обработчик события OnClick и пишем:
Код
procedure TForm1.Button3Click(Sender: TObject);
begin
w:=CreateOleObject(‘Word.Application’);// запуск приложения Word
//открываем документ Word находящийся в папке с программой в режиме «Только для чтения»
w.Documents.Open(ExtractFilePath(paramstr(0))+’/DelphiSchool.doc’, ReadOnly:=true);
// сохраняем документ в папку с программой под именем DelphiSchool Copy.doc
w.ActiveDocument.SaveAs(ExtractFileDir(paramstr(0))+’/DelphiSchool Copy.doc’);
w.Visible:=true; // делаем Word видимым
end;
Аргументы метода SaveAs, их типы и функциональное назначение представлены ниже:
FileName: String — Путь и имя файла
FileFormat — Число Формат файла
LockComments: Boolean — True — не сохранять комментарии
Password: String — Пароль, который будет использоваться при открытии документа
AddToRecentFiles: Boolean — True — добавить имя файла в список меню File
WritePassword: String — Пароль, который будет использоваться для сохранения документа
ReadOnlyRecommended: Boolean — True — в последующем документ можно открыть «только для чтения»
EmbedTrueTypeFonts: Boolean — True — при сохранении перевести шрифты документа в TrueType
SaveNativePictureFormat: Boolean — Используется для импорта графики из форматов, не поддерживаемых Windows. True — импортировать только графику, поддерживаемую Windows
SaveFormsData: Boolean — True — сохранить форму документа без текста
SaveAsAOCELetter: Boolean — Используется в версиях Word для компьютеров Apple Macintosh
При вызове метода SaveAs, как и при Open, можно задавать как один, так и несколько аргументов. Но, как правило, достаточно только первого аргумента (путь и имя файла).
Ну и последнее что мы рассмотрим – это закрытие документа. Закрыть документы можно с помощью метода Close коллекции Documents. Создадим обработчик события OnClick для кнопки «Закрыть документ Word» и напишем код:
Код
procedure TForm1.Button4Click(Sender: TObject);
begin
w.ActiveDocument.Close(True); // сохраняем и закрываем Word
end;
После того как документ закрыт, можно закрывать и приложение Word:
Код
procedure TForm1.Button4Click(Sender: TObject);
begin
w.ActiveDocument.Close(True); // сохраняем и закрываем Word
w.Quit;
end;
К уроку (статье) Основы работы с MS Word. Создание, открытие, сохранение и закрытие документа Word с помощью Delphi прилагается исходник, посмотрев который, вы можете ознакомиться с полным исходным кодом программы и посмотреть как работает созданная программа. Исходный код сопровождается комментариями, благодаря чему вы сможете легко в нем разобраться. Но я настоятельно рекомендую делать все самостоятельно. Так вы лучше и быстрее усвоите то, о чем говорилось в этом уроке
Для того чтобы получить возможность скачать исходник Delphi к этому уроку, необходимо посетить сайт рекламодателя. После этого, появится ссылка на исходник Delphi к уроку Основы работы с MS Word. Создание, открытие, сохранение и закрытие документа Word с помощью Delphi
Нажмите на эту ссылку Ссылка