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';

    //Добавляем условное форматирование: ячейка начинается 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;
	}
}
ФайлыГлавнаяСсылкиФотографииАниме

Copyright © 2006-2012 Неборак Руслан Владимирович