Итак, сегодня разберемся как сделать наш лист Excel более красивым, а именно разберемся со следующими вопросами:
- Как изменить границы ячеек листа
- Как сделать заливку ячеек цветом
- Как изменить шрифт
1. Как добраться до конкретной границы ячейки?
Перед Вами окно изменения формата ячеек. Вкладка "Границы". Как видите Excel может отрисовывать следующие границы ячеек:
- верхнюю
- нижнюю
- левую
- правую
- диагональную из верхнего левого угла в нижний правый
- диагональную из верхнего правого угла в нижний левый
Если Вы изменяее диапазон ячеек, то дополнительно добавляются ещё два вида границ:
- внутренние горизонтальные
- внутренние вертикальные.
Кроме этого, Вы можете определить свой стиль линий для прорисовки и цвет линий. В самом Excel работа с форматом ячеек достаточно прозрачна и ясна. А вот при работе с Excel в Delphi все обстоит не так уж и радужно :)
Прежде чем браться за прорисовку границ, следует определиться - какой объект Вы будете для этого использовать. Вы можете прорисовать границу с помощью объектов:
- Cells - ячейка
- Range - диапазон ячеек
- UsedRage - диапазон занятых ячеек
Я обычно использую третий вариант (UsedRange), т.к. работаю с форматами ячеек после того как перешлю необходимые данные в Excel. Кроме того, если пересылается большая таблица с данными, то использовать Cells - значит очень сильно "подвесить" свое приложение, т.к. надо будет добраться до каждой ячейки и изменить её формат.
Итак, будем использовать UsedRange. Теперь разберемся как нам добраться до границ.
Для того, чтобы получить доступ к коллекции границ объекта достаточно воспользоваться объектом Borders. Т.к. нам необходим доступ не ко всем границам, а только к конкретной, то после Borders необходимо указывать индекс границы. В Excel определены следующие константы:
| xlDiagonalDown | 5 | Диагональная от верхнего левого угла в нижний правый каждой ячейки в диапазоне |
| xlDiagonalUp | 6 | Диагональная из нижнего левого угла в правый верхний каждой ячейки в диапазоне. |
| xlEdgeBottom | 9 | Нижнаяя для всего диапазона ячеек |
| xlEdgeLeft | 7 | Левая для всего диапазона ячеек. |
| xlEdgeRight | 10 | Правая для всего диапазона ячеек. |
| xlEdgeTop | 8 | Верхняя для всего диапазона ячеек. |
| xlInsideHorizontal | 12 | Горизонтальные границы всех внутренних ячеек диапазона |
| xlInsideVertical | 11 | Вертикальные границы всех внутренних ячеек диапазона |
Теперь переносим эти константы в наш модуль работы с Excel:
uses .... const xlDiagonalDown = 5; xlDiagonalUp = 6; xlEdgeBottom = 9; xlEdgeLeft = 7; xlEdgeRight = 10; xlEdgeTop = 8; xlInsideHorizontal = 12; xlInsideVertical = 11; ....
И для того, чтобы получить доступ, например к нижней границе диапазона ячеек, пишем следующий код:
MyExcel.ActiveWorkBook.ActiveSheet.UsedRange.Borders[xlEdgeBottom]
Аналогичным образом Вы можете получить доступ к любой из восьми границ.
2. Как изменить внешний вид границы?
Доступ к границе получен. Теперь можно приступать к изменению внешнего вида.
Объект Borders имеет следующие свойства:
- LineStyle - стиль линии границы
- ColorIndex - индекс цвета границы
- Weight - толщина границы
Для каждого из этих свойств в Excel определены свои счётчики (Enumerators) или, говоря на языке Delphi - константы.
Стили линий (LineStyle) могут быть следующие:
| xlContinuous | 1 | Непрерывная линия |
| xlDash | -4115 | Пунктирная линия |
| xlDashDot | 4 | Пунктир с точкой |
| xlDashDotDot | 5 | Пунктир с двумя идущими подряд точками |
| xlDot | -4118 | Линия из точек |
| xlDouble | -4119 | Двойная линия |
| xlLineStyleNone | -4142 | Без линий |
| xlSlantDashDot | 13 | Наклонная пунктирная |
Стандартные индексы цветов, которые вы можете использовать при прорисовке границы представлены на рисунке:
Для толщины линии определены константы:
| xlHairline | 1 | Самая тонкая граница |
| xlMedium | -4138 | Средняя толщина |
| xlThick | 4 | Толстая граница |
| xlThin | 2 | Тонкая граница |
Определите эти константы в своем модуле Delphi и можете приступать к прорисовке границ. Например, нам необходимо прорисовать внешние границы таблицы двойной линией, а внутренние - тонкими сплошными. Цвета линий оставим по умолчанию - черными. Тогда код Delphi будет выглядеть следующим образом:
...
with MyExcel.ActiveWorkBook.ActiveSheet.UsedRange do
begin
Borders[xlEdgeBottom].LineStyle:=xlDouble;
Borders[xlEdgeTop].LineStyle:=xlDouble;
Borders[xlEdgeLeft].LineStyle:=xlDouble;
Borders[xlEdgeRight].LineStyle:=xlDouble;
Borders[xlInsideHorizontal].LineStyle:=xlSolid;
Borders[xlInsideVertical].LineStyle:=xlSolid;
end;
...
Аналогичным образом Вы можете изменять границы отдельных ячеек и диапазонов, например выделить шапку таблицы или сделать перечёркнутой верхнюю левую ячейку и т.д.
Кстати, пока писал эту часть поста, пару раз прервался на перекур и посмотреть информацию про прикольные статусы вконтакте...думаю, надо быдет создать, небольшую базу по ним :).
Переходим к следующему вопросу.
3. Как сделать заливку ячеек цветом?
Для заливки ячеек цветом можно использовать те же константы, что и при работе с ячейками. Однако ни объект Range ни Cells не имеют свойства ColorIndex. Чтобы получить доступ к заливке ячейки или диапазона необходимо воспользоваться свойством Interior, которое дает доступ к внутренней части объекта. Например, выполнив операцию:
MyExcel.ActiveWorkBook.ActiveSheet.UsedRange.Interior
вы получите доступ к внутренней части диапазона занятых ячеек, т.е. по сути, ко всей таблице. А получив такой доступ, Вы можете делать с объектом всё, что угодно. Например изменим цвет нашей таблицы на красный:
MyExcel.ActiveWorkBook.ActiveSheet.UsedRange.Interior.ColorIndex:=3;
4. Как изменить шрифт в ячейках?
Для того, чтобы получить доступ к шрифтам, необходимо добраться до одного из свойств UsedRange, а именно до свойства Font, которое и вернет нам объект, позволяющий изменять шрифт, цвет шрифта и прочие атрибуты . Например, изменим цвет шрифта в таблице на синий:
MyExcel.ActiveWorkBook.ActiveSheet.UsedRange.Font.ColorIndex:=5;
Аналогичным образом, через объект Font Вы можете также изменить:
- Толщину шрифта
- Наклон
- Размер
- Сделать текст подчёркнутым и т.д.
Для этого достаточно воспользоваться одним из свойств объекта Fonts.
Мой блог находят по следующим фразам
- размер lazarus
- xmlrpc wordpress
- Delphi настройки из edit1
- компонент office 2010 для Delphi
- настроить delphi code formatter
- программа автоматизация excel и word
| Делись! | Загружай! | Плюсуй! |
| | |









07 Апр 2010 в 9:46 пп
Обычно в таких случаях записываю макрос и уже его портирую на Delphi через COM. А вот константы уже приходится искать через Яндекс, потому что в макросах они в коде не прописываются.
08 Апр 2010 в 12:08 пп
А зачем Яндекс? Есть же встроенная справка того же Ворда для разработчиков — там все перечислители прописаны достаточно подробно
08 Апр 2010 в 12:37 пп
Вообще да, но как-то непривычно пользоваться справками Офиса. Неприязнь какая-то со школы, что ли.
08 Апр 2010 в 12:57 пп
:) А MSDN тоже не используете? Я как-то в последнее время только там и обитаю, если что-то с продуктами M$ делаю.
08 Апр 2010 в 3:02 пп
Иногда и там ищу. Но редко, только по особой надобности. Просто чаще всего в Яндексе можно быстрее и больше найти. MSDN не блещет хорошими примерами. А вообще, это что-то наподобие холивара и того, как кто-то предпочитает кодить на PHP в блокноте…
16 Мар 2011 в 5:12 пп
Автор ещё на связи?
Родился тут один вопросик, никто не может ничего внятного посоветовать…
Нужно комментарий сделать цветной, примерно так: http://s1.ipicture.ru/uploads/20110315/WHSm6Az4.png
PS: в макрос изменение цвета тоже почему-то не пишется!
Есть варианты?
04 Апр 2011 в 4:14 пп
1) оператор ‘with MyExcel.ActiveWorkBook.ActiveSheet.UsedRange do ..’ не сработыаает.
выдает ошибку: ‘Record, object or class type required’ пришлось расписывать полностью.
Почему так?
2) вот здесь — Borders[xlInsideHorizontal].LineStyle:=xlSolid;
наверное все таки — Borders[xlInsideHorizontal].LineStyle:=xlContinuous;
3) оператор …Borders[xlEdgeBottom].LineStyle:=xlDouble; — подчеркивание нижней границы
корректно отрабатывает только последним, после всех других подчеркиваний.
если ставлю первым, то его затирают подчеркнутые вертикальные границы.