0 / 25 / 13 Регистрация: 30.04.2014 Сообщений: 516 |
|
1 |
|
Таблица в ячейке таблицы ворд17.06.2015, 15:53. Показов 3900. Ответов 7
ребята, создал таблицу №1 в ворде, в первую ячейку поместил еще таблицу. а какой у нее номер? не 2!
0 |
13094 / 5875 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
|
17.06.2015, 16:07 |
2 |
Номер какой угодно может быть — зависит от количества таблиц в документе, порядка создания и пр. Этот номер и не нужно знать. Добавлено через 8 минут
в первую ячейку поместил еще таблицу Если в документ помещена 1 таблица, а затем в ячейку этой таблицы помещена ещё одна таблица, то получится следующее. Коллекция таблиц документа будет содержать 1 таблицу и коллекция таблиц, принадлежащих первой таблице документа, будет содержать тоже одну таблицу. Добавлено через 1 минуту
0 |
Sky Walker 0 / 25 / 13 Регистрация: 30.04.2014 Сообщений: 516 |
||||||||
17.06.2015, 16:47 [ТС] |
3 |
|||||||
что-то не пойму(
— это первая таблица.
0 |
Mawrat 13094 / 5875 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
||||||||
17.06.2015, 22:24 |
4 |
|||||||
а как к таблице в ячейке обратиться? Нумерованный доступ к таблицам предоставляется коллекциями таблиц. Такие коллекции содержат элементы, который могут выступать контейнерами таблиц. Например, документ (Word.Document) содержит такую коллекцию. И сама таблица (Word.Table) тоже содержит коллекцию тех таблиц, которые расположены внутри неё. Как получить доступ к вложенной таблице, на основе кода из заглавного поста темы:
Полный пример.
0 |
0 / 25 / 13 Регистрация: 30.04.2014 Сообщений: 516 |
|
18.06.2015, 13:41 [ТС] |
5 |
Спасибо большое) буду пробовать) Добавлено через 11 часов 48 минут Добавлено через 2 часа 28 минут
0 |
Mawrat 13094 / 5875 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
||||||
18.06.2015, 23:12 |
6 |
|||||
в ячейку 1,1 получается, а в 3,1 не хочет. все таблицы в ячейку 1,1 лезут. Пример, как добавить вложенную таблицу в ячейку на пересечении 3-ей строки и 2-го столбца.
Вложения
1 |
0 / 25 / 13 Регистрация: 30.04.2014 Сообщений: 516 |
|
18.06.2015, 23:46 [ТС] |
7 |
Большое спасибо, буду пробовать)))
0 |
0 / 25 / 13 Регистрация: 30.04.2014 Сообщений: 516 |
|
19.06.2015, 09:10 [ТС] |
8 |
Посмотрите пожалуйста, что не так?
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
19.06.2015, 09:10 |
8 |
Использую RAD Studio 10.1 Berlin.
Возникла вот такая задача:
Есть word документ в котором большое количество таблиц.
Нужно просмотреть документ от начала и до конца и при встрече таблицы прочитать данные из 1 столбца 1 строки. Если там написано «Таблица», тогда
Нужно прочитать данные 2 столбца, с 3 строки и до конца таблицы.
Как это можно сделать?
Понимаю, что задача большая — буду рад любым примерам кода.
Пример рабочего кода
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
wdApp, wdDocs, wdDoc : Variant;
file_name:string;
temp_string:AnsiString;
begin
file_name:=ExtractFilePath( Application.ExeName )+'test.doc';
//Пытаемся запустить MS Word и получить ссылку на объект Application.
//- Это корневой объект в объектной структуре MS Word.
try
wdApp := CreateOleObject('Word.Application');
except
ShowMessage('Не удалось запустить MS Word. Действие отменено.');
Exit;
end;
//Если требуется, делаем видимым окно MS Word.
wdApp.Visible := false;
//Ссылка на коллекцию документов.
wdDocs := wdApp.Documents;
//Попытка открыть выбранный файл и получить ссылку на объект документа.
wdDoc := wdDocs.Open(FileName:=file_name);
{
CurTable:=ActiveDocument.Tables(1);
CurTable.Cell(10,20).Range.Text:=Text;
goto end_of_this;
}
//Читаем текст документа и записываем его в Мемо.
temp_string:=wdDoc.Range.Text;
//Закрываем MS Word.
wdApp.Quit;
← →
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 ©
Спасибо, попробую.
Работа с таблицами в
документе MSWORD через Delphi.
Некоторые малоиспользуемые функции по работе с таблицами в
документе WORD
Выделение таблицы под номером 1:
WordApplication1.ActiveDocument.Tables.Item(1).Select;
Выделение ячейки
(строка 1 колонка 2) таблицы под номером 1:
WordApplication1.ActiveDocument.Tables.Item(1).Cell(1, 2).Select;
Выделение вложенной
таблицы № 1 в таблице под номером 1:
WordApplication1.ActiveDocument.Tables.Item(1).Tables.Item(1).Select;
Выделение
ячейки (строка 1 колонка 2) во вложенной таблицу № 1 в таблице под номером 1:
WordApplication1.ActiveDocument.Tables.Item(1).Tables.Item(1).Cell(1, 2).Select;
Переход в конец
набора текста в выделенной таблице
Var
Unit_, count_,
Extend_: OleVariant;
…
Unit_ := wdLine;
Extend_ := wdMove;
WordApplication1.Selection.EndKey(Unit_, Extend_);
WordApplication1.Selection.Font.Size := 4; //
установка размера шрифта
WordApplication1.Selection.TypeParagraph; // следующий параграф
Запись текста в
выделенную ячейку:
WordApplication1.Selection.TypeText(‘Текст сообщения‘);
Вставка картинки в
выделенную ячейку:
WordApplication1.Selection.InlineShapes.AddPicture(‘C:1.jpg’, EmptyParam, EmptyParam,
EmptyParam);
WordApplication1.Selection.Collapse(EmptyParam);
Вставка следующей
вложенной таблицы в выделенную таблицу:
Var
Unit_, count_,
Extend_: OleVariant;
….
Unit_ := wdLine;
Extend_ := wdMove;
WordApplication1.Selection.EndKey(Unit_, Extend_); // Переход в
конец набора текста
WordApplication1.Selection.Font.Size := 4;
WordApplication1.Selection.TypeParagraph;
WordApplication1.Selection.PasteAsNestedTable;
// Вставка вложенной таблицы