уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Итак, сегодня разберемся как сделать наш лист 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.
5
2
голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Содержание
- Excel в Delphi. Как изменить внешний вид ячеек?
- 1. Как добраться до конкретной границы ячейки?
- 2. Как изменить внешний вид границы?
- 3. Как сделать заливку ячеек цветом?
- 4. Как изменить шрифт в ячейках?
- Delphi excel рамки ячеек
- 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
Но это у мнея пока умозрительный интерес
А ты где? У меня назрело несколько вопросов и уточнений по базе.
Хоть в Аське появись, плиз
Источник
Последовательность действий такая.
Запускаем Excel, на листе рабочей книги выделяем диапазон ячеек и запускаем запись макроса. После запуска, для выделенного диапазона открываем контекстное меню, выбираем: «Формат ячеек…». Откроется окно «Формат ячеек». В этом окне переходим на закладку «Граница» и выполняем такое оформление: внутренние линии тонкие сплошные, внешние обрамляющие линии — толстые сплошные. Жмём «ОК». Затем останавливаем запись макроса. Потом в главном меню надо выбрать: Сервис — Макрос — Редаткор Visual Basic. — Откроется окно редактора Visual Basic. Далее, в главном меню редактора выбираем: View — Project Explorer. — Появится окно проекта. В этом окне дважды щёлкаем модуль с именем «Module1». В этом модуле увидим код макроса:
Visual Basic | ||
|
Из этого кода видно, что линовка выполняется с помощью свойства Borders. При этом вид (стиль) линий задаётся свойством LineStyle, а толщина линий — свойством Weight. Положение линии задаётся параметром, передаваемым свойству Borders.
Теперь разбираемся с константами. Смотрим, например, на строку:
Visual Basic | ||
|
правой кнопкой мыши щёлкаем на слове: xlEdgeLeft и в появившемся контекстном меню выбираем: «Definition». — Откроется окно Браузера Оъектов, в котором мы увидим, что константа xlEdgeLeft относится к группе констант XlBordersIndex. Внизу окна будет показано числовое значение этой константы. Кроме этого в окне будут показаны все константы, относящиеся к группе XlBordersIndex. Выписываем значения нужных нам констант. — Имена констант с числовым значением можно прямо выделять и копировать из строки внизу Браузера Объектов Excel.
Таким же образом выясняем значения констант, связанных со свойствами LineStyle и Weight. В результате в раздел const нашей программы записываем следующее:
Delphi | ||
|
Здесь я расписал для демонстрации все константы в нужных группах. На практике надо выписывать только нужные константы, возможно, с заделом на будущее, если в этом есть смысл.
Теперь, пользуясь созданными константами в программе на Delphi и анализируя код макроса, пишем код разлиновки на Delphi:
Delphi | ||
|
Предположим, для демонстрации, нам надо сформировать двумерный массив, потом распечатать и оформить
его в Excel. Сделать это можно, например так:
Delphi | ||
|
В программах, если специально в постановке задания не указано, что требуется обрабатывать активный лист, всегда надо избегать обращения к таким объектам, как: ActiveWorkbook, ActiveWorksheet, Selected. Потому что обращения к таким объектам будет приводить к ошибкам, в случае, если окно Excel, например, невидимо.
4
← →
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;
Для работы с 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;@’// формат время |
|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
… (продолжение следует) …
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки бан.
Мат в разделе — бан на три месяца…
Как границы нарисовать в Excel из Delphi
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Senior Member Рейтинг (т): 3 |
Подскажите пожалуйста, как в Excel нариовать границы по диапазону Range (таблицу)? Как только не пробовал, у меня не получалось. Вот код, который создаёт и открывает Excel. Не могу догадаться как написать ещё одну строчку для задания границ. procedure TForm1.Button5Click(Sender: TObject); var EAPP: Variant; Sheet: Variant; begin EAPP:=CreateOleObject(‘Excel.Application’); EAPP.Visible:=true; EAPP.WorkBooks.Add; Sheet:=EAPP.Sheets.Item[1]; Sheet.Cells(4,5):=’sdfsdf’; //Sheet.Range[‘A1:C1’].; <- здесь обрисовать границы EAPP.ActiveWorkBook.SaveAs(‘C:et.xls’); end; Корнякова смотрел, там ничего не нашёл наглядного, хотя есть раздел границы и заливка. |
Light13 |
|
// Устанавливаем толщину линии границы ячейки Sheet.Range[‘A1:C1’].Border.Weight:=2; // Устанавливаем тип линии границы ячейки Sheet.Range[‘A1:C1’].Border.LineStyle:=-4119; |
Marriage |
|
Советую копать в сторону Макросов |
Domino |
|
Цитата Marriage @ 09.06.09, 06:47 Советую копать в сторону Макросов
|
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,0206 ] [ 16 queries used ] [ Generated: 16.04.23, 20:58 GMT ]
Формат границ ячейки
Falk0ner, вс, 06/07/2008 — 15:35.
- Доступ к ячейкам Excel
Формат границ ячейки
Формат границ ячейки
Границы ячейки имеют следующие свойства: цвет, стиль и толщина. Чтобы получить доступ к границе, используем коллекцию Borders объекта Range, которая через индекс (Edge) предоставляет доступ к той или иной стороне границы ячейки (левая, правая и т.д. сторона). Edge может принимать одно из 8 определенных значений. Объекты коллекции Borders определяют цвет границы, который может задаваться выбором из определенной в Excel палитры или как комбинация из трех цветов RGB. Свойство ColorIndex содержит индекс цвета: когда нас не устраивает цвет из заранее определенной палитры, тогда используем свойство Color, в которое запишем значение из комбинации трех основных цветов, например: Color= RGB(200,100,125). Стиль границы (LineStyle) имеет тип integer и одно из 8 предопределенных значений (смотрите приложение). Толщина границы (Weight) имеет тип integer и одно из 4 значений. Исходный текст функции для установки параметров границы ячейки смотрите ниже.
Function SetBorderRange(sheet:variant;range:string;
Edge,LineStyle,Weight,ColorIndex,Color:integer):boolean;
begin
SetBorderRange:=true;
try
E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item
[Edge].Weight:=Weight;
E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item
[Edge].LineStyle:=LineStyle;
if ColorIndex>0 then
E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item
[Edge].ColorIndex:=ColorIndex
else
E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item
[Edge].Color:=color;
except
SetBorderRange:=false;
end;
End;