Модераторы: MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Импорт любых данных из MS Word в Delphi приложение 
:(
    Опции темы
RedKot
Дата 26.3.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.3.2007

Репутация: нет
Всего: нет



делаю поиск тегов <teg> и <\teg> с помощью .Execute(...) (как было описано выше в примерах от Albinos_x (за что ему спасибо smile )), если не находит их, то выполняется код except...end:

try
...
DD:=wdCollapseEnd;
...
except
  WordApplication1.ActiveDocument.Content.Copy;
  WordApplication1.Selection.Collapse(DD);
  OleContainer1.Paste;
end;
...

то есть, если нет тегов, то я хочу скопировать весь документ и вставить его в OleContainer.
Но он копирует только одну страницу (первую) в документе, а остальные нет. Как с этим бороться?

И вот еще: программа находит начальный тег <teg> и конечный <\teg>, веделяет все содержимое между ними, копирует и вставляет в OleContainer, но если начальный тег находится на одной странице, а конечный на другой, то в OleContainer вставляется только та информация, которая находится на первой (начальной) странице, а продолжение информации на другой странице вставлять в OleContainer (или копировть, или выделять из Word документа) не хочет.

PM MAIL   Вверх
Albinos_x
Дата 28.3.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



попробуй сначала снять выделение а потом использовать content , а вообще это скорее всего проблема заключена в OleContainer...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
RedKot
Дата 15.4.2007, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.3.2007

Репутация: нет
Всего: нет



выкладываю результаты моей работы по этой теме:

Код

{в принципе этот модуль можно применять в своей программе,
только немного необходимо разобраться как эти функции работают.
надеюсь этот модуль Вам чем то поможет.
на событие формы OnCreate необходимо глобальной переменной
tegNum присвоить 1 (то есть первый вопрос).
далее необходимо tegNum присваивать значение функций NextQuestion
и PreviousQuestion.
также необходимо объявить глоб. переменную (у меня kolQ),
которой будет присваиваться значение функции KolTeg,
и в дальнейшем она будет использоваться для функций NextQuestion
и PreviousQuestion.
кстати, эти две глоб. переменные можно объявить прямо в этом модуле
(все равно этот модуль подключается к другим, там где он нужен),
просто я их объявлял в модуле главной формы :-) }
unit UmyWApp;

interface

uses StdCtrls, SysUtils, OleCtnrs, Dialogs, Variants, OleServer, Word2000;

//определяет количество вопросов (тегов <teg>) в документе,
//возвращает это количество
function KolTeg(WApp:TWordApplication; myLabel:TLabel):integer;
//выход из Ворда без сохранений в открытых для данного сервера Ворд документах
function QuitWordAppNotSave(WApp:TWordApplication):boolean;
//переход к следующему вопросу (к следующему <teg>...</teg>) в документе
//необходимо применять эту функцию после функции KolTeg
//возвращает номер вопроса
function NextQuestion(WApp:TWordApplication; myOleContainer:TOleContainer;
                      myLabel:TLabel; tegNum, KolTeg:Integer):integer;
//переход к предыдущему вопросу (к предыдущему <teg>...</teg>) в документе
//необходимо применять эту функцию после функции KolTeg
//возвращает номер вопроса
function PreviousQuestion(WApp:TWordApplication; myOleContainer:TOleContainer;
                          myLabel:TLabel; tegNum, KolTeg:Integer):integer;
//соединение (точнее создание своего нового) с сервером Ворда и открытие нового документа
function WAppConnect_Add(WApp:TWordApplication; myAutoConnect, myAutoQuit:Boolean;
                          myConnectKind:TConnectKind; AddFileName:OleVariant):boolean;
//соединение (точнее создание своего нового) с сервером Ворда
// и открытие уже существующего документа
function WAppConnect_Open(WApp:TWordApplication; myAutoConnect, myAutoQuit:Boolean;
                          myConnectKind:TConnectKind; AddFileName:OleVariant):boolean;
//показывает первый вопрос в документе
//у меня применяется эта функция во время активации формы (OnActivate)
//необходимо (обязательно) применять эту функцию до функции KolTeg
//так как KolTeg вносит изменения в теги, и эта функция будет материться
function ShowFirstQuestion(WApp:TWordApplication; myOleContainer:TOleContainer;
                           ShowNotTegFile:boolean):boolean;
//копирует из документа определенный вопрос в буфер обмена
function CopyQuestionToClipboard(WApp:TWordApplication; tegNum:Integer):boolean;
//вставляет из буфера обмена в любой другой документ (этого сервера Ворд,
//с которым идет работа)
function PasteFromClipboardToFile(WApp:TWordApplication;
                                  IntoWhatItemToInsert, ReturnBackToItem:OleVariant):boolean;
//удаляет определеный вопрос из документа (вместе с тегами <teg>...</teg>)
function DeleteQuestion(WApp:TWordApplication; tegNum:Integer):boolean;

implementation

function KolTeg(WApp:TWordApplication; myLabel:TLabel):integer;
var
  L,d,DD,Templ:OleVariant;
  tr:boolean;
  text_:string;
  kol:integer;
begin
    L:=wdStory;
    WApp.Selection.HomeKey(L,EmptyParam);
    tr:=true;
    kol:=0;
    d:=wdFindStop;
    Templ:='<teg>';
    repeat
    begin
      try
      begin
        kol:=kol+1;
        tr:=WApp.Selection.Find.Execute(Templ,EmptyParam,EmptyParam,EmptyParam,
                                        EmptyParam,EmptyParam,EmptyParam,d,EmptyParam,
                                        EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
        if tr=true then
        begin
          text_:='<te'+inttostr(kol)+'>';
          WApp.Selection.Delete(EmptyParam,EmptyParam);
          WApp.Selection.InsertAfter(text_);
        end;
        WApp.Selection.End_;
        WApp.Selection.Collapse(DD);
      end
      except
        tr:=false;
      end;
    end
    until tr=false;
    kol:=kol-1;
    myLabel.Caption:='Всего вопросов: '+inttostr(kol);
    L:=wdStory;
    WApp.Selection.HomeKey(L,EmptyParam);
    Result:=kol;
end;

function QuitWordAppNotSave(WApp:TWordApplication):boolean;
var
  NotSave: OleVariant;
begin
  NotSave:=wdDoNotSaveChanges;
  try
    WApp.Quit(NotSave);
    WApp.Disconnect;
  except
    Result:=false;
    exit;
  end;
  Result:=true;
end;

function NextQuestion(WApp:TWordApplication; myOleContainer:TOleContainer;
                       myLabel:TLabel; tegNum, KolTeg:Integer):integer;
var
  Templ,D,DD:OleVariant;
  Start,End_:Integer;
begin
  try
    tegNum:=tegNum+1;
    if tegNum>KolTeg then tegNum:=1;
    myLabel.Caption:='№ вопроса: '+inttostr(tegNum);
    if tegNum=1 then
    begin
      D:=wdStory;
      WApp.Selection.HomeKey(D,EmptyParam);
    end;
    DD:=wdCollapseEnd;
    Templ:='<te'+inttostr(tegNum)+'>';
    D:=wdFindStop;
    WApp.Selection.Find.Execute(Templ, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, D, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam);
    Start:=WApp.Selection.End_;
    WApp.Selection.Collapse(DD);
    Templ:='<\teg>';
    WApp.Selection.Find.Execute(Templ, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, D, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam);
    End_:=WApp.Selection.Start;
    WApp.Selection.Collapse(DD);
    WApp.Selection.Start:=Start;
    WApp.Selection.End_:=End_;
    WApp.Selection.Select;
//////////////////////////////////////////////////////////////////////////////
    WApp.Selection.Copy;
    WApp.Selection.Collapse(DD);
    myOleContainer.Paste;
  except
    showmessage('в документе нет тегов!');
  end;
  Result:=tegNum;
end;

function PreviousQuestion(WApp:TWordApplication; myOleContainer:TOleContainer;
                          myLabel:TLabel; tegNum, KolTeg:Integer):integer;
var
  Templ,D,DD:OleVariant;
  Start,End_:Integer;
begin
  try
    tegNum:=tegNum-1;
    if tegNum=0 then tegNum:=KolTeg;
    myLabel.Caption:='№ вопроса: '+inttostr(tegNum);
    D:=wdStory;
    WApp.Selection.HomeKey(D,EmptyParam);
    DD:=wdCollapseEnd;
    Templ:='<te'+inttostr(tegNum)+'>';
    D:=wdFindStop;
    WApp.Selection.Find.Execute(Templ, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, D, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam);
    Start:=WApp.Selection.End_;
    WApp.Selection.Collapse(DD);
    Templ:='<\teg>';
    WApp.Selection.Find.Execute(Templ, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, D, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam);
    End_:=WApp.Selection.Start;
    WApp.Selection.Collapse(DD);
    WApp.Selection.Start:=Start;
    WApp.Selection.End_:=End_;
    WApp.Selection.Select;
//////////////////////////////////////////////////////////////////////////////
    WApp.Selection.Copy;
    WApp.Selection.Collapse(DD);
    myOleContainer.Paste;
  except
    showmessage('в документе нет тегов!');
  end;
  Result:=tegNum;
end;

function WAppConnect_Add(WApp:TWordApplication; myAutoConnect, myAutoQuit:Boolean;
                          myConnectKind:TConnectKind; AddFileName:OleVariant):boolean;
begin
  try
    WApp.AutoConnect:=myAutoConnect;
    WApp.AutoQuit:=myAutoQuit;
    WApp.ConnectKind:=myConnectKind;
    //if  ReadStrParam('Сервер')='#' then str:='' else str:=ReadStrParam('Сервер');
    //WordApplication1.RemoteMachineName:=str;
    WApp.Connect;
    //////////////////////отключение проверки на грамматику/////////////////////////
    WApp.Options.CheckSpellingAsYouType:=False;
    WApp.Options.CheckGrammarWithSpelling:=False;
    WApp.Options.CheckGrammarAsYouType:=False;
    ////////////////////////////////////////////////////////////////////////////////
    WApp.Documents.Add(AddFileName,EmptyParam,EmptyParam,EmptyParam);
  except
    Result:=false;
    exit;
  end;
  Result:=true;
end;

function WAppConnect_Open(WApp:TWordApplication; myAutoConnect, myAutoQuit:Boolean;
                          myConnectKind:TConnectKind; AddFileName:OleVariant):boolean;
begin
  try
    WApp.AutoConnect:=myAutoConnect;
    WApp.AutoQuit:=myAutoQuit;
    WApp.ConnectKind:=myConnectKind;
    //if  ReadStrParam('Сервер')='#' then str:='' else str:=ReadStrParam('Сервер');
    //WordApplication1.RemoteMachineName:=str;
    WApp.Connect;
    //////////////////////отключение проверки на граматику/////////////////////////
    WApp.Options.CheckSpellingAsYouType:=False;
    WApp.Options.CheckGrammarWithSpelling:=False;
    WApp.Options.CheckGrammarAsYouType:=False;
    ////////////////////////////////////////////////////////////////////////////////
    WApp.Documents.Open(AddFileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                        EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                        EmptyParam,EmptyParam);
  except
    Result:=false;
    exit;
  end;
  Result:=true;
end;

function ShowFirstQuestion(WApp:TWordApplication; myOleContainer:TOleContainer;
                           ShowNotTegFile:boolean):boolean;
var
  Templ,D,DD:OleVariant;
  Start,End_:Integer;
begin
  try
    DD:=wdCollapseEnd;
    Templ:='<teg>';
    D:=wdFindStop;
    WApp.Selection.Find.Execute(Templ, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, D, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam);
    Start:=WApp.Selection.End_;
    WApp.Selection.Collapse(DD);
    Templ:='<\teg>';
    WApp.Selection.Find.Execute(Templ, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, D, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam);
    End_:=WApp.Selection.Start;
    WApp.Selection.Collapse(DD);
    WApp.Selection.Start:=Start;
    WApp.Selection.End_:=End_;
    WApp.Selection.Select;
//////////////////////////////////////////////////////////////////////////////
    WApp.Selection.Copy;
    WApp.Selection.Collapse(DD);
    myOleContainer.Paste;
  except
    if ShowNotTegFile=true then
    begin
      WApp.ActiveDocument.Content.Copy;
      WApp.Selection.Collapse(DD);
      myOleContainer.Paste;
    end;
    Result:=false;
    exit;
  end;
  Result:=true;
end;

function CopyQuestionToClipboard(WApp:TWordApplication; tegNum:Integer):boolean;
var
  Templ,D,DD:OleVariant;
  Start,End_:Integer;
begin
  try
    D:=wdStory;
    WApp.Selection.HomeKey(D,EmptyParam);
    DD:=wdCollapseEnd;
    Templ:='<te'+inttostr(tegNum)+'>';
    D:=wdFindStop;
    WApp.Selection.Find.Execute(Templ, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, D, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam);
    Start:=WApp.Selection.End_;
    WApp.Selection.Collapse(DD);
    Templ:='<\teg>';
    WApp.Selection.Find.Execute(Templ, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, D, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam);
    End_:=WApp.Selection.Start;
    WApp.Selection.Collapse(DD);
    WApp.Selection.Start:=Start;
    WApp.Selection.End_:=End_;
    WApp.Selection.Select;
    WApp.Selection.Copy;
    WApp.Selection.Collapse(DD);
  except
    Result:=false;
    exit;
  end;
  Result:=true;
end;

function PasteFromClipboardToFile(WApp:TWordApplication;
                                  IntoWhatItemToInsert, ReturnBackToItem:OleVariant):boolean;
begin
  try
    WApp.Windows.Item(IntoWhatItemToInsert).Activate;
    WApp.Selection.TypeText('<teg>');
    WApp.Selection.TypeParagraph;
    WApp.Selection.Paste;
    WApp.Selection.TypeParagraph;
    WApp.Selection.TypeText('<\teg>');
    WApp.Selection.TypeParagraph;
    WApp.Windows.Item(ReturnBackToItem).Activate;
  except
    Result:=false;
    exit;
  end;
  Result:=true;
end;

function DeleteQuestion(WApp:TWordApplication; tegNum:Integer):boolean;
var
  Templ,D,DD:OleVariant;
  Start,End_:Integer;
begin
  try
    D:=wdStory;
    WApp.Selection.HomeKey(D,EmptyParam);
    DD:=wdCollapseEnd;
    Templ:='<te'+inttostr(tegNum)+'>';
    D:=wdFindStop;
    WApp.Selection.Find.Execute(Templ, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, D, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam);
    Start:=WApp.Selection.Start;
    WApp.Selection.Collapse(DD);
    Templ:='<\teg>';
    WApp.Selection.Find.Execute(Templ, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, D, EmptyParam,
                                EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                                EmptyParam, EmptyParam);
    End_:=WApp.Selection.End_;
    WApp.Selection.Collapse(DD);
    WApp.Selection.Start:=Start;
    WApp.Selection.End_:=End_;
    WApp.Selection.Select;
    D:=wdCharacter;
    Templ:=1;
    WApp.Selection.Delete(D,Templ);
    //WApp.Selection.Collapse(DD);
  except
    Result:=false;
    exit;
  end;
  Result:=true;
end;

end.

PM MAIL   Вверх
mutabor1
Дата 10.8.2010, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 10.8.2010

Репутация: нет
Всего: нет



по поводу этого кода
задача - сохранить изображения из документа на диске
у меня конструкция 
Код

c:=WordDocument1.range.inlineShapes.Count;
 (и все следующие с inlineshapes) не работает, возвращается ноль
работает так 
Код

c:=WordDocument1.shapes.count;

как в этом случае быть? нигде не могу найти нормального хелпа 

PM MAIL   Вверх
Albinos_x
Дата 26.8.2010, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



1. 1 топик, 1 вопрос
mutabor1, создай для этого отдельную тему
2. если работает - хорошо, в чем суть вопроса? 
3.  хелпа, как такового нет... только если пробовать лезть в хелп по VB, но код последнего может существенно отличаться от Dephi.
4. возвращаемый вариант тоже может отличаться от действительности, если ты обратил внимание на мои комментарии, то там написано что этот код у меня работал только на картинках, которые размещены "в тексте". "За текстом" и "перед текстом" этот вариант может не прокатить, тогда возможно работает твой вариант... в общем нужно проверять...

Это сообщение отредактировал(а) Albinos_x - 26.8.2010, 21:03


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
SlavutichRed
  Дата 14.1.2016, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 13.1.2016

Репутация: нет
Всего: нет



Цитата(Albinos_x @ 3.3.2007,  21:16)
Код
...
var 
    Templ,d,dd:OleVariant;
    Start,End_:Integer;
begin
...
DD:=wdCollapseEnd;

...

подскажите - на строке DD:=wdCollapseEnd компилятор выдает ошибку  undeclared identifier: 'wdCollapseEnd' и дальше не компилирует. Подскажить что где прописать что б начал понимать этот параметр?
PM MAIL   Вверх
Albinos_x
Дата 11.3.2017, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



SlavutichRed
подключите модуль WordXP или Word2000


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.1900 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.