В данном обзоре рассмотрены основные конструкции, позволяющие получить доступ к книге Excel из DELPHI.
Организация доступа к книге EXCEL
Для взаимодействия с MS excel в
программе необходимо использовать
модуль ComObj
uses ComObj;
и объявить переменную для доступа к MS excel
следующего типа:
var Excel: Variant;
Инициализация переменной Excel в
простейшем случае можно осуществить так:
Excel:=
CreateOleObject("Excel.Application");
Создание новой книги:
Excel.Workbooks.Add;
Открытие существующей книги (где
path
- путь к фалу с
расширением xls.):
Excel.Workbooks.Open;
Открытие существующей книги
только для чтения:
Excel.Workbooks.Open;
Закрытие Excel:
Excel.ActiveWorkbook.Close;
Excel.Application.Quit;
Блокировка запросов (подтвеждений,
уведомлений) Excel, например, запретить
запрос на сохранение файла:
Excel.DisplayAlerts:=False;
Отображаем Excel на экране:
Excel.Visible:= True;
или скрываем:
Excel.Visible:= False;
Печать содержимого активного
листа excel:
Excel.ActiveSheet.PrintOut;
Чтение/запись данных в EXCEL
Доступ к ячейке в текущей книге
Excel можно осуществить следующим образом:
Excel.Range["B2"]:="Привет!";
-
для записи значения в ячейку или
s:=Excel.Range["B2"];
- для
чтения,
где B2
- адрес ячейки.
Или используя стиль ссылок R1C1:
Excel.Range]:="Привет!";
,
где
- координата ячейки.
Вообще, ячейке Excel можно присваивать любое значение (символьное, целое, дробное, дата) при этом Excel установит форматирование в ячейке применяемое по умолчанию.
Формат ячеек в EXCEL
Выделить (выбрать) группу ячеек
для последующей работы можно так:
Excel.Range,
Excel.Cells].Select;
или
Excel.Range["A1:C5"].Select;
при этом будет выделена область
находящаяся между ячейкой A1 и C5.
После выполнения выделения
можно установить:
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) граница для ячеек
При значении 1 границы ячеек рисуются
тонкими сплошными линиями.
Кроме этого можно указать значения для
свойства Borders, например, равное 3. Тогда
установится только верхняя граница для
блока выделения:
Excel.Selection.Borders.LineStyle:=1;
Значение свойства Borders задает различную
комбинацию граней ячеек.
В обоих случаях можно использовать
значения в диапазоне от 1 до 10.
Использование паролей в EXCEL
Установка пароля для активной
книги может быть произведена следующим
образом:
try
// попытка установить пароль
Excel.ActiveWorkbook.protect("pass");
except
// действия при неудачной попытке
установить пароль
end;
где pass - устанавливаемый пароль на книгу.
Снятие пароля с книги
аналогично, использовуем команду
Excel.ActiveWorkbook.Unprotect("pass");
Установка и снятие пароля для
активного листа книги Excel производится
командами
Excel.ActiveSheet.protect("pass"); // установка
пароля
Excel.ActiveSheet.Unprotect("pass"); // снятие пароля
где pass - пароль, установленный для защиты
книги.
Вспомогательные операции в EXCEL
Удаление строк со сдвигом
вверх:
Excel.Rows["5:15"].Select;
Excel.Selection.Delete;
при выполнении данных действий будут
удалены строки с 5 по 15.
Установка закрепления области
на активном листе Excel
// снимаем
закрепление области, если оно было задано
Excel.ActiveWindow.FreezePanes:=False;
// выделяем нужную ячейку, в
данном случае D3
Excel.Range["D3"].Select;
// устанавливаем
закрепление области
Excel.ActiveWindow.FreezePanes:=True;
Удачной работы!
В данном обзоре рассмотрены основные конструкции, позволяющие получить доступ к книге Excel из Delphi.
Организация доступа к книге EXCEL
Для взаимодействия с MS excel в программе необходимо использовать модуль ComObj и объявить переменную для доступа к MS Excel вариантного типа.
uses ComObj;
var Excel: Variant;
Инициализацию переменной Excel в простейшем случае можно осуществить так:
Excel:= CreateOleObject("Excel.Application");
Создание новой книги:
Excel.Workbooks.Add;
Открытие существующей книги (где path - путь к фалу с расширением xls.):
Excel.Workbooks.Open;
Открытие существующей книги только для чтения:
Excel.Workbooks.Open;
Закрытие Excel:
Excel.ActiveWorkbook.Close;
Excel.Application.Quit;
Блокировка запросов (подтвеждений, уведомлений) Excel, например, запретить запрос на сохранение файла:
Excel.DisplayAlerts:=False;
Отображаем или скрываем Excel на экране:
Excel.Visible:= True;
Excel.Visible:= False;
Печать содержимого активного листа Excel:
Excel.ActiveSheet.PrintOut;
Чтение/запись данных в EXCEL
Доступ к ячейке в текущей книге Excel можно осуществить следующим образом:
Excel.Range["b2"]:="Привет!"; // запись значения в ячейку
s:=Excel.Range["b2"]; // чтение значения из ячейки
Где b2 - адрес ячейки.
Или используя стиль ссылок R1C1:
Excel.Range]:="Привет!";
Где - координата ячейки.
Вообще, ячейке Excel можно присваивать любое значение (символьное, целое, дробное, дата) при этом Excel установит форматирование в ячейке применяемое по умолчанию.
Формат ячеек в EXCEL
Выделить (выбрать) группу ячеек для последующей работы можно так:
Excel.Range, Excel.Cells].Select;
// либо
Excel.Range["A1:C5"].Select;
При этом будет выделена область находящаяся между ячейкой A1 и C5.
После выполнения выделения можно установить:
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) Граница для ячеек:
При значении 1 границы ячеек рисуются тонкими сплошными линиями.
Кроме этого можно указать значения для свойства Borders, например, равное 3. Тогда установится только верхняя граница для блока выделения:
Excel.Selection.Borders.LineStyle:=1;
Значение свойства Borders задает различную комбинацию граней ячеек.
В обоих случаях можно использовать значения в диапазоне от 1 до 10.
Использование паролей в EXCEL
Установка пароля для активной книги может быть произведена следующим образом:
try
// попытка установить пароль
Excel.ActiveWorkbook.protect("pass");
except
// действия при неудачной попытке установить пароль
end;
Где pass - устанавливаемый пароль на книгу.
Снятие пароля с книги аналогично, использовуем команду
Excel.ActiveWorkbook.Unprotect("pass");
Установка и снятие пароля для активного листа книги Excel производится командами
Excel.ActiveSheet.protect("pass"); // установка пароля
Excel.ActiveSheet.Unprotect("pass"); // снятие пароля
Где pass - пароль, установленный для защиты книги.
Вспомогательные операции в EXCEL
Удаление строк со сдвигом вверх (при выполнении данных действий будут удалены строки с 5 по 15):
Excel.Rows["5:15"].Select;
Excel.Selection.Delete;
Установка закрепления области на активном листе Excel:
// снимаем закрепление области, если оно было задано
Excel.ActiveWindow.FreezePanes:=False;
// выделяем нужную ячейку, в данном случае D3
Excel.Range["D3"].Select;
// устанавливаем закрепление области
Excel.ActiveWindow.FreezePanes:=True;
Работа с EXCEL из Delphi
В этой статье я познакомлю вас как работать с MS Excel из Delphi . Данная статья может быть полезна людям, которые хотят научиться создавать различные отчеты в Excel из программ написанных на Delphi . Статья содержит справочные данные необходимые для работы с MS Excel . Здесь вы найдете информацию о том как:
Подключить и правильно отключить интерфейс Excel;
- Как изменить размер, цвет и тип шрифта;
- Как выделить, объединить, заполнить и размножить диапазон ячеек;
- Как повернуть и отцентрировать текст;
- Как нарисовать границы ячеек;
- Как ввести формулу в ячейку и многое другое...
И так, начнем...
Работать будем через модуль ComObj, для этого в uses необходимо добавить модуль ComObj и модуль Excel_TLB (для MS Excel 2007 ).
Uses ……, ComObj, Excel_TLB;
Модуль Excel_TLB
содержит необходимые константы
для работы с Excel
, его можно не подключать, но тогда придется в ручную прописывать значения всех используемых констант из этого модуля. Значения констант можно найти внутри модуля или в интернете, но для разных версий MS Excel
они разные.
Внимание!!!
Модуль Excel_TLB
в других версиях MS Excel
может называться по другому. Перед подключением модуля Excel_TLB,
необходимо импортировать библиотеку Excel
. Для этого выберите Component->Import Component->Import a Type Library->
находим MS Excel
и следуем инструкциям.
В разделе описания переменных мы должны описать переменную типа Variant или OleVariant для подключения интерфейса Excel. Я описал переменную excel .
Form1: TForm1;
excel
: variant;
// Переменная в которой создаётся объект EXCEL
Создание документа
Внимание!!!
Всегда когда создаете объект интерфейса, заключайте процедуру создания в модуль обработки ошибок:
try
создаем интерфейс;
формируем отчет;
освобождаем интерфейс;
Except
обрабатываем ошибки;
освобождаем интерфейс;
end;
try
// создаем обьект EXCEL
// Чтоб не задавал вопрос о сохранении документа
excel.DisplayAlerts:= false;
// создаем новый документ
рабочую книгу
excel.WorkBooks.Add;
// или загружаем его из директории с программой
excel.WorkBooks.Open(GetCurrentDir() + "\отчет.xls");
{ GetCurrentDir()- возвращает путь к директории с программой}
// Делаем его видимым
данную функцию после отладки и тестирования лучше использовать в конце, после сформирования отчета (это ускоряет процесс вывода данных в отчет)
excel.Visible:= true;
//задаем тип формул в формате R1C1
excel.Application.ReferenceStyle:= xlR1C1;
// задаем тип формул в формате A1
excel.Application.ReferenceStyle:= xlA1;
// Задаем название первому и второму листу
excel.WorkBooks.WorkSheets.Name:= "Отчет1";
excel.WorkBooks.WorkSheets.Name:= "Отчет2";
//задаем формат числа для первой и четвертой колонки формат числа
excel.WorkBooks.WorkSheets.Columns.NumberFormat:= "0,00";
excel.WorkBooks.WorkSheets.Columns.NumberFormat:= "0,0";
// задаем ширину первой и второй колонки
excel.WorkBooks.WorkSheets.Columns.ColumnWidth:= 10;
excel.WorkBooks.WorkSheets.Columns.ColumnWidth:= 20;
// задаем начертание, цвет, размер и тип шрифта для первого ряда
excel.WorkBooks.WorkSheets.Rows.Font.Bold:= True; //жирный
excel.WorkBooks.WorkSheets.Rows.Font.Color:= clRed; // цвет красный
excel.WorkBooks.WorkSheets.Rows.Font.Size:= 12; //размер 12
excel.WorkBooks.WorkSheets.Rows.Font.Name:= "Times New Roman"; //шрифт
//присваиваем ячейке 1,4 и 2,4 значения (1 - ряд, 4 - колонка)
excel.WorkBooks.WorkSheets.Cells := "А так можно внести значение в ячейку";
excel.WorkBooks.WorkSheets.Cells := "А так можно внести значение в ячейку";
//ввод в ячейку "A12" формулы "=b5+c4"
excel.WorkBooks.WorkSheets.Range["A12"].Formula:="=b5+c4";
// Выравнивам первый ряд по центру по вертикали
excel.WorkBooks.WorkSheets.Rows.VerticalAlignment:= xlCenter;
// Выравнивам первый ряд по центру по горизонтали
excel.WorkBooks.WorkSheets.Rows.HorizontalAlignment:= xlCenter;
// Выравнивам в ячейке по левому краю
excel.WorkBooks.WorkSheets.Cells.HorizontalAlignment:= xlLeft;
// Выравнивам в ячейке по правому краю
excel.WorkBooks.WorkSheets.Cells.HorizontalAlignment:= xlRight;
// Обьединяем ячейки "A1:A8"
excel.WorkBooks.WorkSheets.Range["A1:A8"].Merge;
// Поворачиваем слова под углом 90 градусов для второго ряда
excel.WorkBooks.WorkSheets.Rows.Orientation:= 90;
// Поворачиваем слова под углом 45 градусов для диапазона ячеек "B3:D3"
excel.WorkBooks.WorkSheets.Range["B3:D3"].Orientation:= 45;
//рисуем границы выделенного диапазона левая
excel.Selection.Borders.LineStyle:= xlContinuous; // стиль линии сплошная
excel.Selection.Borders.Weight:= xlMedium;// толщина линии
//рисуем границы выделенного диапазона верхняя
excel.Selection.Borders.Weight:= xlMedium;
//рисуем границы выделенного диапазона нижняя
excel.Selection.Borders.Weight:= xlMedium;
//рисуем границы выделенного диапазона правая
excel.Selection.Borders.Weight:= xlMedium;
//рисуем границы выделенного диапазона вертикальные внутрениие
excel.Selection.Borders.Weight:= xlMedium;
//рисуем границы выделенного диапазона горизонтальные внутрениие
excel.Selection.Borders.Weight:= xlMedium;
//автозаполнение выделенного диапазона
//для примера заполним область ячеек "A10:C10" словом "привет"
//и размножим его вниз еще на пять ячеек "A10:C15"
excel.WorkBooks.WorkSheets.Range["A10:C10"].Value:="привет";
//выделяем диапазон ячеек "A10:C10"
excel.WorkBooks.WorkSheets.Range["A10:C10"].Select;
//автозаполняем (копируем) выделенным диапазоном область ячеек "A10:C15"
excel.selection.autofill(excel.WorkBooks.WorkSheets.Range["A10:C15"],xlFillDefault);
//отключаем предупреждения, чтобы не задавал вопросов о сохранении и других
excel.DisplayAlerts:= False;
//сохраняем документ в формате Excel 97-2003
excel.ActiveWorkBook.Saveas(GetCurrentDir() + "\отчет.xls",xlExcel8);
//сохраняем документ в текущем формате Excel 2007
excel.ActiveWorkBook.Saveas(GetCurrentDir() + "\отчет.xlsx");
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
excel:= Unassigned;
//обрабатываем ошибки
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
excel:= Unassigned;
end;
end;
При работе с листом Excel
мы можем использовать следующие варианты:
- работать с областью Range["B3:D3"];
- работать с ячейкой Cells где 2 - ряд, 4 - колонка;
- работать с рядами Rows или с диапазоном рядов Rows["1:5"];
- работать с колонками Columns или диапазоном колонок Columns["A:I"];
Range["A1"] и Cells обозначают одно и тоже.
После сформирования документа или возникновении ошибки вы должны правильно освободить интерфейсы.
Иначе при закрытии Excel
он скрывается с экрана, но если открыть диспетчер задач он продолжает там висеть и если данный процесс не завершить, то при каждом новом запуске их будет накапливаться больше и больше, пока компьютер не начнет виснуть. Поэтому обязательно необходимо освобождать все интерфейсы с вязанные с Excel
с его книгами и листами.
Например так:
//закроем все книги
excel.Workbooks.Close;
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
sheet:=Unassigned; //интерфейс листа если он был создан
WorkBook:= Unassigned;//интерфейс рабочей книги если он был создан
excel:= Unassigned;//интерфейс самого предложения если он был создан
Ниже привожу пример вывода в Excel из Delphi таблицы умножения с подробными комментариями.
Unit Unit1;
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, comobj, StdCtrls, Excel_TLB;
Type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Var
Form1: TForm1;
excel: variant; // Переменная в которой создаётся объект EXCEL
MyData: variant; // Переменная в которой формируется таблица умножения
i,j:integer;
implementation
Procedure TForm1.Button1Click(Sender: TObject);
begin
try
// Обьект EXCEL
excel:= CreateOleObject("Excel.Application");
// Чтоб не задавал вопрос о сохранении документа
excel.DisplayAlerts:= false;
// новый документ
excel.WorkBooks.Add;
//объявляем вариантный массив
MyData:= VarArrayCreate(,varVariant);
for I:= 1 to 9 do
for J:= 1 to 9 do
MyData:=i*j;
// Обьединяем ячейки "A1:I1"
excel.WorkBooks.WorkSheets.Range["A1:I1"].Merge;
//Пишем заголовок
excel.WorkBooks.WorkSheets.Range["A1"].Value:="Таблица умножения";
// Выравнивам заголовок по центру
excel.WorkBooks.WorkSheets.Range["A1"].HorizontalAlignment:= xlCenter;
// задаем ширину колонок с A по I
excel.WorkBooks.WorkSheets.Columns["A:I"].ColumnWidth:= 3;
//выделяем область таблицы умножения ["A2:I10"] и рисуем границы
excel.WorkBooks.WorkSheets.Range["A2:I10"].select;
//рисуем границы выделенного диапазона левая
excel.Selection.Borders.LineStyle:= xlContinuous; // стиль линии сплошная
excel.Selection.Borders.Weight:= xlThin;// толщина линии
//рисуем границы выделенного диапазона верхняя
excel.Selection.Borders.LineStyle:= xlContinuous;
excel.Selection.Borders.Weight:= xlThin;
//рисуем границы выделенного диапазона нижняя
excel.Selection.Borders.LineStyle:= xlContinuous;
excel.Selection.Borders.Weight:= xlThin;
//рисуем границы выделенного диапазона правая
excel.Selection.Borders.LineStyle:= xlContinuous;
excel.Selection.Borders.Weight:= xlThin;
//рисуем границы выделенного диапазона вертикальные внутрениие
excel.Selection.Borders.LineStyle:= xlContinuous;
excel.Selection.Borders.Weight:= xlThin;
//рисуем границы выделенного диапазона горизонтальные внутрениие
excel.Selection.Borders.LineStyle:= xlContinuous;
excel.Selection.Borders.Weight:= xlThin;
//присваиваем диапазону ["A2:I10"] значения вариантного массива MyData это значительно ускоряет работу, нежели вывод по //ячеечно
Excel.WorkBooks.WorkSheets.Range["A2:I10"].Value:=MyData;
// Делаем его видимым
excel.Visible:= true;
//освобождаем интерфейсы
MyData:= Unassigned;
excel:= Unassigned;
Except
showmessage("Внимание! Произошла ошибка при создании MS Excel приложения");
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
MyData:= Unassigned;
excel:= Unassigned;
end;
end;
При написании статьи использовался материал с сайта
На каждой из ступеней этой модели можно останавливаться и изучать её месяцами. Если будет особая необходимость в изучении каких-либо дополнительных свойств и методов - мы обязательно вернемся и изучим. А теперь, приступим к работе в Delphi с листами рабочей книги.
2. Как активировать лист рабочей книги Excel?
Как Вы знаете при создании пустой рабочей книги Excel автоматически добавляет в эту книгу 3 пустых листа. Чтобы работать с конкретным листом (WorkSheet или просто Sheet ) этот лист необходимо активировать. Один из способов активации листа рабочей книги Excel в Delphi выглядит следующим образом:
resourcestring rsEInvalidSheetIndex = "Задан неверный индекс для WorkBooks. Активация листа прервана" ; rsEInvalidSheetActivate = "Активация листа завершена с ошибкой" ; function ActivateSheet(WBIndex: integer ; SheetName: string ) : boolean ; var i: integer ; begin Result : = false ; if WBIndex > MyExcel. WorkBooks . Count then raise Exception. Create (rsEInvalidSheetIndex) ; try 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 ; except raise Exception. Create (rsEInvalidSheetActivate) ; end ; end ;
Здесь в качестве параметров функции задается индекс рабочей книги (WBIndex) в коллекции WorkBooks и название листа.
Если хотите, то можете активировать тот же лист по индексу в коллекции WorkSheets - при этом сама функция немного упрощается (не требуется условие проверки названия листа).
Также, если вы уверены, что в данный момент времени активна необходимая Вам рабочая книга, то можно избежать использования лишней переменной (индекса рабочей книги WBIndex) и активировать лист вот так:
MyExcel. ActiveWorkBook . Sheets . Item [ i] . Activate ;
Теперь рассмотрим более подробно методы, используемые объектом WorkSheet .
3. Методы листа книги Excel
Теперь рассмотрим более подробно объект WorkSheet .
На рисунке представлены те методы, которые я когда-либо использовал в своей работе.
Всего объект WorkSheet насчитывает 30 различных методов, которые Вы можете использовать.
Метод | Описание |
Activate | Делает текущий лист активным. Работу метода мы уже с Вами рассмотрели |
рассчитывает все открытые книги, конкретный лист в книге, или указанный диапазон ячеек на листе | |
проверка орфографии на выбранном листе | |
сохраняет все изменения в файле | |
удаляет текущий лист WorkSheet | |
выделение листа | |
копирует лист в другое место в рабочей книге | |
вставляет содержимое буфера обмена на лист | |
возвращает объект, который представляет собой либо одну диаграмму (объект ChartObject ChartObjects ) на листе | |
перемещение листа. Этот метод аналогичен методу Copy . Различие лишь в том, что после вcтавки копируемый лист удаляется из книги |
Рассмотрим теперь каждый из представленных выше методов.
Ниже, в качестве expression должен выступать лист (WorkSheet ), если не сказано иное.
Метод Calculate
Расчёт рабочей книги, листа или диапазона ячеек.
Стоит отметить, что вызов метода Calculate возможен не только для конкретного рабочего листа книги Excel. Рассмотрим варианты вызова метода Calculate.
var MyExcel: OleVariant; MyExcel. Calculate
в приведенном ниже фрагменте кода рассчитывается активный лист
MyExcel. ActiveWorkBook . ActiveWorkSheet . Calculate
Рассчитаем все формулы в столбцах A, B и C:
MyExcel. ActiveWorkBook . ActiveWorkSheet . UsedRange . Columns ("A: C") . Calculate
Метод CheckSpelling
Вызов метода выглядит следующим образом:
expression . CheckSpelling(CustomDictionary, IgnoreUppercase, AlwaysSuggest, SpellLang)При этом в качестве expression должен выступать лист (WorkSheet ).
Параметр | Тип | Описание |
CustomDictionary | Variant | с трока, указывающая имя файла пользовательского словаря, который будет рассмотрен, если слово не найдено в основном словаре. Если этот аргумент опущен, то будет использоваться словарь по-умолчанию |
IgnoreUppercase | Variant | True , если необходимо, чтобы Microsoft Excel пропускал слова, которые написаны прописными буквами. False для того, чтобы Microsoft Excel проверить все слова. Если этот аргумент опущен, то используются текущие настройки Excel. |
AlwaysSuggest | Variant | True , для того, чтобы Microsoft Excel отображал список предложений других вариантов написания при обнаружении неправильного написанного слова. False , чтобы Microsoft Excel ожидал ввода правильного написание. Если этот аргумент опущен, то используются текущие настройки. |
SpellLang | Variant | язык словаря. Может принимать значения одной из констант MsoLanguageID , например для русского языка SpellLang = 1049 , для английского (США) SpellLang = 1033 и т.д. Более подробно про идентификаторы языков . |
Как проверить грамматику на листе Excel в Delphi?
MyExcel. ActiveWorkBook . ActiveWorkSheet . CheckSpelling (CustomDictionary: = EmptyParam, IgnoreUppercase: = false , AlwaysSuggest: = EmptyParam, SpellLang: = 1033 )
в этом случае MS Excel проверит текущий лист, включая проверку слов из прописных букв. Язык проверки - русский. Обратите внимание, что для того, чтобы вызвать метод мы явно указывали, какому параметру какое значение присвоить. Причём для того, чтобы пропустить какой-либо параметр, мы использовали EmptyParam (пустой параметр), который в Delphi представляет собой переменную типа OleVariant .
Понятно, что подобный способ вызова методов (с явным указанием всех параметров) для Вас не совсем удобен и широко не практикуется в программировании на Delphi , но тем не менее только так и никак иначе можно вызывать методы, используемые в Excel .
Метод SaveAs
Сохранение рабочего листа книги Excel.
Вызов метода:
expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru,TextCodepage, TextVisualLayout, Local)Параметр | Тип | Описание |
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. Значение True - сохранение файлов с языковыми Microsoft Excel (в том числе настройки панели управления). |
MyExcel.ActiveWorkBook.ActiveWorkSheet.SaveAs("C\:MyExcelFile.xls")
В этом случае при сохранении будут использованы настройки по умолчанию.
Если Вам необходимо сохранить файл 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 в различных форматах:
const xlCSV = 6 ; xlExcel8 = 56 ; xlHtml = 44 ; xlOpenDocumentSpreadsheet = 60 ; xlOpenXMLWorkbook = 51 ; resourcestring rsESaveActiveSheet = "Ошибка сохранения активного листа книги" ; procedure SaveAs(const AFileName: TFileName; AFileFormat: integer ) ; begin try MyExcel. ActiveWorkBook . ActiveSheet . SaveAs (AFileName, AFileFormat) ; except raise Exception. Create (rsESaveActiveSheet) ; end ; end ;
Метод Delete
Удаление рабочего листа Excel.
MyExcel.ActiveWorkBook.WorkSheets.Item.Select
Выделяет третий лист книги
Метод Copy
Копирование листа в другое место в рабочей книге.
Вызов метода:
expression.Copy(Before, After)При этом, если вы используете параметр Before , то вы не должны использовать After и наоборот. Обращу Ваше внимание, что указывается именно ЛИСТ, а не индекс листа.
Как копировать лист Excel в Delphi?
MyExcel.ActiveWorkBook.WorkSheets.Item.Copy(After:=MyExcel.ActiveWorkBook.WorkSheets.Item)
В этом случае первый лист будет скопирован и вставлен после третьего.
Метод Paste
Вставка содержимого буфера обмена на лист Excel.
Вызов метода:
expression.Paste(Destination, Link)Как вставить содержимое буфера обмена на лист Excel в Delphi?
MyExcel.ActiveWorkBook.ActiveSheet.Paste(Destination:=MyExcel.ActiveWorkBook.ActiveSheet.Range("D1:D5"))
В этом случае содержимое буфера будет вставлено в столбец D в строки с 1 по 5. Следует отметить, что если содержимое буфера не удовлетворяет условию, например в буфере только 1 число, то вызывается исключительная ситуация.
Метод ChartObjects
Возвращает объект, который представляет собой либо одну диаграмму (объект ChartObject ) или совокупность всех диаграмм (объект ChartObjects ) на листе.
Вызов метода:
expression.ChartObjectsКак получить диаграмму на листе Excel в Delphi?
MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects
В этом случае будет получена первая .
Метод Move
Перемещение листа. Этот метод аналогичен методу . Различие лишь в том, что после вcтавки копируемый лист удаляется из книги.
Вот та часть методов, которые я использовал когда-либо при работе с Excel в Delphi . Вообще можно сказать, что в Delphi можно управлять MS Excel не хуже, чем при непосредственной работе с этим приложением, главное не забывать, какой метод или свойство за что отвечает:). Ну, а для того, чтобы не забыть, я создал небольшой MindMap , который буду периодически дополнять и обновлять. Перейдя по ссылке, Вы сможете посмотреть объекты Excel, методы ими используемые, параметры методов и их типы в соответствии с типами Delphi. В общем небольшая графическая шпаргалка для любителей поразбираться с Excel в Delphi.
В этой статье мы рассмотрим основные конструкции, позволяющие получить доступ к книге MS Excel из Delphi.
Организация доступа к книге EXCEL
Для взаимодействия с MS Excel в программе необходимо использовать модуль ComObj
Uses ComObj;
и объявить переменную для доступа к MS Excel следующего типа:
Var MsExcel: Variant;
Инициализация переменной Excel в простейшем случае можно осуществить так:
MsExcel:= CreateOleObject("Excel.Application");
Создание новой книги:
MsExcel.Workbooks.Add;
Открытие существующей книги (где path - путь к фалу с расширением xls.):
MsExcel.Workbooks.Open;
Открытие существующей книги только для чтения:
MsExcel.Workbooks.Open;
Закрытие Excel:
MsExcel.ActiveWorkbook.Close; MsExcel.Application.Quit;
Блокировка запросов (подтверждений, уведомлений) Ms Excel, например, запретить запрос на сохранение файла:
MsExcel.DisplayAlerts:=False;
Отображаем Excel на экране:
MsExcel.Visible:= True;
или скрываем:
MsExcel.Visible:= False;
Печать содержимого активного листа MS Excel:
MsExcel.ActiveSheet.PrintOut;
Чтение/запись данных в EXCEL
Доступ к ячейке в текущей книге Excel можно осуществить следующим образом:
Для записи значения в ячейку:
MsExcel.Range["B2"]:="Привет!";
Для чтения значения из ячейки:
S:=MsExcel.Range["B2"];
где B2 - адрес ячейки.
Или используя стиль ссылок R1C1:
MsExcel.Range]:="Привет!";
где - координата ячейки.
Вообще, ячейке Excel можно присваивать любое значение (символьное, целое, дробное, дата) при этом Ms Excel установит форматирование в ячейке применяемое по умолчанию.
Формат ячеек в EXCEL
Выделить (выбрать) группу ячеек для последующей работы можно так:
MsExcel.Range, MsExcel.Cells].Select; // или MsExcel.Range["A1:C5"].Select;
при этом будет выделена область находящаяся между ячейкой A1 и C5.
После выполнения выделения можно установить объединение ячеек, перенос по словам, а также горизонтальное и вертикальное выравнивание:
// объединение ячеек MsExcel.Selection.MergeCells:=True; // перенос по словам MsExcel.Selection.WrapText:=True; // горизонтальное выравнивание MsExcel.Selection.HorizontalAlignment:=3; // вертикальное выравнивание MsExcel.Selection.VerticalAlignment:=1;
Для вертикального и горизонтального выравнивания используются следующие значения:
1 - используется выравнивание по умолчанию
2 - выравнивание слева
3 - по центру
4 - справа.
Граница ячеек
При значении 1 границы ячеек рисуются тонкими сплошными линиями.
Кроме этого можно указать значения для свойства Borders, например, равное 3. Тогда установится только верхняя граница для блока выделения:
MsExcel.Selection.Borders.LineStyle:=1;
Значение свойства Borders задает различную комбинацию граней ячеек. В обоих случаях можно использовать значения в диапазоне от 1 до 10.
Использование паролей в EXCEL
Установка пароля для активной книги может быть произведена следующим образом:
Try // попытка установить пароль MsExcel.ActiveWorkbook.protect("pass"); except // действия при неудачной попытке установить пароль end;
где pass - устанавливаемый пароль на книгу.
Снятие пароля с книги аналогично, используем команду
MsExcel.ActiveWorkbook.Unprotect("pass");
где pass
Установка и снятие пароля для активного листа книги Excel производится командами
MsExcel.ActiveSheet.protect("pass"); // установка пароля MsExcel.ActiveSheet.Unprotect("pass"); // снятие пароля
где pass - пароль, установленный для защиты книги.
Вспомогательные операции в EXCEL
Удаление строк со сдвигом вверх:
MsExcel.Rows["5:15"].Select; MsExcel.Selection.;
при выполнении данных действий будут удалены строки с 5 по 15.
Установка закрепления области на активном листе Excel
// снимаем закрепление области, если оно было задано MsExcel.ActiveWindow.FreezePanes:=False; // выделяем нужную ячейку, в данном случае D3 MsExcel.Range["D3"].Select; // устанавливаем закрепление области MsExcel.ActiveWindow.FreezePanes:=True;
Сохранение активной книги Excel