Примеры кода для ZEXMLSS
ZEXMLSS 0.0.8 проверялся на:
- Lazarus 1.2.6 (FPC 2.6 + Debian 8 / Windows)
- Delphi 7, XE, XE2
- C++Builder XE
Примеры кода:
Примеры использования условного форматирования в ZEXMLSS (только для ODS!):
Условное форматирование для ODS в libreOffice Calc.
Пример кода для Lazarus/Delphi
|
Пример кода для C++Builder-a
|
//uses zexmlss, zeodfs, zexmlssutils;
procedure TForm1.btnCreateClick(Sender: TObject);
var
_path: string;
ze: TZEXMLSS;
_fname: string;
_sheet: TZSheet;
_cfStyle: TZConditionalStyle;
_cfItem: TZConditionalStyleItem;
i, j: integer;
begin
ze := nil;
_path := ExtractFilePath(Paramstr(0));
Randomize();
try
ze := TZEXMLSS.Create(nil);
//Подготовка стилей
ze.Styles.Count := 3;
//Для отрицательных чисел - красным цветом по серебристому фону,
//выравнивание - по центру
ze.Styles[0].Font.Color := clRed;
ze.Styles[0].BGColor := clSilver;
ze.Styles[0].Alignment.Horizontal := ZHCenter;
//Для чисел от 10 до 30 - светло-зелёным полужирным курсивом по чёрному фону,
//выравнивание - слева
ze.Styles[1].Font.Color := clLime;
ze.Styles[1].Font.Style := [fsBold, fsItalic];
ze.Styles[1].BGColor := clBlack;
ze.Styles[1].Alignment.Horizontal := ZHLeft;
//Для чисел > 40 - Жёлтым по фиолетовому,
//выравнивание - справа
ze.Styles[2].Font.Color := clYellow;
ze.Styles[2].BGColor := clPurple;
ze.Styles[2].Alignment.Horizontal := ZHRight;
ze.Sheets.Count := 1;
_sheet := ze.Sheets[0];
_sheet.RowCount := 25;
_sheet.ColCount := 25;
for i := 2 to 20 do
for j := 2 to 20 do
begin
_sheet[i, j].Data := IntToStr(Random(100) - 50);
_sheet[i, j].CellType := ZENumber;
end;
//Добавляем условное форматирование:
//Область применения условного форматирования:
// с ячейки [5, 5] ширина = 15, высота = 15
_cfStyle := _sheet.ConditionalFormatting.Add(5, 5, 15, 15);
//1-ое условие: применить 0-ой стиль для значений ячеек < 0
_cfItem := _cfStyle.Add();
// Применяем 0-ой стиль
_cfItem.ApplyStyleID := 0;
// Используем условие - оператор
_cfItem.Condition := ZCFCellContentOperator;
// Оператор = "<" (меньше)
_cfItem.ConditionOperator := ZCFOpLT;
// значение = 0
_cfItem.Value1 := '0';
//2-ое условие: применить 1-ой стиль для значений ячеек от 10 до 30
_cfItem := _cfStyle.Add();
_cfItem.ApplyStyleID := 1;
// Используем условие - значение ячейки между 10 и 30
_cfItem.Condition := ZCFCellContentIsBetween;
// значение1 = 10, значение2 = 30
_cfItem.Value1 := '10';
_cfItem.Value2 := '30';
//3-ое условие: применить 2-ой стиль для значений ячеек > 40
_cfItem := _cfStyle.Add();
_cfItem.ApplyStyleID := 2;
_cfItem.Condition := ZCFCellContentOperator;
// Оператор = ">" (больше)
_cfItem.ConditionOperator := ZCFOpGT;
_cfItem.Value1 := '40';
_fname := _path + 'tst_fcf_main.ods';
DeleteFile(_fname);
SaveXmlssToODFS(ze, _fname);
finally
if (Assigned(ze)) then
FreeAndNil(ze);
end;
end;
|
/*
#include <zexmlss.hpp>
#include <zeodfs.hpp>
*/
void __fastcall TForm1::btnCreateClick(TObject *Sender)
{
Randomize();
String _path = ExtractFilePath(ParamStr(0));
TZEXMLSS *ze = new TZEXMLSS(NULL);
try
{
//Подготовка стилей
ze->Styles->Count = 3;
//Для отрицательных чисел - красным цветом по серебристому фону,
//выравнивание - по центру
ze->Styles->Items[0]->Font->Color = clRed;
ze->Styles->Items[0]->BGColor = clSilver;
ze->Styles->Items[0]->Alignment->Horizontal = ZHCenter;
//Для чисел от 10 до 30 - светло-зелёным полужирным курсивом по чёрному фону,
//выравнивание - слева
ze->Styles->Items[1]->Font->Color = clLime;
ze->Styles->Items[1]->Font->Style = TFontStyles() << fsBold << fsItalic;
ze->Styles->Items[1]->BGColor = clBlack;
ze->Styles->Items[1]->Alignment->Horizontal = ZHLeft;
//Для чисел > 40 - Жёлтым по фиолетовому,
//выравнивание - справа
ze->Styles->Items[2]->Font->Color = clYellow;
ze->Styles->Items[2]->BGColor = clPurple;
ze->Styles->Items[2]->Alignment->Horizontal = ZHRight;
ze->Sheets->Count = 1;
TZSheet *_sheet = ze-Sheets->Sheet[0];
_sheet->RowCount = 25;
_sheet->ColCount = 25;
int i, j;
for (i = 2; i <= 20; i++)
for (j = 2; j <= 20; j++)
{
_sheet->Cell[i][j]->Data = IntToStr(Random(100) - 50);
_sheet->Cell[i][j]->CellType = ZENumber;
}
//Добавляем условное форматирование:
//Область применения условного форматирования:
// с ячейки [5, 5] ширина = 15, высота = 15
TZConditionalStyle *_cfStyle = _sheet->ConditionalFormatting->Add(5, 5, 15, 15);
//1-ое условие: применить 0-ой стиль для значений ячеек < 0
TZConditionalStyleItem *_cfItem = _cfStyle->Add();
// Применяем 0-ой стиль
_cfItem->ApplyStyleID = 0;
// Используем условие - оператор
_cfItem->Condition = ZCFCellContentOperator;
// Оператор = "<" (меньше)
_cfItem->ConditionOperator = ZCFOpLT;
// значение = 0
_cfItem->Value1 = "0";
//2-ое условие: применить 1-ой стиль для значений ячеек от 10 до 30
_cfItem = _cfStyle->Add();
_cfItem->ApplyStyleID = 1;
// Используем условие - значение ячейки между 10 и 30
_cfItem->Condition = ZCFCellContentIsBetween;
// значение1 = 10, значение2 = 30
_cfItem->Value1 = "10";
_cfItem->Value2 = "30";
//3-ое условие: применить 2-ой стиль для значений ячеек > 40
_cfItem = _cfStyle->Add();
_cfItem->ApplyStyleID = 2;
_cfItem->Condition = ZCFCellContentOperator;
// Оператор = ">" (больше)
_cfItem->ConditionOperator = ZCFOpGT;
_cfItem->Value1 = "40";
String _fname = _path + "tst_fcf_main.ods";
DeleteFile(_fname);
SaveXmlssToODFS(ze, _fname);
}
__finally
{
delete ze;
}
}
|
Использование условий ZCFContainsText (Содержит), ZCFNotContainsText (Не содержит), ZCFBeginsWithText (Начинается с),
ZCFEndsWithText (Заканчивается на).
Условное форматирование для текста
Пример кода для Lazarus/Delphi
|
Пример кода для C++Builder-a
|
//uses zexmlss, zeodfs, zexmlssutils;
procedure TForm1.btnCreateClick(Sender: TObject);
const
const_arr_size = 10;
const_text_array: array [0..const_arr_size - 1] of string =
(
'text begin',
'text some',
'some text some',
'some TEXT some',
'sdstixtjk',
'bla-bla-bla',
'end text',
'end TeXt',
'end tixt',
'text'
);
var
_path: string;
ze: TZEXMLSS;
_fname: string;
_sheet: TZSheet;
_cfStyle: TZConditionalStyle;
_cfItem: TZConditionalStyleItem;
i, j: integer;
begin
ze := nil;
_path := ExtractFilePath(Paramstr(0)) ;
try
ze := TZEXMLSS.Create(nil);
//Подготовка стилей
ze.Styles.Count := 2;
ze.Styles[0].Font.Color := clYellow;
ze.Styles[0].BGColor := clBlack;
ze.Styles[0].Alignment.Horizontal := ZHCenter;
ze.Styles[1].Alignment.Horizontal := ZHCenter;
ze.Styles[1].Font.Style := [fsBold];
ze.Sheets.Count := 1;
_sheet := ze.Sheets[0];
_sheet.RowCount := 25;
_sheet.ColCount := 25;
for i := 1 to 4 do
begin
_sheet.Columns[i].WidthMM := 40;
_sheet[i, 3].CellStyle := 1;
end;
_sheet[1, 3].Data := 'Содержит текст';
_sheet[2, 3].Data := 'Не содержит текст';
_sheet[3, 3].Data := 'Начинается с';
_sheet[4, 3].Data := 'Заканчивается';
for i := 1 to 4 do
for j := 0 to const_arr_size - 1 do
_sheet[i, j + 4].Data := const_text_array[j];
//Добавляем условные форматирования:
//Область применения условного форматирования:
// с ячейки [1, 4] ширина = 1, высота = 10
_cfStyle := _sheet.ConditionalFormatting.Add(1, 4, 1, 10);
//применить 0-ой стиль для ячеек, содержащих текст
_cfItem := _cfStyle.Add();
_cfItem.ApplyStyleID := 0;
_cfItem.Condition := ZCFContainsText;
_cfItem.Value1 := 'text';
//Добавляем условное форматирование: ячейка не содержит текст
_cfStyle := _sheet.ConditionalFormatting.Add(2, 4, 1, 10);
_cfItem := _cfStyle.Add();
_cfItem.ApplyStyleID := 0;
_cfItem.Condition := ZCFNotContainsText;
_cfItem.Value1 := 'text';
//Добавляем условное форматирование: ячейка начинается c
_cfStyle := _sheet.ConditionalFormatting.Add(3, 4, 1, 10);
_cfItem := _cfStyle.Add();
_cfItem.ApplyStyleID := 0;
_cfItem.Condition := ZCFBeginsWithText;
_cfItem.Value1 := 'text';
//Добавляем условное форматирование: ячейка заканчивается на
_cfStyle := _sheet.ConditionalFormatting.Add(4, 4, 1, 10);
_cfItem := _cfStyle.Add();
_cfItem.ApplyStyleID := 0;
_cfItem.Condition := ZCFEndsWithText;
_cfItem.Value1 := 'text';
_fname := _path + 'tst_fcf_text.ods';
DeleteFile(_fname);
SaveXmlssToODFS(ze, _fname);
finally
if (Assigned(ze)) then
FreeAndNil(ze);
end;
end;
|
/*
#include <zexmlss.hpp>
#include <zeodfs.hpp>
*/
void __fastcall TForm1::btnCreateClick(TObject *Sender)
{
const int const_arr_size = 10;
const String const_text_array[const_arr_size] = {
"text begin",
"text some",
"some text some",
"some TEXT some",
"sdstixtjk",
"bla-bla-bla",
"end text",
"end TeXt",
"end tixt",
"text"
};
String _path = ExtractFilePath(ParamStr(0));
TZEXMLSS *ze = new TZEXMLSS(NULL);
try
{
//Подготовка стилей
ze->Styles->Count = 2;
ze->Styles->Items[0]->Font->Color = clYellow;
ze->Styles->Items[0]->BGColor = clBlack;
ze->Styles->Items[0]->Alignment->Horizontal = ZHCenter;
ze->Styles->Items[1]->Alignment->Horizontal = ZHCenter;
ze->Styles->Items[1]->Font->Style = TFontStyles() << fsBold;
ze->Sheets->Count = 1;
TZSheet *_sheet = ze->Sheets->Sheet[0];
_sheet->RowCount = 25;
_sheet->ColCount = 25;
int i;
for (i = 1; i < 5; i++)
{
_sheet->Columns[i]->WidthMM = 40;
_sheet->Cell[i][3]->CellStyle = 1;
}
_sheet->Cell[1][3]->Data = "Содержит текст";
_sheet->Cell[2][3]->Data = "Не содержит текст";
_sheet->Cell[3][3]->Data = "Начинается с";
_sheet->Cell[4][3]->Data = "Заканчивается";
int j;
for (i = 1; i < 5; i++)
for (j = 0; j < const_arr_size; j++)
{
_sheet->Cell[i][j + 4]->Data = const_text_array[j];
}
//Добавляем условные форматирования:
//Область применения условного форматирования:
// с ячейки [1, 4] ширина = 1, высота = 10
TZConditionalStyle *_cfStyle = _sheet->ConditionalFormatting->Add(1, 4, 1, 10);
//применить 0-ой стиль для ячеек, содержащих текст
TZConditionalStyleItem *_cfItem = _cfStyle->Add();
_cfItem->ApplyStyleID = 0;
_cfItem->Condition = ZCFContainsText;
_cfItem->Value1 = "text";
//Добавляем условное форматирование: ячейка не содержит текст
_cfStyle = _sheet->ConditionalFormatting->Add(2, 4, 1, 10);
_cfItem = _cfStyle->Add();
_cfItem->ApplyStyleID = 0;
_cfItem->Condition = ZCFNotContainsText;
_cfItem->Value1 = "text";
//Добавляем условное форматирование: ячейка начинается c
_cfStyle = _sheet->ConditionalFormatting->Add(3, 4, 1, 10);
_cfItem = _cfStyle->Add();
_cfItem->ApplyStyleID = 0;
_cfItem->Condition = ZCFBeginsWithText;
_cfItem->Value1 = "text";
//Добавляем условное форматирование: ячейка заканчивается на
_cfStyle = _sheet->ConditionalFormatting->Add(4, 4, 1, 10);
_cfItem = _cfStyle->Add();
_cfItem->ApplyStyleID = 0;
_cfItem->Condition = ZCFEndsWithText;
_cfItem->Value1 = "text";
String _fname = _path + "tst_fcf_text.ods";
DeleteFile(_fname);
SaveXmlssToODFS(ze, _fname);
}
__finally
{
delete ze;
}
|
Использование условия ZCFIsTrueFormula: для применения условного форматирования формула должна возвращать True.
В примере используются функции:
- ISODD - возвращает True для нечётных чисел
- ISEVEN - возвращает True для чётных чисел
- ROW - возвращает номер строки
- COLUMN - возвращает номер столбца
Использование формул в условном форматировании
Пример кода для Lazarus/Delphi
|
Пример кода для C++Builder-a
|
//uses zexmlss, zeodfs, zexmlssutils;
procedure TForm1.btnCreateClick(Sender: TObject);
var
_path: string;
ze: TZEXMLSS;
_fname: string;
_sheet: TZSheet;
_cfStyle: TZConditionalStyle;
_cfItem: TZConditionalStyleItem;
i, j: integer;
begin
ze := nil;
_path := ExtractFilePath(Paramstr(0)) ;
try
ze := TZEXMLSS.Create(nil);
//Подготовка стилей
ze.Styles.Count := 2;
ze.Styles[0].BGColor := clSilver;
ze.Styles[1].Alignment.Horizontal := ZHCenter;
ze.Styles[1].Font.Style := [fsBold];
ze.Sheets.Count := 1;
_sheet := ze.Sheets[0];
_sheet.RowCount := 25;
_sheet.ColCount := 25;
_sheet[0, 1].Data := 'Условное форматирование: формулы';
_sheet[0, 1].CellStyle := 1;
_sheet.MergeCells.AddRectXY(0, 1, 20, 1);
_sheet[0, 3].Data := 'Использована формула: ISODD(ROW())';
_sheet[10, 3].Data := 'Использована формула: ISEVEN(COLUMN())';
_sheet[0, 3].CellStyle := 1;
_sheet[10, 3].CellStyle := 1;
_sheet.MergeCells.AddRectXY(0, 3, 9, 3);
_sheet.MergeCells.AddRectXY(10, 3, 20, 3);
for i := 0 to 20 do
for j := 4 to 21 do
_sheet[i, j].Data := IntToStr((i + 1) * (j - 3));
//Добавляем условные форматирования:
//Область применения условного форматирования:
// с ячейки [0, 4] ширина = 10, высота = 18
_cfStyle := _sheet.ConditionalFormatting.Add(0, 4, 10, 18);
//применить 0-ой стиль для нечётных строк
_cfItem := _cfStyle.Add();
_cfItem.ApplyStyleID := 0;
_cfItem.Condition := ZCFIsTrueFormula;
_cfItem.Value1 := 'ISODD(ROW())';
//Область применения условного форматирования:
_cfStyle := _sheet.ConditionalFormatting.Add(10, 4, 10, 18);
//применить 0-ой стиль для чётных столбцов
_cfItem := _cfStyle.Add();
_cfItem.ApplyStyleID := 0;
_cfItem.Condition := ZCFIsTrueFormula;
_cfItem.Value1 := 'ISEVEN(COLUMN())';
_fname := _path + 'tst_fcf_formula.ods';
DeleteFile(_fname);
SaveXmlssToODFS(ze, _fname);
finally
if (Assigned(ze)) then
FreeAndNil(ze);
end;
end;
|
/*
#include <zexmlss.hpp>
#include <zeodfs.hpp>
*/
void __fastcall TForm1::btnCreateClick(TObject *Sender)
{
String _path = ExtractFilePath(ParamStr(0));
TZEXMLSS *ze = new TZEXMLSS(NULL);
try
{
//Подготовка стилей
ze->Styles->Count = 2;
ze->Styles->Items[0]->BGColor = clSilver;
ze->Styles->Items[1]->Alignment->Horizontal = ZHCenter;
ze->Styles->Items[1]->Font->Style = TFontStyles() << fsBold;
ze->Sheets->Count = 1;
TZSheet *_sheet = ze->Sheets->Sheet[0];
_sheet->RowCount = 25;
_sheet->ColCount = 25;
_sheet->Cell[0][1]->Data = "Условное форматирование: формулы";
_sheet->Cell[0][1]->CellStyle = 1;
_sheet->MergeCells->AddRectXY(0, 1, 20, 1);
_sheet->Cell[0][3]->Data = "Использована формула: ISODD(ROW())";
_sheet->Cell[10][3]->Data = "Использована формула: ISEVEN(COLUMN())";
_sheet->Cell[0][3]->CellStyle = 1;
_sheet->Cell[10][3]->CellStyle = 1;
_sheet->MergeCells->AddRectXY(0, 3, 9, 3);
_sheet->MergeCells->AddRectXY(10, 3, 20, 3);
int i, j;
for (i = 0; i < 21; i++)
for (j = 4; j < 22; j++)
{
_sheet->Cell[i][j]->Data = IntToStr((i + 1) * (j - 3));
}
//Добавляем условные форматирования:
//Область применения условного форматирования:
// с ячейки [0, 4] ширина = 10, высота = 18
TZConditionalStyle *_cfStyle = _sheet->ConditionalFormatting->Add(0, 4, 10, 18);
//применить 0-ой стиль для нечётных строк
TZConditionalStyleItem *_cfItem = _cfStyle->Add();
_cfItem->ApplyStyleID = 0;
_cfItem->Condition = ZCFIsTrueFormula;
_cfItem->Value1 = "ISODD(ROW())";
//Область применения условного форматирования:
_cfStyle = _sheet->ConditionalFormatting->Add(10, 4, 10, 18);
//применить 0-ой стиль для чётных столбцов
_cfItem = _cfStyle->Add();
_cfItem->ApplyStyleID = 0;
_cfItem->Condition = ZCFIsTrueFormula;
_cfItem->Value1 = "ISEVEN(COLUMN())";
String _fname = _path + "tst_fcf_formula.ods";
DeleteFile(_fname);
SaveXmlssToODFS(ze, _fname);
}
__finally
{
delete ze;
}
}
|
|
|