Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа через Delphi с Word [D5, Win95/98]


Salvator ©   (2002-10-28 22:41:00) 

Мастера, как через Delphi, добавить в уже имеющийся документ Word таблицу и работать с ней?


Salvator   (2002-11-01 19:18:00) [1]

Заменил OlePropertyGet на ActiveDocument в результате получил следующий текст:

var R:Range;
Pkol,s:string;
num_rows,num_col:longint;
doc,range,table,tables:variant;
begin
WordApplication1.AutoConnect:=false;
WordApplication1.AutoConnect:=true;
WordApplication1.Visible := True;
WordApplication1.Documents.Add(EmptyParam,EmptyParam);
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
num_rows := 5;
num_col := 3;

doc := WordApplication1.ActiveDocument.Get_Tables;
range := doc.ActiveDocument;
range.ActiveDocument.Collapse;
tables := range.ActiveDocument.Tables;
table := tables.OleFunction.Add(
range,num_rows,num_col);
end;

Однако при запуске программы она выдает ошибку: Method “ActiveDocument” not supported by automation object. В чем глюк?


[NIKEL]   (2002-10-31 00:17:00) [2]

просто пиши word.ActiveDocument; и т.д (подкл. ComObj и Excel200(?))


Salvator   (2002-10-30 19:51:00) [3]

Спасибо за ответ, но в Delphi процедуры OlePropertyGet нет, есть ли идентичная ей процедура?


skiph   (2002-10-30 06:06:00) [4]

vvWord.ActiveDocument.Tables.Add(vvWord.Application.Selection.Range,CountRows,CountColumns,1,0);


[NIKEL]   (2002-10-30 00:50:00) [5]

На Builder`e писал как-то - может поможет
сначала создай конечно все объекты и подкл. к ворду

long num_rows = 5;
long num_col = 3;

Variant doc = word.OlePropertyGet("ActiveDocument");
Variant range = doc.OleFunction("Range");

range.OleProcedure("Collapse", (Variant)0);

//Вставляем
Variant tables = range.OlePropertyGet("Tables");
Variant table = tables.OleFunction("Add",
range, (Variant)num_rows, (Variant)num_col);


Salvator   (2002-10-29 22:17:00) [6]

Спасибо за ответ, но может быть я что-либо сделал не так, однако результат получился следующим:

Таблица

№ Название Характер работы Выходные данные Число страниц Соавторы а) печатные научные работы 1 Строка 1 Строка 1-1 Строка 1-2 Строка 1-3 с. Автор

это просто текст, разбитый на колонки, с помощью табов, а нужна таблица. Примерно так

Министерство образования РФ

Таблица 5 на 5


Если знаете как это сделать, то пожалуйста подскажите.
С уважением, Salvator


Snake   (2002-10-29 05:20:00) [7]

Попробуй примерно следующее:

procedure TForm1.Button1Click(Sender: TObject);
var R:Range;
Pkol,s:string;
begin
WA.AutoConnect:=false;
WA.AutoConnect:=true;
WA.Visible := True;
WA.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam);

WD.ConnectTo(WA.ActiveDocument);

WD.Paragraphs.Add(EmptyParam);
R := WD.Paragraphs.Last.Range;
r.InsertAfter("Таблица");
WD.Paragraphs.Add(EmptyParam);
r.Paragraphs.Add(EmptyParam);
R := WD.Paragraphs.Last.Range;

r.Paragraphs.Format.Alignment:=0;
R := WD.Paragraphs.Last.Range;
S := "№" + #9 +
"Название" + #9 +
"Характер работы" + #9 +
"Выходные данные" + #9 +
"Число страниц" + #9 +
"Соавторы" + #9;
R.InsertAfter(S);
S := "а) печатные научные работы" + #9 +
"" + #9 +
"" + #9 +
"" + #9 +
"" + #9 +
"" + #9;
R.InsertAfter(S);
s:="1"+#9+"Строка 1"+#9+
"Строка 1-1"+#9+"Строка 1-2"+#9+
"Строка 1-3"+" с."+PKol+#9;
"Автор"+#9;
R.InsertAfter(S);

wd.Tables.Item(1).Rows.Item(RN).Cells.Merge;
wd.Tables.Item(1).Rows.Item(RN).Select;
WA.Selection.Font.Bold:=1;

wd.Tables.Item(1).Rows.Item(1).Select;
WA.Selection.Font.Bold:=1;
WA.Selection.Paragraphs.Format.Alignment:=1;
WD.Paragraphs.Add(EmptyParam);
r:=WD.Paragraphs.Last.Range;

WA.Selection.TypeParagraph;
end;


где WD - TWordDocument
WA - TWordApplication

Правда вот не поню, есть ли в D5 эти компоненты


Наверх

Титульная страница Поиск, карта сайта Написать письмо