Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.30;
Скачать: [xml.tar.bz2];

Вниз

Как программно в Word-е добавить таблицу?   Найти похожие ветки 

 
Tumcoat   (2003-12-16 03:03) [0]

И снова здравствуйте!!

Помогите пжл решить такую проблему. Из программы создаю Word-кий документ, в котором сначала идет какой-то небольшой текст, а после него надо вставить таблицу с данными. Так вот, после длительного поиска нашел только как вставить таблицу на чистый лист, а мне надо ее вставить после какой-либо строки.
Подскажите пожалуйста как это можно сделать?

Заранее благодарен.


 
KSergey   (2003-12-16 08:32) [1]

Пример вставки таблицы, параграфов

procedure TForm1.Button1Click(Sender: TObject);
begin
// если заголовок "Выход", то закрываем программу
if button1.caption="Выход" then
begin
Application.Terminate;
exit
end
// иначе (при первом начатии, когда у нас заголовок "Старт")
//переименовываем заголовок в "Выход"
else button1.caption:="Выход";

panel1.Visible:=true;
// создаем экземпляр ворда
WordApp:=CoApplication_.Create;
// делаем его видимым
WordApp.Visible:=true;
// шаблон
template:="Normal";
// создать шаблон
OpenAsTemplate:=false;
// что-то типа оператора with, можно было и напрямую обратиться
Docs:=WordApp.Documents;
// добавляем документ
Doc:=Docs.Add(template,OpenAsTemplate);

// выделить все
ARange:=Doc.Range(EmptyParam,EmptyParam);
// массив параграфов
pars:=doc.Paragraphs;
// переменная - параметр
template:=arange;
// новый параграф
par:=pars.Add(template);
// цвет зеленный
par.Range.Font.ColorIndex:=11;
// вставляем текст
par.Range.InsertBefore("Привет !!!");
// переменная - параметр
template:=par.Range;
// новый параграф, чтобы таблица не потерла текст
par:=pars.Add(template);
// цвет черный
par.Range.Font.ColorIndex:=0;
// вставляем текст
par.Range.InsertBefore("Переключившись в программу, можно программно менять текст ячеек !");
// переменная - параметр
template:=par.Range;
// новый параграф, чтобы таблица не потерла текст
par:=pars.Add(template);
// выделяем параграф
arange:=par.Range;

// шрифт - жирный
ARange.Font.Bold:=1;
// шрифт - рукописный
ARange.Font.Italic:=1;
// получить массив таблиц
tabls:=aRange.Tables;
// добавляем новую таблицу размером 5 на 5
tabl:=tabls.Add(arange,5,5);
// в цикле
for i:=1 to 5 do
// задаем значение ячеек
tabl.Cell(i,1).Range.Text:=inttostr(i);

end;

Завершающие действия, сохранение файла

procedure TForm1.FormDestroy(Sender: TObject);
var
// для параметров
SaveChanges:olevariant;
begin
// если Word не закрыт
if not VarIsEmpty(WordApp) then begin
{ а можно сохранить автоматом:
// имя файла в оле
template:="Имя.doc";
// если не сохранен, то
if doc.Saved=false then
// сохраняем
Doc.SaveAs(template, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);

короче, пишешь имя объекта, ставишь точку и нажимаешь
"ctrl"+" " и изучаешь существующие методы и св-ва
}
//изменения не сохранять
SaveChanges:=false;
// то закрыть сначала документ
Doc.Close(SaveChanges,EmptyParam,EmptyParam);
// а потом и ворд
WordApp.Quit(SaveChanges,EmptyParam,EmptyParam)
end;


 
KSergey   (2003-12-16 08:40) [2]

Да, код не мой
Источник где потырил - не помню.


 
Tumcoat   (2003-12-16 08:50) [3]

За код конечно спасибо, хорошая штука.
Я примерно так и пытался делать недавно, но все время получаю такую ошибку:

Method "Range" not supported by automation object

и честно говоря не представляю как от этого избавиться, не подскажешь?


 
KSergey   (2003-12-16 09:07) [4]

Да ну?
А попробуйте не примерно так, а именно так. Вроде на первый взгляд тут все правильно....
Хотя не проверял.
Н оу меня есть опять же похожий код, где все нормально. Только таблиц я там не добавляю - читаю и подправляю текст в существующих.

И, к стати, а в каком именно месте у вас ошибка? Для какого именно объекта он не находит Range?


 
Tumcoat   (2003-12-17 02:25) [5]

Ну именно так не получится, переменные разные, опять же разный текст вставляется, и т.д. :-)))

И кстати, с текстом у меня тоже все нормально, и вставляется и редактируется, и все что надо делается, а вот в этой операции:


> tabl:=tabls.Add(arange,5,5);


и возникает эта ошибка.


 
Романов Р.В.   (2003-12-17 07:56) [6]

На королевстве дельфи есть статья по работе с wordom


 
xli   (2003-12-17 10:44) [7]

Хорошо еще помогает включение записи действий в VBA макрос. А потом разбор данного макроса.

Вот только не надо забывать про возможные различия между разными версиями офисов, а то можно нарваться на неподдерживаемые функции.


 
Tumcoat   (2003-12-18 05:23) [8]


> Романов Р.В. ©


Был я на королевстве, читал. Там есть: как создать таблицу на весь (причем на чистый) лист, как ее редактировать, как превратить в таблицу определенным образом отредактированный текст (кстати, как его так определенно отредактировать тоже не сказано). Кстати в ответе KSergey описано тоже самое, только более понятно. Но нигде нету ответа на мой вопрос.


 
Tumcoat   (2003-12-18 05:24) [9]


> xli

Word у меня 2000-й


 
Shirson   (2003-12-18 06:49) [10]

const
wdAutoFitFixed=0;
wdWord9TableBehavior=1;
...

WordApp.ActiveDocument.Tables.Add(Range:=WordApp.Selection.Range, NumRows:=5, NumColumns:= 5, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitFixed);


 
Tumcoat   (2003-12-18 10:12) [11]


> Shirson ©

Спасибо, попробую.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.12.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
1-99533
man
2003-12-16 11:41
2003.12.30
помогите с инст. пакетом


14-99700
Serj
2003-12-09 06:08
2003.12.30
Цифровая фотокамера


8-99651
Andrew
2003-08-28 09:14
2003.12.30
Как фиксировать значение размера потока TJPEGImage?


3-99506
T{}r(l-l
2003-12-05 11:56
2003.12.30
сообщения от


14-99707
Ru
2003-12-09 13:00
2003.12.30
Людей жалко





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский