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

Подскажите... Очень надо! И еще, если надо запихнуть на 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;
...