Top-office11.ru

IT и мир ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Delphi excel worksheets

6.4.3 Работа с листами книги Excel стр.1

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 указывает возможность внесения изменений при просмотре. Например, следующий оператор обеспечивает при работе с серверами СОМ предварительный просмотр активного листа книги:

(ExcelApplicationl.ActiveSheet as ExcelWorksheet).

Для серверов OLE аналогичный оператор имеет вид:

Excel в Delphi. Методы объекта WorkSheet (лист).

В прошлые раз мы с Вами остановились на сохранении рабочей книги. В принципе, ничего сложного в запуске 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).

ПараметрТипОписание
CustomDictionaryVariantстрока, указывающая имя файла пользовательского словаря, который будет рассмотрен, если слово не найдено в основном словаре. Если этот аргумент опущен, то будет использоваться словарь по-умолчанию
IgnoreUppercaseVariantTrue, если необходимо, чтобы Microsoft Excel пропускал слова, которые написаны прописными буквами. False для того, чтобы Microsoft Excel проверить все слова. Если этот аргумент опущен, то используются текущие настройки Excel.
AlwaysSuggestVariantTrue, для того, чтобы Microsoft Excel отображал список предложений других вариантов написания при обнаружении неправильного написанного слова. False, чтобы Microsoft Excel ожидал ввода правильного написание. Если этот аргумент опущен, то используются текущие настройки.
SpellLangVariantязык словаря. Может принимать значения одной из констант MsoLanguage >

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

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

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

Метод SaveAs

Сохранение рабочего листа книги Excel.

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

ПараметрТипОписание
FileNameVariantстрока, представляющая собой имя сохраняемого файла. Необходимо указывать полный путь к файлу, иначе файл будет сохранен в папку Excel.
FileFormatVariantформат файла, который используется при сохранении. По умолчанию файл сохраняется в формате, который вы выбирали в последний раз в Excel.
PasswordVariantпароль для файла (не более 15 символов). Пароль чувствителен к регистру.
WriteResPasswordVariantпароль, который будет использоваться для внесения изменений в рабочую книгу. Если пароль не будет указан, то книга будет открыта в режиме «Только для чтения»
ReadOnlyRecommendedVariantесли параметр равен True , то при открытии файла на дисплее появится сообщение, в котором рекомендуется, что бы файл был открыт только для чтения.
CreateBackupVariantTrue , для того, чтобы создать резервный файл
AddToMruVariantTrue , для того, чтобы добавить имя сохраняемого файла в список недавно открытых файлов в главном меню Excel
TextCodepage и TextVisualLayoutVariantв настоящее время не используются и сохранены для обеспечения обратной совместимости
LocalVariantне обязательный параметр, по-умолчанию равен False. Значение True — сохранение файлов с языковыми Microsoft Excel (в том числе настройки панели управления).

Как сохранить активный лист рабочей книги Excel в Delphi?

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

Если Вам необходимо сохранить файл Excel в другом формате, то в параметре FileFormat можно использовать одно из значений перечислителя xlFileFormat. Некоторые значения xlFileFormat представлены в таблице ниже:

ИмяЗначениеОписаниеРасширение файла
xlCSV6CSV*.csv
xlExcel856Книга Excel 97-2003*.xls
xlHtml44Формат HTML*.htm; *.HTML
xlOpenDocumentSpreadsheet60Электронная таблица OpenDocument*.ods
xlOpenXMLWorkbook51Книга Open XML*.xlsx

Как сохранить активный лист рабочей книги Excel в заданном формате?

Напишем небольшую процедуру, позволяющую сохранять лист Excel в различных форматах:

ASD-SOFT

Программирование. Теория и практика.

Обмен данными с MS Excel в Delphi при помощи OLE.

Обмен данными с MS Excel в Delphi при помощи OLE.

Здравствуйте уважаемые коллеги!

Все мы рано или поздно сталкиваемся с задачами обмена данных с приложениями пакета MS Office. Одно из них — это MS Excel. И именно о взаимодействии с данным продуктом MS Office пойдет речь в данной статье.

Один из способов взаимодействия Delphi c MS Excel — это подключиться к нему как к OLE объекту.

Итак.
Прежде всего для работы с MS Excel и OLE добавим в секцию Uses модули ComObj и ActiveX.

И первое что нам нужно проверить, а установлен ли MS Excel на компьютере пользователя в принципе.
Для этого воспользуемся функцией CLSIDFromProgID, которая ищет в реестре CLSID для переданного ProgID:
Справка из MSDN: Метод CLSIDFromProgID
Параметры:
pszProgID: POleStr — Строка с именем объекта
clsid: TCLSID — Указатель на структуру TGUID в которую передается найденный объект;
Возвращает:
HRESULT — Результат, который может принимать значения:
S_OK — объект найден;
CO_E_CLASSSTRING — Зарегистрированный CLSID для ProgID является недействительным;
REGDB_E_WRITEREGDB — Ошибка записи CLSID в реестр.
Из перечисленных результатов нам нужен S_OK.
Напишем функию для определения наличия Excel у пользователя:

Если Excel установлен, тогда выполним подключение к нему. Сделать это можно двумя способами: GetActiveOleObject — Получить ссылку на уже запущенный экземпляр Excel или CreateOleObject — Создать новый экземпляр Excel.
Если у нас стоит задача получать данные из запущенного Excel, тогда мы должны использовать только первый вариант, в остальных случаях пробуем подключиться и если не получается, то создаем.
Напишем 2 функции, для подключения XlsConnect и запуска нового XlsStart:
Добавим переменную FXlsApp с типом Variant, которая будет содержать в себе ссылку на объект Excel.

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

По умолчанию окно Excel запускается в фоновом режиме. Строка FXlsApp.Visible := True; делает фоновое окно Excel видимым.

Окно Excel запускается пустое и в него нужно добавить рабочую книгу. Делается это при помощи метода WorkBooks.Add, который добавляет новую книгу или открывает ранее сохраненную, если указать путь к файлу.
Добавим процедуру, которая будет это делать:

Книга добавлена, теперь попробуем записать что-нибудь в неё.

Где Row — индекс строки, и Col — индекс столбца, которые начинаются с единицы.

Где Range — массив ячеек, а А1 — привычные для Excel координаты ячейки.
В качестве координат может быть указан диапазон. Например, код

заполнит цифрой 5 все ячейки с А3 по А10, а код

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

Выведет сообщение с содержимым ячейки с координатами: Строка=5, Столбец=1.

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

Где ActiveWorkbook — текущая книга.
И закрыть приложение Excel командой:

Как понимаете этим возможности управления Excel из Delphi не ограничиваются. И есть один достаточной простой способ узнать, как выполнить необходимо действие с Excel из Delphi.
Называется оно — Макросы.

Представим, что нам необходимо выполнить объединение нескольких ячеек в одну и мы не знаем как это сделать. Но хотим узнать. Для этого выполняем следующие шаги:
1. Запускаем Excel и создаем пустую книгу.
2. Запускаем команду «Записать макрос», по умолчанию название макроса будет «Макрос1». (В разных версиях Excel данная команда находится в разных пунктах меню).
3. Выделяем некоторый диапазон ячеек и нажимаем кнопку «Объединить и поместить в центре».
4. Останавливаем запись макроса.
5. Вызываем список макросов и выбираем там свой записанный макрос.
6. Нажимаем кнопку «Изменить»
Запускается редактор Microsoft Visual Basic for Application в котором видим код проделанных действий:

Давайте разберем по подробнее, что же такого он нам тут написал:
With Selection — Для выделенного диапазона ячеек настраиваем свойства:
HorizontalAlignment = xlCenter — Горизонтальная ориентация = по центру.
VerticalAlignment = xlBottom — Вертикальная ориентация — по нижнему краю.
WrapText = False — Перенос текста по словам — выключен.
Orientation = 0 — Ориентация 0 градусов.
AddIndent = False — Использование автоматического отступа вкл/выкл.
IndentLevel = 0 — Уровень отступа в 0.
ShrinkToFit = False — Сжимать текст по размерам столбца вкл/выкл.
ReadingOrder = xlContext — Порядок чтения по контексту.
MergeCells = False — Объединенные ячейки вкл/выкл
End With — Конец секции работы с выделенным диапазоном.
Selection.Merge — Объединить выделенный диапазон.

Теперь попробуем объединить ячейки из Delphi:

Выделяем нужный нам диапазон.

Объединяем ячейки задав свойство. Или при помощи метода:

Таким способом можно получать код практически для любых необходимых манипуляций.
А если какое-то свойство или метод вызывает вопросы, то можно воспользоваться справкой на MSDN.

Обратите внимание на особенность работы с массивами в VBA. Индексы в массивах в Delphi оборачиваются в квадратные скобки, в то время как в VBA они будут в круглых. И код в Delphi

в VBA будет выглядеть как

Ниже приведу небольшой FAQ по вопросу взаимодействия с Excel из Delphi

Как определить значения констант в Excel для использования в Delphi?

В редакторе VBA ставим точку остановки напротив интересующей константы. Нажимаем выполнить и когда выполнение остановиться, наводим на интересующую константу:

Как отключить выводы сообщений в Excel?

Как получить список книг из Excel?

Как отключить отображение сетки?

Как вывести текущий лист на предпросмотр печати?

Как выделить жирным часть текста в ячейки?

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

Как получить используемый диапазон ячеек?

Как получить букву столбца по индексу?

Delphi excel worksheets

Здравсвтвуйте уважаемые мастера.
Подскажите пожалуйста, как мне поработать с файлом Excel?
нужно, определить сколько листов всего в книге, сколько максимально заполнено в листе, (если такое конечно есть).

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

заанее большое спасибо


Lord Warlock ( 2002-11-04 15:15 ) [1]

Посмотри на королевстве Дельфи статьи «По волнам интергации. «


Карелин Артем ( 2002-11-04 15:28 ) [2]

Ето делается через коллекции интерфейсов:
.
var Excel:variant;
.
Excel:=CreateOleObject(«Excel.Application»);
Excel.Visible:=true;
.

WorkBooks[номер книги].WorkSheets.Сount-число листов.
WorkSheets[номер листа] — возвращает текущий лист.
WorkSheets[номер листа].Range.Cells[x,y].value — содержимое ячейки.

Если не понял — пиши, отвечу.


Mad_Ghost ( 2002-11-04 15:45 ) [3]

спасибо все, то, но как WorkBooks[номер книги].WorkSheets.Count;
получается?
т.е. его же определить надо.

и ещё, как можно открыть при этом файл, т.е. нужно файл открыть, и его уже парсить, за ответ благодарен. заранее 😉


Карелин Артем ( 2002-11-04 15:56 ) [4]

Про загрузку с ходу не могу выдать — все доки (сам делал) дома.

Открой файл excel.exe(2000& XP) или excel*.olb(более старые версии) как библиотеку типов из !дельфи! и там ищи в интерфейсе WorkBook.


¤NoNaMe¤ ( 2002-11-04 16:22 ) [5]

Вот пример:

var
cls_ExcelObject:string;
regData:TRegistry;
Excel,WorkSheet:OleVariant;
i,j:integer;
begin
cls_ExcelObject := «Excel.Application»;
//Определение установленной версии Exel
regData := TRegistry.Create;
regData.RootKey := HKEY_CLASSES_ROOT;
try
if regData.OpenKey(«Excel.ApplicationCurVer», False) then
begin
cls_ExcelObject := regData.ReadString(«»);
regData.CloseKey;
end
finally
regData.Free;
end;
//========================
try
Excel:=CreateOleObject(cls_ExcelObject);
Excel.Visible:=false;//Делаем невидимым
Excel.WorkBooks.Open(FileName);
WorkSheet:=Excel.WorkBooks[1].WorkSheets[1];
//Читаем содержимое в StringGrid
StringGr >StringGr >for i:=1 to WorkSheet.Cells.CurrentRegion.Columns.Count do
for j:=1 to WorkSheet.Cells.CurrentRegion.Rows.Count do
begin
StringGr >end;
//===============================
Excel.Workbooks.Close;


Mad_Ghost ( 2002-11-05 08:17 ) [6]

ух ты спасибо большое, ты общественности такое большое дело сделал, вовек не забуду, рулез. а не знаещь, где можно про все эти функции почитать, чтобы дополнить и без того полную картинку?

Ссылка на основную публикацию
Adblock
detector