Подписка

добавить на Яндекс

Наши проекты

Delphi+Google

Google API

Google API в Delphi - проект с открытым исходным кодом.

Chrono

Chrono

Хронометр - программа для ведения списка задач.

ODFProc

ODFProc

ODFProc - работа с документами OpenOffice в Lazarus и FreePascal.

Поддержка блога

А тут я коплю на лицензию Delphi XE на iPad =).
Сумма пожертвования не фиксирована.

Публикации

Год назад

Случайный пост

Последние

Сообщения форума

Комментарии

Свежие комментарии

Социальные сети

Google

Facebook

Twitter

Опрос

Вы сейчас или в ближайшем обозримом будущем планируете разрабатывать кроссплатформенное приложение с использованием Firemonkey?



Loading ... Loading ...

Блоги и сообщества

Статьи по Delphi DelphiFeeds.ru - Все Delphi-блоги Рунета Сообщество умных людей VR-Online.RU Бесплатный журнал для программистов и всех, кто интересуется IT Статьи и уроки по Delphi Новостной блог о высоких технологиях
Система Orphus
Опубликовал Vlad 29 августа 2009 в 16:55.
Категории: Моя работа, Основы Delphi.


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

Однако прежде, чем забираться в дебри Excel я хотел продемонстрировать Вам насколько глубоко мы сегодня заглянем.

1. Объекты Microsoft Excel

Объектная модель ExcelНа рисунке я попробовал изобразить объектную модель Excel в миниатюре. Т.е. из этой модели исключены не требующиеся пока нам элементы, например такие, как своиства рабочей книги или выделенные объекты Selection - об этом речь пойдет позже.

Как Вы можете судить по представленной модели, а также и по собственному опыту работы, приложение Excel в общем случае может содержать коллекцию рабочих книг (WorkBooks Collection). Для доступа к конкретной рабочей книге мы с Вами использовали свойства Item коллекции:

WorkBook:=WorkBooks.Item[index]

где index - порядковый номер рабочей книги в коллекции WorkBooks.

И на этом наше первое  знакомство с Excel закончилось. Между тем, каждая отдельная рабочая книга может содержать N листов, каждый из которых состоит из N ячеек, которые могут быть объединены в объекты Range.

На каждой из ступеней этой модели можно останавливаться и изучать её месяцами. Если будет особая необходимость в изучении каких-либо дополнительных свойств и методов - мы обязательно вернемся и изучим. А теперь, приступим к работе с листами рабочей книги.

2. Как активировать лист рабочей книги Excel?

Как Вы знаете при создании пустой рабочей книги Excel автоматически добавляет в эту книгу 3 пустых листа. Чтобы работать с конкретным листом (WorkSheet или просто Sheet) этот лист необходимо активировать. Один из способов активации листа рабочей книги Excel в Delphi выглядит следующим образом:

function ActivateSheet(WBIndex:integer; SheetName:string):boolean;
var i:integer;
begin
  Result:=false;
  try
    if WBIndex>MyExcel.WorkBooks.Count then
      raise Exception.Create('Задан неверный индекс для WorkBooks. Активация листа прервана')
    else
      begin
        for i:=1 to MyExcel.WorkBooks[WBIndex].Sheets.Count do
          if AnsiLowerCase(MyExcel.WorkBooks[WBIndex].Sheets.Item[i].Name)=AnsiLowerCase(SheetName) then
            begin
              MyExcel.WorkBooks[WBIndex].Sheets.Item[i].Activate;
              Result:=true;
              break;
            end;
      end;
  except
    raise Exception.Create('Активация листа завершена с ошибкой');
end;
end;

Здесь в качестве параметров функции задается индекс рабочей книги в коллекции WorkBooks и название листа.


Если хотите, то можете активировать тот же лист по индексу в коллекции WorkSheets - при этом сама функция немного упрощается (не требуется условие проверки названия листа).

Также, если вы уверены, что в данный момент времени активна необходимая Вам рабочая книга, то можно избежать использования лишней переменной (индекса рабочей книги WBIndex) и активировать лист вот так:

MyExcel.ActiveWorkBook.Sheets.Item[i].Activate;

Теперь рассмотрим более подробно методы, используемые объектом WorkSheet.

3. Методы  листа книги Excel

Теперь рассмотрим более подробно объект WorkSheet.

worksheet MethodsНа рисунке представлены те методы, которые я когда-либо использовал в своей работе.

Всего объект WorkSheet насчитывает 30 различных методов, которые Вы можете использовать.

Рассмотрим теперь каждый из представленных на рисунке методов.

1. Activate - Делает текущий лист активным. Работу метода мы уже с Вами рассмотрели.

2. Calculate - рассчитывает все открытые книги, конкретный лист в книге, или указанный диапазон ячеек на листе.

Возможные варианты вызова метода:

расчёт всех открытых в данный момент книг;

MyExcel.Calculate

расчёт отдельного листа книги:

MyExcel.ActiveWorkBook.ActiveWorkSheet.Calculate

в данном случае будет произведен расчёт текущего активного листа активной книги.

MyExcel.ActiveWorkBook.ActiveWorkSheet.UsedRange.Columns("A:C").Calculate

при таком вызове будет произведен расчёт всех формул в столбцах A, B и C

3. CheckSpelling - проверка орфографии на выбранном листе.

Вызов метода:

expression.CheckSpelling(CustomDictionary, IgnoreUppercase, AlwaysSuggest, SpellLang)

При этом в качестве expression должен выступать лист (WorkSheet).

Параметры, используемые при вызове:

CustomDictionary : Variant - cтрока, указывающая имя файла пользовательского словаря, который будет рассмотрен, если слово не найдено в основном словаре. Если этот аргумент опущен, то будет использоваться словарь по-умолчанию.

IgnoreUppercase : Variant - true, если необходимо, чтобы Microsoft Excel пропускал слова, которые написаны прописными буквами. False для того, чтобы Microsoft Excel проверить все слова. Если этот аргумент опущен, то используются текущие настройки.

AlwaysSuggest : Variant - true, для того, чтобы Microsoft Excel отображал список предложений других вариантов написания при обнаружении неправильного написанного слова. False, чтобы Microsoft Excel ожидал ввода правильного написание. Если этот аргумент опущен, то используются текущие настройки.

SpellLang: Variant - язык словаря.  Может принимать значения одной из констант MsoLanguageID, например для русского языка SpellLang = 1049, для английского (США) SpellLang = 1033 и т.д.

Пример вызова метода CheckSpelling:

MyExcel.ActiveWorkBook.ActiveWorkSheet.CheckSpelling(CustomDictionary:=EmptyParam,  IgnoreUppercase:= false, AlwaysSuggest:=EmptyParam, SpellLang:=1033)

в этом случае MS Excel проверит текущий лис, включая проверку слов из прописных букв. Язык проверки - русский. Обратите внимание, что для того, чтобы вызвать метод мы явно указывали, какому параметру какое значение присвоить. Причём для того, чтобы пропустить какой-либо параметр, мы использовали EmptyParam (пустой параметр), который в Delphi представляет собой переменную типа OleVariant.

Понятно, что подобный способ вызова методов (с явным указанием всех параметров) для Вас не совсем удобен и широко не практикуется в программировании на Delphi, но тем не менее только так и никак иначе можно вызывать методы, используемые в Excel.

4. SaveAs - сохраняет все изменения в файле.

Вызов метода:

expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru,TextCodepage, TextVisualLayout, Local)

При этом в качестве expression должен выступать лист (WorkSheet).

Параметры, используемые при вызове:

FileName : Variant - строка, представляющая собой имя сохраняемого файла. Необходимо указывать полный путь к файлу, иначе файл будет сохранен в папку Excel.

FileFormat : Variant - формат файла, который используется при сохранении. По умолчанию файл сохраняется в формате, который вы выбирали в последний раз в Excel.

Password : Variant - пароль для файла (не более 15 символов). Пароль чувствителен к регистру.

WriteResPassword: Variant - пароль, который будет использоваться для внесения изменений в рабочую книгу. Если пароль не будет указан, то книга будет открыта в режиме "Только для чтения"

ReadOnlyRecommended: Variant - если параметр равен True, то при открытии файла на дисплее появится сообщение, в котором рекомендуется, что бы файл был открыт только для чтения.

CreateBackup: Variant - True, для того, чтобы создать резервный файл

AddToMru: Variant - True, для того, чтобы добавить имя сохраняемого файла в список недавно открытых файлов в главном меню Excel

TextCodepage и TextVisualLayout : Variant - в настоящее время не используются и сохранены для обеспечения обратной совместимости

Local : Variant - не обязательный параметр, по-умолчанию равен false.

Пример вызова метода SaveAs:

MyExcel.ActiveWorkBook.ActiveWorkSheet.SaveAs('C:MyExcelFile.xls')

В этом случае при сохранении будут использованы настройки по умолчанию.

5. Delete - удаляет текущий лист WorkSheet

Используется без параметров. Пример Вызова метода:

MyExcel.ActiveWorkBook.ActiveWorkSheet.Delete

6. Select - выделение листа.

Вызов метода:

expression.Select(Replace)

Параметры, используемые при вызове:

Replace : Variant - true, чтобы заменить текущее выделение указанного объекта. False - продлить нынешний отбор включая все ранее выбранные объекты. По умолчанию используется True.

Т.е. не стоит путать активный лист - тот который отображается в данный момент в книге и выделенный - выделить Вы можете хоть 10 листов (в Excel это делается с зажатым Ctrl), но активный - только один.

Пример вызова метода Select

MyExcel.ActiveWorkBook.WorkSheets.Item[3].Select

Выделяет третий лист книги

7. Copy - копирует лист в другое место в рабочей книге.

Вызов метода:

expression.Copy(Before, After)

Параметры, используемые при вызове метода:

Before : Variant - лист до которого будет вставлен копируемый лист.

After : Variant - лист после которого будет вставлен копируемый лист.

При этом, если вы используете параметр Before, то вы не должны использовать After и наоборот. Обращу Ваше внимание, что указывается именно ЛИСТ, а не индекс листа.

Пример вызова метода Copy:

MyExcel.ActiveWorkBook.WorkSheets.Item[1].Copy(After:=MyExcel.ActiveWorkBook.WorkSheets.Item[2])

В этом случае первый лист будет скопирован и вставлен после третьего.

8. Paste - вставляет содержимое буфера обмена на лист

Вызов метода:

expression.Paste(Destination, Link)

Параметры, используемые при вызове метода:

Destination: Variant - диапазон ячеек листа, который определяет, где будет вставлено содержимое буфера. Если этот аргумент опущен, используется текущий диапазон. Этот аргумент может быть указан только, если содержимое буфера обмена можно вставить в заданном диапазоне. Если этот параметр задан, то аргумент Link может не указываться.

Link : Variant - True, для того чтобы установить связь с источником вставляемых данных. Если этот параметр задан, Destination не может быть использован. Значение по умолчанию False.

Пример вызова метода Paste:

MyExcel.ActiveWorkBook.ActiveSheet.Paste(Destination:=MyExcel.ActiveWorkBook.ActiveSheet.Range("D1:D5"))

В этом случае содержимое буфера будет вставлено в столбец D в строки с 1 по 5. Следует отметить, что если содержимое буфера не удовлетворяет условию, например в буфере только 1 число, то вызывается исключительная ситуация.

9. ChartObjects - возвращает объект, который представляет собой либо одну диаграмму (объект ChartObject) или совокупность всех диаграмм (объект ChartObjects) на листе.

Вызов метода:

expression.ChartObjects[Index]

Параметры, используемые при вызове метода:

index: Variant - индекс диаграммы в коллекции (нумерация начинается с 1)

Пример вызова метода:

MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects[1]

В этом случае будет получена первая диаграмма на листе.

10. Move - перемещение листа. Этот метод аналогичен методу Copy. Различие лишь в том, что после вcтавки копируемый лист удаляется из книги.

Вот та часть методов, которые я использовал когда-либо при работе с Excel в Delphi. Вообще можно сказать, что в Delphi можно управлять MS Excel не хуже, чем при непосредственной работе с этим приложением, главное не забывать, какой метод или свойство за что отвечает :). Ну, а для того, чтобы не забыть, я создал небольшой MindMap, который буду периодически дополнять и обновлять. Перейдя по ссылке, Вы сможете посмотреть объекты Excel, методы ими используемые, параметры методов и их типы в соответствии с типами Delphi. Вобщем небольшая графическая шпаргалка для любителей поразбираться с Excel в Delphi. Кстати, Excel очень часто используется в бухгалтерии, если Вас интересуют Курсы бухгалтеров в Москве, то милости просим :)

Мой блог находят по следующим фразам

Понравилась статья? Тогда:
Делись! Загружай! Плюсуй!
   Отправить PDF на   
Читай ещё статьи на WebDelphi.ru

Комментарии (8)

WP_Cloudy
  • Орион пишет:

    Я недавно работал с excel, работает очень тормозно. Проще было бы создать таблицу в xml, а потом импортировать или экспортировать. Правда формат у .xml, который создает microsoft office особенный, пока его не понял. Но зато быстро и просто :-)

  • Vlad пишет:

    Орион, незнаю, я обычно окно Execl пользователю не показываю пока программа пашет — не сказал бы, чтобы уж такие дикие тормоза были, особенно если в отдельный поток работу с Excel засунуть. Пока никто не жалуется

  • Алексадр пишет:

    Всё супер, только еслиб в начало и конец каждой статьи добавить  ссылку на предыдущую и следующую статью — было замечательно!!!!

  • Maks пишет:

    Подскажите, как можно отловить изменения данных в excel?

  • Vlad пишет:

    Через обработку его (Excel) событий. Как это можно легко сделать в Delphi — понятия не имею. В С# делается буквально в пару строк кода.

  • dzlib пишет:

    Слишком поверхностно и методы не очень полезные описаны. Надеюсь в следующей статье найду то что мне нужно :D

  • Vlad пишет:

    dzlib,ну незнаю найдётся ли =) Про Excel уже давненько ничего не писАл…да и чего там писать-то осталось? MSDN на русском есть=)

  • dzlib пишет:

    Точно Действительно, все время забываю про кладец знаний от MS

Ваш ответ

Внимание: Все комментарии модерируются, и это может вызвать задержку их публикации. Отправлять комментарий заново не требуется.

Пожалуйста, заключайте исходный код в тэги [code][/code].
Если код большой, то воспользуйтесь Вставкой кода на отдельной странице и оставьте в комментарии ссылку на исходник

   


теплоизоляционные материалы для пола