Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Окрасить строки в таблице


Страницы:   1 2

Daria ©   (2005-12-13 12:10:00) 

Привет всем! :))
У меня есть табличка в Excel. Надо, чтобы она открывалась, если в последнем столбце значение отлично от 0, то строка должна окрашиваться в красный цвет. А как это сделать?


msguns   (2005-12-13 12:27:00) [21]

Может, это поможет:

unit XLReps;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics,
 ComObj, Excel2000, OleServer, DB, Variants;

type
 // Выравнивание текста внутри ячейки :
 CXLExp_HorAlignment = (ehaLeft,ehaRight,ehaCenter,ehaNone);   // горизонтальное
 CXLExp_VertAlignment = (evaTop,evaBottom,evaCenter,evaResize,evaMultiLine,evaNone);  // вертикальное
 // Толщина и наклон символов
 CXLExp_FontStyle = (efsBold, efsItalic, efsNone);
 SXLExp_FontStyle = set of CXLExp_FontStyle;
 CXLExp_BorderStyle = (ebsThin, ebsMedium, ebsThick, ebsBlank);
 RXLExp_Text = record
   Hor: CXLExp_HorAlignment;     // Горизонтальное
   Vert: CXLExp_VertAlignment;   // Вертикальное
   WrdWrap: boolean;             // Перенос по словам
 end;

 RXLExp_Font = record
   Name: TFontName;                 // Название шрифта (если '', то Default
   Color: TColor;                // Цвет шрифта
   Size: ShortInt;               // Размер шрифта (если AutoSize=true, игнорируется)
   Style: TFontStyles;           // Стиль (fsBold,fsItalic,fsUnderline,fsStrikeOut)
 end;

 RXLExp_CellsProp = record       // ******** Свойства ячеек
   Align: RXLExp_Text;           // Выравнивание текста внутри ячейки
   Font:  RXLExp_Font;           // Фонт
   Width: integer;               // Ширина ячейки в ед.Excel (если -1, то не уст-ся)
   Height: integer;              // Высота ячейки в ед.Excel (если -1, то не уст-ся)
   Value: OleVariant;            // Значение ячейки
   Color: TColor;                // Цвет фона
   // ВАЖНО ! При установке цвета фона следует учитывать, что палитра цветов
   // Excel`а существенно отличается от принятого в Windows, что может привести
   // к тому, что вместо светло-серого ячейки окрасятся в черный, т.к. полутона
   // екселем интерпретируются в полный, насыщенный цвет палитры RGB
 end;

 RXLExp_Region = record
   ColLeft: word;                // Колонка начала
   RowTop: word;                 // Строка начала
   ColRight: word;               // Колонка конца
   RowBottom: word;              // Строка конца
   JoinCells: boolean;           // Объединения ячеек (только для региона)
   Text: string;                 // Текст в ячейках
 end;

// Открывает Excel-объект
procedure XLExp_OpenReport(TemplateName: OleVariant);

// Закрывает Excel-объект
procedure XLExp_CloseReport;

// Устанавливает свойства ячеек в заданном районе
procedure XLExp_SetCellsProp(Region: RXLExp_Region; CellsProp: RXLExp_CellsProp);

// Возращает объект "Свойства" для указанного района ячеек
procedure XLEXP_GetCellsProp(Region: RXLExp_Region; var CellsProp: RXLExp_CellsProp);

// Задать ширину колонки
procedure XLExp_SetColumnWidth(Col,Width: integer);

// Слить ячейки в одну область
procedure XLExp_MergeCells(Region: RXLExp_Region);

// Запись в указанный район ячеек текста со слитием ячеек, выравниванием по центру
// и заданным размером и типом шрифта
procedure XLExp_CaptionInRange(Region: RXLExp_Region; Txt: string;
      FntSize: word; FntStyle: SXLExp_FontStyle; Mrg: boolean);

// Процедура обводит ячейки указанного района листа решеткой заданной ширины
procedure XLExp_DrowBorder(Region: RXLExp_Region; Brd: CXLExp_BorderStyle);

// Занести текст в указанную ячейку
function XLExp_SetDataInCell(Index1,Index2: OleVariant; Data: string):string;

procedure XLExp_DataSetExport(Range:OleVariant; DataSet:TDataSet);

function XLExp_ShowReport: boolean;

function XLExp_GetLastRow(Range:OleVariant; DataSet:TDataSet):integer;

var
 XLExp_Report: TExcelApplication;
 XLExp_WorkBook: Excel2000.ExcelWorkBook;
 XLExp_Sheet: Excel2000.ExcelWorkSheet;
 XLExp_Col: array [1..26] of string=('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');

implementation

procedure XLExp_OpenReport(TemplateName: OleVariant);
// Процедура создает в первый раз Excel-приложение, а если оно уже существует,
// то коннектится к нему, определяя опции коннекта и создавая объекты "Книга"
// и "Лист". Имя книги задается параметром TemplateName
begin
 if not Assigned(XLExp_Report) then
    XLExp_Report:=TExcelApplication.Create(nil);
 XLExp_Report.ConnectKind:=ckRunningOrNew;
 XLExp_Report.Connect;
 XLExp_WorkBook:=XLExp_Report.Workbooks.Add(TemplateName,0);
 XLExp_Sheet:=XLExp_Workbook.Worksheets.Item[1] as Excel2000.ExcelWorkSheet;
end;

procedure XLExp_CloseReport;
// Процедура закрывет Excel-приложение и освобождает занятые им ресурсы
begin
 if Assigned(XLExp_Report) then
   begin
    XLExp_Sheet:=nil;
    XLExp_Workbook:=nil;
    FreeAndNil(XLExp_Report);
   end;
end;

procedure XLEXP_SetCellsProp(Region: RXLExp_Region; CellsProp: RXLExp_CellsProp);
// Присваивает ячейкам заданного района указанные свойства
begin
 with XLExp_Sheet.Range[XLExp_Col[Region.ColLeft]+IntToStr(Region.RowTop),
                   XLExp_Col[Region.ColRight]+IntToStr(Region.RowBottom)] do
   begin
    case CellsProp.Align.Hor of
      ehaLeft: HorizontalAlignment := xlLeft;
      ehaRight: HorizontalAlignment := xlRight;
      ehaCenter: HorizontalAlignment := xlCenter;
      ehaNone: HorizontalAlignment := xlDefaultAutoFormat;
    end;
    case CellsProp.Align.Vert of
      evaResize: VerticalAlignment := xlGeneral;
      evaMultiLine: VerticalAlignment := xlDistributed;
      evaTop: VerticalAlignment := xlTop;
      evaBottom: VerticalAlignment := xlBottom;
      evaCenter: VerticalAlignment := xlCenter;
      evaNone: VerticalAlignment := xlDefaultAutoFormat;
    end;
    WrapText := CellsProp.Align.WrdWrap;
    Font.Bold := fsBold in CellsProp.Font.Style;
    Font.Italic := fsItalic in CellsProp.Font.Style;
    Font.Strikethrough := fsStrikeOut in CellsProp.Font.Style;
    Font.Subscript := fsUnderline in CellsProp.Font.Style;
    Font.Color := CellsProp.Font.Color;
    Font.Size := CellsProp.Font.Size;
    if CellsProp.Font.Name>'' then Font.Name := CellsProp.Font.Name;
    Interior.Color := CellsProp.Color;
    if CellsProp.Width>-1 then Columns.ColumnWidth := CellsProp.Width;
    if CellsProp.Height>-1 then Rows.RowHeight := CellsProp.Height;
    MergeCells := Region.JoinCells;
    if Region.Text>'' then Value := Region.Text;
   end;
end;


msguns   (2005-12-13 12:16:00) [22]

Даша, радость наша, здравствуй, родная !
Для решения твоей проблемы надо ознакомиться с такими объектами Эеселя:
- Ячейка (Cell) вместе со всеми своими свойствами (чтобы "прочитать" ее значение и цвет)
- Массив ячеек (Region) со свойствами (чтобы определить "последний" столбец и "последнюю" строку)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо