Excel delphi границы ячейки в excel

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

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

    1. Как добраться до конкретной границы ячейки?
    2. Как изменить внешний вид границы?
    3. Как сделать заливку ячеек цветом?
    4. Как изменить шрифт в ячейках?

1. Как добраться до конкретной границы ячейки?

Excel_BordersПеред Вами окно изменения формата ячеек. Вкладка «Границы». Как видите Excel может отрисовывать следующие границы ячеек:

  • верхнюю
  • нижнюю
  • левую
  • правую
  • диагональную из верхнего левого угла в нижний правый
  • диагональную из верхнего правого угла в нижний левый

Если Вы выбираете диапазон ячеек, то дополнительно добавляются ещё два вида границ:

  • внутренние горизонтальные
  • внутренние вертикальные.

Кроме этого, Вы можете определить свой стиль линий для прорисовки и цвет линий. В самом Excel работа с форматом ячеек достаточно прозрачна и ясна. А вот при работе с Excel в Delphi все обстоит не так уж и радужно :)

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

  1. Cells — ячейка
  2. Range — диапазон ячеек
  3. 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 Наклонная пунктирная

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

Colors

Для толщины линии определены константы:

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.

5
2
голоса

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

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

 
grol ©
 
(2005-05-26 02:13)
[0]

Здравствуйте мастера Delphi!!! Помогите пожалуйста!!! Вот код сохранения информации из ADOQuery в Excel:

procedure TForm1.Button1Click(Sender: TObject);
var
 Excel, Workbook, Worksheet: OleVariant;
 CurrentRowIndex, CurrentColIndex: integer;
begin
 CurrentRowIndex := 1;
 Excel := CreateOleObject(«Excel.Application»);
 try
   Workbook := Excel.Workbooks.Add;
   Worksheet := Workbook.Worksheets.Add;
   with ADOQuery do
   try
     Open;
     while not Eof do
     begin
       for CurrentColIndex := 0 to FieldsCount — 1 do
         Worksheet.Cells(CurrentRowIndex, CurrentColIndex + 1) := Fields[CurrentColIndex].AsString;
       Next;
       Inc(CurrentRowIndex);
     end;
   finally
     begin      
    //здесь нужно написать код выделение ячейки и задания ей границ!!!
    ……..
    //например:
     Worksheet.Range[«a1″,»a1»].Font.Color := clBlue;
    //поменять цвет шрифта в ячейке, а мне нужно границы поставить на ячейку
     end;
   end;
 finally
   Excel.Visible := True;
   Excel := Unassigned;
 end;
end;

Это макрос в Excel: выделение ячейки и задания ей границ!!!

Sub Макрос1()
» Макрос1 Макрос
» Макрос записан 26.05.2005 (admin)
   Range(«D8»).Select
   Selection.Borders(xlDiagonalDown).LineStyle = xlNone
   Selection.Borders(xlDiagonalUp).LineStyle = xlNone
   With Selection.Borders(xlEdgeLeft)
       .LineStyle = xlContinuous
       .Weight = xlMedium
       .ColorIndex = xlAutomatic
   End With
   With Selection.Borders(xlEdgeTop)
       .LineStyle = xlContinuous
       .Weight = xlMedium
       .ColorIndex = xlAutomatic
   End With
   With Selection.Borders(xlEdgeBottom)
       .LineStyle = xlContinuous
       .Weight = xlMedium
       .ColorIndex = xlAutomatic
   End With
   With Selection.Borders(xlEdgeRight)
       .LineStyle = xlContinuous
       .Weight = xlMedium
       .ColorIndex = xlAutomatic
   End With
End Sub

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

заранее!!!


 
yk ©
 
(2005-05-26 07:36)
[1]

Во-первых, рекомендую сохранять выделение в переменную типа Variant:

var
Range, Cell1, Cell2: Variant;
……

begin

….
Cell1 := WorkBook.ActiveSheet.Cells[beginRow-3,BeginCol-1];
Cell2 := WorkBook.ActiveSheet.Cells[beginRow-1,BeginCol];
Range := WorkBook.ActiveSheet.Range[Cell1, Cell2];
 Range.Select;

….

end;

Во-вторых ,
рекомендую найти статью «По волнам интеграции и почитать её»

В-третьих,
рамку клетки (или диапазона) делаешь так:
….
Range.Select;
 Range.Borders.LineStyle:=xlContinuous;
 Range.Borders.Weight := xlThick; //или xlMedium

В-четвёртых, больше эксперементируй с макросами в Excel — там куча инфы.

В-пятых, код был приведён для выделения всех сторон клеток.
Может кто-нибудь знает, как выделить, например только боковые границы? А то у меня не получилось :(


 
YurikGL ©
 
(2005-05-26 07:38)
[2]


>    Range(«D8»).Select
>    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
>    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
>    With Selection.Borders(xlEdgeLeft)
>        .LineStyle = xlContinuous
>        .Weight = xlMedium
>        .ColorIndex = xlAutomatic
>    End With
>    With Selection.Borders(xlEdgeTop)
>        .LineStyle = xlContinuous
>        .Weight = xlMedium
>        .ColorIndex = xlAutomatic
>    End With
>    With Selection.Borders(xlEdgeBottom)
>        .LineStyle = xlContinuous
>        .Weight = xlMedium
>        .ColorIndex = xlAutomatic
>    End With
>    With Selection.Borders(xlEdgeRight)
>        .LineStyle = xlContinuous
>        .Weight = xlMedium
>        .ColorIndex = xlAutomatic
>    End With
> End Sub

подозреваю, что будет что-то типа
Excel.activesheet.Range(«D8»).Select
Excel.selection.borders.item(xlEdgeRight).linestyle:=xlContinuous
Excel.selection.borders.item(xlEdgeRight).Weight = xlMedium
Excel.selection.borders.item(xlEdgeRight).ColorIndex = xlAutomatic

Дальше по образу и подобию


 
YurikGL ©
 
(2005-05-26 07:40)
[3]


> Может кто-нибудь знает, как выделить, например только боковые
> границы? А то у меня не получилось :(

Катя, а макрос писать не пробовала?
xlEdgeLeft — левая граница выбранной области,
xlEdgeBottom — нижняя граница выбранной области….


 
yk ©
 
(2005-05-26 08:12)
[4]

Ок

Не додумалась до
> item

Но это у мнея пока умозрительный интерес

А ты где? У меня назрело несколько вопросов и уточнений по базе.
Хоть в Аське появись, плиз


 
Руслан
 
(2005-05-26 11:01)
[5]

Обрисовка только указанных границ:
Sheet.Cells.Item[i+2, 1].Borders.LineStyle:=1;- тип линии
      Sheet.Cells.Item[i+2, 1].Borders.Weight:= 3; — толщина
      Sheet.Cells.Item[i+2, 1].Borders[xlDiagonalDown].LineStyle:=xlNone; — снизу нет
      Sheet.Cells.Item[i+2, 1].Borders[xlDiagonalUp].LineStyle:=xlNone; — по диагонали нет
      Sheet.Cells.Item[i+2, 1].Borders[xlEdgeLeft].LineStyle:=xlNone; — слева нет
      Sheet.Cells.Item[i+2, 1].Borders[xlEdgeRight].LineStyle:=xlNone; — справа нет
      Sheet.Cells.Item[i+2, 1].Borders[xlEdgeTop].LineStyle:=xlNone; — сверху нет
где i+2 — номер ячейки, если есть то этой строки не надо

Обрисовка диапазона ячеек:
// обрисовка диапазона ячеек
  Excel.WorkBooks[1].WorkSheets[1].Range[«A3:» + chr(ord(«C»)+n) + IntToStr(i)].Borders.LineStyle := 1;
  Excel.WorkBooks[1].WorkSheets[1].Range[«A3:» + chr(ord(«C»)+n) + IntToStr(i)].Borders.Weight := 2;
  Excel.WorkBooks[1].WorkSheets[1].Range[«A3:» + chr(ord(«C»)+n) + IntToStr(i)].Borders.ColorIndex := 1;


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

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

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

Delphi
1
2
Uses ComObj;
Var Ap : Variant;

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

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

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

Что бы закрыть Excel, выполните Ap.Quit или Ap.Application.Quit. Честно говоря, я не знаю, чем они отличаются.
Что бы при закрытии не выдавался запрос на сохранение файла, можно отключить сообщения:
Ap.DisplayAlerts := False;

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

Эти две строки выполняют одно и тоже действие: записывают строку «Ляляля» в ячейку D1
Читать значение из ячейки таким же образом:
S := Ap.Range[‘D1’];
или
S := Ap.Cells[1,4];
Так же можно записывать значение сразу в несколько ячеек… можно перечислить через точку с запятой или указать диапазон через двоеточие:

Delphi
1
2
3
4
5
6
7
8
Ap.Range['A2;B5;D1'] := 'Ляляля'; // записывает строку в 3 ячейки: A2, B5 и D1
Ap.Range['A2:D5'] := 'Ляляля'; // записывает строку во все ячейки диапазона A2:D5
Ap.Range[Ap.Cells[2,1],Ap.Cells[5,4]] := 'Ляляля'; // Тоже самое, что и предыдущая строка
Ap.Cells := 'Ляляля'; // Изметятся все ячейки
Ap.Rows['2'] := 'Ляляля'; // Изменятся все ячейки второй строки
Ap.Rows[2] := 'Ляляля';  // Тоже самое
Ap.Columns['B'] := 'aaa';  // Изменятся все ячейки в столбце B
Ap.Columns[2] := 'aaa';  // Тоже самое

Изменение свойств текста
Всё это можно применять как к отдельным ячейкам, так и к группам ячеек, строк, столбцов и т.п. Я буду показывать примеры на Ap.Cells… но Вам никто не мешает использовать Ap.Range[‘D5’], Ap.Range[‘A2:E8’], Ap.Columns[‘B:F’] и т.п.

Delphi
1
2
3
Ap.Cells.Font.Bold := True;  // Жирный шрифт
Ap.Cells.Font.Italic := True; // Курсив
Ap.Cells.Font.Underline := True; // Подчёркивание

Изменение цвета фона ячеек:

Delphi
1
2
Ap.Rows[1].Interior.Color := rgb(192, 255, 192); // Первую строку закрашиваем в зелёный цвет, используя RGB
Ap.Cells[2,1].Interior.Color := clRed; // Ячейку A2 закрашиваем в красный цвет, используя константу clRed

Наверное, вы обращали внимание, что в новом документе появляются 3 листа (их список отображается внизу программы Excel). По умолчанию, мы работаем с активным листом (сразу после создания это первый лист). Но при желании, мы можем использовать и другие листы. Доступ к ним осуществляется с помощью Worksheets[<номер листа>]. Обратите внимание, что нумеруются они начиная с 1 (а не с 0, как привыкли все программисты).

Delphi
1
2
Ap.Worksheets[1].Name := 'Первый лист'; // Изменить название первого листа
Ap.Worksheets[2].Name := 'Ещё один лист'; // Изменить название второго листа

Свойства страницы

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Колонтитулы:
Ap.Worksheets[1].PageSetup.LeftFooter := 'Левый нижний колонтитул';
Ap.Worksheets[1].PageSetup.LeftHeader := 'Левый верхний колонтитул';
Ap.Worksheets[1].PageSetup.CenterFooter := 'Центральный нижний колонтитул';
Ap.Worksheets[1].PageSetup.CenterHeader := 'Центральный верхний колонтитул';
Ap.Worksheets[1].PageSetup.RightFooter := 'Правый нижний колонтитул';
Ap.Worksheets[1].PageSetup.RightHeader := 'Правый верхний колонтитул';
 
Ap.Worksheets[1].PageSetup.Draft := True; // Для черновой печати
Ap.Worksheets[1].PageSetup.BlackAndWhite := True;  // Для чёрно-белой печати
Ap.Worksheets[1].PageSetup.PrintGridlines := True; // При печати будет видна сетка
Ap.Worksheets[1].PageSetup.PrintHeadings := True;  // При печати будут печататься названия столбцов и номера строк
Ap.Worksheets[1].PageSetup.FirstPageNumber := 5;   // Начать нумерацию страниц с пятой
Ap.Worksheets[1].PageSetup.Orientation := 1;  // Ориентация бумаги: 1=Книжная, 2=Альбомная
Ap.Worksheets[1].PageSetup.PaperSize := 9; // Указать размер бумаги. 8=А3, 9=А4, 11=А5

Ниже приведён более полный список размеров бумаги из модуля ExcelXP:

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const
  xlPaper10x14 = $00000010;
  xlPaper11x17 = $00000011;
  xlPaperA3 = $00000008;
  xlPaperA4 = $00000009;
  xlPaperA4Small = $0000000A;
  xlPaperA5 = $0000000B;
  xlPaperB4 = $0000000C;
  xlPaperB5 = $0000000D;
  xlPaperCsheet = $00000018;
  xlPaperDsheet = $00000019;
  xlPaperEnvelope10 = $00000014;
  xlPaperEnvelope11 = $00000015;
  xlPaperEnvelope12 = $00000016;
  xlPaperEnvelope14 = $00000017;
  xlPaperEnvelope9 = $00000013;
  xlPaperEnvelopeB4 = $00000021;
  xlPaperEnvelopeB5 = $00000022;
  xlPaperEnvelopeB6 = $00000023;
  xlPaperEnvelopeC3 = $0000001D;
  xlPaperEnvelopeC4 = $0000001E;
  xlPaperEnvelopeC5 = $0000001C;
  xlPaperEnvelopeC6 = $0000001F;
  xlPaperEnvelopeC65 = $00000020;
  xlPaperEnvelopeDL = $0000001B;
  xlPaperEnvelopeItaly = $00000024;
  xlPaperEnvelopeMonarch = $00000025;
  xlPaperEnvelopePersonal = $00000026;
  xlPaperEsheet = $0000001A;
  xlPaperExecutive = $00000007;
  xlPaperFanfoldLegalGerman = $00000029;
  xlPaperFanfoldStdGerman = $00000028;
  xlPaperFanfoldUS = $00000027;
  xlPaperFolio = $0000000E;
  xlPaperLedger = $00000004;
  xlPaperLegal = $00000005;
  xlPaperLetter = $00000001;
  xlPaperLetterSmall = $00000002;
  xlPaperNote = $00000012;
  xlPaperQuarto = $0000000F;
  xlPaperStatement = $00000006;
  xlPaperTabloid = $00000003;
  xlPaperUser = $00000100;

Распечатать

Delphi
1
Ap.Worksheets[1].PrintOut;

Выделение
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. ]

//9 и 11 — лучшие

\\\\\\\\\\\\\\\\

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

Delphi
1
2
3
4
5
6
try
// попытка установить пароль
Excel.ActiveWorkbook.protect('pass');
except
// действия при неудачной попытке установить пароль
end;

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

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

Delphi
1
Excel.ActiveWorkbook.Unprotect('pass');

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

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

Delphi
1
2
Excel.ActiveSheet.protect('pass'); // установка пароля
Excel.ActiveSheet.Unprotect('pass'); // снятие пароля

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

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

Delphi
1
2
Excel.Rows['5:15'].Select;
Excel.Selection.Delete;

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

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

Delphi
1
2
3
4
5
6
// снимаем закрепление области, если оно было задано
Excel.ActiveWindow.FreezePanes:=False;
// выделяем нужную ячейку, в данном случае D3
Excel.Range['D3'].Select;
// устанавливаем закрепление области
Excel.ActiveWindow.FreezePanes:=True;

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

Для работы с 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;@’// формат время


Содержание

  1. Excel в Delphi. Как изменить внешний вид ячеек?
  2. 1. Как добраться до конкретной границы ячейки?
  3. 2. Как изменить внешний вид границы?
  4. 3. Как сделать заливку ячеек цветом?
  5. 4. Как изменить шрифт в ячейках?
  6. Delphi excel рамки ячеек
  7. Delphi excel рамки ячеек

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

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

1. Как добраться до конкретной границы ячейки?

Перед Вами окно изменения формата ячеек. Вкладка «Границы». Как видите Excel может отрисовывать следующие границы ячеек:

  • верхнюю
  • нижнюю
  • левую
  • правую
  • диагональную из верхнего левого угла в нижний правый
  • диагональную из верхнего правого угла в нижний левый

Если Вы выбираете диапазон ячеек, то дополнительно добавляются ещё два вида границ:

  • внутренние горизонтальные
  • внутренние вертикальные.

Кроме этого, Вы можете определить свой стиль линий для прорисовки и цвет линий. В самом Excel работа с форматом ячеек достаточно прозрачна и ясна. А вот при работе с Excel в Delphi все обстоит не так уж и радужно 🙂

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

Я обычно использую третий вариант (UsedRange), так как работаю с форматами ячеек после того как перешлю необходимые данные в Excel. Кроме того, если пересылается большая таблица с данными, то использовать Cells — значит очень сильно «подвесить» свое приложение, так как надо будет добраться до каждой ячейки и изменить её формат.

Итак, будем использовать UsedRange. Теперь разберемся как нам добраться до границ.

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

xlDiagonalDown 5 Диагональная от верхнего левого угла в нижний правый каждой ячейки в диапазоне
xlDiagonalUp 6 Диагональная из нижнего левого угла в правый верхний каждой ячейки в диапазоне.
xlEdgeBottom 9 Нижняя для всего диапазона ячеек
xlEdgeLeft 7 Левая для всего диапазона ячеек .
xlEdgeRight 10 Правая для всего диапазона ячеек .
xlEdgeTop 8 Верхняя для всего диапазона ячеек .
xlInsideHorizontal 12 Горизонтальные границы всех внутренних ячеек диапазона
xlInsideVertical 11 Вертикальные границы всех внутренних ячеек диапазона

Теперь переносим эти константы в наш модуль работы с Excel:

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

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

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 будет выглядеть следующим образом:

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

Переходим к следующему вопросу.

3. Как сделать заливку ячеек цветом?

Для заливки ячеек цветом можно использовать те же константы, что и при работе с ячейками. Однако ни объект Range ни Cells не имеют свойства ColorIndex. Чтобы получить доступ к заливке ячейки или диапазона необходимо воспользоваться свойством Interior, которое дает доступ к внутренней части объекта. Например, выполнив операцию:

вы получите доступ к внутренней части диапазона занятых ячеек, т.е. по сути, ко всей таблице. А получив такой доступ, Вы можете делать с объектом всё, что угодно. Например изменим цвет нашей таблицы на красный:

4. Как изменить шрифт в ячейках?

Для того, чтобы получить доступ к шрифтам, необходимо добраться до одного из свойств UsedRange, а именно до свойства Font, которое и вернет нам объект, позволяющий изменять шрифт, цвет шрифта и прочие атрибуты . Например, изменим цвет шрифта в таблице на синий:

Аналогичным образом, через объект Font Вы можете также изменить:

  • Толщину шрифта
  • Наклон
  • Размер
  • Сделать текст подчёркнутым и т.д.

Для этого достаточно воспользоваться одним из свойств объекта Fonts.

Источник

Delphi excel рамки ячеек

Здравствуйте мастера Delphi. Помогите пожалуйста. Вот код сохранения информации из ADOQuery в Excel:

procedure TForm1.Button1Click(Sender: TObject);
var
Excel, Workbook, Worksheet: OleVariant;
CurrentRowIndex, CurrentColIndex: integer;
begin
CurrentRowIndex := 1;
Excel := CreateOleObject(«Excel.Application»);
try
Workbook := Excel.Workbooks.Add;
Worksheet := Workbook.Worksheets.Add;
with ADOQuery do
try
Open;
while not Eof do
begin
for CurrentColIndex := 0 to FieldsCount — 1 do
Worksheet.Cells(CurrentRowIndex, CurrentColIndex + 1) := Fields[CurrentColIndex].AsString;
Next;
Inc(CurrentRowIndex);
end;
finally
begin
//здесь нужно написать код выделение ячейки и задания ей границ.
.
//например:
Worksheet.Range[«a1″,»a1»].Font.Color := clBlue;
//поменять цвет шрифта в ячейке, а мне нужно границы поставить на ячейку
end;
end;
finally
Excel.Visible := True;
Excel := Unassigned;
end;
end;

Это макрос в Excel: выделение ячейки и задания ей границ.

Sub Макрос1()
» Макрос1 Макрос
» Макрос записан 26.05.2005 (admin)
Range(«D8»).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
End Sub

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


yk © ( 2005-05-26 07:36 ) [1]

Во-первых, рекомендую сохранять выделение в переменную типа Variant:

var
Range, Cell1, Cell2: Variant;
.

.
Cell1 := WorkBook.ActiveSheet.Cells[beginRow-3,BeginCol-1];
Cell2 := WorkBook.ActiveSheet.Cells[beginRow-1,BeginCol];
Range := WorkBook.ActiveSheet.Range[Cell1, Cell2];
Range.Select;

Во-вторых ,
рекомендую найти статью «По волнам интеграции и почитать её»

В-третьих,
рамку клетки (или диапазона) делаешь так:
.
Range.Select;
Range.Borders.LineStyle:=xlContinuous;
Range.Borders.Weight := xlThick; //или xlMedium
.
В-четвёртых, больше эксперементируй с макросами в Excel — там куча инфы.

В-пятых, код был приведён для выделения всех сторон клеток.
Может кто-нибудь знает, как выделить, например только боковые границы? А то у меня не получилось 🙁


YurikGL © ( 2005-05-26 07:38 ) [2]


> Range(«D8»).Select
> Selection.Borders(xlDiagonalDown).LineStyle = xlNone
> Selection.Borders(xlDiagonalUp).LineStyle = xlNone
> With Selection.Borders(xlEdgeLeft)
> .LineStyle = xlContinuous
> .Weight = xlMedium
> .ColorIndex = xlAutomatic
> End With
> With Selection.Borders(xlEdgeTop)
> .LineStyle = xlContinuous
> .Weight = xlMedium
> .ColorIndex = xlAutomatic
> End With
> With Selection.Borders(xlEdgeBottom)
> .LineStyle = xlContinuous
> .Weight = xlMedium
> .ColorIndex = xlAutomatic
> End With
> With Selection.Borders(xlEdgeRight)
> .LineStyle = xlContinuous
> .Weight = xlMedium
> .ColorIndex = xlAutomatic
> End With
> End Sub

подозреваю, что будет что-то типа
Excel.activesheet.Range(«D8»).Select
Excel.selection.borders.item(xlEdgeRight).linestyle:=xlContinuous
Excel.selection.borders.item(xlEdgeRight).Weight = xlMedium
Excel.selection.borders.item(xlEdgeRight).ColorIndex = xlAutomatic

Дальше по образу и подобию


YurikGL © ( 2005-05-26 07:40 ) [3]


> Может кто-нибудь знает, как выделить, например только боковые
> границы? А то у меня не получилось 🙁

Катя, а макрос писать не пробовала?
xlEdgeLeft — левая граница выбранной области,
xlEdgeBottom — нижняя граница выбранной области.


yk © ( 2005-05-26 08:12 ) [4]

Не додумалась до
> item

Но это у мнея пока умозрительный интерес

А ты где? У меня назрело несколько вопросов и уточнений по базе.
Хоть в Аське появись, плиз

Источник

Delphi excel рамки ячеек

Здравствуйте мастера Delphi. Помогите пожалуйста. Вот код сохранения информации из ADOQuery в Excel:

procedure TForm1.Button1Click(Sender: TObject);
var
Excel, Workbook, Worksheet: OleVariant;
CurrentRowIndex, CurrentColIndex: integer;
begin
CurrentRowIndex := 1;
Excel := CreateOleObject(«Excel.Application»);
try
Workbook := Excel.Workbooks.Add;
Worksheet := Workbook.Worksheets.Add;
with ADOQuery do
try
Open;
while not Eof do
begin
for CurrentColIndex := 0 to FieldsCount — 1 do
Worksheet.Cells(CurrentRowIndex, CurrentColIndex + 1) := Fields[CurrentColIndex].AsString;
Next;
Inc(CurrentRowIndex);
end;
finally
begin
//здесь нужно написать код выделение ячейки и задания ей границ.
.
//например:
Worksheet.Range[«a1″,»a1»].Font.Color := clBlue;
//поменять цвет шрифта в ячейке, а мне нужно границы поставить на ячейку
end;
end;
finally
Excel.Visible := True;
Excel := Unassigned;
end;
end;

Это макрос в Excel: выделение ячейки и задания ей границ.

Sub Макрос1()
» Макрос1 Макрос
» Макрос записан 26.05.2005 (admin)
Range(«D8»).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
End Sub

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


yk © ( 2005-05-26 07:36 ) [1]

Во-первых, рекомендую сохранять выделение в переменную типа Variant:

var
Range, Cell1, Cell2: Variant;
.

.
Cell1 := WorkBook.ActiveSheet.Cells[beginRow-3,BeginCol-1];
Cell2 := WorkBook.ActiveSheet.Cells[beginRow-1,BeginCol];
Range := WorkBook.ActiveSheet.Range[Cell1, Cell2];
Range.Select;

Во-вторых ,
рекомендую найти статью «По волнам интеграции и почитать её»

В-третьих,
рамку клетки (или диапазона) делаешь так:
.
Range.Select;
Range.Borders.LineStyle:=xlContinuous;
Range.Borders.Weight := xlThick; //или xlMedium
.
В-четвёртых, больше эксперементируй с макросами в Excel — там куча инфы.

В-пятых, код был приведён для выделения всех сторон клеток.
Может кто-нибудь знает, как выделить, например только боковые границы? А то у меня не получилось 🙁


YurikGL © ( 2005-05-26 07:38 ) [2]


> Range(«D8»).Select
> Selection.Borders(xlDiagonalDown).LineStyle = xlNone
> Selection.Borders(xlDiagonalUp).LineStyle = xlNone
> With Selection.Borders(xlEdgeLeft)
> .LineStyle = xlContinuous
> .Weight = xlMedium
> .ColorIndex = xlAutomatic
> End With
> With Selection.Borders(xlEdgeTop)
> .LineStyle = xlContinuous
> .Weight = xlMedium
> .ColorIndex = xlAutomatic
> End With
> With Selection.Borders(xlEdgeBottom)
> .LineStyle = xlContinuous
> .Weight = xlMedium
> .ColorIndex = xlAutomatic
> End With
> With Selection.Borders(xlEdgeRight)
> .LineStyle = xlContinuous
> .Weight = xlMedium
> .ColorIndex = xlAutomatic
> End With
> End Sub

подозреваю, что будет что-то типа
Excel.activesheet.Range(«D8»).Select
Excel.selection.borders.item(xlEdgeRight).linestyle:=xlContinuous
Excel.selection.borders.item(xlEdgeRight).Weight = xlMedium
Excel.selection.borders.item(xlEdgeRight).ColorIndex = xlAutomatic

Дальше по образу и подобию


YurikGL © ( 2005-05-26 07:40 ) [3]


> Может кто-нибудь знает, как выделить, например только боковые
> границы? А то у меня не получилось 🙁

Катя, а макрос писать не пробовала?
xlEdgeLeft — левая граница выбранной области,
xlEdgeBottom — нижняя граница выбранной области.


yk © ( 2005-05-26 08:12 ) [4]

Не додумалась до
> item

Но это у мнея пока умозрительный интерес

А ты где? У меня назрело несколько вопросов и уточнений по базе.
Хоть в Аське появись, плиз

Источник

Like this post? Please share to your friends:
  • Excel deleting all empty rows
  • Excel count all in column
  • Excel delete rows with empty cells
  • Excel count all cells in a rows
  • Excel delete row with value