← →
Mishenka
(2006-10-27 10:06)
[0]
Добавил таблицу в документ ворд. С вертикальным выравниванием проблем нет, просто указываю Table.Cell(1, 1).VerticalAlignment := 1, а вот если указать HorizontalAlignment, то пишет, что таклго метода нету.
Как в ячейке указать горизонтальное выравнивание?
← →
Anatoly Podgoretsky ©
(2006-10-27 10:12)
[1]
Скопировано из рабочей программы HorizontalAlignment
← →
Mishenka
(2006-10-27 10:19)
[2]
Указываю Table.Cell(1, 1).HorizontalAlignment := 1;
пишет Method «HorizontalAlignment» not supported by automation object
← →
Anatoly Podgoretsky ©
(2006-10-27 10:22)
[3]
Тут сразу возникает много вопросов
1. что такое Table
2. что такое Cell у него и есть ли у этого Cell такое свойство
← →
Mishenka
(2006-10-27 10:57)
[4]
procedure TForm1.Button1Click(Sender: TObject);
var W, Table, Range, Cell: variant;
begin
W := CreateOleObject("Word.Application");
W.Documents.Add;
W.ActiveDocument.Range.Font.Size := 14;
Table := W.ActiveDocument.Tables.Add(Range := W.ActiveDocument.Range,
NumRows := 1, NumColumns := 5);
Table.Cell(1, 1).VerticalAlignment := 1;
Table.Cell(1, 1).HorizontalAlignment := 1;
> 2. что такое Cell у него и есть ли у этого Cell такое свойство
Ну видимо такого свойства нету. Но что тогда делать?
← →
umbra ©
(2006-10-27 11:32)
[5]
а макрос не судьба записать и посмотреть?Table.Cell(1, 1).Cell.Range.ParagraphFormat.Alignment := wdAlignParagraphCenter;
Здравствуйте, dimenix, Вы писали:
D>Delphi3, работаю через OLE c Word’ом
D>Мне необходимо задать таблице стиль — без стиля.
D>Как сделать выравнивание текста в ячейке по центру, делаю так:
D>Area.SelectCell;
D>Word.Selection.ParagraphFormat:=wdAlignParagraphCenter;
D>не помогает.
Можно попробывать записать макрос. Тогда будет видно как это делает сам Word, а затем написать это у себя в приложении.
Delphi3, работаю через OLE c Word’ом
Мне необходимо задать таблице стиль — без стиля.
Как сделать выравнивание текста в ячейке по центру, делаю так:
Area.SelectCell;
Word.Selection.ParagraphFormat:=wdAlignParagraphCenter;
не помогает.
B>Можно попробывать записать макрос. Тогда будет видно как это делает сам Word, а затем написать это у себя в приложении.
так вот я так делаю, снала пишу в ворде макрос, смотрю команды, а потом в делфи делаю тоже самое. практически всё получается, за исключением именного этого.
я где-то видел такую вещь, как WordFormatParagraph1 — как компонента TWordFormatParagraph, с использованием ConnectTo — но это я так понимаю для Delphi 6ой версии, где есть компонента MS Word’a
Здравствуйте, dimenix, Вы писали:
D>я где-то видел такую вещь, как WordFormatParagraph1 — как компонента TWordFormatParagraph, с использованием ConnectTo — но это я так понимаю для Delphi 6ой версии, где есть компонента MS Word’a
А для какой версии надо?
От D5 до D7 есть в поставке модули работы с офисом. В D5 помогает меню Component — Install packages…
… << RSDN@Home 1.1 alpha 1 >>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
const wdAlignParagraphCenter = 1; wdAlignParagraphLeft = 0; wdAlignParagraphRight = 2; wdLineStyleSingle = 1; var wdApp, wdDoc, wdRng, wdTable : Variant; i, j, Res : Integer; D : TDateTime; Bm : TBookMark; Sd : TSaveDialog; begin Sd := SaveDialog; //SaveDialog1 уже должен быть на форме. //Если начальная папка диалога не задана, то в качестве начальной берём ту папку, //в которой расположен исполняемый файл нашей программы. if Sd.InitialDir = '' then Sd.InitialDir := ExtractFilePath( ParamStr(0) ); //Запуск диалога сохранения файла. if not Sd.Execute then Exit; //Если файл с заданным именем существует, то запускаем диалог с пользователем. if FileExists(Sd.FileName) then begin Res := MessageBox(0, 'Файл с заданным именем уже существует. Перезаписать?' ,'Внимание!', MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL); if Res <> IDYES then Exit; end; //Попытка запустить MS Word. try wdApp := CreateOleObject('Word.Application'); except MessageBox(0, 'Не удалось запустить MS Word. Действие отменено.' ,'Внимание!', MB_OK + MB_ICONERROR + MB_APPLMODAL); Exit; end; //Делаем видимым окно MS Word. На постоянной основе или на время отладки. wdApp.Visible := True; wdapp.Activate; //Создаём новый документ. wdDoc := wdApp.Documents.Add; //На случай, если очень много данных и wdApp.Visible := True - тогда //для ускорения работы отключаем перерисовку окна MS Word. wdApp.ScreenUpdating := False; try wdRng := wdDoc.Content; //Диапазон, охватывающий всё содержимое документа. //Параграф 1. Заголовок отчёта. //Заголовок отчёта и перевод строки. wdRng.Start := wdRng.End; wdRng.InsertAfter('Отчёт'#13#10); //Выравнивание по центру. wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter; //Параметры шрифта. wdRng.Font.Name := 'Times New Roman'; wdRng.Font.Bold := True; wdRng.Font.Size := 14; //Параграф 2. Общие сведения. //Формируем диапазон нового параграфа непосредственно за текущим диапазоном. wdRng.Start := wdRng.End; wdRng.InsertAfter(#13#10); wdRng.InsertAfter(Label1.Caption); //Сброс параметров параграфа. wdRng.ParagraphFormat.Reset; //Выравнивание по левому краю. wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft; //Отступ слева на 2 сантиметра. Размер отступа задаётся в типографских //единицах - в пунктах. 1 пункт = 0.035 сантиметра. //При записи в поле LeftIndent, отступ отсчитывается от левого поля на странице. //wdRng.ParagraphFormat.LeftIndent := 2 / 0.035; //Параметры шрифта. wdRng.Font.Reset; //Сброс параметров шрифта. wdRng.Font.Size := 12; wdRng.Font.Bold := True; //Параграф 3. Заголовок таблицы. wdRng.Start := wdRng.End; wdRng.InsertAfter(#13#10); wdRng.InsertAfter('Таблица1. Данные'#13#10); wdRng.ParagraphFormat.Reset; wdRng.Font.Reset; wdRng.Font.Size := 12; wdRng.Font.Bold := False; //Параграф 4. Таблица. wdRng.Start := wdRng.End; //Добавляем таблицу MS Word. Пока создаём таблицу с двумя строками. wdTable := wdDoc.Tables.Add(wdRng.Characters.Last, 2, ValueListEditor1.ColCount ); //Параметры линий таблицы. wdTable.Borders.InsideLineStyle := wdLineStyleSingle; wdTable.Borders.OutsideLineStyle := wdLineStyleSingle; //Сброс параметров параграфа. wdRng.ParagraphFormat.Reset; //Выравнивание всей таблицы - по левому краю. wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft; //Оформление шапки. wdRng := wdTable.Rows.Item(1).Range; //Диапазон первой строки. wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter; wdRng.Font.Size := 10; wdRng.Font.Bold := True; //Оформление первой строки данных - это вторая строка в таблице. //При добавлении следующих строк, их оформление будет копироваться с этой строки. wdRng := wdTable.Rows.Item(2).Range; //Диапазон второй строки. wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft; wdRng.Font.Size := 10; wdRng.Font.Bold := False; //Записываем шапку таблицы. wdTable.Cell(1, 1).Range.Text := 'Название'; wdTable.Cell(1, 2).Range.Text := 'кол-во'; //Записываем данные таблицы. for i := 0 to ValueListEditor1.RowCount -1 do begin if i > 1 then wdTable.Rows.Add; wdTable.Cell(i+2, 1).Range.Text := Grid.Cells[0,i]; wdTable.Cell(i+2, 2).Range.Text := Grid.Cells[1,i]; end; wdRng.Start := wdRng.End; wdRng.InsertAfter(#13#10); wdRng.InsertAfter(memo1.text); wdRng.ParagraphFormat.Reset; wdRng.Font.Reset; wdRng.Font.Size := 12; wdRng.Font.Bold := False; wdRng.Start := wdRng.End; //Выравнивание по центру. wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft; //Параметры шрифта. wdRng.Font.Name := 'Times New Roman'; wdRng.Font.Bold := True; wdRng.Font.Size := 14; D := Now; wdRng.InsertAfter('Дата: ' + FormatDateTime('dd.mm.yyyy', D) + #13#10); wdRng.InsertAfter('Время: ' + FormatDateTime('hh:nn:ss:zzz', D) + #13#10); finally //Включение перерисовки окна MS Word. В случае, если wdApp.Visible := True. wdApp.ScreenUpdating := True; end; |
На одном из проектов столкнулась с ситуацией, когда построение отчета, в котором заполняются таблицы, занимало слишком много времен. Проанализировав код расчета отчета, поняла, что очень много времени тратится на заполнение таблиц с помощью функции
ListMergeTableWord, таким образом, я попыталась исключить использование данной функции в расчете. Решением данной ситуации было внесение данных в таблицы Excel, а затем вставка заполненных таблиц Excel в документ отчета и дальнейшем форматированием
документа с помощью IS-Builder, таким образом, удалось сократить время построения отчета в несколько раз. Это скорее не единичный случай использования объектной модели MS Office для решения задач для генерации документов, а постоянно выполняемая задача.
Например, в рамках другого проекта была поставлена одна из задач: формировать версии документов без возможности их редактирования. Для решения данной задачи был выбран вариант преобразования документов в формате docxls в формат pdf, хотя, возможен и другой
формат, в который возможно преобразование документа в MS Office. Существует 2 способа преобразования документа: 1) с помощью службы преобразования; 2) с помощью объектной модели MS Office (с 2007 версии). Мною был выбран 2 способ так, как исключается промежуточное
звено (служба преобразования), соответственно уменьшается нагрузка на сервер, увеличивается скорость преобразования и нет необходимости настраивать службу. Ниже будет приведен способ преобразования документа формата doc в формат pdf (35-й пункт).
В данной статье хотелось описать наиболее востребованные способы форматирования документа в формате doc с помощью
IS—Builder.
Word = CreateObject("Word.Application") Doc = Word.Documents.Open(Path) где Path - путь к документу, с которым работаете.
- Установка единицы измерения размера таблицы
Doc.Tables(1).PreferredWidthType = 2
Единица измерения |
Константа в Word |
Значение в ISBL |
Сантиметры |
wdPreferredWidthPoints |
3 |
Проценты |
wdPreferredWidthPercent |
2 |
- Установка ширины таблицы
Doc.Tables(1).PreferredWidth = 100 // ширина таблицы в процентах Doc.Tables(1).PreferredWidth = Word.CentimetersToPoints(17.5) // ширина таблицы в сантиметрах
- Автоподбор размера ячейки таблицы
Doc.Tables(1).AutoFitBehavior(2)
Режим выравнивания |
Константа в Word |
Значение в ISBL |
Фиксированная ширина |
wdAutoFitFixed |
0 |
По содержимому |
wdAutoFitContent |
1 |
По ширине окна |
wdAutoFitWindow |
2 |
- Установка высоты ячеек
Doc.Tables(1).Rows.HeightRule = HeightRule // указывает на способ изменения высоты Doc.Tables(1).Rows.Height = RowHeigh // RowHeight указывает на новую высоту строки в пунктах.
Значение константы HeightRule
Способ изменения высоты |
Константа в Word |
Значение в ISBL |
Размер, указанный в параметре RowHeigh, является точным |
wdRowHeightAuto |
2 |
Размер, указанный в параметре RowHeigh, является минимальным |
wdRowHeightAtLeast |
1 |
Автоматический подбор высоты строк (параметр RowHeigh игнорируется) |
wdRowHeightExactly |
0 |
- Установка интервала абзаца (перед и после) в таблице
Doc.Tables(1).Range.ParagraphFormat.SpaceBefore = 6 //интервал перед Doc.Tables(1).Range.ParagraphFormat.SpaceAfter = 6 //интервал после Единица измерения интервала пт.
- Установка интервалов перед и после абзаца
Doc.Paragraphs(1).Format.SpaceBefore = 12 // интервал перед Doc.Paragraphs(1).Format.SpaceAfter = 12 // интервал после
- Межстрочный интервал
Doc.Paragraphs(1).Format.LineSpacingRule = 0.5 // одинарный интервал 1 – полуторный интервал и 1.5 – двойной интервал.
- Установка стиля таблицы
Doc.Tables(1).Style = ИмяСтиляТаблицы
- Установка отступа слева
Doc.Tables(1).Rows.LeftIndent = 0
- Абзацный отступ (красная строка) абзаца
Doc.Paragraphs(1).Format.FirstLineIndent = Значение в пунктах
Для перевода сантиметров в пункты можно воспользоваться функцией
CentimetersToPoints, тогда абзацный отступ в 1,5 см можно задать следующим образом:
Doc.Paragraphs(1).Format.FirstLineIndent = Word.CentimetersToPoints(1.5)
- Установка левой и правой границ текста абзаца:
Doc.Paragraphs(1).Format.LeftIndent = 10 // отступ слева Doc.Paragraphs(1).Format.RightIndent = 10 // отступ справа
- Установка значений полей ячеек по умолчанию
Doc.Tables(1).TopPadding = 0 // верхнее Doc.Tables(1).BottomPadding = 0 // нижнее Doc.Tables(1).LeftPadding = 0 // левое Doc.Tables(1).RightPadding = 0 // правое
- Выравнивание текста в таблице по горизонтали
Doc.Tables(1).Range.ParagraphFormat.Alignment = 3 // по ширине
Режим выравнивания |
Константа в Word |
Значение в ISBL |
По левому краю |
wdAlignParagraphLeft |
0 |
По центру |
wdAlignParagraphCenter |
1 |
По правому краю |
wdAlignParagraphRight |
2 |
По ширине |
wdAlignParagraphJustify |
3 |
- Выравнивание текстового абзаца:
Doc.Paragraphs(1).Format.Alignment = 0 // выравнивание по левому краю
Значения констант выравнивания такие же как в предыдущем пункте.
- Выравнивание текста в ячейке по вертикали
Doc.Tables(1).Rows(НомерСтроки).Cells(НомерСтолбца).VerticalAlignment = 1
Режим выравнивания |
Константа в Word |
Значение в ISBL |
По верхнему краю |
wdCellAlignVerticalTop |
0 |
По центру |
wdCellAlignVerticalCenter |
1 |
По нижнему краю |
wdCellAlignVerticalBottom |
3 |
- Установка размера шрифта таблицы
Doc.Tables(1).Range.Font.Size = 7
- Установка цвета текста в ячейке
Doc.Tables(1).Cell(НомерСтроки; НомерСтолбца).Range.Font.Color = 255
- Выделение всего текста таблицы (жирным, курсивом, подчеркиванием)
Doc.Tables(1).Range.Font.Bold = True // жирным Doc.Tables(1).Range.Font.Italic = True // курсивом Doc.Tables(1).Range.Font.Underline = True // подчеркивание
- Установка цвета подчеркивания
Doc.Tables(1).Cell(НомерСтроки; НомерСтолбца).Range.Font.UnderlineColor = 255
- Установка темы шрифта таблицы
Doc.Tables(1).Range.Font.Name = "Arial"
- Объединение ячеек
// объединение первой и второй ячеек первой строки Cell = Doc.Tables(1).Cell(1; 1) Cell.Merge(Doc.Tables(1).Cell(1; 2))
- Вставка Excel таблицы
в Word
SelectionWord = Doc.Paragraphs(Paragraph).Range SelectionWord.PasteExcelTable(True; False; False)
Paragraph
– номер параграфа, куда будет вставлена таблица из Excel.
- Разрыв связь
Doc.Fields.Unlink
- Удаление абзаца
Doc.Paragraphs(Paragraph).Range.Delete
Paragraph
– номер параграфа, который нужно удалить.
- Удаляем строку в таблице
Doc.Tables(1).Rows(НомерСтроки).Select Doc.Tables(1).Rows(НомерСтроки).Delete
- Установка границ таблицы
Table = Doc.Tables(1) Table.Borders(WdBorderType).LineStyle = 4
Расположение линии |
Значение в Word |
Константа в ISBL |
Линия, обрамляющая диапазон сверху |
wdBorderTop |
-1 |
Линия, обрамляющая диапазон слева |
wdBorderLeft |
-2 |
Линия, обрамляющая диапазон снизу |
wdBorderBottom |
-3 |
Линия, обрамляющая диапазон справа |
wdBorderRight |
-4 |
Все горизонтальные линии внутри диапазона |
wdBorderHorizontal |
-5 |
Все вертикальные линии внутри диапазона |
wdBorderVertical |
-6 |
Линия по диагонали сверху – вниз |
wdBorderDiagonalDown |
-7 |
Линия по диагонали снизу – вверх |
wdBorderDiagonalUp |
-8 |
- Закрасить всю таблицу
цветом
Doc.Tables(1).Shading.BackgroundPatternColor = 255 // заливка красным цветом
- Закрасить ячейку цветом
Cell = Doc.Tables(1).Cell(1; 1) Cell.Shading.BackgroundPatternColor = -687800525 // заливка желтым цветом
- Установка ориентации страницы
Doc.Application.Selection.PageSetup.Orientation = 1 // альбомная Doc.Application.Selection.PageSetup.Orientation = 0 // книжная
- Установка полей страницы
Word.Application.Selection.PageSetup.LeftMargin = Word.CentimetersToPoints(2) // левое поле Word.Application.Selection.PageSetup.RightMargin = Word.CentimetersToPoints(2) // правое поле Word.Application.Selection.PageSetup.TopMargin = Word.CentimetersToPoints(2) // верхнее поле Word.Application.Selection.PageSetup.BottomMargin = Word.CentimetersToPoints(2) // нижнее поле
- Добавление таблицы в документ
Doc.Tables.Add(Doc.Paragraphs(1).Range; 3; 5) // добавление таблицы из 5 столбцов и 3 строк в 1 абзац
- Добавление строки в таблицу
Doc.Tables(1).Rows.Add
- Добавление колонки в таблицу
Doc.Tables(1).Columns.Add
- Добавление текста в ячейку
Doc.Tables(1).Cell(1;3).Range.Text = 'Текст, который добавляется в ячейку'
- Сохранение документа в pdf формат
Doc.ExportAsFixedFormat(Path; 17; openAfterExport; CreateBookmarks)
где
- Path — полный путь и имя нового файла формата PDF;
- 17 — значение Microsoft.Office.Interop.Word.WdExportFormat, указывающие, что сохранять документ в формате PDF;
- openAfterExport — Значение True используется, чтобы автоматически открыть новый файл; в противном случае используется значение False.
- CreateBookmarks — значение указывает, следует ли экспортировать закладки и тип закладки. Значение константы WdExportCreateBookmarks:
- wdExportCreateHeadingBookmarks = 1 — Создание закладки в экспортируемом документе для всех заголовком, которые включают только заголовки внутри основного документа и текстовые поля не в пределах колонтитулов, концевых сносок, сносок или комментариев.
- wdExportCreateNoBookmarks = 0 — Не создавать закладки в экспортируемом документе.
- wdExportCreateWordBookmarks = 2 — Создание закладки в экспортируемом документе для каждой закладки, которая включает все закладки кроме тех, которые содержатся в верхнем и нижнем колонтитулах.
P.S.: Аналогичная статья для Excel
Несколько способов форматирования и обработки данных в Excel документах с помощью IS-Builder.
Delphi –
это один из самых популярных и эффективных инструментов разработки сложных
приложений и возможность интегрировать средства приложений MS Office в разрабатываемые в этой среде проекты.
Известно, что Word и Excel является OLE – объектом. Суть OLE технологии возможность из разрабатываемого
приложения (клиента) взаимодействовать с другими приложениями (серверами). Все
приложения Microsoft Office являются так называемыми «серверами
автоматизации». Microsoft Word, являясь сервером OLE, позволяет
подключаться к себе клиентам и использовать свои методы и свойства.
Работа с MS Word в Borland Delphi. Для
работы с Word
файлами нам потребуется библиотека ComObj, которая входит в стандартную поставку Borland Delphi. Подключается она в разделе Uses.
Для начала нужно подключиться
к Word серверу, другими
словами ещё называют инициализацией. Это происходит следующим образом:
Var
Application: Variant
Begin
Application:=createOLEObject(‘Word.Application’) ;
End;
Сначала вводим
вариантную переменную, затем создаем объект OLE ‘Word.Application‘, и присваиваем его этой
переменной. Эта процедура называется «создание экземпляра сервера».
Создав этот объект, мы затем программируем его свойства и методы.
После создания
экземпляра сервера, нужно либо создать новый документ, либо открыть уже
имеющийся.
Создание нового
документа. Создание документа
производится методом Add. Синтаксис метода:
Add
(Template, NewTemplate, DocumentType, Visible);
Все параметры метода – типа Variant необязательны.
Template |
Имя шаблона, по которому создается новый документ. |
NewTemplate |
Если использовать значение True, то новый документ открывается как шаблон. Значение |
DocumentType |
Может принимать одно из следующих значений констант |
Visible |
Управляет видимостью созданного документа. Если |
Так как все параметры являются
необязательными, то для создания нового документа по шаблону Normal метод можно применить без параметров:
Application.Documents.Add;
Открытие документа. Открытие существующего документа Word реализуется методом Open. Синтаксис метода:
Open (FileName,
ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument,
PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format,
Encoding, Visible);
Кроме параметра FileName все остальные необязательны.
FileName |
В параметре указывается имя файла |
ConfirmConversions |
Если в значении этого параметра |
ReadOnly |
Указывая True, открываем документ только для чтения. |
AddToRecentFiles |
Устанавливая значение в True, позволяем добавлять имя открываемого файла в список |
PasswordDocument |
Пароль открываемого документа. |
PasswordTemplate |
Пароль открываемого шаблона. |
Revert |
Параметр, предусмотренный для |
WritePasswordDocument |
Пароль для сохраняемого документа. |
WritePasswordTemplate |
Пароль для сохраняемого шаблона. |
Format |
Конвертор WdOpenFormat: wdOpenFormatAllWord, wdOpenFormatAuto, wdOpenFormatDocument, wdOpenFormatEncodedText, wdOpenFormatRTF, wdOpenFormatTemplate, wdOpenFormatText, wdOpenFormatUnicodeText, wdOpenFormatWebPages. По умолчанию wdOpenFormatAuto. Необязательный |
Encoding |
Кодировка для просмотра документа, |
Visible |
Устанавливая True, предусматриваем видимое открытие документа. По |
Например, для открытия документа «c:1.doc» метод Open применяется как
Application.Documents.Open(‘c:/1.doc’);
Все элементы рассматриваемого OLE объекта являются так
называемыми коллекциями. Коллекция – это объект, содержащий
специфический набор методов и свойств. Коллекция похожа на динамический массив.
В ней содержится набор объектов, которые обычно имеют один тип. Вы можете
добавлять в нее элементы, удалять и получать их значения. Доступ к элементу
осуществляется либо по его порядковому номеру, либо по его имени. Например, все
открытые документы представляют собой коллекцию.
Обращение к документу. Обращение к открытому документу, как к элементу
набора коллекции, можно по порядковому номеру методом Item. Например, обращение ко второму документу будет выглядеть как:
Application.Documents.Item(2);
Нумерация всех элементов
в коллекции начинается с единицы, а не с нуля. Аналогичную операцию можно
осуществить еще как:
Application.Documents(2);
Для работы с документом,
его сначала нужно активизировать, т.е. передать ему фокус, подготовить для
редактирования или других операций. Активизирование документа производится
методом Activate. Для активизации документа, его нужно выбрать из коллекции
по его порядковому номеру:
Application.Documents.Item(2).Activate; или по имени файла
Application.Document(‘c:1.doc’).Activate;
К активному документу
можно обращаться, используя свойство ActiveDocument, например, закрыть
активный документ:
Application.ActiveDocument.Close;
Вставка текста в
документ. Далее по тексту мы в
основном будем манипулировать коллекций объектов Range, т.е. весь текст удобно будет
рассматривать как несколько непрерывных областей. Добавление текста
осуществляется следующим образом: сначала создается объект Range, представляющий собой непрерывную область
документа, затем методами этого объекта добавляется текст. Объект Range может объявляться как:
выражение. Range (начало области,
конец области);
Например, объявленный ниже объект Range1 охватывает собой первые 10 символов
второго документа.
Var
Range1:variant;
Begin
Range1:=Application.Documents(2).Range(1,10);
End;
В документе сначала
можно создавать абзацы, т.е. объекты Paragraphs, и затем объединять их
в области. К примеру, в начале активного документа методом Add объекта Paragraphs создаем новый абзац, затем на его основе создаем
объект Range1:
Var
Range1:variant;
Begin
Application.ActiveDocument.Paragraphs.Add;
Range1:=Application.ActiveDocument.Paragraphs.Item(1).Range;
End;
Вставка текста производится
двумя методами объекта Range: InsertAfter и InsertBefore. Синтаксис методов:
выражение. InsertAfter(текст);
Этим методом
производится вставка текста после начала объекта Range выражение. InsertBefore(текст), а этим – до.
При использовании этих
методов, в качестве параметра указать нужно только текст в апострофах. К
примеру, вызов двух операторов даст нам две строки: это вставленный текст InsertBefore и это текст InsertAfter:
Range1.InsertAfter(‘это текст InsertAfter ‘);
Range1.InsertBefore(‘это вставленный текст InsertBefore‘);
У объекта Range есть много полезных свойств. Например:
Свойство Font (шрифт), которое имеет свои подсвойства:
Font.Bold:=True – жирность шрифта
Font.Name:=»Arial» – название
шрифта
Font.Size:= 24 – размер шрифта
Font.Color:= clRed – цвет
шрифта
Font.Italic:= True – наклонность шрифта
Например, вставка жирной строки зеленого цвета:
Range1.Font.Bold:=True;
Range1.Font.Size:=14;
Range1.Font.Color:=clGreen;
Range1.InsertAfter(‘вставленная строка‘);
Объект типа Range можно форматировать. Например, следующей строкой содержимое
объекта Range выравнивается по центру:
Range1.ParagraphFormat.Aligment:=wdAlignParagrapfCenter;
Работа с Excel
файлами в Delphi. Для работы с Excel файлами в Delphi так же нужно подключить модуль ComObj в разделе Uses.
Для
начала нужно подключиться к Excel серверу, другими словами ещё называют инициализацией. Это происходит следующим
образом:
var
Excel: Variant;
Excel := CreateOleObject(‘Excel.Application‘);
Сначала вводим
вариантную переменную, затем создаем объект OLE ‘Excel.Application‘, и присваиваем его этой
переменной. Эта процедура называется «создание экземпляра сервера».
Создав этот объект, мы затем программируем его свойства и методы.
После создания экземпляра сервера, нужно либо создать новую книгу, либо
открыть уже имеющуюся.
Создание новой книги:
Excel.Workbooks.Add;
Открытие существующей книги (где путь – путь к файлу с расширением xls.):
Excel.Workbooks.Open[путь]; //(Excel.Workbooks.Open(‘c:2.xls‘));
Открытие существующей книги только для чтения:
Excel.Workbooks.Open[путь, 0,
True];
Excel.Workbooks.Open(‘c:2.xls’,0,true);
Закрытие Excel:
Excel.ActiveWorkbook.Close;
Excel.Application.Quit;
Отображаем или скрываем Excel на экране:
Excel.Visible := True;
Excel.Visible := False;
Печать содержимого активного листа Excel:
Excel.ActiveSheet.PrintOut;
Чтение/запись данных
в Excel.
Доступ к ячейке в текущей книге Excel можно осуществить следующим
образом:
// запись значения в
ячейку
Excel.Range[‘A2′]:=’Привет!’;
// чтение значения
из ячейки
s:=Excel.Range[‘A2’];
где A2 – адрес ячейки.
Или
используя стиль ссылок R1C1:
Excel.Range[excel.Cells[2, 2]]:=’Привет!’; где [2, 2] – координата
ячейки.
Вообще,
ячейке Excel можно присваивать любое значение (символьное, целое, дробное,
дата) при этом Excel установит форматирование в ячейке применяемое по
умолчанию.
Формат ячеек в Excel. Выделить (выбрать) группу ячеек для последующей работы можно так:
Excel.Range[Excel.Cells[1,
1],Excel.Cells[5, 3]].Select; либо
Excel.Range[‘A1:C5’].Select;
При этом
будет выделена область находящаяся между ячейкой A1 и C5.
После выполнения
выделения можно установить:
1) Объединение ячеек:
Excel.Selection.MergeCells:=True;
2) Перенос по
словам:
Excel.Selection.WrapText:=True;
3) Горизонтальное
выравнивание:
Excel.Selection.HorizontalAlignment:=3;
при
присваивании значения 1 используется выравнивание по умолчанию,
при 2 –
выравнивание слева,3 – по центру, 4 – справа.
4) Вертикальное
выравнивание
Excel.Selection.VerticalAlignment:=1;
присваиваемые
значения аналогичны горизонтальному выравниванию.
5) Граница
для ячеек:
Excel.Selection.Borders.LineStyle:=1;
При
значении 1 границы ячеек рисуются тонкими сплошными линиями. Кроме этого можно
указать значения для свойства Borders, например, равное 3. Тогда установится
только верхняя граница для блока выделения:
Excel.Selection.Borders[3].LineStyle:=1;
Значение свойства Borders задает различную комбинацию граней ячеек.В
обоих случаях можно использовать значения в диапазоне от 1 до 10.