Delphi excel закрасить ячейку

Обновлено: 07.07.2024

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

Для работы с OLE нужно к строке Uses добавить модуль ComObj. Так же нужно объявить переменную типа Variant.

Что бы начать работу с Экселем, нужно создать OLE объект:
Ap := CreateOleObject('Excel.Application');

После этого нужно либо создать новую книгу:
Ap.Workbooks.Add;
либо открыть файл:
Ap.Workbooks.Open(<имя файла>);
Что бы открыть файл только для чтения, нужно указать:
Ap.Workbooks.Open(<имя файла>,0,True);
где True и указывает, что файл открывается только для чтения.

По умолчанию окно Excel не будет отображаться. что бы оно появилось, нужно выполнить
Ap.Visible := True;
Но это желательно делать в последний момент, т.к. когда окно видимое, то все изменения в нём происходят медленнее. Поэтому, лучше оставить его невидимым, сделать там все необходимые изменения, и только после этого сделать его видимым или закрыть. Если вы его оставите невидимым, то процесс EXCEL.EXE останется висеть в памяти, даже когда будет закрыто ваше приложение.


Что бы записать или прочитать содержимое ячейки можно использовать Ap.Range[<имя ячейки>] или Ap.Cells[<позиция по Y>,<позиция по X>]
Ap.Range['D1'] := 'Ляляля';
Ap.Cells[1,4] := 'Ляляля';
Эти две строки выполняют одно и тоже действие: записывают строку "Ляляля" в ячейку D1
Читать значение из ячейки таким же образом:
S := Ap.Range['D1'];
или
S := Ap.Cells[1,4];
Так же можно записывать значение сразу в несколько ячеек. можно перечислить через точку с запятой или указать диапазон через двоеточие:

Изменение свойств текста
Всё это можно применять как к отдельным ячейкам, так и к группам ячеек, строк, столбцов и т.п. Я буду показывать примеры на Ap.Cells. но Вам никто не мешает использовать Ap.Range['D5'], Ap.Range['A2:E8'], Ap.Columns['B:F'] и т.п.
Наверное, вы обращали внимание, что в новом документе появляются 3 листа (их список отображается внизу программы Excel). По умолчанию, мы работаем с активным листом (сразу после создания это первый лист). Но при желании, мы можем использовать и другие листы. Доступ к ним осуществляется с помощью Worksheets[<номер листа>]. Обратите внимание, что нумеруются они начиная с 1 (а не с 0, как привыкли все программисты).
Ниже приведён более полный список размеров бумаги из модуля ExcelXP:

Выделение
Excel.Range[Excel.Cells[1, 1], Excel.Cells[5, 3]].Select;
а также любые другие комбинации выбора ячейки с окончанием .select - выбор 1 или группы ячеек

С выбранными ячейками возможны следующие преобразования:

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. ]

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

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

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

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

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

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

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

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

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


Спасибо VampireKB за дополнения


Существует ли инструкция по размещению проекта Delphi на GitHub?
После создания репозитория непонятно, что делать.

Как в Delphi сделать Excel таблицу, не употребляя компонент TStringGrid и связать ее с Delphi
Как в Delphi сделать Excel таблицу, не употребляя компонент TStringGrid и связать ее с Delphi?

Использование БД в Delphi
Привет. Возникла необходимость подключить базу данных к Delphi для хранения вычислений полученных в.

Использование Interop Excel
Добрый день! Есть приложение, которое должно вносить определенные изменения в Excel файл. .

Использование case Delphi
имеется код Case Combobox1.itemIndex of 0:begin Edit1.Clear; Form_login.Visible:=false;.


Использование stringgrid-Delphi
Дан массив А размера N. Сформировать два новых массива В и С: в массив В записать все положительные.

Использование интерфейсов из С++ в Delphi
Здравствуйте. Пытаюсь прикрутить Steamworks API напрямую к делфи, и возникла проблема. Функция.

Репутация: нет
Всего: 0

Добрый день подскажите пожалуйста как можно закрашивать ячейки в Экселе через Делфи, а также рисовать таблицы.
Я раньше где то читал в интернете про это, а теперь не могу найти . подскажите пожалуйста..

Вот так можно загрузить, записать и сохранить в фаил Екселевский:

Скажите пожалуйста как реализовать.

Репутация: 2
Всего: 98

запиши в екселе макрос, выполняющий требуемын действия, и перенеси его на делфи.

Репутация: 15
Всего: 108

"Кто владеет информацией, тот владеет миром"
Уинстон Черчилль

Репутация: нет
Всего: 0

to Albinos_x
Эт не то .

to _hunter

я без макросов сделал..

)_______________________
таблицу рисовать я понял как.

Может кто знает как заливать ячейки в Exele через Delphi

Репутация: 2
Всего: 98

я знаю:
запиши в екселе макрос, выполняющий требуемын действия, и перенеси его на делфи.

Репутация: нет
Всего: 0

to _hunter
а как это сделать. и перенести на делфи? (залить ячейки)

Репутация: нет
Всего: 13


А на счет макросов тебе дело советуют. Раз научишься и куча вопросов по Excel-ю отпадет.
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…

Репутация: 2
Всего: 98

AJIeKcEu, ты начни для начала.
да и код макроса мог бы сюда запостить.

Репутация: нет
Всего: 0

ок санкс.. подошло..

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

Пожскажите плиз, или линки дайте..

Репутация: нет
Всего: 13

AJIeKcEu,
1. в Excel: Сервис->Макрос->Начать запись.
2. Осуществляешь нужные действия (н-р: закрашиваешь ячейку).
3. Сервис->Макрос->Остановить запись.
4. Сервис->Макрос->Макросы -> Изменить.
5. Получаешь макрос:
Код

With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With

7. Иногда для перевода кода из макроса приходится перебирать возможные варианты и исключать из макроса лишний код (н-р: .Pattern = xlSolid).
ЗЫ: наверняка по поиску ты нашел бы более подробное описание.
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…

Репутация: нет
Всего: 0

У меня возник такой вопрос.

Мне нужно создать Exel евский фаил в определенной директории (допустим с:/test) с именем 1 , с одной страницой
и записать в него данные (ну эт знаю как).
С проверкой, если нет файла с таким именем то создать , если есть то предупредить и другое имя..

Репутация: нет
Всего: 13

Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…

Репутация: нет
Всего: 0

to Fedia санкс.. ок.

а как создать к 3 имеющимся страница ExelЯ еще одну, или удалить?)

Репутация: нет
Всего: 13

Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

[ Время генерации скрипта: 0.1664 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Репутация: нет
Всего: нет

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

Репутация: 11
Всего: 130

Цвет ячейки - activeworkbook.activesheet.cells[x,y].Interior.Color.

Репутация: нет
Всего: нет

Репутация: 11
Всего: 130

activeworkbook.activesheet.cells[x,y].formular1c1 - не подходит?

Репутация: 2
Всего: 108

"Кто владеет информацией, тот владеет миром"
Уинстон Черчилль

Репутация: нет
Всего: нет

Есть ячейка. В ячейке гиперссылка.

ЗЫ Данкинг, спасибо, как до нормального компьютера доеду, попробую =)

Репутация: нет
Всего: нет


Нет, не прокатило. Собственно, и не должно было, там же все-таки не функция в ячейке =)

Репутация: 11
Всего: 130

Репутация: нет
Всего: нет

То есть формат ячейки? Формат общий.

Репутация: 11
Всего: 130

Что-то я тогда не понимаю: а что именно не работает? Нужно взять значение ячейки, а в чём проблема? Вот так вот ссылка нормально показывается:

И дальше уже делаешь с ней, что нужно.

Добавлено через 1 минуту и 2 секунды

Репутация: нет
Всего: нет

Репутация: 11
Всего: 130

А такого даже никогда не видел. А подобную ссылку вставить в ячейку? Может, от обратного надо начинать.

Репутация: 1
Всего: 13

в макросах все написано

Репутация: нет
Всего: нет

Репутация: 1
Всего: 13

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

[ Время генерации скрипта: 0.1457 ] [ Использовано запросов: 21 ] [ GZIP включён ]

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

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

// создаем новый документ рабочую книгу
excel.WorkBooks.Add;

// Делаем его видимым данную функцию после отладки и тестирования лучше использовать в конце, после сформирования отчета (это ускоряет процесс вывода данных в отчет)
excel.Visible := true;

//задаем тип формул в формате R1C1
excel.Application.ReferenceStyle := xlR1C1;

// задаем тип формул в формате A1
excel.Application.ReferenceStyle := xlA1;

// задаем ширину первой и второй колонки
excel.WorkBooks[1].WorkSheets[1].Columns[1].ColumnWidth := 10;
excel.WorkBooks[1].WorkSheets[1].Columns[2].ColumnWidth := 20;

// Выравнивам первый ряд по центру по вертикали
excel.WorkBooks[1].WorkSheets[1].Rows[1].VerticalAlignment := xlCenter;

// Выравнивам первый ряд по центру по горизонтали
excel.WorkBooks[1].WorkSheets[1].Rows[1].HorizontalAlignment := xlCenter;

// Выравнивам в ячейке по левому краю
excel.WorkBooks[1].WorkSheets[1].Cells[3, 2].HorizontalAlignment := xlLeft;

// Выравнивам в ячейке по правому краю
excel.WorkBooks[1].WorkSheets[1].Cells[3, 4].HorizontalAlignment := xlRight;

// Поворачиваем слова под углом 90 градусов для второго ряда
excel.WorkBooks[1].WorkSheets[1].Rows[2].Orientation := 90;

//рисуем границы выделенного диапазона левая
excel.Selection.Borders[xlEdgeLeft].LineStyle := xlContinuous; // стиль линии сплошная
excel.Selection.Borders[xlEdgeLeft].Weight := xlMedium;// толщина линии

//рисуем границы выделенного диапазона верхняя
excel.Selection.Borders[xlEdgeTop].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeTop].Weight := xlMedium;

//рисуем границы выделенного диапазона нижняя
excel.Selection.Borders[xlEdgeBottom].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeBottom].Weight := xlMedium;

//рисуем границы выделенного диапазона правая
excel.Selection.Borders[xlEdgeRight].LineStyle := xlContinuous;
excel.Selection.Borders[xlEdgeRight].Weight := xlMedium;

//рисуем границы выделенного диапазона вертикальные внутрениие
excel.Selection.Borders[xlInsideVertical].LineStyle := xlContinuous;
excel.Selection.Borders[xlInsideVertical].Weight := xlMedium;

//рисуем границы выделенного диапазона горизонтальные внутрениие
excel.Selection.Borders[xlInsideHorizontal].LineStyle := xlContinuous;
excel.Selection.Borders[xlInsideHorizontal].Weight := xlMedium;

//отключаем предупреждения, чтобы не задавал вопросов о сохранении и других
excel.DisplayAlerts := False;

//закроем все книги
excel.Workbooks.Close;

//закрываем Excel
excel.Application.quit;

//освобождаем интерфейсы
excel := Unassigned;

//закроем все книги
excel.Workbooks.Close;

//закрываем Excel
excel.Application.quit;

//освобождаем интерфейсы
excel := Unassigned;
end;
end;

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

Например так:
//закроем все книги
excel.Workbooks.Close;

//закрываем Excel
excel.Application.quit;

//освобождаем интерфейсы
sheet:=Unassigned; //интерфейс листа если он был создан
WorkBook := Unassigned;//интерфейс рабочей книги если он был создан
excel := Unassigned;//интерфейс самого предложения если он был создан


Ниже привожу пример вывода в Excel из Delphi таблицы умножения с подробными комментариями.

Работа с EXCEL из Delphi.

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

//объявляем вариантный массив
MyData := VarArrayCreate([1,9,1,9],varVariant);
for I := 1 to 9 do
for J := 1 to 9 do
MyData[i,j]:=i*j;

Читайте также: