by
ru
en
by

Avemey

logo
ФайлыГалоўнаяСпасылкіФатаграфііАнімэ

Прыклады кода для 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
Умоўнае фарматаванне для 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;
	}
}
ФайлыГалоўнаяСпасылкіФатаграфііАнімэ

Copyright © 2006-2012 Небарак Руслан Уладзіміравіч