Взаимодействие с Excel, с помощью OLE объектов в Delphi. CreateOleObject, Open, SaveAs, close.

Разберём взаимодействие Delphi с Excel  с помощью OLE объектов, на примере программы Statistic.

Исходный код программы можно скачать на странице программы или по этой ссылке: Statistic_source.

В этой программе обращение к Excel происходит, в двух местах.  При добавлении нового шаблона формы в программу и при вычислениях.

Разберём как происходит добавление формы в программу:

*Плагин отображающий код не правильно отображает символы \’ поэтому между этими символами я поставил пробел в действительности этот пробел не нужен

Добавление формы происходит при нажатии кнопки. После этого должен открыться экселевский файл, в котором проверяются все заполненые ячейки на наличие ячеек со стилями sum, mean и set. Позиции данных ячеек записываются в файл, для дальнейшего использования.

Рассмотрим код по подробнее:

в этой роцедуре мы будем пользоваться переменной  XLApp типа — variant.

Объявленной в классе TMain — unit Statistic_U;

 

Так же мы объявляем Файл данных.  Тип данных будет integer

 

Что бы начать работать с OLE объектами надо для начала создать  Com объект:

Синтаксис этой функции следующий: function CreateOleObject(const ClassName: string): IDispatch;

Тоесть в функции мы указываем имя класса ClassNam в виде string а на выходе функции мы получаем ID данного объекта.

 

После мы запрещаем показывать различные сообщения пользователю. Устанавливая свойство DisplayAlerts Com объекта в состояние false

 

Дальше мы может открыть файл Excel который мы выбрали в самом начале нашей процедруры:

Данную операцию мы проделываем используя метод  Open Рабочей книги:

Данный метод имеет следующий ситнтаксис:  .Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)

Параметры

FileName — имя файла который надо открыть.

UpdateLinks — этот параметр указывает как поступить с ссылками на другие файлы, по умолчанию при открытии пользователю будет задаваться вопрос.

ReadOnly — если указано, как true. То файл будет открыт только для чтения.

Format — если открывается текстовый документ, то в этом параметре можно указать символ разделитель, иначе используется символ разделитель по умолчанию.

Password — если книга защищена от просмотра, то здесь можно указать пароль в виде строки(type String), по умолчанию пользователю будет задан вопрос.

WriteResPassword — Если в файле стоит пароль на запись, а нам надо изменить данные, то здесь можно указать пароль в виде строки. По умолчанию пользователю будет задан вопрос.

IgnoreReadOnlyRecommended — Если файл был сохранён с рекомендацией, только для чтения. То если установить значение True  в этот параметр, то пользователю не покажется это сообщение.

Origin — Если открывается текстовый файл, то здесь можно указать место его создания есть три варианта : xlMacintosh, xlWindows, or xlMSDOS. По умолчанию будет использоваться текущая операционная система. Этот параметр помогает правильно определить конец строки.

Delimiter — Здесь можно указать символ разделитель для вкладок. При этом если внести строку то будет использоваться первый символ.

Editable — Данная настройка не работае для версий Microsoft Excel 5.0 и выше. Она определяла состояние видимости документа после открытия.

Notify — если необходимо открыть файл на чтение, но это не возможно то при указании этого значения в true файл добавится в список уведомлений, и когда это станет возможным пользователю отобразится уведомление. При значении false файл не сможет открыться.

Converter — с помощью данного аргумента можно использовать файлы конвертеры.

AddToMru — если значение указано как true книга добавится в список недавно открывавшихся, по умолчанию стотит false.

Local — при использовании значения true сохраняет файлы с языковыми настройками Microsoft Excel (включая параметры панели управления). При указании значения false— сохранение файлов с языковыми настройками Visual Basic.  По умалчанию используется сохранение файлов с языковыми настройками Visual Basic.

CorruptLoad — принимает три значения xlNormalLoad (0) рабочая книга открывается «Нормально» , xlRepairFile (1) рабочая книга открывается в режиме восстановления, xlExtractData  (2) рабочая книга открывается в режиме извлечения данных.

 

Дальше мы открываем файл с данными для записи в файл получаемых значений, но так как статья об OLE объектах мы не будем подробно описывать:

 

Для того, что бы пробежать по всему файлу мы используем 3 вложенных цикла:

Где Main.XLApp.Workbooks[1].WorkSheets.Count — количество закладок в книге Workbooks[1].  Цифра [1] так как мы только что создали com объект и открыли в нём всего одну книгу.

Main.XLApp.WorkBooks[1].WorkSheets[k1].UsedRange.Columns.Count — кол-во используемых колонок на данной вкладке.

Main.XLApp.WorkBooks[1].WorkSheets[k1].UsedRange.Rows.Count — кол-во используемых строк на данной вкладке.

 

Дальше смотрим, если стиль данной ячейки соответствует нашим требованиям, то в файл записываются нужные данные

 

После просмотра всего документа на поиск нужных ячеек. Сохраняем шаблон формы в теле программы.

 

Синтаксис данного метода: .SaveAs ( Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)

FileName — имя файла с которым будет сохранён документ.

Password — если мы хотим защитить файл от просмотра, то здесь можно указать пароль на просмотр в виде строки(type String). Длинна пароля не должна быть больше 15 символов.

WriteResPassword — если нужно защитить файл от записи, то здесь можно указать пароль на запись

ReadOnlyRecommended — сделать пометку с рекомендацией открывать этот файл в режиме только для чтения. Данная рекомендация отобразится пользователю при открытии файла.

CreateBackup — создасть резервную копию файла если значение указано true.

AccessMode — возможно указать следующие значения xlExclusive запись будет производится в монопольном режиме, xlNoChange не изменяет Режим доступа, xlShared возможно открытие на запись файла несколькими пользователями одновременно. По умолчанию используется режим xlNoChange  и режим доступа не меняется.

ConflictResolution — При режиме общей книги. Иногда возникают конфликты записи когда два пользователя пытаются записать различные данные в одну ячейку. Этот параметр может принимать три значения: xlLocalSessionChanges всегда соглашаться перезаписывать данные, xlOtherSessionChanges — всегда отклонять перезапись данных, xlUserResolution — спросить у пользователя, как разрешить конфликт.

AddToMru — если значение указано как true книга добавится в список недавно открывавшихся, по умолчанию стотит false.

TextCodepage — Игнорируется для всех языков в Microsoft Excel.

TextVisualLayout — Игнорируется для всех языков в Microsoft Excel.

Local — при использовании значения true сохраняет файлы с языковыми настройками Microsoft Excel (включая параметры панели управления). При указании значения false— сохранение файлов с языковыми настройками Visual Basic.  По умалчанию используется сохранение файлов с языковыми настройками Visual Basic.

 

И наконец мы заканчиваем работу с книгой. Закрывая рабочую книгу:

Данный метод имеет следующий синтаксис .Close(SaveChanges, Filename, RouteWorkbook)

SaveChanges — если данный параметр имеет значение true, то  если в документе были изменения, документ будет сохранён при выходе.

Filename — имя с которым будет сохранятся документ.

RouteWorkbook — Если книгу надо направить дальше по маршруту, то это можно сделать этим параметром. true — книга отправится дальше по маршруту, false — книга не будет отправлятся.

Комментарии:

Комментарии 2

  • Зашкаливающее количество орфографических и пунктуационных ошибок. А за материал спасибо!

    • Простите. Я как в панк музыке… желание играть превышает умение. Так и у меня желание помочь и чего нибудь объяснить, превышает умение писать текст. Если вы укажете ошибки я обязательно их поправлю, могу даже дать автора. Но понимаю, что это очень сложно трудоёмко и мучительно больно. 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *