Проблемы общения с Word из Дельфы

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Всем привет! Вот такая вот хрень,поручили написать дипломную. Туда входит общение м вордом. Т.е. есть документ, нужно на конкретные места расставить данные из моей проги. Пусть данные храняться в edit1, Edit2 и т.д. Как мне запихнуть данные из Edit1 в строку 23 и отступить слева 12 символов? Есть ли что-нить на подобии Goto или Move? Нашел что

Код: Выделить всё

Dogovor.Selection.TypeText(Edit1.Text);
эта функция кидает текст в ворду. А вот как переместить курсор, черт знает... ;) Подскажите... Очень надо! И еще, если надо запихнуть на 2 листе, 3 листе, 12 листе и т.д. т.е. переход по листам чтоб можно было делать.
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

> А вот как переместить курсор, черт знает...
Нужно понатыкать пробелов.
А если нужно в очччень конкретные места - надо закладки использовать. Или надписи.

Здесь есть пример http://www.delphimaster.ru/articles/dbtoword/index.html
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Хорошо, а где взять пример с закладками? Я с ними ни разу не работал :(
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

надо сначала подготовить шаблон (dot) в который вставить закладки через меню...
потом искать свойство Bookmark. Это кажется коллекция, к которой можно по именам обращаться..
Изображение
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

>Хорошо, а где взять пример с закладками? Я с ними ни разу не работал

Сделай макрос, который работает с закладками (создание закладки, переход на закладку). Посмотри как он выглядит.
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Парни, значит вот чаго я натыкал. Вытащил панель кнопок в ворде - "Элементы управления", от туда взял компонент Label разместил его в документе, установил свойство "AutoSize", имя его "Label1". Теперь как к нему обратиться из дельфы и ткнуть в него текст из компонента Edit1???
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

>Теперь как к нему обратиться из дельфы и ткнуть в него текст из компонента Edit1???

Зачем это надо? Размещай объекты типа надпись и пихай текст в них
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

имя его "Label1". Теперь как к нему обратиться
Dogovor.Label1.Text:="qweqweqwe";

В самом Word-е нажмите Alt-F11 (перейдите в редактор VBA) там есть
1) Object Browser, который покажет все объекты, их свойства и методы
2) Справка (справка, если она установлена)
3) Подстрочник, который работает во время написания макросов, и "вываливает" выпадающие списки с названиями свойств и методов.

ThisDocument - который Вы там увидите - это Ваш Dogovor.

С элементами управления фактически проще обращаться чем с объектами типа Надпись, но у надписей больше возможностей по форматированию.

PS
Вообще, как только Вы получили ссылку на интерфейс документа MSOffice - Вам нужен по большей части VBA а не Delphi. Ну с той лишь разницей, что
1) при обращении к элементам коллекций вместо круглых скобок надо ставить квадратные
VBA: ThisDocument.Charts(i)....
D: Dogovor.Chartsp...;
2) не бывает передачи поименованных аргументов в произвольном порядке
VBA: SomeProcedure arg2:=123 arg1:=321
D: SomeProcedure(321,123);

Есть и другие отличия, но эти, пожалуй, наиболее очевидные.
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Зачем это надо? Размещай объекты типа надпись и пихай текст в них

Что заначит, "Зачем это надо"??? Проблема та-разместить нужные вставки из проги в конкретные места документа, вот я и нашел один из способов-это использовать Lablel в документе, а уже в него вставлять текст/цыфры из моей проги. Тогда получиться то что мне надо.
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Dogovor.Label1.Text:="qweqweqwe";
Не канает :( Говорит - Method Label1 is not supported by automation object
А вот чаго написал я.

Код: Выделить всё

uses ..., comobj;
....
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
dogovor:Variant;

implementation
....
Dogovor:=CreateOleObject('Word.Application');
Dogovor.Documents.Open('C:\Диплом\Doc1.doc');
If vartype(Dogovor)=varDispatch then Dogovor.visible:=true;

Dogovor.Label1.text:=Edit1.Text;
//Dogovor.Documents.Label1.text:=Edit1.Text;

  If vartype(Dogovor)=varDispatch then
       begin
            Dogovor.Displayalerts:=false;
            Dogovor:=Unassigned;
       end;
...
Ответить