Форум: "Основная";
Текущий архив: 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