Delphi excel workbooks методы и свойства

Обновлено: 04.07.2024

Тут иногда бывают вопросы о том, как можно из Delphi работать с документами Excel. Решил написать такую инструкцию, где рассказано об основных действиях.

Для работы с OLE нужно к строке Uses добавить модуль ComObj. Так же нужно объявить переменную типа Variant.

Что бы начать работу с Экселем, нужно создать OLE объект:
Ap := CreateOleObject('Excel.Application');

После этого нужно либо создать новую книгу:
Ap.Workbooks.Add;
либо открыть файл:
Ap.Workbooks.Open(<имя файла>);
Что бы открыть файл только для чтения, нужно указать:
Ap.Workbooks.Open(<имя файла>,0,True);
где True и указывает, что файл открывается только для чтения.

По умолчанию окно Excel не будет отображаться. что бы оно появилось, нужно выполнить
Ap.Visible := True;
Но это желательно делать в последний момент, т.к. когда окно видимое, то все изменения в нём происходят медленнее. Поэтому, лучше оставить его невидимым, сделать там все необходимые изменения, и только после этого сделать его видимым или закрыть. Если вы его оставите невидимым, то процесс EXCEL.EXE останется висеть в памяти, даже когда будет закрыто ваше приложение.


Что бы записать или прочитать содержимое ячейки можно использовать Ap.Range[<имя ячейки>] или Ap.Cells[<позиция по Y>,<позиция по X>]
Ap.Range['D1'] := 'Ляляля';
Ap.Cells[1,4] := 'Ляляля';
Эти две строки выполняют одно и тоже действие: записывают строку "Ляляля" в ячейку D1
Читать значение из ячейки таким же образом:
S := Ap.Range['D1'];
или
S := Ap.Cells[1,4];
Так же можно записывать значение сразу в несколько ячеек. можно перечислить через точку с запятой или указать диапазон через двоеточие:

Изменение свойств текста
Всё это можно применять как к отдельным ячейкам, так и к группам ячеек, строк, столбцов и т.п. Я буду показывать примеры на Ap.Cells. но Вам никто не мешает использовать Ap.Range['D5'], Ap.Range['A2:E8'], Ap.Columns['B:F'] и т.п.
Наверное, вы обращали внимание, что в новом документе появляются 3 листа (их список отображается внизу программы Excel). По умолчанию, мы работаем с активным листом (сразу после создания это первый лист). Но при желании, мы можем использовать и другие листы. Доступ к ним осуществляется с помощью Worksheets[<номер листа>]. Обратите внимание, что нумеруются они начиная с 1 (а не с 0, как привыкли все программисты).
Ниже приведён более полный список размеров бумаги из модуля ExcelXP:

Выделение
Excel.Range[Excel.Cells[1, 1], Excel.Cells[5, 3]].Select;
а также любые другие комбинации выбора ячейки с окончанием .select - выбор 1 или группы ячеек

С выбранными ячейками возможны следующие преобразования:

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. ]

Установка пароля для активной книги может быть произведена следующим образом:

где pass - устанавливаемый пароль на книгу.

Снятие пароля с книги аналогично, использовуем команду

где pass - пароль, установленный для защиты книги.

Установка и снятие пароля для активного листа книги Excel производится командами

где pass - пароль, установленный для защиты книги.
Вспомогательные операции в EXCEL

Удаление строк со сдвигом вверх:

при выполнении данных действий будут удалены строки с 5 по 15.

Установка закрепления области на активном листе Excel


Спасибо VampireKB за дополнения


Существует ли инструкция по размещению проекта Delphi на GitHub?
После создания репозитория непонятно, что делать.

Как в Delphi сделать Excel таблицу, не употребляя компонент TStringGrid и связать ее с Delphi
Как в Delphi сделать Excel таблицу, не употребляя компонент TStringGrid и связать ее с Delphi?

Использование БД в Delphi
Привет. Возникла необходимость подключить базу данных к Delphi для хранения вычислений полученных в.

Использование Interop Excel
Добрый день! Есть приложение, которое должно вносить определенные изменения в Excel файл. .

Использование case Delphi
имеется код Case Combobox1.itemIndex of 0:begin Edit1.Clear; Form_login.Visible:=false;.


Использование stringgrid-Delphi
Дан массив А размера N. Сформировать два новых массива В и С: в массив В записать все положительные.

Использование интерфейсов из С++ в Delphi
Здравствуйте. Пытаюсь прикрутить Steamworks API напрямую к делфи, и возникла проблема. Функция.

Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.

Рассмотрим теперь работу с книгами Excel. В кодах разд. 6.4.1 уже была создана одна книга и ссылка на нее занесена в переменную ExcelWorkBookl.

Если в дальнейшем вам потребуется создать еще одну книгу, это можно сделать в приложении с серверами СОМ оператором:

А если надо открыть книгу, сохраненную ранее в файле, это можно сделать следующим кодом:

ЗДесь вызывается стандартный диалог открытия файла, и если пользователь выбрал в нем файл, то он открывается и добавляется в коллекцию Workbooks. Для серверов автоматизации OLE аналогичные операторы имеют вид:

ExceiApplicationl.WorkBooks.Add; if OpenDialogl.Execute

Новые книги создаются с числом листов, установленным по умолчанию. Если вам надо задать другое значение числа листов в создаваемых книгах, вы можете перед выполнением метода Add задать соответствующее значение свойства SheetsInNewWorkbook сервера. Например, если вы выполните для сервера СОМ оператор:

или для сервера OLE оператор :

то при всех последующих вызовах метода Add будут создаваться книги с одним листом до тех пор, пока вы не измените значение SheetsInNewWorkbook.

Уже упоминавшаяся коллекция открытых книг Workbooks позволяет указать книгу, с которой должны проводиться какие-то операции. Это свойство можно рассматривать как индексированный массив, в котором индекс 1 соответствует первой открытой книге, индекс 2 - второй и т.д. Например, оператор:

передаст в переменную ExcelWorkbookl книгу, индекс которой указан в окне редактирования Editl. После этого все свойства и методы объекта ExcelWorkbookl будут относиться к этой книге. Но для пользователя, смотрящего на окно программы Excel, эта книга не откроется. Чтобы она открылась пользователю, ее надо активизировать оператором

при работе с серверами СОМ или оператором

ExcelWorkbookl.Activate; при работе с серверами OLE.

Подсвойство Count свойства Workbooks определяет число книг, открытых в Excel. Свойство Count позволяет организовать цикл по индексам всех книг.

К массиву Workbooks можно обращаться не только по индексу, но и по имени книги. Например, следующие операторы открывают и активизируют книгу, имя которой (например, "Книга1") записано в окне Editl:

При работе с серверами OLE, как и раньше, в метод Activate никакой параметр передаваться не должен.

Сохранить книгу можно методом Save, в который в сервере СОМ передается единственный аргумент - LCID. Например, оператор

Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.

Мы рассмотрели в разд. 6.4.2 основные операции, связанные с книгами. Теперь перейдем к операциям с листами книги. Коллекция листов содержится в свойстве Worksheets объекта книги. Эта коллекция по своим свойствам подобна рассмотренной ранее коллекции Workbooks. К листу можно обращаться по индексу или по имени. Например, следующие операторы при работе с серверами СОМ открывают и активизируют первый лист книги, представленной объектом Excel Workbook 1, передают указатель на этот лист в переменную Excel Worksheet 1 и активизируют лист, т.е. выдвигают его на первый план в окне Excel:

При работе с серверами автоматизации OLE аналогичные операторы выглядят так:

Свойство Worksheets имеется также в объекте сервера. Это свойство относится к активной книге. Так что следующие операторы при работе с серверами СОМ производят операции с активной книгой, открывая и активизируя в ней лист, имя которого (например, "Лист1") задано в окне редактирования Editl:

При работе с серверами автоматизации OLE аналогичные операторы выглядят так:

Если лист с заданным именем отсутствует в книге, будет генерироваться исключение. Так что если имеется подобная опасность, это исключение надо перехватить, например, следующим образом:

Worksheets[Editl.Text] as ExcelWorksheet; ExcelWorksheetl.Activate(LOCALE_USER_DEFAULT); except

Добавить новый лист в книгу можно методом Add объекта Worksheets:

Параметры Before или After - это объект листа, перед которым или после которого осуществляется вставка. Обычно достаточно задать только один из этих параметров, а другой сделать равным EmptyParam. Если оба параметра равны EmptyParam, то новые листы вставляются перед текущим активным листом. Параметр Count указывает число вставляемых листов. Если этот параметр равен EmptyParam, то вставляется один лист. Параметр Туре__ определяет тип вставки. При значении EmptyParam вставляется новый пустой лист.

Например, следующий код при работе с серверами СОМ вставляет один новый лист перед активным листом активной книги и передает указатель на него в переменную ExcelWorksheetl:

А следующий код вставляет два новых листа после третьего листа активной книги:

При работе с серверами автоматизации OLE аналогичные операторы выглядят так:

Имя вставленного или любого имеющегося листа можно изменить с помощью свойства Name. Например:

ExcelWorksheetl.Name := 'Счет-фактура'; Удалить лист из книги можно методом Delete:

Напечатать лист можно методом Printout, не отличающимся от аналогичного метода, описанного ранее для книги. Например, печать текущей страницы при работе с серверами СОМ может быть оформлена так:

При работе с серверами автоматизации OLE получается попроще:

Предварительный просмотр листа перед печатью можно осуществить методом PrintPreview:

Параметр EnableChanges указывает возможность внесения изменений при просмотре. Например, следующий оператор обеспечивает при работе с серверами СОМ предварительный просмотр активного листа книги:

Александр Шабля
дата публикации 26-05-2006 03:55

  • Как добавить новую книгу?
  • Как задать количество листов в новой книге?
  • Как открыть книгу, имеющуюся на диске?
  • Как сохранить книгу?
  • Как закрыть книгу без вопросов о сохранении? Как закрыть все книги?
  • Как узнать имена всех открытых книг?
  • Как найти определенную открытую книгу?
  • Как переименовать книгу?
  • Как спрятать книгу?
  • Как открыть текстовый файл в Excel'е?
  • Как узнать имена всех листов в книге и их количество?
  • Как получить ссылку на активный лист в активной книге?
  • Как добавить новый лист в книгу? Как удалить лист?
  • Нужно ли делать лист активным, чтоб записать в него данные?
  • Как задать имя листу в книге?
  • Как выделить один или несколько листов в книге?
  • Как скопировать/переместить лист в одной книге? В другую книгу?
  • Как задать/убрать область печати? Как вызвать PrintPreview? Как напечатать лист?
  • Как установить параметры печати: отступы на листе, ориентацию листа и др.?
  • Как установить свои разрывы страниц (HPageBreaks) в области печати? Как узнать номер строки HpagePreak?
  • Как сделать так, чтобы на каждой странице повторялись заголовки колонок таблицы?
  • Как спрятать рабочий лист?
  • Как установить пароль на существующий лист/книгу?
  • Как создать макрос из Delphi? Как выполнить макрос, имеющийся в книге?
  • Будет ли работать макрос при выставленной "Очень высокая безопасность макросов" в Excel'е пользователя?
  • Почему не работает макрос, записанный в книге?

Как добавить новую книгу?

Добавить новую пустую книгу:

В первом параметре метода Add можно указать стандартный тип шаблона Excel. Если же в нем указать имя (с полным путем) подготовленного файла (шаблоном может быть и "обычный" файл XLS, а не только файл XLT), то можно открыть книгу на диске как шаблон.

Откроет файл "MyTemplate1.xls", т.е. точно как обычный шаблон "Книга1.xls", но свой со своим форматированием, что позволит ускорить процесс экспорта данных в Excel, т.к. не придется форматировать ячейки и вызывать другие настройки листа.

Как задать количество листов в новой книге?

Задать количество листов в новой книге можно перед добавлением новой книги:

Как открыть книгу, имеющуюся на диске?

Если книга находится не в папке указанной в Excel.Application.DefaultFilePath, то нужно указывать полный путь к открываемому файлу .xls, даже если файл находится в текущей папке вашего приложения т.к. Excel ничего про него не знает.

Как сохранить книгу?

Как закрыть книгу без вопросов о сохранении? Как закрыть все книги?

Как узнать имена всех открытых книг?

Узнать имена всех книг экземпляра Excel.Application можно в цикле, например, так:

Как найти определенную открытую книгу?

Точно так же как в предыдущем ответе — по имени в свойстве Name. Если вы хотите сделать найденную книгу активной, то вызовите метод Activate

Как переименовать книгу?

Переименовать книгу ни как нельзя — только сохранить под другим именем методом SaveAs (смотрите "Как сохранить книгу").

Как спрятать книгу?

Как открыть текстовый файл в Excel'е?

Практически, так же как и обычную книгу, только внимательно указав дополнительные параметры в методе OpenText.

Как узнать имена всех листов в книге и их количество?

Узнать количество листов в книге можно в цикле по коллекции Workbook.Sheets. Количество листов — свойство Sheets.Count. Имя листа — свойство Worksheet.Name.

Как получить ссылку на активный лист в активной книге?

Обращаеясь к Excel.Application.ActiveSheet или WorkBook.ActiveSheet, вы получите ссылку на интерфейс IDispatch. Это происходит из-за того, что коллекция Excel.Application.Sheets может содержать объекты WorkSheet, Chart, Excel4MacroSheet (для поддержки Excel 4).

Определить тип листа можно, проверив свойство Worksheet.Type:

Как добавить новый лист в книгу? Как удалить лист?

При добавлении можно указать тип нового листа (WorkSheet, Chart, Excel4MacroSheet) и текущее положение. Добавленный лист будет активизирован автоматически (на него будет указывать свойство ActiveSheet)

Нужно ли делать лист активным, чтоб записать в него данные?

Не нужно — переключение (активация) листов только замедлит экспорт данных. Получите ссылку на любой лист в книге (активной или нет) и работайте c ней, как с активной. Активизировать лист нужно только в случае необходимости, например, при вставке из буфера обмена, предварительном просмотре и др.

Как задать имя листу в книге?

Как выделить один или несколько листов в книге?

Как скопировать/переместить лист в одной книге? В другую книгу?

Как задать/убрать область печати? Как вызвать PrintPreview? Как напечатать лист?

Как установить параметры печати: отступы на листе, ориентацию листа и др.?

Установка параметров печати — довольно продолжительный процесс, поэтому советую настроить их в предварительно подготовленном шаблоне. Все параметры печати задаются в свойстве PageSetup объекта Worksheet. Но учтите, что текст в свойствах Footer или Header для Left, Right, Center суммарно не должен превышать 255 символов.

Для задания отступов в сантиметрах используйте функцию Excel.Application.CentimetersToPoints

Если вы выполните данный код, то заметьте как долго Excel настраивает все границы печати.

Как установить свои разрывы страниц (HPageBreaks) в области печати? Как узнать номер строки HpagePreak?

Для того чтобы "появились" автоматические разрывы страниц нужно перейти в режим разметки.

Также вы можете "переместить" разрыв, присвоив новое значение свойству Location объекта HPageBreak

Как сделать так, чтобы на каждой странице повторялись заголовки колонок таблицы?

Нужно задать "сквозные" строки заголовка таблицы.

Как спрятать рабочий лист?

Как установить пароль на существующий лист/книгу?

Как создать макрос из Delphi? Как выполнить макрос, имеющийся в книге?

Вам не удастся создать макрос программно, т.к. по умолчанию в Excel VBA Project отключен доступ к VBA из программ. Как включить эту возможность читайте "PRB: Programmatic Access to Office XP VBA Project Is Denied"

Пример создания макроса с параметром и вызов его из программы:

Если все же вам очень нужно добавить макрос, не зависимо от настроек доступа к VBA Project, можно воспользоваться листом макросов xlExcel4MacroSheet. Макроязык представляет собой "команды".

Будет ли работать макрос при выставленной "Очень высокая безопасность макросов" в Excel'е пользователя?

Записанные макросы в книге, открытой вашей программой всегда будут работать, не зависимо от выставленного в Excel'е "Уровня безопасности" для макросов.

Почему не работает макрос, записанный в книге?

Записанный в книге макрос может не работать по причине установленного антивируса. Например, установленный "Kaspersky Office Guard", входящий в состав "Антивирус Касперского", начисто отключает все вызовы VBA.

Читайте также: