Страница 1 из 3

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

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

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

Dogovor.Selection.TypeText(Edit1.Text);
эта функция кидает текст в ворду. А вот как переместить курсор, черт знает... ;) Подскажите... Очень надо! И еще, если надо запихнуть на 2 листе, 3 листе, 12 листе и т.д. т.е. переход по листам чтоб можно было делать.

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

Здесь есть пример http://www.delphimaster.ru/articles/dbtoword/index.html

Добавлено: 06 окт 2005, 12:09
Dr_Grizzly
Хорошо, а где взять пример с закладками? Я с ними ни разу не работал :(

Добавлено: 06 окт 2005, 14:53
Игорь Акопян
надо сначала подготовить шаблон (dot) в который вставить закладки через меню...
потом искать свойство Bookmark. Это кажется коллекция, к которой можно по именам обращаться..

Добавлено: 06 окт 2005, 20:32
YurikGL
>Хорошо, а где взять пример с закладками? Я с ними ни разу не работал

Сделай макрос, который работает с закладками (создание закладки, переход на закладку). Посмотри как он выглядит.

Добавлено: 07 окт 2005, 07:28
Dr_Grizzly
Парни, значит вот чаго я натыкал. Вытащил панель кнопок в ворде - "Элементы управления", от туда взял компонент Label разместил его в документе, установил свойство "AutoSize", имя его "Label1". Теперь как к нему обратиться из дельфы и ткнуть в него текст из компонента Edit1???

Добавлено: 07 окт 2005, 20:12
YurikGL
>Теперь как к нему обратиться из дельфы и ткнуть в него текст из компонента Edit1???

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

Добавлено: 07 окт 2005, 23:18
Naeel Maqsudov
имя его "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);

Есть и другие отличия, но эти, пожалуй, наиболее очевидные.

Добавлено: 11 окт 2005, 09:02
Dr_Grizzly
Зачем это надо? Размещай объекты типа надпись и пихай текст в них

Что заначит, "Зачем это надо"??? Проблема та-разместить нужные вставки из проги в конкретные места документа, вот я и нашел один из способов-это использовать Lablel в документе, а уже в него вставлять текст/цыфры из моей проги. Тогда получиться то что мне надо.

Добавлено: 11 окт 2005, 09:18
Dr_Grizzly
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;
...