Delphi выбрать весь лист в excel

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

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

План статьи:

  • Объекты Microsoft Excel
  • Как активировать лист рабочей книги Excel?
  • Методы  листа книги Excel

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

1. Объекты Microsoft Excel

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

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

WorkBook:=WorkBooks.Item[index]

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

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

На каждой из ступеней этой модели можно останавливаться и изучать её месяцами. Если будет особая необходимость в изучении каких-либо дополнительных свойств и методов — мы обязательно вернемся и изучим. А теперь, приступим к работе в 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 MethodsНа рисунке представлены те методы, которые я когда-либо использовал в своей работе.

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

Метод Описание
Activate Делает текущий лист активным. Работу метода мы уже с Вами рассмотрели
Calculate рассчитывает все открытые книги, конкретный лист в книге, или указанный диапазон ячеек на листе
CheckSpelling проверка орфографии на выбранном листе
SaveAs сохраняет все изменения в файле
Delete удаляет текущий лист WorkSheet
Select выделение листа
Copy копирует лист в другое место в рабочей книге
Paste вставляет содержимое буфера обмена на лист
ChartObjects возвращает объект, который представляет собой либо одну диаграмму (объект ChartObject) или совокупность всех диаграмм (объект ChartObjects) на листе
Move перемещение листа. Этот метод аналогичен методу Copy. Различие лишь в том, что после вcтавки копируемый лист удаляется из книги

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

Ниже, в качестве expression должен выступать лист (WorkSheet), если не сказано иное.

Метод Calculate

Расчёт рабочей книги, листа или диапазона ячеек.

Стоит отметить, что вызов метода Calculate возможен не только для конкретного рабочего листа книги Excel. Рассмотрим варианты вызова метода Calculate.

Как рассчитать все открытые в данный момент книги Excel в Delphi?

var MyExcel: OleVariant;
MyExcel.Calculate

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

в приведенном ниже фрагменте кода рассчитывается активный лист

MyExcel.ActiveWorkBook.ActiveWorkSheet.Calculate

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

Рассчитаем все формулы в столбцах 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 (в том числе настройки панели управления).

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

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 в заданном формате?

Напишем небольшую процедуру, позволяющую сохранять лист 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.ActiveWorkSheet.Delete

Метод Select

Выделение рабочего листа книги Excel.

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

expression.Select(Replace)
Параметр Тип Описание
Replace Variant True, чтобы заменить текущее выделение указанного объекта. False — продлить нынешний отбор включая все ранее выбранные объекты. По умолчанию используется True

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

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

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

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

Метод Copy

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

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

expression.Copy(Before, After)
Параметр Тип Описание
Before Variant  лист до которого будет вставлен копируемый лист.
After Variant лист после которого будет вставлен копируемый лист

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

Как копировать лист Excel в Delphi?

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

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

Метод Paste

Вставка содержимого буфера обмена на лист Excel.

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

expression.Paste(Destination, Link)
Параметр Тип Описание
Destination Variant диапазон ячеек листа, который определяет, где будет вставлено содержимое буфера. Если этот аргумент опущен, используется текущий диапазон. Этот аргумент может быть указан только, если содержимое буфера обмена можно вставить в заданном диапазоне. Если этот параметр задан, то аргумент Link может не указываться
Link Variant True, для того чтобы установить связь с источником вставляемых данных. Если этот параметр задан, Destination не может быть использован. Значение по умолчанию False

Как вставить содержимое буфера обмена на лист Excel в Delphi?

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

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

Метод ChartObjects

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

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

expression.ChartObjects[Index]
Параметр Тип Описание
index Variant индекс диаграммы в коллекции (нумерация начинается с 1)

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

MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects[1]

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

Метод Move

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

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

Книжная полка

Название:Разработка приложений Microsoft Office 2007 в Delphi

Описание Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi.

купить книгу delphi на ЛитРес

0
0
голоса

Рейтинг статьи

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

1 / 1 / 0

Регистрация: 28.10.2012

Сообщений: 168

1

31.12.2014, 16:18. Показов 8413. Ответов 11


Студворк — интернет-сервис помощи студентам

Как можно через делфи переключаться между листами в открытом Ексель ?
Т.е. проводятся какие то вычисления, и допустим итог этих вычислений равен 6, и соответственно нужно будет переключиться на лист с именем 6. (он уже будет создан, просто нужно на него переключиться)



0



503 / 246 / 74

Регистрация: 31.10.2010

Сообщений: 742

31.12.2014, 17:20

2

artyoms, лучше это сделать через макросы на VB Excel



0



droider

Эксперт Pascal/Delphi

4884 / 2756 / 849

Регистрация: 04.10.2012

Сообщений: 10,054

31.12.2014, 17:37

3

Цитата
Сообщение от artyoms
Посмотреть сообщение

Как можно через делфи переключаться между листами в открытом Ексель ?

Delphi
1
ExcelApp.ActiveWorkBook.Sheets.Item[i].Activate;

i-номер листа.



0



1 / 1 / 0

Регистрация: 28.10.2012

Сообщений: 168

31.12.2014, 18:08

 [ТС]

4

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



0



droider

Эксперт Pascal/Delphi

4884 / 2756 / 849

Регистрация: 04.10.2012

Сообщений: 10,054

31.12.2014, 18:32

5

Лучший ответ Сообщение было отмечено artyoms как решение

Решение

artyoms, тогда не создавайте новую книгу, а подключайтесь к активному экземпляру (открытой книге) Excel:

Delphi
1
2
3
4
5
var
  ExcelApp : OLEVariant;
...
ExcelApp :=GetActiveOleObject('Excel.Application');
...

Остальное по аналогии.



0



1 / 1 / 0

Регистрация: 28.10.2012

Сообщений: 168

31.12.2014, 19:48

 [ТС]

6

droider, всё отлично работает, разобрался, большое спасибо и с наступающим Новым годом!



0



artyoms

1 / 1 / 0

Регистрация: 28.10.2012

Сообщений: 168

19.08.2015, 21:46

 [ТС]

7

При

Delphi
1
ExcelApp :=GetActiveOleObject('Excel.Application');

как я понял мы подключаемся к первой открытой книге. А как подключиться к книге по имени т.е. допустим с именем ‘S1 — Microsoft Excel’ ?



0



droider

Эксперт Pascal/Delphi

4884 / 2756 / 849

Регистрация: 04.10.2012

Сообщений: 10,054

25.08.2015, 21:49

8

Цитата
Сообщение от artyoms
Посмотреть сообщение

как подключиться к книге по имени т.е. допустим с именем ‘S1 — Microsoft Excel’ ?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var
  ExcelApp: OLEVariant;
begin
  try
    //проверяем, нет ли активного экземпляра Excel
    ExcelApp := GetActiveOleObject('Excel.Application');
  except
    //если нет, то запускаем
    on EOLESysError do
      ExcelApp := CreateOleObject('Excel.Application');
  end;
  with ExcelApp do
  begin
     Visible := True; //показываем документ
    //Открываем книгу Excel на полный экран
      WindowState := -4137;
    //отключаем предупреждающие сообщения
      DisplayAlerts := False;
    //Открываем рабочую книгу
     WorkBooks.Open('C:S1.xls');
    //Становимся на первый лист
     WorkSheets[1].Activate;
  end;
end;



0



Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32516 / 20997 / 8120

Регистрация: 22.10.2011

Сообщений: 36,264

Записей в блоге: 7

25.08.2015, 21:52

9

droider, вопрос не в этом. А в том, как среди нескольких открытых документов найти именно тот, который нужен. Я уже отвечал вопрошающему: Excel — получение доступа к нескольким окрытым приложениям , но, как видно, три строки простейшего кода никак для него не осилить… Вот и надо все на блюдечке…



0



Эксперт Pascal/Delphi

4884 / 2756 / 849

Регистрация: 04.10.2012

Сообщений: 10,054

25.08.2015, 21:54

10

Цитата
Сообщение от volvo
Посмотреть сообщение

вопрос не в этом. А в том, как среди нескольких открытых документов найти именно тот, который нужен. Я уже отвечал вопрошающему

Не видел тему Давно не заходил. Тогда все ясно.



0



0 / 0 / 0

Регистрация: 17.12.2019

Сообщений: 1

17.12.2019, 10:32

11

добрый день!
Подскажите пож-та, как можно решить такую задачу в excel.

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

Пример:
А1 В1
1 05.01.2019 15.01.2019
2 00.00.0000 00.00.0000
3 07.03.2019 10.03.2019

Заранее спасибо!



0



Модератор

8379 / 5580 / 2275

Регистрация: 21.01.2014

Сообщений: 23,954

Записей в блоге: 3

17.12.2019, 10:48

12

EK_1234, вот какое отношение Ваш вопрос имеет к текущей теме пятилетней давности?
Создавайте свою тему и задавайте свой вопрос! Вот только Вы уверены, что она к Дельфи отношение имеет?



0



Есть один файл в экселе там грубо говоря отчет по форме X. В самой программе в определенных полях (например TEdit) я заполняю данные которые должны замениться в файле в определенной ячейке в определенном листе (листов всего 11). Примерно понял как сделать это в активном листе:

Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Open('C:1.xls');
Excel.Range['F7']:='Привет';
Excel.save;
Excel.ActiveWorkbook.Close;
Excel.Application.Quit;

Но как сделать в остальных листах? (или может я не так делаю, или может можно каким то более удобным не стандартным компонентом)

Kromster's user avatar

Kromster

13.5k12 золотых знаков42 серебряных знака72 бронзовых знака

задан 15 мар 2012 в 10:05

zerpico's user avatar

Например, так:

WorkSheet := Excel.Workbooks[1].WorkSheets['Лист1'];
WorkSheet.Cells[1,1]:='Пока';

Установите справку в офисе для VBA, там описана иерархия классов и методов. Все довольно прозрачно.

ответ дан 15 мар 2012 в 11:18

Yura Ivanov's user avatar

Yura IvanovYura Ivanov

26.3k2 золотых знака29 серебряных знаков57 бронзовых знаков

2

Работа с 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;

При написании статьи использовался материал с сайта

В этой статье мы рассмотрим основные конструкции, позволяющие получить доступ к книге 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

На каждой из ступеней этой модели можно останавливаться и изучать её месяцами. Если будет особая необходимость в изучении каких-либо дополнительных свойств и методов — мы обязательно вернемся и изучим. А теперь, приступим к работе в 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
при помощи 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
у пользователя:

Function IsXlsInstall: boolean;
var
CLSID: TCLSID;
begin
Result:= (CLSIDFromProgID(«Excel.Application», CLSID) = S_OK);
end;

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

Private
FXlsApp: variant;
***
function XlsConnect: boolean;
begin
Result:= False;
try
FXlsApp:= GetActiveOleObject(«Excel.Application»);
Result:= True;
except
end;
end;
procedure XlsStart;
begin
FXlsApp:= CreateOleObject(«Excel.Application»);
end;

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

Procedure btnConnectClick(Sender: TObject);
begin
if not IsXlsInstall then
raise Exception.Create(«Приложение MS Excel не найдено на данном компьютере!»);
if not XlsConnect then
XlsStart;
FXlsApp.Visible:= True;
end;

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

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

Procedure XWorkbookAdd(const FilePath: string = «»);
begin
FXlsApp.WorkBooks.Add(FilePath);
end;

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

FXlsApp.Cells := «Тестовая строка»;

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

FXlsApp.Range[«A1»] := «Ячейка А1»;

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

FXlsApp.Range[«A3:A10»] := 5;

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

FXlsApp.Range[«A3:A10»].Interior.Color:= clMoneyGreen;

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

ShowMessage(FXlsApp.Cells);

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

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

FXlsApp.ActiveWorkbook.SaveAs(«C:Test.xlsx»);

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

FXlsApp.Quit;

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

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

Sub Макрос1()
»
» Макрос1 Макрос
»
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
End Sub

Давайте разберем по подробнее, что же такого он нам тут написал:
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:

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

FXlsApp.Selection.MergeCells:= True;

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

FXlsApp.Selection.Merge;

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

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

FXlsApp.Range[«B5:C8»].Select;

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

Range(«D5:H14»).Select;

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

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

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

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

FXlsApp.DisplayAlerts:= False;

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

For i:= 1 to FXlsApp.Workbooks.Count do
ListBox1.Items.Add(FXlsApp.Workbooks.Item[i].Name);

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

FXlsApp.ActiveWindow.DisplayGridlines:= False;

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

FXlsApp.ActiveWindow.SelectedSheets.PrintPreview;

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

Var
Row: integer; // Индекс строки
Col: integer; // Индекс ячейки
TextSelStart: integer; // Начиная с символа
TextSelLength: integer; // Кол-во выделенных символов
begin
FXlsApp.Cells.Characters(TextSelStart, TextSelLength).Font.Bold:= True;
end;

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

Var
merge_area: variant;
cell_width,
cells_width,
i: integer
begin
// Сохраняем диапазон склеенных ячеек в переменную
merge_area:= FXlsApp.Range[«D5»].MergeArea;
// Сохраняем ширину ячейки, для которой будем подбирать высоту
cell_width:= FXlsApp.Range[«D5»].ColumnWidth;
cells_width:= 0;
for i:= 1 to merge_area.Columns.Count do
// Получаем общую ширину всех столбцов склеенного диапазона
cells_width:= cells_width + merge_area.Columns[i].ColumnWidth;
// Разъединяем ячейки
merge_area.UnMerge;
// Устанавливаем ширину интересуемой ячейки равной общей ширине
FXlsApp.Range[«D5»].ColumnWidth:= cells_width;
// Вызываем стандартный метод автоподбора высоты строки
FXlsApp.Rows.EntireRow.AutoFit;
// Возвращаем исходную ширину интересуемой ячейки
FXlsApp.Range[«D5»].ColumnWidth:= cell_width;
// Склеиваем обратно диапазон
merge_area.Merge;
end;

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

Result:= exApp.ActiveSheet.UsedRange;

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

Uses Math;
***
function ColIdxToStr(const Col: integer): string
const
CharsCount: integer = 26;
Offset: integer = 64;
var
Rank: byte;
Col, Tmp: integer;
begin
Result:= «»;
while Col > 0 do begin
Rank:= 0;
Tmp:= Col;
while Tmp > CharsCount do begin
Tmp:= Ceil(Tmp / CharsCount — 1);
Inc(Rank);
end;
Result:= Result + Chr(Tmp + Offset);
Col:= Col — Trunc(Power(CharsCount,Rank)) * Tmp;
end;
end;

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

Для работы с Excel и другими программами из пакета Microsoft Office необходимо добавить в список uses
модуль ComObj:

unit
Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ComObj
;

var

Form1: TForm1;
Excel: Variant;

Далее, нужно создать объект Excel. Excell Application создаётся пустым, без таблиц, поэтому необходимо добавить хотя бы одну книгу. Делать это нужно в каком-либо обработчике, например обработчике нажатия кнопки, хотя можно и сразу в OnCreate Формы:

Excel:=CreateOleObject(«Excel.Application»);
Excel.Application.WorkBooks.Add(«Имя_Файла.xls»);

Если создаётся пустая книга, метод Add применяется без параметра — без имени файла. Естественно, можно предложить пользователю выбрать файл:

with
OpenDialog1 do

if
Execute then

Excel.Application.WorkBooks.Add(FileName);

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

Excel.Visible:=True; //После отладки можно закомментировать эту строку


Excel.DisplayAlerts:=False;

Сразу создайте метод закрытия объекта Excel, иначе при отладке, да и при работе пользователя в компьютере наплодится столько невидимых процессов Excel, что мама дорогая!.. В обработчике OnCloseQuery Формы напишите:

try

Excel.Quit;
except

end;

CanClose:=True;

Естественно, будет произведён выход из Excel, и затем закроется всё приложение. Но если нам нужно после закрытия процесса Excel продолжить работу с программой, то этот код помещается в обработчик нажатия кнопки. Однако, в данном случае его недостаточно. Попробуйте, и вы убедитесь, взглянув в список процессов в Диспетчере Задач, что наш процесс Excel жив и здоров! Это произошло потому, что он остаётся связанным с переменной, его создавшей (Excel же). Для реального уничтожения процесса нужно разорвать эту связь. Дополните вышеприведённый код строкой:

Excel:=Unassigned;

И при нажатии кнопки закрытия наш Excel исчезнет из списка процессов.

Теперь нужно получить данные из Excel. В Excel столбцы именуются буквами, но мы в Delphi обращаемся к ним привычно, по порядковым номерам. Обратите внимание, что, поскольку в Delphi первым в индексе идёт индекс столбца, а в таблице Excel индекс строки, то индексы должны быть расположены на противоположных местах. В обработчике нажатия кнопки:

with
StringGrid1 do

for
i:=1 to
RowCount-1 do

for
j:=1 to
ColCount-1 do

Cells:=Excel.WorkSheets.Item[«Лист1»].Cells;

Маленькое предупреждение: если при отладке проверять внесение данных, то перед нажатием нашей кнопки нужно завершить ввод в Excel — нажать Enter. Ведь если ячейка таблицы Excel останется в режиме редактирования, то мы получим отказ от Excel.
И ещё. Данные в Excel адресуются начиная с 1. Попытка получить содержимое фиксированных ячеек не удаётся. Поэтому фиксированные ячейки в таблице StringGrid при необходимости нужно заполнять самому, отдельно.

А получить содержимое одной ячейки можно как указав номер строки и столбца, так и непосредственно указав адрес ячейки:

var
S1, S2: String
;
begin

S1:=Excel.WorkSheets.Item[«Лист1»].Cells;
S2:=Excel.WorkSheets.Item[«Лист1»].Range[«F5»];
end;

В переменных S1 и S2 будет одинаковое значение.

Теперь в таблице StringGrid мы имеем данные для обработки, и делаем с ними что хотим. Затем можно перенести обработанные данные назад в таблицу Excel. Делается это совершенно аналогично, в обработчике нажатия другой кнопки:

for
i:=1 to
Grid.RowCount-1 do

for
j:=1 to
Grid.ColCount-1 do

Excel.WorkSheets.Item[«Лист1»].Cells:=Grid.Cells;

Если эти операции производятся с активным листом Excel, то можно сократить написание, и вместо:

Excel.WorkSheets.Item[«Лист1»].Cells

Excel.Cells

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

var
Sheet: Variant;
S1, S2: String;
begin

Sheet:=Excel.WorkSheets.Item[«Лист1»];
S1:=Sheet.Cells;
S2:=Sheet.Range[«F5»];
end;

Только имейте в виду, что таблица может содержать не только данные непосредственно в ячейках, но и формулы. При записи данных из нашей таблицы StringGrid всё, кроме непосредственно записываемого текста, будет уничтожено!

Напоследок нужно заставить таблицу Excel сохранить обработанные данные:

Excel.ActiveWorkbook.SaveAs(«Имя_Файла»);//Или SaveAs(«OpenDialog1.FileName»);

Можно вывести отчёт на печеть. Вот как задана функция печати:

function
PrintOut(
From: Variant;//Необязательно. Номер срааницы с которой начинается печать.


To: Variant;//Необязательно. Номер страницы по какую продолжается печать.


Copies: Variant;//Необязательно. Количество копий.


Preview: Variant;//Необязательно. Предварительный просмотр (True
или False
).


ActivePrinter: Variant;//Необязательно. Имя активного принтера.


PrintToFile: Variant; True
печать будет идти в файл.


Collate: Variant//Необязательно. При значении True
копии страниц объединяются.


): Workbook;

Воспользоваться этой функцией можно как методом переменной, указывающей страницу — Sheet
(также Excel.ActiveWorkBook
или Excel.WorkSheets
):

Sheet.PrintOut(1, 1, 1, False, True);

Будет произведён вывод на печать с первой страницы по первую, одной копии, без предварительного просмотра, без указания принтера — печать идёт в файл. Предварительно будет выдан запрос на указание имени файла. Создаётся файл типа *.xps
. Для его просмотра нужны специальные программы.

Естественно, в Delphi можно осуществлять также и форматирование ячеек, и другие операции с таблицей Excel. Эту информацию добавлю чуть позже. А пока на первый раз достаточно.

Работа с регионом ячеек Excel

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

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

Var Range: Variant;
begin

end;

В частности, регион может состоять и из одной ячейки:

Range:=Excel.Range, Excel.Cells];

Эту запись проще выполнить с указанием адреса как в таблице Excel:

Range:=Excel.Range[«A1»];

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

Range:=Excel.Range[«A1:D4»];

А вот как выполнить перепись региона 100Х100 ячеек Excel в таблицу StringGrid:

var
Range: Variant;
i, j: Integer;
begin

Range:=Excel.Range, Excel.Cells];
with
StringGrid1 do

for
i:=1 to
100 do

for
j:=1 to
100 do

Cells:=Range.Cells;
end;

Вот и всё! На моём компьютере, эта операция переписи региона 100х100 ячеек Excel в таблицу StringGrid длится около 300 мсек, что на 2 порядка быстрее, чем чтение и запись по одной ячейке.

А, например, операция занесения какого-либо одного значения во все ячейки региона выполняется ещё проще. Занесём в наш вышеопределённый регион 100х100 слово «Привет» :

Excel.Range, Excel.Cells]:=»Привет»;

Очистка региона выполняется методом Clear:

Excel.Range, Excel.Cells].Clear;

Содержание

  1. Excel в Delphi
  2. Работа с Excel в Delphi. Основы основ
  3. Excel в Delphi. Методы объекта WorkSheet (лист)
  4. Диаграммы Excel в Delphi. Общие сведения
  5. Excel в Delphi. Работа с объектом Range (диапазон)
  6. Excel в Delphi. Как изменить внешний вид ячеек?
  7. Полная автоматизация. Редактируем объекты Excel, содержащиеся в документах Word и наоборот
  8. Быстрая обработка данных Excel в Delphi
  9. Пост-ответ. Работа с примечаниями в Excel
  10. Excel в Delphi. Работа со свойствами документа
  11. Создаем свои контролы на ленте Microsoft Office
  12. Excel в Delphi. Методы объекта WorkSheet (лист). Совместная работа StringGrid и Excel
  13. 2. Как активировать лист рабочей книги Excel?
  14. 3. Методы листа книги Excel
  15. Метод Calculate
  16. Метод CheckSpelling
  17. Метод SaveAs
  18. Метод Delete
  19. Метод Copy
  20. Метод Paste
  21. Метод ChartObjects
  22. Метод Move
  23. Работа с регионом ячеек Excel

Excel в Delphi

На этой странице представлена подборка статей, посвященные работе с Excel в Delphi. Все статьи расположены по порядку изложения материала в блоге, то есть от самых основ работы с Excel в Delphi до выполнения сложных операций, вставки диаграмм в книгу и так далее.

Работа с Excel в Delphi. Основы основ

Это вводная статья по работе с excel в delphi, которая поможет вам разобраться с основами по взаимодействия вашего приложения Delphi и Microsoft Excel. В статье рассмотрены следующие вопросы:

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

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

Диаграммы Excel в Delphi. Общие сведения

В статье рассмотрен способ добавления диаграммы в лист Excel через объект ChartObjects. План статьи следующий:

Excel в Delphi. Работа с объектом Range (диапазон)

Статья дает более полное представление о том, как можно работать с данными листа Excel в Delphi, используя объект Range (диапазон). Рассмотрены свойства и методы объекта range. План статьи:

Excel в Delphi. Как изменить внешний вид ячеек?

В статье рассматриваются вопросы оформления ячеек таблицы Excel в Delphi:

Полная автоматизация. Редактируем объекты Excel, содержащиеся в документах Word и наоборот

В статье рассматривается достаточно нетривиальный вопрос: как добраться до диаграммы Excel, внедренной в документ Word и работать с ней в Delphi? Статья состоит из трех частей:

Быстрая обработка данных Excel в Delphi

Эта статья раскрывает вопросы, касающиеся быстрой обработки данных при работе с Excel в Delphi. Одной из проблем, с которой сталкиваются начинающие разработчики, является то, что рассмотренные в предыдущих статьях методы чтения/записи данных в Excel работают очень медленно при большом количестве данных. Статья позволяет понять то, как сократить время операций при работе с Excel в Delphi в несколько раз, используя вариантные массивы и библиотеку XLSReadWrite.

Пост-ответ. Работа с примечаниями в Excel

В статье рассматривается то, как, используя Delphi вставлять и редактировать примечания в ячейках Excel. План статьи:

Excel в Delphi. Работа со свойствами документа

Статья раскрывает вопросы изменения свойств документа Excel в Delphi и состоит из трех частей:

Создаем свои контролы на ленте Microsoft Office

Небольшая заметка о том, как получить доступ у ленте Excel и добавить на неё свою кнопку.

Эти и другие статьи, посвященные работе с Excel в Delphi вы всегда сможете найти в блоге по тегу Excel в Delphi

Источник

Excel в Delphi. Методы объекта WorkSheet (лист). Совместная работа StringGrid и Excel

Работа с 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;

// Чтоб не задавал вопрос о сохранении документа
excel.DisplayAlerts:= false;

// или загружаем его из директории с программой
excel.WorkBooks.Open(GetCurrentDir() + «отчет.xls»);

// Делаем его видимым данную функцию после отладки и тестирования лучше использовать в конце, после сформирования отчета (это ускоряет процесс вывода данных в отчет)
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;// толщина линии

//рисуем границы выделенного диапазона верхняя

//рисуем границы выделенного диапазона нижняя

//рисуем границы выделенного диапазона правая

//рисуем границы выделенного диапазона вертикальные внутрениие

//рисуем границы выделенного диапазона горизонтальные внутрениие

//автозаполнение выделенного диапазона
//для примера заполним область ячеек «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 таблицы умножения с подробными комментариями.

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.Visible:= true;
//освобождаем интерфейсы
MyData:= Unassigned;
excel:= Unassigned;
Except
showmessage(«Внимание! Произошла ошибка при создании MS Excel приложения»);
//закрываем Excel
excel.Application.quit;
//освобождаем интерфейсы
MyData:= Unassigned;
excel:= Unassigned;
end;
end;

При написании статьи использовался материал с сайта

В этой статье мы рассмотрим основные конструкции, позволяющие получить доступ к книге MS Excel из Delphi.

Организация доступа к книге EXCEL

Для взаимодействия с MS Excel в программе необходимо использовать модуль ComObj

и объявить переменную для доступа к MS Excel следующего типа:

Var MsExcel: Variant;

Инициализация переменной Excel в простейшем случае можно осуществить так:

Создание новой книги:

Открытие существующей книги (где path — путь к фалу с расширением xls.):

Открытие существующей книги только для чтения:

Блокировка запросов (подтверждений, уведомлений) Ms Excel, например, запретить запрос на сохранение файла:

Отображаем Excel на экране:

Печать содержимого активного листа MS Excel:

Чтение/запись данных в EXCEL

Доступ к ячейке в текущей книге Excel можно осуществить следующим образом:

Для записи значения в ячейку:

Для чтения значения из ячейки:

где B2 — адрес ячейки.

Или используя стиль ссылок R1C1:

где — координата ячейки.

Вообще, ячейке 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. Тогда установится только верхняя граница для блока выделения:

Значение свойства Borders задает различную комбинацию граней ячеек. В обоих случаях можно использовать значения в диапазоне от 1 до 10.

Использование паролей в EXCEL

Установка пароля для активной книги может быть произведена следующим образом:

Try // попытка установить пароль MsExcel.ActiveWorkbook.protect(«pass»); except // действия при неудачной попытке установить пароль end;

где pass — устанавливаемый пароль на книгу.

Снятие пароля с книги аналогично, используем команду

Установка и снятие пароля для активного листа книги Excel производится командами

MsExcel.ActiveSheet.protect(«pass»); // установка пароля MsExcel.ActiveSheet.Unprotect(«pass»); // снятие пароля

где pass — пароль, установленный для защиты книги.

Вспомогательные операции в EXCEL

Удаление строк со сдвигом вверх:

при выполнении данных действий будут удалены строки с 5 по 15.

Установка закрепления области на активном листе Excel

// снимаем закрепление области, если оно было задано MsExcel.ActiveWindow.FreezePanes:=False; // выделяем нужную ячейку, в данном случае D3 MsExcel.Range[«D3»].Select; // устанавливаем закрепление области MsExcel.ActiveWindow.FreezePanes:=True;

Сохранение активной книги Excel

На каждой из ступеней этой модели можно останавливаться и изучать её месяцами. Если будет особая необходимость в изучении каких-либо дополнительных свойств и методов — мы обязательно вернемся и изучим. А теперь, приступим к работе в 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 (в том числе настройки панели управления).

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

Если Вам необходимо сохранить файл 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.

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

Метод Copy

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

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

Как копировать лист Excel в Delphi?

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

Метод Paste

Вставка содержимого буфера обмена на лист Excel.

Как вставить содержимое буфера обмена на лист Excel в Delphi?

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

Метод ChartObjects

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

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

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

Метод Move

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

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

Обмен данными с 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 у пользователя:

Function IsXlsInstall: boolean; var CLSID: TCLSID; begin Result:= (CLSIDFromProgID(«Excel.Application», CLSID) = S_OK); end;

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

Private FXlsApp: variant; *** function XlsConnect: boolean; begin Result:= False; try FXlsApp:= GetActiveOleObject(«Excel.Application»); Result:= True; except end; end; procedure XlsStart; begin FXlsApp:= CreateOleObject(«Excel.Application»); end;

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

Procedure btnConnectClick(Sender: TObject); begin if not IsXlsInstall then raise Exception.Create(«Приложение MS Excel не найдено на данном компьютере!»); if not XlsConnect then XlsStart; FXlsApp.Visible:= True; end;

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

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

Procedure XWorkbookAdd(const FilePath: string = «»); begin FXlsApp.WorkBooks.Add(FilePath); end;

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

FXlsApp.Cells := «Тестовая строка»;

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

FXlsApp.Range[«A1»] := «Ячейка А1»;

Где 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 в котором видим код проделанных действий:

Sub Макрос1() » » Макрос1 Макрос » With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge End Sub

Давайте разберем по подробнее, что же такого он нам тут написал:
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?

For i:= 1 to FXlsApp.Workbooks.Count do ListBox1.Items.Add(FXlsApp.Workbooks.Item[i].Name);

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

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

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

Var Row: integer; // Индекс строки Col: integer; // Индекс ячейки TextSelStart: integer; // Начиная с символа TextSelLength: integer; // Кол-во выделенных символов begin FXlsApp.Cells.Characters(TextSelStart, TextSelLength).Font.Bold:= True; end;

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

Var merge_area: variant; cell_width, cells_width, i: integer begin // Сохраняем диапазон склеенных ячеек в переменную merge_area:= FXlsApp.Range[«D5»].MergeArea; // Сохраняем ширину ячейки, для которой будем подбирать высоту cell_width:= FXlsApp.Range[«D5»].ColumnWidth; cells_width:= 0; for i:= 1 to merge_area.Columns.Count do // Получаем общую ширину всех столбцов склеенного диапазона cells_width:= cells_width + merge_area.Columns[i].ColumnWidth; // Разъединяем ячейки merge_area.UnMerge; // Устанавливаем ширину интересуемой ячейки равной общей ширине FXlsApp.Range[«D5»].ColumnWidth:= cells_width; // Вызываем стандартный метод автоподбора высоты строки FXlsApp.Rows.EntireRow.AutoFit; // Возвращаем исходную ширину интересуемой ячейки FXlsApp.Range[«D5»].ColumnWidth:= cell_width; // Склеиваем обратно диапазон merge_area.Merge; end;

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

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

Uses Math; *** function ColIdxToStr(const Col: integer): string const CharsCount: integer = 26; Offset: integer = 64; var Rank: byte; Col, Tmp: integer; begin Result:= «»; while Col > 0 do begin Rank:= 0; Tmp:= Col; while Tmp > CharsCount do begin Tmp:= Ceil(Tmp / CharsCount — 1); Inc(Rank); end; Result:= Result + Chr(Tmp + Offset); Col:= Col — Trunc(Power(CharsCount,Rank)) * Tmp; end; end;

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

Для работы с Excel и другими программами из пакета Microsoft Office необходимо добавить в список uses модуль ComObj:

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ComObj ;

var
Form1: TForm1;
Excel: Variant;

Далее, нужно создать объект Excel. Excell Application создаётся пустым, без таблиц, поэтому необходимо добавить хотя бы одну книгу. Делать это нужно в каком-либо обработчике, например обработчике нажатия кнопки, хотя можно и сразу в OnCreate Формы:

Если создаётся пустая книга, метод Add применяется без параметра — без имени файла. Естественно, можно предложить пользователю выбрать файл:

with OpenDialog1 do
if Execute then
Excel.Application.WorkBooks.Add(FileName);

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

Excel.Visible:=True; //После отладки можно закомментировать эту строку
Excel.DisplayAlerts:=False;

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

Естественно, будет произведён выход из Excel, и затем закроется всё приложение. Но если нам нужно после закрытия процесса Excel продолжить работу с программой, то этот код помещается в обработчик нажатия кнопки. Однако, в данном случае его недостаточно. Попробуйте, и вы убедитесь, взглянув в список процессов в Диспетчере Задач, что наш процесс Excel жив и здоров! Это произошло потому, что он остаётся связанным с переменной, его создавшей (Excel же). Для реального уничтожения процесса нужно разорвать эту связь. Дополните вышеприведённый код строкой:

И при нажатии кнопки закрытия наш Excel исчезнет из списка процессов.

Теперь нужно получить данные из Excel. В Excel столбцы именуются буквами, но мы в Delphi обращаемся к ним привычно, по порядковым номерам. Обратите внимание, что, поскольку в Delphi первым в индексе идёт индекс столбца, а в таблице Excel индекс строки, то индексы должны быть расположены на противоположных местах. В обработчике нажатия кнопки:

with StringGrid1 do
for i:=1 to RowCount-1 do
for j:=1 to ColCount-1 do
Cells:=Excel.WorkSheets.Item[«Лист1»].Cells;

Маленькое предупреждение: если при отладке проверять внесение данных, то перед нажатием нашей кнопки нужно завершить ввод в Excel — нажать Enter. Ведь если ячейка таблицы Excel останется в режиме редактирования, то мы получим отказ от Excel.
И ещё. Данные в Excel адресуются начиная с 1. Попытка получить содержимое фиксированных ячеек не удаётся. Поэтому фиксированные ячейки в таблице StringGrid при необходимости нужно заполнять самому, отдельно.

А получить содержимое одной ячейки можно как указав номер строки и столбца, так и непосредственно указав адрес ячейки:

var S1, S2: String ;
begin
S1:=Excel.WorkSheets.Item[«Лист1»].Cells;
S2:=Excel.WorkSheets.Item[«Лист1»].Range[«F5»];
end;

В переменных S1 и S2 будет одинаковое значение.

Теперь в таблице StringGrid мы имеем данные для обработки, и делаем с ними что хотим. Затем можно перенести обработанные данные назад в таблицу Excel. Делается это совершенно аналогично, в обработчике нажатия другой кнопки:

for i:=1 to Grid.RowCount-1 do
for j:=1 to Grid.ColCount-1 do
Excel.WorkSheets.Item[«Лист1»].Cells:=Grid.Cells;

Если эти операции производятся с активным листом Excel, то можно сократить написание, и вместо:

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

var Sheet: Variant;
S1, S2: String;
begin
Sheet:=Excel.WorkSheets.Item[«Лист1»];
S1:=Sheet.Cells;
S2:=Sheet.Range[«F5»];
end;

Только имейте в виду, что таблица может содержать не только данные непосредственно в ячейках, но и формулы. При записи данных из нашей таблицы StringGrid всё, кроме непосредственно записываемого текста, будет уничтожено!

Напоследок нужно заставить таблицу Excel сохранить обработанные данные:

Excel.ActiveWorkbook.SaveAs(«Имя_Файла»);// Или SaveAs(«OpenDialog1.FileName»);

Можно вывести отчёт на печеть. Вот как задана функция печати:

function PrintOut(
From: Variant; //Необязательно. Номер срааницы с которой начинается печать.
To: Variant; //Необязательно. Номер страницы по какую продолжается печать.
Copies: Variant; //Необязательно. Количество копий.
Preview: Variant; //Необязательно. Предварительный просмотр (True или False ).
ActivePrinter: Variant; //Необязательно. Имя активного принтера.
PrintToFile: Variant; True печать будет идти в файл.
Collate: Variant //Необязательно. При значении True копии страниц объединяются.
): Workbook;

Воспользоваться этой функцией можно как методом переменной, указывающей страницу — Sheet (также Excel.ActiveWorkBook или Excel.WorkSheets ):

Sheet.PrintOut(1, 1, 1, False, True);

Будет произведён вывод на печать с первой страницы по первую, одной копии, без предварительного просмотра, без указания принтера — печать идёт в файл. Предварительно будет выдан запрос на указание имени файла. Создаётся файл типа *.xps . Для его просмотра нужны специальные программы.

Естественно, в Delphi можно осуществлять также и форматирование ячеек, и другие операции с таблицей Excel. Эту информацию добавлю чуть позже. А пока на первый раз достаточно.

Работа с регионом ячеек Excel

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

Var Range: Variant;
begin

В частности, регион может состоять и из одной ячейки:

Эту запись проще выполнить с указанием адреса как в таблице Excel:

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

А вот как выполнить перепись региона 100Х100 ячеек Excel в таблицу StringGrid:

var Range: Variant;
i, j: Integer;
begin
Range:=Excel.Range, Excel.Cells];
with StringGrid1 do
for i:=1 to 100 do
for j:=1 to 100 do
Cells:=Range.Cells;
end;

Вот и всё! На моём компьютере, эта операция переписи региона 100х100 ячеек Excel в таблицу StringGrid длится около 300 мсек, что на 2 порядка быстрее, чем чтение и запись по одной ячейке.

А, например, операция занесения какого-либо одного значения во все ячейки региона выполняется ещё проще. Занесём в наш вышеопределённый регион 100х100 слово «Привет» :

Источник

Для работы с Excel в Delphi, первым делом нужно в Uses указать модуль ComObj.

procedure TForm1.Button1Click(Sender: TObject);

var

XL: Variant;

begin

XL := CreateOLEObject(‘Excel.Application’); // Создание OLE объекта

XL.WorkBooks.add; // Создание новой рабочей книги

XL.visible := true;

end;

Как обратиться к отдельным ячейкам листа Excel в Delphi

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Value:=’30’;

//Результатом является присвоение ячейке [1,1] первого листа значения 30. Также к ячейке

//текущего листа можно обратиться следующим образом:

XL.Cells[1, 1]:=’30’;

Как добавить формулу в ячейку листа Excel в Delphi

XL.WorkBooks[1].WorkSheets[1].Cells[3,3].Value := ‘=SUM(B1:B2)’;

Форматирование текста в ячейках Excel, производится с помощью свойств Font и Interior объекта Cell:

// Цвет заливки

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Interior.Color := clYellow;

// Цвет шрифта

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Font.Color := clRed;

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Font.Name := ‘Courier’;

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Font.Size := 16;

XL.WorkBooks[1].WorkSheets[1].Cells[1,1].Font.Bold := True;

Работа с прямоугольными областями ячеек, с помощью объекта Range:

XL.WorkBooks[1].WorkSheets[1].Range[‘A1:C5’].Value := ‘Blue text’;

XL.WorkBooks[1].WorkSheets[1].Range[‘A1:C5’].Font.Color := clBlue;

//В результате в области A1:C5 все ячейки заполняются текстом ‘Blue text’.

Как выделить группу (область) ячеек Excel в Delphi

XL.Range[‘A1:C10’].Select;

Как установить объединение ячеек, перенос по словам, и горизонтальное или вертикальное выравнивание Excel в Delphi

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

//Выделяем группу (область) ячеек

XL.Range[‘A1:C10’].Select;

// объединение ячеек

XL.Selection.MergeCells:=True;

// перенос по словам

XL.Selection.WrapText:=True;

// горизонтальное выравнивание

XL.Selection.HorizontalAlignment:=3;

//вериткальное выравнивание

XL.Selection.VerticalAlignment:=1;

//Возможны следующие значения:

//1 — выравнивание по умолчанию,

//2 — выравнивание слева,

//3 — выравнивание по центру,

//4 — выравнивание справа.

Как задать границы ячеек Excel в Delphi

XL.Selection.Borders.LineStyle:=1;

// значение может быть установлено от 1 до 10

Как выровнять столбцы Excel по ширине, в зависимости от содержания

XL.selection.Columns.AutoFit;

Как удалить столбец Excel в Delphi

Как задать формат ячеек Excel в Delphi

XL.columns[1].NumberFormat := ‘@’; // текстовый формат

XL.columns[1].NumberFormat := ‘m/d/yyyy’; //  формат дата

XL.columns[1].NumberFormat = ‘0.00%’ // формат процентный

XL.columns[1].NumberFormat = ‘h:mm;@’// формат время


В данном обзоре рассмотрены
основные конструкции,
позволяющие получить доступ к
книге 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[path];

Открытие
существующей книги только для
чтения:
   
Excel.Workbooks.Open[path, 0,
True];

Закрытие
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.Cells[2, 2]]:=’Привет!’;,
где [2, 2]
— координата ячейки.

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

Формат ячеек в EXCEL

Выделить
(выбрать) группу ячеек для
последующей работы можно так:
  
Excel.Range[Excel.Cells[1, 1],
Excel.Cells[5, 3]].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) граница для ячеек
  
Excel.Selection.Borders.LineStyle:=1;
При значении 1 границы ячеек
рисуются тонкими сплошными
линиями.
Кроме этого можно указать
значения для свойства Borders,
например, равное 3. Тогда
установится только верхняя
граница для блока выделения:
   Excel.Selection.Borders[3].LineStyle:=1;
Значение свойства Borders задает
различную комбинацию граней
ячеек.
В обоих случаях можно
использовать значения в
диапазоне от 1 до 10.

Использование паролей в
EXCEL

Установка
пароля для активной книги может
быть произведена следующим
образом:
try
   // попытка установить пароль
   Excel.ActiveWorkbook.protect(‘pass’);
except
   // действия при неудачной попытке установить пароль
end;
где pass — устанавливаемый
пароль на книгу.

Снятие пароля
с книги аналогично, использовуем
команду
Excel.ActiveWorkbook.Unprotect(‘pass’);
где 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
uses ComObj;
и объявить переменную для
доступа к MS excel следующего
типа:
var Excel:
Variant;

Инициализация
переменной Excel в простейшем
случае можно осуществить так:
   
Excel := CreateOleObject(‘Excel.Application’);

Создание
новой книги:
   
Excel.Workbooks.Add;

Открытие
существующей книги (где
path
— путь к фалу с расширением xls.):
   
Excel.Workbooks.Open[path];

Открытие
существующей книги только для
чтения:
   
Excel.Workbooks.Open[path, 0,
True];

Закрытие
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.Cells[2, 2]]:=’Привет!’;,
где [2, 2]
— координата ячейки.

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

Формат ячеек в EXCEL

Выделить
(выбрать) группу ячеек для
последующей работы можно так:
  
Excel.Range[Excel.Cells[1, 1],
Excel.Cells[5, 3]].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) граница для ячеек
  
Excel.Selection.Borders.LineStyle:=1;
При значении 1 границы ячеек
рисуются тонкими сплошными
линиями.
Кроме этого можно указать
значения для свойства Borders,
например, равное 3. Тогда
установится только верхняя
граница для блока выделения:
   Excel.Selection.Borders[3].LineStyle:=1;
Значение свойства Borders задает
различную комбинацию граней
ячеек.
В обоих случаях можно
использовать значения в
диапазоне от 1 до 10.

Использование паролей в
EXCEL

Установка
пароля для активной книги может
быть произведена следующим
образом:
try
   // попытка установить пароль
   Excel.ActiveWorkbook.protect(‘pass’);
except
   // действия при неудачной попытке установить пароль
end;
где pass — устанавливаемый
пароль на книгу.

Снятие пароля
с книги аналогично, использовуем
команду
Excel.ActiveWorkbook.Unprotect(‘pass’);
где 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;

Удачной работы!

 
Foxi_ ©
 
(2011-06-01 12:01)
[0]

подскажите пожалуйста,
почему у меня Sheets не работает, при выборе активного листа

var
e_app: Variant;
begin
e_app := CreateOleObject(«Excel.Application»);
e_app.WorkBooks.Open(«D:программафаил.xls»);
e_app.WorkBooks.WorkSheets.Item[«3»].Name;
Edit1.Text := e_app.ActiveSheet.UsedRange.Rows.Count;
Edit2.Text := e_app.ActiveSheet.UsedRange.Columns.Count+1;
e_app.Quit;
end;


 
clickmaker ©
 
(2011-06-01 12:03)
[1]

> e_app.WorkBooks.WorkSheets.Item[«3»].Name;

чтобы это значило?


 
Foxi_ ©
 
(2011-06-01 12:06)
[2]

пытаюсь открыть нужный лист в книге ;-)


 
clickmaker ©
 
(2011-06-01 12:12)
[3]

e_app.WorkBooks.WorkSheets.Item[3].Activate ?


 
Foxi_ ©
 
(2011-06-01 12:17)
[4]

пишет что незнает метода WorkSheets


 
clickmaker ©
 
(2011-06-01 12:20)
[5]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1273


 
OW ©
 
(2011-06-01 13:35)
[6]


> var
> e_app, AcS: Variant;
> begin
> e_app := CreateOleObject(«Excel.Application»);
> e_app.WorkBooks.Open(«D:программафаил.xls»);
AcS := e_app.WorkBooks.WorkSheets.Item[«3»];

> Edit1.Text := AcS.UsedRange.Rows.Count;
> Edit2.Text := AcS.UsedRange.Columns.Count+1;
>
> e_app.Quit;
> end;


 
OW ©
 
(2011-06-01 13:36)
[7]


> AcS := e_app.WorkBooks.WorkSheets.Item[3];


Понравилась статья? Поделить с друзьями:
  • Delphi все листы excel в один лист
  • Delphi весь текст word
  • Delphi в другой ячейке excel
  • Delphi xml в word
  • Delphi word что такое