Delphi word открыт или нет

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

Цитата
Сообщение от Raund
Посмотреть сообщение

то скопировать его содержимое в txt.

Что за глупость? Интересно как таблицы и диаграммы Экселя копировать в txt?



0



Raund

0 / 0 / 1

Регистрация: 21.04.2015

Сообщений: 2

08.07.2016, 09:14

 [ТС]

3

Лучший ответ Сообщение было отмечено Raund как решение

Решение

Скопировать именно текстовую часть(это касается по большей части Word) диаграмм, картинок и т.п. в них не будет. Не правильно сформулировал вопрос. Я в первый раз на подобном форуме. Можно в принципе и сам документ скопировать.

Добавлено через 12 часов 15 минут

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
procedure TForm1.Button1Click(Sender: TObject);
var
  wdApp, wdDoc : Variant;
  i,j:integer;
  NameDoc: string;
begin
  //Пытаемся подключиться к запущенному экземпляру MS Word.
  VarClear(wdApp);
  try
    wdApp := GetActiveOleObject('Word.Application');
  except
  end;
  //Проверяем есть ли запущенный экземпляр MS Word.
  if VarIsClear(wdApp) then begin
    MessageBox(0, 'Нет запущенных экземпляров MS Word.',
      'Действие отменено', MB_OK + MB_ICONWARNING + MB_APPLMODAL);
 
    Exit;
  end;
  //Проверяем, есть ли открытые документы.
  if wdApp.Documents.Count = 0 then begin
    MessageBox(0, 'Нет открытых документов MS Word.',
      'Действие отменено', MB_OK + MB_ICONWARNING + MB_APPLMODAL);
    Exit;
  end;
 
  //Получаем Список документов
       ListBox1.Items.Clear;
     for i := 1 to WdApp.Documents.Count do begin
       NameDoc:=WdApp.Documents.Item(i);
       Form1.ListBox1.Items.Add(NameDoc);
       end;
 
  //Активируем и сохраняем все открытые документы по очереди
       for j := 1 to ListBox1.Items.Count  do   begin
         WdApp.Documents.Item(j).Activate;
         wdDoc := wdApp.ActiveDocument;
         Memo1.Text := wdDoc.Range.Text;
         Memo1.Lines.SaveToFile('C:UsersОБИDesktop'+ListBox1.Items[j-1]+'.txt');
 
        end;

Помогла книжка 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(«Ворд не запущен»);


    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.


    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
    2. Как «свернуть» программу в трей.
    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
    4. Как прочитать список файлов, поддиректорий в директории?
    5. Как запустить программу/файл?
    … (продолжение следует) …


    Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
    Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


    Внимание
    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки бан.
    Мат в разделе — бан на три месяца…

    >
    Как проверить Word на любой машине….

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    24.08.04, 08:05

      Татьяна Junior

      *

      Рейтинг (т): 0

      Надо открыть документ в MS-Word из Delphi корректно.
      Хотелось бы предумотреть возможные ошибки и устранить их на этапе разработки приложения:
      1. Проверить есть ли MS Word на машине вообще, и если нет…то поругаться корректно.
      2. Предусмотреть возможность того, что MS Word стоит не в каталоге по умолчанию(если это может помешать работе) и если их стоит 2 и более…И вообще зависит ли работа используемого мной кода от версии MS Office?

      ExpandedWrap disabled

        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;

      Пожалуйста помогите кто чем может! :huh:

      Wizard

      Bas



      Сообщ.
      #2

      ,
      24.08.04, 10:23

        В реестре искать номер версии ворда. Delphi Russian Knowledge Base
        Или Word.Application.9 — это 2000


        SergSW



        Сообщ.
        #3

        ,
        24.08.04, 11:32

          Full Member

          ***

          Рейтинг (т): 14

          А так не проще???

          ExpandedWrap disabled

             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



          Сообщ.
          #4

          ,
          24.08.04, 11:49

            Татьяна Junior

            *

            Рейтинг (т): 0

            Цитата SergSW @ 24.08.04, 14:32

            А так не проще???

            ExpandedWrap disabled

               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;

            Интересно….может так и проще… :huh:
            А ещё я нашла такой способ:

            ExpandedWrap disabled

              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;

            И поди разбери, что лучше??? :unsure:


            Voice



            Сообщ.
            #5

            ,
            24.08.04, 12:25

              что 100%-но работает — то и лучше :)
              на мой взгляд (не проверял), работают оба варианта, но удобней и наглядней второй.
              Только по-моему в строке

              ExpandedWrap disabled

                Reg.KeyExists(‘  Word  .Application’);

              пробелов много (может, так и должно быть)

              Guru

              Miscђka



              Сообщ.
              #6

              ,
              24.08.04, 12:39

                Корректно из Delphi откроется документ ворда при помощи shellExecute() ;)
                Если ворд никак не установлен (а бывает, что он не установлен, но есть! и пользователь знает, где его найти), винда корректно спросит, с помощью чего юзер хочет корректно открыть документ.
                И смысла ругаться из Дельфи на отсутствие ворда я в данном случае не вижу.
                Хотя, хозяин — барин…


                Voice



                Сообщ.
                #7

                ,
                24.08.04, 13:10

                  2 Mischka
                  в этом топике имелась в виду автоматизация с OLE, т.е. работа с самим вордом. А без его установки этого нельзя сделать

                  Guru

                  Miscђka



                  Сообщ.
                  #8

                  ,
                  25.08.04, 01:57

                    Цитата

                    DELPHIna, 24.08.04, 14:05
                    Надо открыть документ в MS-Word из Delphi корректно.
                    Хотелось бы предумотреть возможные ошибки и устранить их на этапе разработки приложения

                    Где тут написано про автоматизацию OLE? ;)


                    <Dron>



                    Сообщ.
                    #9

                    ,
                    25.08.04, 06:18

                      Junior

                      *

                      Рейтинг (т): 4

                      Я лично пользуюсь следующим методом:

                      ExpandedWrap disabled

                        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



                      Сообщ.
                      #10

                      ,
                      25.08.04, 06:57

                        Татьяна Junior

                        *

                        Рейтинг (т): 0

                        Цитата Voice @ 24.08.04, 15:25

                        ExpandedWrap disabled

                          Reg.KeyExists(‘  Word  .Application’);

                        пробелов много (может, так и должно быть)

                        не…так не должно быть…пробелы лишние :D

                        Добавлено в 25.08.04, 07:12:

                        Цитата <Dron> @ 25.08.04, 09:18

                        Я лично пользуюсь следующим методом:

                        ExpandedWrap disabled

                          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;

                        Упустил наверное…:

                        ExpandedWrap disabled

                          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: Общие вопросы
                        • Следующая тема

                        Рейтинг@Mail.ru

                        [ Script execution time: 0,0336 ]   [ 16 queries used ]   [ Generated: 13.04.23, 22:37 GMT ]  

                        Основы работы с MS Word. Создание, открытие, сохранение и закрытие документа Word с помощью Delphi Функция, реализующая механизм доступа к OLE-объекту, находится в библиотеке ComObj.pas. Эта функция – CreateOleObject. Ее единственным аргументом является строка-идентификатор, а возвращает она ссылку на объект.
                        Доступ к приложению 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
                        Нажмите на эту ссылку Ссылка

                        Понравилась статья? Поделить с друзьями:
                      • Delphi word на передний план
                      • Delphi word межстрочный интервал
                      • Delphi word копирование текста
                      • Delphi word как найти текст
                      • Delphi word как закрыть word