Как из Delphi в Excel'е сделать оформление

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Всем привет! Я выгрузил в Ексель данные и мне надо выделить нужные ячейки цветом. А еще обвести ячейку или строку в рамку, или сделать только одну из границ: левую, правую, нижнюю, верхнюю. Объединить несколько ячеек. Изменить размеры ячейки. Подскажите плиз как это сделать :)
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

Для того что-бы узнать, как что-то сделать из Delphi во Word-e надо во Word-е зайти в меню сервис/макрос/начать запись... Потом сделать во Word-e то, что надо сделать из Delphi и закончить запись макроса. И наконец сервис/макрос/макросы...выбираем записанный...изменить и смотрим, как он устроен. После этого первод синтаксиса VBA в синтаксис Delphi осуществляется просто и непринужденно.
Еще одним хорошим инструментом получения знаний являются компоненты типа TWordApplication. Кидаем его на форму, в любом операторе набираем WordApplication1., нажимаем ctrl+пробел и внимательно читаем. Смысл доступных функций и свойств обычно понятен интуитивно.
Excel-я все это тоже касается...
Blackmind
Сообщения: 4
Зарегистрирован: 30 мар 2005, 18:33
Откуда: Москва
Контактная информация:

Посмотри код. Надеюсь ты найдешь ответ на свой вопрос.
Вообще смотри msdn.microsoft.com
Там описаны свойства объектов.
Если ты всерьез хочешь заняться программированием COM объектов, то советую прочитать книгу "Delphi и технология COM" Н.Елманова, С.Трепалин, А.Тенцер


// Запуск отчета
procedure TForm.RunQueryActionExecute(Sender: TObject);
Var
ExcelApp : TExcelApplication;
ExcelWB : TExcelWorkbook;
ExcelWS : TExcelWorksheet;

Counter : integer;

begin
try
Main_ADODS.Open
except
on EOLE: EOLEException do ShowMessage(EOLE.Message);
on EADO: EADOError do
ShowMessage('Ошибка: '+ EADO.Message);
end;

ExcelApp := TExcelApplication.Create(Self);
ExcelWB := TExcelWorkbook.Create(Self);
ExcelWS := TExcelWorksheet.Create(Self);

with ExcelApp do
begin
Visible[0]:=False; { Скрыть Excel }
Workbooks.Add(null, 0); // null - создаем новую книгу или указываем путь к Excel файлу
ExcelWB.ConnectTo(ActiveWorkbook);
ExcelWS.ConnectTo(ExcelWB.ActiveSheet as _Worksheet);
end;

{
XlLineStyle can be one of these XlLineStyle constants.
xlContinuous default.
xlDash
xlDashDot
xlDashDotDot
xlDot
xlDouble
xlLineStlyeNone
xlSlantDashDot
xlLineStlyeNone

XlBorderWeight can be one of these XlBorderWeight constants.
xlHairline
xlMedium
xlThick
xlThin default

Borders(index)
Index can be one of the following XlBordersIndex constants:
xlDiagonalDown, xlDiagonalUp, xlEdgeBottom, xlEdgeLeft,
xlEdgeRight, , xlInsideHorizontal, or xlInsideVertical.

Color = RGB(255, 0, 0)
}
// Для цифррового формата
ExcelWS.Range['A1','H1'].NumberFormat:='@';
ExcelWS.Range['A1','H1'].Font.Bold := true;
ExcelWS.Range['A1','H1'].HorizontalAlignment := xlCenter;
ExcelWS.Range['A1','H1'].VerticalAlignment := xlTop;
// Обязательно! Иначе ничего не отобразится!!!
ExcelWS.Range['A1','H1'].Style.IncludeBorder := True;

ExcelWS.Range['A1','H1'].Borders.Item[xlEdgeBottom].LineStyle:= xlContinuous;
ExcelWS.Range['A1','H1'].Borders.Item[xlEdgeBottom].Color := RGB(0, 0, 255);
ExcelWS.Range['A1','H1'].Borders.Item[xlEdgeBottom].Weight:= xlThick;

ExcelWS.Range['A1','H1'].Borders.Item[xlEdgeTop].LineStyle:= xlContinuous;
ExcelWS.Range['A1','H1'].Borders.Item[xlEdgeTop].Color := RGB(0, 0, 255);
ExcelWS.Range['A1','H1'].Borders.Item[xlEdgeTop].Weight:= xlThick;

ExcelWS.Range['A1','A1'].Borders.Item[xlEdgeLeft].LineStyle:= xlContinuous;
ExcelWS.Range['A1','A1'].Borders.Item[xlEdgeLeft].Color := RGB(0, 0, 255);
ExcelWS.Range['A1','A1'].Borders.Item[xlEdgeLeft].Weight:= xlThick;

ExcelWS.Range['H1','H1'].Borders.Item[xlEdgeRight].LineStyle:= xlContinuous;
ExcelWS.Range['H1','H1'].Borders.Item[xlEdgeRight].Color := RGB(0, 0, 255);
ExcelWS.Range['H1','H1'].Borders.Item[xlEdgeRight].Weight:= xlThick;

ExcelWS.Cells.item[1, 1]:= 'Магазин';
ExcelWS.Cells.item[1, 2]:= 'Дата отгрузки накладной';
// и т.д.

FOR Counter:= 2 TO Main_ADODS.RecordCount+1 DO
BEGIN
// По умолчанию
ExcelWS.Range['A'+IntToStr(Counter),'H'+IntToStr(Counter)].Borders.Item[xlEdgeBottom].Weight:= xlThin;
ExcelWS.Range['A'+IntToStr(Counter),'H'+IntToStr(Counter)].Borders.Item[xlEdgeBottom].Color := RGB(0, 0, 255);

ExcelWS.Range['A'+IntToStr(Counter),'B'+IntToStr(Counter)].NumberFormat:='@';
ExcelWS.Range['C'+IntToStr(Counter),'F'+IntToStr(Counter)].NumberFormat:='0';
ExcelWS.Range['G'+IntToStr(Counter),'H'+IntToStr(Counter)].NumberFormat:='@';

ExcelWS.Cells.item[Counter, 1]:= Main_ADODS.FieldByName('A1').AsString;
ExcelWS.Cells.item[Counter, 2]:= Main_ADODS.FieldByName('A2').AsString;
ExcelWS.Cells.item[Counter, 3]:= Main_ADODS.FieldByName('A3').AsString;
ExcelWS.Cells.item[Counter, 4]:= Main_ADODS.FieldByName('A4').AsString;
ExcelWS.Cells.item[Counter, 5]:= Main_ADODS.FieldByName('A5').AsString;
ExcelWS.Cells.item[Counter, 6]:= Main_ADODS.FieldByName('A6').AsString;
ExcelWS.Cells.item[Counter, 7]:= Main_ADODS.FieldByName('A7').AsString;
ExcelWS.Cells.item[Counter, 8]:= Main_ADODS.FieldByName('A8').AsString;

Main_ADODS.Next;
END;

ExcelWS.Columns.AutoFit;

Main_ADODS.Close;

ExcelWS.SaveAs('test.xls');
ExcelApp.Visible[0]:=True; { Показать Excel }
ExcelWS.Disconnect;
ExcelWB.Disconnect;
ExcelWS.Free;
ExcelWB.Free;
end;
OTELLO
Сообщения: 59
Зарегистрирован: 11 дек 2004, 11:52
Откуда: Питеррр
Контактная информация:

Blackmind- а самом деле при работе с СОМ об'ектами легче использовать тип Вариант (минус в отсутствии совместимости с пред. версиями Дельфи), т.к. при работе с этим типом делается всё просто супер легко- идём в Ексель,пишем там код на Бэйсике,или создаем его с помощью рекордера и копируем в код дельфи!!!Всё. Только НЕОБХОДИМО следить за константами Бэйсика- их нету в Дельфи,соответственно.Вот...
Ответить