Прыклады кода для 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';
//Дабаўляем ўмоўнае фарматаванне: вочка пачынаецца з
_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";
//Дабаўляем ўмоўнае фарматаванне: вочка пачынаецца з
_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;
}
}
|
|
|