Delphi word добавить строку в таблицу
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
Для создания абзацев в документе можно использовать коллекцию Paragraphs объекта Document, представляющую собой набор абзацев данного документа. Добавить новый абзац можно с помощью метода Add этой коллекции:
Для вставки собственно текста в документ применяется не объект Paragraph, а объект Range, представляющий любую непрерывную часть документа (в том числе и вновь созданный абзац). Этот объект может быть создан разными способами. Например, можно указать начальный и конечный символы диапазона (если таковые имеются в документе):
Rng := App.ActiveDocument.Range(2 4): // со 2-го no 4-й символы
Можно также указать номер абзаца (например, только что созданного):
Кроме того, можно указать несколько последовательных абзацев:
Rng := App.ActiveDocument.Range (Арр.Acti veDocument.Paragraphs.Item(3).Range.Start. App.Acti veDocument.Paragraphs.Item(5).Range.End) Вставить текст можно с помощью методов InsertBefore (перед диапазоном) или InsertAfter (после диапазона) объекта Range, например:
Помимо объекта Range текст можно вставлять с помощью объекта Selection, являющегося свойством объекта Word.Application и представляющего собой выделенную часть документа (этот объект создается, если пользователь выделяет часть документа мышью, и может быть создан также с помощью приложенияконтроллера). Сам объект Selection можно создать, применив метод Select к объекту Range, например:
В приведенном выше примере в текущем документе выделяется третий абзац.
Если мы хотим вставить строку текста в документ либо вместо выделенного фрагмента текста, либо перед ним, это можно сделать с помощью следующего фрагмента кода:
Отметим, что если свойство Options.ReplaceSelection объекта Word.Application равно True, выделенный текст будет заменен новым (этот режим действует по умолчанию); если же нужно, чтобы текст был вставлен перед выделенным фрагментом, а не вместо него, следует установить это свойство равным False:
Символ конца абзаца при использовании объекта Selection может быть вставлен с помощью следующего фрагмента кода:
К объекту Selection, так же как и к объекту Range, можно применить методы InsertBefore и InsertAfter. В этом случае, в отличие от предыдущего, вставляемый текст станет частью выделенного фрагмента текста.
С помощью объекта Selection, используя его свойство Font и свойства объекта Font, такие как Bold, Italic, Size и другие, можно отформатировать текст. Например, таким образом можно вставить строку, выделенную полужирным шрифтом:
Для наложения на вставляемый текст определенного заранее стиля можно использовать свойство Style объекта Selection, например:
Sel.TypeTextC'Это текст, который станет заголовком'); Sel.TypeParagraph:
Нередко документы Word содержат данные других приложений. Простейший способ вставить такие данные в документ - использовать метод Paste объекта Range:
Естественно, в этом случае в буфере обмена уже должны содержаться вставляемые данные.
Если нужно поместить в буфер обмена часть документа Word, это можно сделать с помощью метода Сору объекта Range:
Следующее, что нужно научиться делать, - это перемещать курсор в нужное место текста, чем мы и займемся в следующем разделе.
Как вставить сразу несколько строк в таблицу Word
Здравствуйте. Подскажите, можно ли вставить сразу несколько строк в таблицу Word без Selection?
Как добавить в базу данных sql сразу несколько строк из формы
Всем привет! Задача такая: есть форма, в которой создаётся не ограниченное количество строк в.
Как добавить записи в несколько строк в таблицу mysql?
Здравствуйте! Постепенно познаю php+mysql и вот не соображу как можно реализовать следующее: На.
и как же? если знаешь как 1, то добавить Х в чем проблема?
Или это такой новый ход конем ?)))
Как одновременно добавить несколько строк в таблицу Access?
А возможно одновременно добавить несколько строк в таблицу Access? например как при вставке в.
Как добавить несколько записей сразу
Всем привет. Задача создание БД для магазина одежды. Как добавлять записи в БД Access умею.
Как добавить сразу несколько столбцов в таблице
День добрый! Как добавить сразу несколько столбцов в таблице. Например, добавить один столбец .
Как добавить сразу несколько объектов в публичный массив?
У меня две сотни спрайтов. Возможно вопрос глупый, но все же, как перетаскивать спрайты не по.
Как закомментировать сразу несколько строк
Доброй ночи! Раньше кнопка рамирования была на панели, теперь, после переустановки, пропала оттуда.
как удалять несколько символов сразу из строк?
как удалять несколько символов сразу из строк? к примеру: Удалить часть символьной строки.
Как VBA закомментировать сразу несколько строк?
как VBA закомментировать сразу несколько строк, чтоб каждую не начинать ковычками?
Обычно во время формирования таблицы мы не знаем, сколько будет строк. Они могут добавляться в конец или вставляться в середину таблицы. Если для формирования документа мы используем шаблон таблицы и в нем уже есть, например, заголовок, то нам не обойтись без процедур добавления или вставления строк. Добавить строку в конец таблицы можно, используя метод Add коллекции Rows. Чтобы это сделать из приложения на Delphi, достаточно создать и использовать функцию. Определим ее как AddRowTableDoc.
Function AddRowTableDoc (table_:integer):boolean;
Для того, чтобы вставлять строки в середину таблицы, удобно использовать пару операторов. Первый выделяет строку, перед которой необходимо вставить новую, второй вставляет строку (строки). Смотрите функцию InsertRowsTableDoc.
Function InsertRowsTableDoc(table_,position_,
Для добавления одной строки можно использовать также и метод Add коллекции Rows, но с параметром, в качестве которого выступает ссылка на строку, перед которой необходимо вставить новую. Первый оператор получает ссылку на строку, второй вставляет новую. Смотрите реализацию на Delphi (InsertRowTableDoc).
Function InsertRowTableDoc(table_,position_: integer):boolean;
var row_:variant;
Здесь будем заполнять только табличную часть. О том, как заполнять остальное, читайте вторую часть данной статьи. Для начала наши новые функции скопируем в библиотеку MyWord, которую мы создавали, начиная с первой части статьи. Затем создадим новый проект, на форме которого разместим кнопку, а в процедуре обработки ее нажатия напишем следующий программный текст.
procedure TForm1.Button1Click(Sender: TObject);
var tablica_:integer;
metki_: array [ 1 .. 12 ] of record
metka: string ;
tovar: array [ 1 .. 2 , 1 .. 12 ] of variant;
// Заполняем массив данными. Массив используется
//для простоты демонстрации, в реальной программе
//данные берутся из базы данных.
tovar[ 1 , 1 ]:= 'Стул офисный' ; tovar[ 1 , 2 ]:= 'шт.' ;
tovar[ 1 , 3 ]:= 2 ; tovar[ 1 , 4 ]:= 520 . 00 ; tovar[ 1 , 5 ]:= 1040 . 00 ;
tovar[ 1 , 6 ]:= '-' ; tovar[ 1 , 7 ]:= 20 ; tovar[ 1 , 8 ]:= 208 . 0 ;
tovar[ 1 , 9 ]:= 1248 . 00 ; tovar[ 1 , 10 ]:= 62 . 40 ;
tovar[ 1 , 11 ]:= ' Россия ' ; tovar[ 1 , 12 ]:= '-' ;
tovar[ 2 , 1 ]:= ' Телефон ' ; tovar[ 2 , 2 ]:= ' шт .' ;
tovar[ 2 , 3 ]:= 3 ; tovar[ 2 , 4 ]:= 315 . 25 ; tovar[ 2 , 5 ]:= 945 . 75 ;
tovar[ 2 , 6 ]:= '-' ; tovar[ 2 , 7 ]:= 20 ; tovar[ 2 , 8 ]:= 189 . 15 ;
tovar[ 2 , 9 ]:= 1134 . 90 ; tovar[ 2 , 10 ]:= 56 . 70 ;
tovar[ 2 , 11 ]:= ' Беларусь ' ; tovar[ 2 , 12 ]:= '-' ;
if CreateWord then begin
then begin
for a_:= 1 to 12 do begin
if GetSelectionTable then begin
messagebox(handle, ' Находимся в таблице , запоминаем
метку(переменную), номер колонки и строки!' ,
pchar( 'Номер колонки/строки = ' +inttostr(col_)+ '/' +inttostr(row_)), 0 );
Messagebox(handle, ' Заполняем первую строку ' , '' , 0 );
for a_:= 1 to 12 do begin
SetTextToTable(tablica_,metki_[a_].row,metki_[a_].col,tovar[ 1 ,a_]);
Messagebox(handle, ' Добавляем строку ' , '' , 0 );
Messagebox(handle, 'Заполняем вторую строку' , '' , 0 );
for a_:= 1 to 12 do begin
SetTextToTable(tablica_,metki_[a_].row,metki_[a_].col,tovar[ 2 ,a_]);
Messagebox(handle, ' Текст сохранен ' , '' , 0 );
Messagebox(handle, ' Текст закрыт ' , '' , 0 );
Мы сформировали фрагмент сложного документа, но вы, возможно, захотите в дальнейшем сами развивать эту тему и использовать все возможности Word.Application. В следующей части я постараюсь на примерах объяснить, каким образом это сделать
Василий КОРНЯКОВ
Литература: Н. Елманова, С. Трепалин, А. Тенцер "Delphi 6 и технология COM" "Питер" 2002.
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
Работа с таблицами не всегда интересна, но во время формирования отчетности всегда востребована. Для создания таблицы используется хитрая конструкция WordApp.ActiveDocument.Tables.Add, которой нужно передать пять параметров:
После выполнения этого метода курсор перемещается внутрь таблицы, и вы можете начинать ввод данных в первую ячейку. Для движения между ячейками нужно использовать метод Selection.MoveRlght с указанием в качестве первого параметра (точность) значения 12. Если вспомнить табл. 3.1, то точность со значением 12 соответствует движению между ячейками.
В движении между ячейками есть интересные нюансы. Если вы находитесь в самой последней ячейке последней строки и но идее двигаться дальше некуда, при перемещении в следующую ячейку будет создана новая строка. В следующем примере вы увидите это на практике, когда мы создадим таблицу из двух строк, а заполним три строїш.
Если находиться в последней ячейки последней строїш и выполнить перемещение на строку вниз (в качестве точности для метода Move указать 5), то вы выйдете из таблицы и окажетесь справа от нее. После этого можно перейти па строку ниже путем перемещения курсора на одну позицию вправо. Этот вариант мы также рассмотрим в следующем примере.
Итак, давайгс выясним, как создать и заполнить таблицу (рис. 3.17). Я специально добавил заголовок перед таблицей н текст после таблицы, чтобы вы знали, как войти в таблицу и как выйти из нее. Код для создания такого документа показан в листинге 3.29.
Рис. 3.17. Пример программно созданной таблицы
Листинг 3.29. Программное создание таблицы
ShowMessageC'Похоже, что Word не установлен С); exit: end.
// Изменяем стиль текущего абзаца. // потому что он будет в таблице WordApp.Selection.Font.Size.=12; WordApp.Selec tion.Pa ragraphs.Ali gnment:=3: WordApp Selection Font Bold=false:
// Заполнение таблицы WordApp.Selection.Font.Bol d:=true: WordApp.Selection.TypeText('Параметр'). WordApp.Select i on.MoveRight(12.1): WordApp.SelecLion.Font Bold:=lrue. WordApp.Selection.TypeText('Описание'). WordApp.Select i on.MoveRight(12,1); WordApp.Selection TypeText('Name'); WordApp.Select i on .MoveRighU12,1): WordApp.Selecti on.TypeText('Имя шрифта'): WordApp Selection.MoveRight(12.1): WordApp.Selection.TypeText('Size'). WordApp.Selection.MoveRight(12.1): WordApp.Select!on.TypeText('Размер шрифта'):
// Выход из таблицы WordApp Selection Move(5. 1): WordApp Selection.Moved. 1). WordApp Selection.TypeParagraph.
Заголовок таблицы сделан жирным шрифтом кеглем 20, После печати заголовка размер шрифта изменяется на 12 и "жирность" убирается. Зачем? Дело в том, что внутри таблицы для текста используются текущие параметры абзаца, а после печати заголовка текущим стал жирный шрифт размера 20, но такой гекст в ячейках таблицы не нужен.
В представленном примере я указал достаточно интересные параметры создания таблицы.
Ширина таблицы устанавливается в свойстве WordApp.Selection.Range. Что это за свойство? Свойство Range возвращает ширину текущего абзаца, значит, таблица будет создана на всю ширину.
Количество колонок и строк я установил равным двум, а в примере мы заполняем три строки.
Для таблицы по умолчанию установлено поведение -1.
В качестве варианта заполнения устанавливается значение 0, что соответствует фиксированной ширине колонок.
После заполнения таблицы перемещаемся дальше. Мы создали таблицу размером 2x2, то есть с четырьмя ячейками, но при этом перемещаемся и заполняем шесть ячеек. Программа MS Word сама создает новую строку, если таблица заканчивается, а вы требуете переместиться в новую ячейку.
Читайте также: