Delphi excel workbooks методы
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
Закрытие документа может быть осуществлено с помощью метода Cl ose одним из следующих способов:
Просто сохранить рабочую книгу, не закрывая ее, можно с помощью метода Save:
Используется также метод SaveAs:
Метод SaveAs имеет более десятка параметров, влияющих на то, как именно сохраняется документ (под каким именем, с паролем или без него, какова кодовая страница для содержащегося в ней текста и др.).
Закрыть само приложение Excel можно с помощью метода Quit объекта Excel. Application. В случае Excel этот метод параметров не имеет.
Вывод документа Excel на устройство печати можно осуществить с помощью метода Printout объекта WorkBook, например:
Арр.Acti veWorkBook.Pri ntOut:
Если нужно изменить параметры печати, следует указать значения соответствующих параметров метода Pri ntOut (в случае Excel их восемь).
Вы здесь
В прошлой статье (Читаем файл Excel (xls) в Delphi) был рассмотрен способ чтения данных из xls файла и его импорт в Delphi. Теперь перейдем к сохранению, т.е. к экспорту данных из Delphi. Экспорт, как и импорт, будет осуществляться через посредника, т.е. Excel. Поэтому для работы приложения потребуется установленная копия MS Excel 2003-2010 (выше не тестировал).
Добавьте на форму кнопку, диалог сохранения, и таблицу StringGrid. Для того чтоб появилась возможность редактирования таблицы StringGrid необходимо в ее свойствах включить опцию goEditing:
Визуальные приготовления для нашего примера готовы. Переходим к написанию кода.
Как и в случае чтения xls нам понадобится библиотека ComObj. Добавьте ее в uses. Ниже приведен листинг процедуры экспорта, добавьте его после ключевого слова implementation.
procedure Xls_Save(XLSFile:string; Grid:TStringGrid);
const
xlExcel9795 = $0000002B;
xlExcel8 = 56;
var
ExlApp, Sheet: OLEVariant;
i, j, r, c:integer;
//делаем окно Excel невидимым
ExlApp.Visible := false;
//создаем книгу для экспорта
ExlApp.Workbooks.Add;
//создаем объект Sheet(страница) и указываем номер листа (1)
//в книге, в который будем осуществлять экспорт
Sheet := ExlApp.Workbooks[1].WorkSheets[1];
//считываем кол-во столбцов и строк в StringGrid
r:=Grid.RowCount;
c:=Grid.ColCount;
//считываем значение из каждой ячейки и отправляем в таблицу Excel
for j:= 1 to r do
for i:= 1 to c do
sheet.cells[j,i]:=Grid.Cells[i-1,j-1];
//отключаем все предупреждения Excel
ExlApp.DisplayAlerts := False;
//закрываем приложение Excel
ExlApp.Quit;
//очищаем выделенную память
ExlApp := Unassigned;
Sheet := Unassigned;
В прошлые раз мы с Вами остановились на сохранении рабочей книги. В принципе, ничего сложного в запуске Excel, создании и сохранении рабочей книги нет. Сегодня заглянем немного глубже в работу с Microsoft Excel в Delphi — рассмотрим как можно работать с листами рабочей книги, изменять внешний вид ячеек и попробуем скопировать таблицу из своего приложения в открытую рабочую книгу.
План статьи:
Однако прежде, чем забираться в дебри Excel я хотел продемонстрировать Вам насколько глубоко мы сегодня заглянем.
1. Объекты Microsoft Excel
На рисунке я попробовал изобразить объектную модель Excel в миниатюре. Т.е. из этой модели исключены не требующиеся пока нам элементы, например такие, как свойства рабочей книги или выделенные объекты Selection — об этом речь пойдет позже.
Как Вы можете судить по представленной модели, а также и по собственному опыту работы, приложение Excel в общем случае может содержать коллекцию рабочих книг (WorkBooks Collection). Для доступа к конкретной рабочей книге мы с Вами использовали свойства Item коллекции:
где index — порядковый номер рабочей книги в коллекции WorkBooks.
И на этом наше первое знакомство с Excel закончилось. Между тем, каждая отдельная рабочая книга может содержать N листов, каждый из которых состоит из N ячеек, которые могут быть объединены в объекты Range.
На каждой из ступеней этой модели можно останавливаться и изучать её месяцами. Если будет особая необходимость в изучении каких-либо дополнительных свойств и методов — мы обязательно вернемся и изучим. А теперь, приступим к работе в Delphi с листами рабочей книги.
2. Как активировать лист рабочей книги Excel?
Как Вы знаете при создании пустой рабочей книги Excel автоматически добавляет в эту книгу 3 пустых листа. Чтобы работать с конкретным листом (WorkSheet или просто Sheet) этот лист необходимо активировать. Один из способов активации листа рабочей книги Excel в Delphi выглядит следующим образом:
Здесь в качестве параметров функции задается индекс рабочей книги (WBIndex) в коллекции WorkBooks и название листа.
Если хотите, то можете активировать тот же лист по индексу в коллекции WorkSheets — при этом сама функция немного упрощается (не требуется условие проверки названия листа).
Также, если вы уверены, что в данный момент времени активна необходимая Вам рабочая книга, то можно избежать использования лишней переменной (индекса рабочей книги WBIndex) и активировать лист вот так:
Теперь рассмотрим более подробно методы, используемые объектом WorkSheet.
3. Методы листа книги Excel
Теперь рассмотрим более подробно объект WorkSheet.
На рисунке представлены те методы, которые я когда-либо использовал в своей работе.
Всего объект WorkSheet насчитывает 30 различных методов, которые Вы можете использовать.
Метод | Описание |
Activate | Делает текущий лист активным. Работу метода мы уже с Вами рассмотрели |
Calculate | рассчитывает все открытые книги, конкретный лист в книге, или указанный диапазон ячеек на листе |
CheckSpelling | проверка орфографии на выбранном листе |
SaveAs | сохраняет все изменения в файле |
Delete | удаляет текущий лист WorkSheet |
Select | выделение листа |
Copy | копирует лист в другое место в рабочей книге |
Paste | вставляет содержимое буфера обмена на лист |
ChartObjects | возвращает объект, который представляет собой либо одну диаграмму (объект ChartObject) или совокупность всех диаграмм (объект ChartObjects) на листе |
Move | перемещение листа. Этот метод аналогичен методу Copy . Различие лишь в том, что после вcтавки копируемый лист удаляется из книги |
Рассмотрим теперь каждый из представленных выше методов.
Метод Calculate
Расчёт рабочей книги, листа или диапазона ячеек.
Стоит отметить, что вызов метода Calculate возможен не только для конкретного рабочего листа книги Excel. Рассмотрим варианты вызова метода Calculate.
Как рассчитать все открытые в данный момент книги Excel в Delphi?
Как рассчитать отдельный лист книги Excel в Delphi?
в приведенном ниже фрагменте кода рассчитывается активный лист
Как рассчитать диапазон ячеек листа Excel в Delphi?
Рассчитаем все формулы в столбцах A, B и C:
Метод CheckSpelling
Вызов метода выглядит следующим образом:
При этом в качестве expression должен выступать лист (WorkSheet).
Параметр | Тип | Описание |
CustomDictionary | Variant | строка, указывающая имя файла пользовательского словаря, который будет рассмотрен, если слово не найдено в основном словаре. Если этот аргумент опущен, то будет использоваться словарь по-умолчанию |
IgnoreUppercase | Variant | True, если необходимо, чтобы Microsoft Excel пропускал слова, которые написаны прописными буквами. False для того, чтобы Microsoft Excel проверить все слова. Если этот аргумент опущен, то используются текущие настройки Excel. |
AlwaysSuggest | Variant | True, для того, чтобы Microsoft Excel отображал список предложений других вариантов написания при обнаружении неправильного написанного слова. False, чтобы Microsoft Excel ожидал ввода правильного написание. Если этот аргумент опущен, то используются текущие настройки. |
SpellLang | Variant | язык словаря. Может принимать значения одной из констант MsoLanguage > |
Как проверить грамматику на листе Excel в Delphi?
в этом случае MS Excel проверит текущий лист, включая проверку слов из прописных букв. Язык проверки — русский. Обратите внимание, что для того, чтобы вызвать метод мы явно указывали, какому параметру какое значение присвоить. Причём для того, чтобы пропустить какой-либо параметр, мы использовали EmptyParam (пустой параметр), который в Delphi представляет собой переменную типа OleVariant.
Понятно, что подобный способ вызова методов (с явным указанием всех параметров) для Вас не совсем удобен и широко не практикуется в программировании на Delphi, но тем не менее только так и никак иначе можно вызывать методы, используемые в Excel.
Метод SaveAs
Сохранение рабочего листа книги Excel.
Вызов метода:
Как сохранить активный лист рабочей книги Excel в Delphi?
В этом случае при сохранении будут использованы настройки по умолчанию.
Если Вам необходимо сохранить файл Excel в другом формате, то в параметре FileFormat можно использовать одно из значений перечислителя xlFileFormat. Некоторые значения xlFileFormat представлены в таблице ниже:
Имя | Значение | Описание | Расширение файла |
xlCSV | 6 | CSV | *.csv |
xlExcel8 | 56 | Книга Excel 97-2003 | *.xls |
xlHtml | 44 | Формат HTML | *.htm; *.HTML |
xlOpenDocumentSpreadsheet | 60 | Электронная таблица OpenDocument | *.ods |
xlOpenXMLWorkbook | 51 | Книга Open XML | *.xlsx |
Как сохранить активный лист рабочей книги Excel в заданном формате?
Напишем небольшую процедуру, позволяющую сохранять лист Excel в различных форматах:
Александр Шабля
дата публикации 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.
Объект Workbook входит в коллекцию книг. Коллекция книг содержит все объекты книги, открытые в настоящее время в Microsoft Excel.
Свойство ThisWorkbook объекта Application возвращает книгу, Visual Basic кода. В большинстве случаев это то же самое, что и активная книга. Однако если код Visual Basic является частью надстройки, свойство ThisWorkbook не возвращает активную книгу. В этом случае активная книга — это книга, вызываемая надстройка, в то время как свойство ThisWorkbook возвращает надстройку.
Если вы создаете надстройку из кода Visual Basic, следует использовать свойство ThisWorkbook, чтобы квалифицировать любое заявление, которое должно быть запускаться в книге, которую вы компиляции в надстройку.
Пример
Используйте книги (индекс), где индекс — это имя книги или номер индекса, чтобы вернуть один объект книги. В следующем примере активируется книга.
Номер индекса обозначает порядок открытия или создания книг. Workbooks(1) является первой созданной книгой и Workbooks(Workbooks.Count) последней созданной. Активация книги не меняет ее номер индекса. Все книги включены в число индексов, даже если они скрыты.
Свойство Name возвращает имя книги. Вы не можете установить имя с помощью этого свойства; Если необходимо изменить имя, используйте метод SaveAs для сохранения книги под другим именем.
В следующем примере в книге с именем Cogs.xls (книга уже должна быть открыта в Microsoft Excel).
Свойство ActiveWorkbook объекта Application возвращает трудовую книжку, которая в настоящее время активна. В следующем примере устанавливается имя автора для активной книги.
В этом примере вкладка таблицы из активной книги передается по электронной почте с помощью указанного адреса электронной почты и темы. Чтобы запустить этот код, активный электронный таблица должна содержать адрес электронной почты в ячейке A1, субъект в ячейке B1 и имя таблицы для отправки в ячейку C1.
События
Методы
Свойства
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.
Синтаксис
выражения. Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
выражение Переменная, представляюная объект Книги.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
FileName | Необязательный | Variant | String. Имя файла книги, которая должна быть открыта. |
UpdateLinks | Необязательный | Variant | Указывает, как обновляются внешние ссылки (ссылки) в файле, например ссылка на диапазон Budget.xls книги в следующей =SUM([Budget.xls]Annual!C10:C25) формуле. Если этот аргумент не указан, пользователю будет предложено указать, как будут обновляться ссылки. Дополнительные сведения о значениях, используемых этим параметром, см. в разделе Примечание. |
Возвращаемое значение
Объект Книги, представляю который представляет открытую книгу.
Примечания
По умолчанию макрос включен при открытии файлов программным путем. Используйте свойство AutomationSecurity, чтобы настроить режим макрос безопасности, используемый при открытии файлов программным способом.
Вы можете указать одно из следующих значений в параметре UpdateLinks, чтобы определить, обновляются ли внешние ссылки (ссылки) после открытия книги.
Значение | Описание |
---|---|
0 | Внешние ссылки (ссылки) не обновляются после открытия книги. |
3 | Внешние ссылки (ссылки) будут обновляться после открытия книги. |
Можно указать одно из следующих значений в параметре Format, чтобы определить характер делимитера для файла.
Значение | Delimiter |
---|---|
1 | Вкладки |
2 | Запятые |
3 | Пробелы |
4 | Semicolons |
5 | Отсутствует |
6 | Настраиваемый символ (см. аргумент Delimiter) |
Пример
В следующем примере кода откроется книга Analysis.xls, а затем выполняется Auto_Open макрос.
В следующем примере кода лист из другой книги импортируется на новый лист в текущей книге. Sheet1 в текущей книге должен содержать имя пути для импорта книги в ячейке D3, имя файла в ячейке D4 и имя листа в ячейке D5. Импортируемый лист вставляется после sheet1 в текущей книге.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Читайте также: