Як програмно в word-е додати таблицю

Як програмно в Word-е додати таблицю?

І знову здрастуйте.

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

Приклад вставки таблиці, параграфів

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);

Завершальні дії, збереження файлу

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;

Так, код не мій
Джерело де потирілі - не пам'ятаю.

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

Method "Range" not supported by automation object

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

Та НУ?
А спробуйте НЕ приблизно так, а саме так. Начебто на перший погляд тут все правильно.
Хоча не перевіряв.
Н оу мене є знову ж схожий код, де все нормально. Тільки таблиць я там не додаю - читаю і підправляти текст в існуючих.

І, до речі, а в якому саме місці у вас помилка? Для якого саме об'єкту він не знаходить Range?

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

І до речі, з текстом у мене теж все нормально, і вставляється і редагується, і все що треба робиться, а ось в цій операції:

і виникає ця помилка.

Добре ще допомагає включення запису дій в VBA макрос. А потім розбір даного макросу.

Ось тільки не треба забувати про можливі відмінності між різними версіями офісів, а то можна нарватися на не підтримуються функції.

Був я на королівстві, читав. Там є: як створити таблицю на весь (причому на чистий) лист, як її редагувати, як перетворити в таблицю певним чином відредагований текст (до речі, як його так виразно відредагувати теж не сказано). До речі у відповіді KSergey описано те ж саме, тільки більш зрозуміло. Але ніде немає відповіді на моє запитання.

const
wdAutoFitFixed = 0;
wdWord9TableBehavior = 1;
.

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

Схожі статті