Текущий архив: 2006.01.01;
Скачать: CL | DM;
Вниз
Окрасить строки в таблице Найти похожие ветки
← →
Daria (2005-12-13 12:10) [0]Привет всем! :))
У меня есть табличка в Excel. Надо, чтобы она открывалась, если в последнем столбце значение отлично от 0, то строка должна окрашиваться в красный цвет. А как это сделать?
← →
msguns © (2005-12-13 12:16) [1]Даша, радость наша, здравствуй, родная !
Для решения твоей проблемы надо ознакомиться с такими объектами Эеселя:
- Ячейка (Cell) вместе со всеми своими свойствами (чтобы "прочитать" ее значение и цвет)
- Массив ячеек (Region) со свойствами (чтобы определить "последний" столбец и "последнюю" строку)
← →
msguns © (2005-12-13 12:27) [2]Может, это поможет:
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:54) [3]Продолжение:
procedure XLEXP_GetCellsProp(Region: RXLExp_Region; var CellsProp: RXLExp_CellsProp);
// Возращает объект "Свойства" для указанного района ячеек
begin
with XLExp_Sheet.Range[XLExp_Col[Region.ColLeft]+IntToStr(Region.RowTop),
XLExp_Col[Region.ColRight]+IntToStr(Region.RowBottom)] do
begin
CellsProp.Align.WrdWrap := WrapText;
CellsProp.Font.Style := [];
if Font.Bold then Include(CellsProp.Font.Style,fsBold);
if Font.Italic then Include(CellsProp.Font.Style,fsItalic);
if Font.Strikethrough then Include(CellsProp.Font.Style,fsStrikeOut);
if Font.Subscript then Include(CellsProp.Font.Style,fsUnderline);
CellsProp.Font.Color := Font.Color;
CellsProp.Color := Interior.Color;
if CellsProp.Width>-1 then Columns.ColumnWidth := CellsProp.Width;
if CellsProp.Height>-1 then Rows.RowHeight := CellsProp.Height;
Region.JoinCells := MergeCells;
end;
end;
procedure XLExp_SetColumnWidth(Col,Width: integer);
// Изменить ширину колонки
begin
XLExp_Sheet.Range[XLExp_Col[Col]+"1",XLExp_Col[Col]+"1"].ColumnWidth := Width;
end;
procedure XLExp_MergeCells(Region: RXLExp_Region);
// Слить ячейки
begin
XLExp_Sheet.Range[XLExp_Col[Region.ColLeft]+IntToStr(Region.RowTop),
XLExp_Col[Region.ColRight]+IntToStr(Region.RowBottom)].MergeCells := true;
end;
procedure XLExp_CaptionInRange(Region: RXLExp_Region; Txt: string;
FntSize: word; FntStyle: SXLExp_FontStyle; Mrg: boolean);
// Запись в указанный район ячеек текста со слитием ячеек, выравниванием по центру
// и заданным размером и типом шрифта
begin
with XLExp_Sheet.Range[XLExp_Col[Region.ColLeft]+IntToStr(Region.RowTop),
XLExp_Col[Region.ColRight]+IntToStr(Region.RowBottom)] do
begin
if Mrg then MergeCells := true;
Formula := Txt;
HorizontalAlignment := xlCenter;
VerticalAlignment := xlCenter;
Font.Size := FntSize;
Font.Bold := (efsBold in FntStyle);
Font.Italic := (efsItalic in FntStyle);
end;
end;
procedure XLExp_DrowBorder(Region: RXLExp_Region; Brd: CXLExp_BorderStyle);
// Процедура обводит указанный район листа рамкой заданного типа
begin
with XLExp_Sheet.Range[XLExp_Col[Region.ColLeft]+IntToStr(Region.RowTop),
XLExp_Col[Region.ColRight]+IntToStr(Region.RowBottom)].Borders do
begin
LineStyle := xlContinuous;
case Brd of
ebsThin: Weight := xlThin;
ebsMedium: Weight := xlMedium;
ebsThick: Weight := xlThick;
end;
end;
end;
function XLExp_SetDataInCell(Index1,Index2: OleVariant; Data: string): string;
// Записывает заданный текст в указанную ячейку
begin
XLExp_Report.ActiveWorkbook; // Активировать текущую книгу
// Лист книги, в котором править ячейку
XLExp_Sheet := XLExp_Workbook.Worksheets.Item[1] as Excel2000.ExcelWorkSheet;
// Присвоение ячейке заданного значения
XLExp_Sheet.Cells.Item[Index1,Index2].Value := Data;
end;
procedure XLExp_DataSetExport(Range: OleVariant; DataSet: TDataSet);
// Експорт данных из датасета в Excel-лист
// Область листа (Range) задается параметром Range
// Range задает область листа (непрерывная последовательность ячеек листа)
// начиная с которой будет итти заполнение из НД. При этом самой левой колонкой
// может любая колонка листа, а строкой - любая строка листа.
// Ячейки этой "линии" колонок должны содержать имена полей НД, данные которых
// будут помещаться в эти колонки
var
RangeLen,Column,Row,lich,i,x: integer;
ValueArray: OleVariant;
Str: string;
FieldArray: array [0..20] of string;
bm: TBookmark;
begin
// Строка начала района
Row:=XLExp_Sheet.Range[Range,EmptyParam].Row;
// Колонка начала района (левая крайняя)
Column:=XLExp_Sheet.Range[Range,EmptyParam].Column;
// Колонка конца района (правая крайняя)
RangeLen:=Column+(XLExp_Sheet.Range[Range,EmptyParam].Columns.Count-1);
// Переписать в массив FieldArray содержимое ячеек 1-й строки указанной области
// листа Excel (имена полей датасета).
// Предполагается, что их не должно быть более 21
x := 0;
for i := Column to RangeLen do
begin
Str := XLExp_Sheet.Cells.Item[Row,i].Formula; // Содержимое ячейки
Delete(Str,1,1); // Обрезаем первый (служебный) символ
FieldArray[x] := Str;
x := x+1;
end;
// Создать дин.массив размерностью RxC, где R - кол-во строк датасета,
// а C - кол-во колонок, заданное Range
ValueArray := VarArrayCreate([0,DataSet.RecordCount-1,0,XLExp_Sheet.Range[Range,EmptyParam].Columns.Count],varVariant);
lich := 0; // Индекс строки НД
// Подготовка датасета к сканированию
with DataSet do
begin
bm := GetBookmark; // Запомнить текущую запись
DisableControls;
First;
while not Eof do
begin
for i := 0 to XLExp_Sheet.Range[Range,EmptyParam].Columns.Count do
// Для каждой колонки Region определяется имя поля НД и значение
// этого поля записывается в дин.массив по адресу=индексу колонки
begin
if (FieldArray[i]<>"") then // Колонка имеет ссылку на имя поля ?
ValueArray[lich,i] := FieldByName(FieldArray[i]).AsString
else
ValueArray[lich,i] := "";
end;
lich := lich+1;
Next;
end;
EnableControls;
GotoBookmark(bm); // Вернуться в исходную (до сканирования) запись
FreeBookmark(bm);
end;
{ Выражение :
xlSheet.Range[Col[Column]+IntToStr(Row),Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)]
представляет "экселовскую" адресацию типа "A10","H17", где буква - индекс колонки, а
число-индекс строки на листе Excel.
В нативном виде (в самом Excel`е) этот регион будет = "A10:H17"
}
// Перегнать в лист Excel (Ragion) значения из массива ValueArray
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Value := ValueArray;
// Присвоить всем ячейкам региона Region цвет символов как у левой верхней ячейки
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Font.Color := XLExp_Sheet.Range[Range,EmptyParam].Font.Color;
// Присвоить всем ячейкам региона Region цвет как у левой верхней ячейки
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Interior.Colo r := XLExp_Sheet.Range[Range,EmptyParam].Interior.Color;
// Присвоить всем ячейкам региона Region рамки как у левой верхней ячейки
XLExp_Sheet.Range[XLExp_Col[Column]+IntToStr(Row),XLExp_Col[RangeLen]+IntToStr(Row+DataSet.RecordCount-1)].Borders.LineS tyle := XLExp_Sheet.Range[Range,EmptyParam].Borders.LineStyle;
end;
end.
← →
msguns © (2005-12-13 12:55) [4]Окончание
function XLExp_ShowReport: boolean;
// Показать лист Excel`а для правки, сохранения и печати
begin
result := false;
if Assigned (XLExp_Report) then
begin
XLExp_Report.WindowState[0] := Excel2000.xlMaximized;
XLExp_Report.Visible[0] := true;
XLExp_Report.ScreenUpdating[0] := true;
result := true;
end;
end;
function XLExp_GetLastRow(Range: OleVariant; DataSet: TDataSet): integer;
// Возвращает индекс следующей за последней строкой (Row) листа,
// занятой (или которая будет занята после заливки данных из НД) данными.
// Начиная с этой строки можно располагать итоги или подвал документа
begin
XLExp_GetLastRow:=XLExp_Sheet.Range[Range,EmptyParam].Row+DataSet.RecordCount;
end;
← →
umbra © (2005-12-13 12:58) [5]2 msguns © (13.12.05 12:55) [4]
на ближайшие две недели работы автору вопроса должно хватить :))
← →
Daria (2005-12-13 13:25) [6]ой-ой-ой, а обязательно что-то там выравнивать?? и вообще, что-то слишком много за раз для меня.....
спасибо большое!!! попытаюсь разобраться.... видимо, до встречи в следующем году
← →
msguns © (2005-12-13 13:29) [7]Тогда до кучи:
// Содержит процедуры автовывода отображаемого в DBGrid` НД
// в книгу Excel
unit XLRepGrid;
interface
uses
Windows, Messages, SysUtils, Classes, ComObj, Excel2000, OleServer,
DB, DBGrids, Variants, XLReps, Graphics;
procedure XLRep_ExportFromDBGrid(Grid: TDBGrid; RepCaption: string);
implementation
procedure XLRep_ExportFromDBGrid(Grid: TDBGrid; RepCaption: string);
// Выводятся только колонки с Visible=true и Field.Tag>0 (последнее для
// блокировки вывода "фантомных" колонок, где отображается не поле
// датасета, а, например, картинка
type
// Описатель печатной колонки
TXLRep_GridCol = ^RXLRep_GridCol;
RXLRep_GridCol = record
Title: string;
FldName: string;
FldNdx: Shortint;
Width: integer;
AgrSum: extended;
AgrFlg: boolean;
Alignment: TAlignment;
Font: RXLExp_Font;
end;
var
i,r: integer;
bm: TBookMark;
GridRep: TList;
pc: TXLRep_GridCol;
rg: RXLExp_Region;
cs: RXLExp_CellsProp;
VA: OleVariant;
begin
GridRep := TList.Create;
// Анализ грида и связанного с ним датасета
for i := 0 to Grid.Columns.Count-1 do
if Grid.Columns[i].Visible and (Grid.Columns[i].Field.Tag>0) then
begin
NEW(pc);
pc.Title := Grid.Columns[i].Title.Caption;
pc.FldName := Grid.Columns[i].FieldName;
pc.FldNdx := Grid.Columns[i].Field.Index;
pc.Width := Grid.Columns[i].Width;
pc.AgrSum := 0;
pc.AgrFlg := (Grid.Columns[i].Field.Tag>1);
pc.Alignment := Grid.Columns[i].Alignment;
with pc.Font do
begin
Size := Grid.Columns[i].Font.Size;
Name := Grid.Columns[i].Font.Name;
Style := Grid.Columns[i].Font.Style;
end;
GridRep.Add(pc);
end;
// Подконнектиться к Экселю с открытием новой книги
XLExp_OpenReport("");
// Определяем ширину колонок в Excel как ширина колонки грида в пикселах,
// деленная на 8 (Эксель "меряет" ширину в кол-ве условных символов цифр
// фонта по умолчанию (Arrial Cyr, обычный, 10)
for i := 0 to GridRep.Count-1 do
XLExp_SetColumnWidth(i+1,TXLRep_GridCol(GridRep[i])^.Width div 8);
// ************************ ЗАГОЛОВОК ОТЧЕТА ***************************
with rg do
begin
ColLeft := 1; ColRight := GridRep.Count; // Ширина на все колонки
RowTop := 1; RowBottom := 1; // 1-я строка листа под заголовок
JoinCells := true; // Объединить ячейки
Text := RepCaption; // Текст заголовка
end;
with cs do
begin
Align.Hor := ehaCenter; Align.Vert := evaMultiLine; // Центровка по высоте и ширине
Font.Size := 13; Font.Style := [fsBold,fsItalic]; // Шрифт крупный, жирный, наклонный
Font.Color := clWindowText; // Черный цвет символов
Color := clWhite; // Белый фон
Width := -1; // Ширину колонок не менять
Height := 42; // Высота строки двойная
end;
XLEXP_SetCellsProp(rg,cs); // Разметка ячеек и занесение текста
← →
msguns © (2005-12-13 13:30) [8]Окончание:
// ************************ ШАПКА ТАБЛИЦЫ ***************************
// Вторую строку отводим под шапку таблицы, размечаем ячейки под
// названия колонок
// и помещаем туда название колонок из титула грида.
with rg do
begin
RowTop := 2; RowBottom := 2; // Вторая строка листа под шапку
JoinCells := false; Text := ""; // Ячейки не объединять и не заполнять
end;
with cs do
begin
Align.Hor := ehaCenter; Align.Vert := evaMultiLine; // Выравнивать по центру и с переносом слов
Font.Size := 10; Font.Style := [fsBold]; // Шрифт чуть крупнее обычного и жирный
Height := 28; // Высота строки двойная
// Color := clSilver; // Серый фон шапки
end;
XLEXP_SetCellsProp(rg,cs); // Разметка ячеек
XLExp_DrowBorder(rg,ebsMedium); // Нанесение сетки
// Занесение заголовков в шапку
for i := 0 to GridRep.Count-1 do
XLExp_SetDataInCell(rg.RowTop,i+1,TXLRep_GridCol(GridRep[i])^.Title);
// *********** СОЗДАНИЕ МАССИВА И ЗАПОЛНЕНИЕ ЕГО ДАННЫМИ ДАТАСЕТА ************
with Grid.DataSource.DataSet do
begin
bm := GetBookmark; // Запомнить текущую запись
DisableControls; // Запрет отображения
Last; First; // Извлечь все записи с сервера
r := 0;
// Создать пустой массив вариантов
VA := VarArrayCreate([0,RecordCount-1,0,GridRep.Count],varVariant);
while not eof do
begin
inc(r);
for i := 0 to GridRep.Count-1 do
begin
pc := TXLRep_GridCol(GridRep[i]);
VA[RecNo-1,i] := FieldByName(pc.FldName).AsString;
if pc.AgrFlg then pc.AgrSum := pc.AgrSum +FieldByName(pc.FldName).AsFloat;
end;
Next;
end;
GotoBookmark(bm); // Вернуться в исходную запись
FreeBookmark(bm);
EnableControls; // Разрешение отображения
end;
// Выставить свойства колонок таблицы аналогично колонкам грида
for i :=0 to GridRep.Count-1 do
begin
with rg do
begin
ColLeft := i+1; ColRight := ColLeft;
RowTop := 3; RowBottom := RowTop+r-1;
JoinCells := false; Text := "";
end;
with cs do
begin
Font := TXLRep_GridCol(GridRep[i])^.Font;
Font.Color := clWindowText;
case TXLRep_GridCol(GridRep[i])^.Alignment of
taLeftJustify: Align.Hor := ehaLeft;
taRightJustify: Align.Hor := ehaRight;
taCenter: Align.Hor := ehaCenter;
end;
Height := 13;
end;
XLEXP_SetCellsProp(rg,cs);
end;
with rg do
begin
ColLeft := 1; ColRight := GridRep.Count;
RowTop := 3; RowBottom := RowTop+r-1;
end;
XLExp_DrowBorder(rg,ebsThin); // Покрыть таблицу сеткой
// Заполнение ячеек данными массива
XLExp_Sheet.Range[XLExp_Col[rg.ColLeft]+IntToStr(rg.RowTop),
XLExp_Col[rg.ColRight]+IntToStr(rg.RowBottom)].Value := VA;
VarArrayRedim(VA,0); // Убить массив
// Создать массив итогов
VA := VarArrayCreate([0,GridRep.Count-1],varVariant);
// Записать в него итоги по колонкам
for i := 0 to GridRep.Count-1 do
if TXLRep_GridCol(GridRep[i])^.AgrFlg then
VA[i] := FloatToStr(TXLRep_GridCol(GridRep[i])^.AgrSum)
else
VA[i] := "";
// Разметить строку для итогов
with rg do // Выделяем строку, через одну от последней табличной.
begin
ColLeft := 1; ColRight := GridRep.Count;
RowBottom := RowTop+r+1; RowTop := RowBottom;
end;
// Устанавливаем свойства ячеек, аналогично табличным колонкам
XLEXP_SetCellsProp(rg,cs);
// Заполнение ячеек итогов данными массива
XLExp_Sheet.Range[XLExp_Col[rg.ColLeft]+IntToStr(rg.RowTop),
XLExp_Col[rg.ColRight]+IntToStr(rg.RowBottom)].Value := VA;
VarArrayRedim(VA,0); // Убить массив
// Вывестти отчет на просмотр
XLExp_ShowReport;
end;
end.
← →
Daria (2005-12-13 13:43) [9]так, стоп....
все это меня уже и так убило!
msguns, миленький, объясни по полочкам что куда мы там делаем? я не хочу ничего выравнивать, объясни только как читать из данные их excel
← →
msguns © (2005-12-13 14:00) [10]Прежде чем работать с экселем, тебе необходимо познакомиться с его объектами и понять зачем они нужны и что с ними можно делать.
← →
alex_*** © (2005-12-13 14:00) [11]На будущее: когда надо что-то с Ексель сделать, надо сначала запустить на запись макрос в нем, сделать что хочешь на тестовом промере, потом посмотреть текст макроса. Очень часто помогает
← →
umbra © (2005-12-13 14:12) [12]у объекта range есть свойство FormatConditions, которое в зависимости от содержимого ячеек в диапазоне форматирует их каким либо образом.
Чтобы ячейки в диапазоне А1:А10 были красными, если в них нули и зелеными если нет, можно сделать следующее:var
myrange, myformatcondition: variant;
{..........................}
myrange := Worksheets[1].Range("a1:a10");
myformatcondition := myrange.FormatConditions.Add(xlCellValue, xlEqual, "0");
myformatconditions.Interior.Colorindex := 3;
myformatcondition := myrange.FormatConditions.Add(xlCellValue, xlNotEqual, "0");
myformatconditions.Interior.Colorindex := 10;
{..............................}
← →
Daria (2005-12-13 14:44) [13]umbra, спасибо большое! с этим ясно. а вот как открыть файл excel и посмотреть последнии столбцы с 0?
← →
umbra © (2005-12-13 15:03) [14]
> посмотреть последнии столбцы с 0?
не понял вопроса. последние столбцы где? на листе? и посмотреть что - нули в них или нет?
← →
Daria (2005-12-13 15:07) [15]да. мне нужно в таблице окрасить строки, в последнем столбце которых 0. а вот как их найти-то?
← →
Игорь Шевченко © (2005-12-13 15:18) [16]
> мне нужно в таблице окрасить строки, в последнем столбце
> которых 0
А номер последнего столбца секрет ?
← →
Daria (2005-12-13 15:19) [17]у меня 11 столбцов
← →
clickmaker © (2005-12-13 15:21) [18]
> Daria (13.12.05 15:19) [17]
> у меня 11 столбцов
блин, ну зачем же сразу секрет-то раскрывать :)
← →
msguns © (2005-12-13 15:24) [19]>Daria (13.12.05 15:19) [17]
>у меня 11 столбцов
А если потом будет 12 ? Или 9 ? Опять в форум с криком "Хелп !" ? А вот взять и разобраться хотя бы в предоставленных тебе работающих кодах нельзя, да ? Я уже молчу о куче прекрасных статей на эту тему.
Ну хот здесь почитай, родная !
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=502
← →
umbra © (2005-12-13 15:32) [20]примерно так
var
myrange: variant;
i, colcount, rowcount: integer;
{..........................}
myrange := Worksheets[1].UsedRange;
colcount := myrange.Columns.Count;
rowcount := myrange.Rows.Count;
for i:= 1 to rowcount do
if myrange.Cells[i, colcount].Value = 0 then
myrange.Rows[i].Interior.Colorindex := 3;
myrange := UnAssigned;
{..............................}
← →
Rater © (2005-12-13 15:56) [21]а может просто в Экселе макрос написать?
а ещё там есть формат ячейки где отрицательные красненьким выделяются.
Может порыть Эксель?
ЗЫ Всё зависит от контекста задачи.
← →
Игорь Шевченко © (2005-12-13 16:03) [22]
> у меня 11 столбцов
Первый раз вижу даму с одиннадцатью столбцами. Забавная какая анатомия.
Я из скромности не буду спрашивать их местонахождение.
А по сабжу - оно котлеты жарить неплохо или пирожки.
Страницы: 1 вся ветка
Текущий архив: 2006.01.01;
Скачать: CL | DM;
Память: 0.58 MB
Время: 0.041 c