FPSpreadsheet: Adds a custom pallete so that we can have more commonly used colors instead of the default excel ones

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1649 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat
2011-05-26 11:04:30 +00:00
parent a2df0341ce
commit e7aeb0c396
4 changed files with 135 additions and 5 deletions

View File

@ -20,11 +20,9 @@ var
MyWorksheet: TsWorksheet;
MyDir: string;
MyCell: PCell;
begin
MyDir := ExtractFilePath(ParamStr(0));
// Create the spreadsheet
MyWorkbook := TsWorkbook.Create;
procedure WriteFirstWorksheet();
begin
MyWorksheet := MyWorkbook.AddWorksheet('Worksheet1');
// Write some cells
@ -110,6 +108,47 @@ begin
MyCell^.Border := [cbNorth, cbWest, cbEast, cbSouth];
MyCell^.BackgroundColor := scGreen;
MyCell^.UsedFormattingFields := [uffBorder, uffBold, uffBackgroundColor];
end;
procedure WriteSecondWorksheet();
begin
MyWorksheet := MyWorkbook.AddWorksheet('Worksheet2');
// Write some cells
MyWorksheet.WriteUTF8Text(1, 1, ' ');
MyCell := MyWorksheet.GetCell(1, 1);
MyCell^.Border := [cbNorth, cbWest];
MyCell^.BackgroundColor := scGrey10pct;
MyCell^.UsedFormattingFields := [uffBorder, uffBackgroundColor];
MyWorksheet.WriteUTF8Text(1, 2, ' ');
MyCell := MyWorksheet.GetCell(1, 2);
MyCell^.Border := [cbNorth, cbEast];
MyCell^.BackgroundColor := scGrey10pct;
MyCell^.UsedFormattingFields := [uffBorder, uffBackgroundColor];
MyWorksheet.WriteUTF8Text(2, 1, ' ');
MyCell := MyWorksheet.GetCell(2, 1);
MyCell^.Border := [cbWest, cbSouth];
MyCell^.BackgroundColor := scGrey10pct;
MyCell^.UsedFormattingFields := [uffBorder, uffBackgroundColor];
MyWorksheet.WriteUTF8Text(2, 2, ' ');
MyCell := MyWorksheet.GetCell(2, 2);
MyCell^.Border := [cbEast, cbSouth];
MyCell^.BackgroundColor := scGrey10pct;
MyCell^.UsedFormattingFields := [uffBorder, uffBackgroundColor];
end;
begin
MyDir := ExtractFilePath(ParamStr(0));
// Create the spreadsheet
MyWorkbook := TsWorkbook.Create;
WriteFirstWorksheet();
WriteSecondWorksheet();
// Save the spreadsheet to a file
MyWorkbook.WriteToFile(MyDir + 'test3.xls', sfExcel8, False);

View File

@ -139,7 +139,10 @@ type
scPURPLE, // 800080H
scTEAL, // 008080H
scSilver, // C0C0C0H
scGrey // 808080H
scGrey, // 808080H
//
scGrey10pct,// E6E6E6H
scGrey20pct // CCCCCCH
);
{@@ Cell structure for TsWorksheet

View File

@ -124,6 +124,7 @@ type
procedure WriteIndex(AStream: TStream);
procedure WriteLabel(AStream: TStream; const ARow, ACol: Word; const AValue: string; ACell: PCell); override;
procedure WriteNumber(AStream: TStream; const ARow, ACol: Cardinal; const AValue: double; ACell: PCell); override;
procedure WritePalette(AStream: TStream);
procedure WriteStyle(AStream: TStream);
procedure WriteWindow1(AStream: TStream);
procedure WriteWindow2(AStream: TStream; ASheetSelected: Boolean);
@ -155,6 +156,7 @@ const
INT_EXCEL_ID_SST = $00FC; //BIFF8 only
INT_EXCEL_ID_CONTINUE = $003C;
INT_EXCEL_ID_LABELSST = $00FD; //BIFF8 only
INT_EXCEL_ID_PALETTE = $0092;
{ Cell Addresses constants }
MASK_EXCEL_ROW = $3FFF;
@ -443,6 +445,9 @@ begin
FontData.Free;
end;
// PALETTE
WritePalette(AStream);
// XF0
WriteXF(AStream, 0, MASK_XF_TYPE_PROT_STYLE_XF, XF_ROTATION_HORIZONTAL, []);
// XF1
@ -899,6 +904,83 @@ begin
AStream.WriteBuffer(AValue, 8);
end;
procedure TsSpreadBIFF8Writer.WritePalette(AStream: TStream);
begin
{ BIFF Record header }
AStream.WriteWord(WordToLE(INT_EXCEL_ID_PALETTE));
AStream.WriteWord(WordToLE(2+4*56));
{ Number of colors }
AStream.WriteWord(WordToLE(56));
{ Now the colors, first the standard 16 from Excel }
AStream.WriteDWord(DWordToLE($000000)); // $08
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FF0000));
AStream.WriteDWord(DWordToLE($00FF00));
AStream.WriteDWord(DWordToLE($0000FF));
AStream.WriteDWord(DWordToLE($FFFF00));
AStream.WriteDWord(DWordToLE($FF00FF));
AStream.WriteDWord(DWordToLE($00FFFF));
AStream.WriteDWord(DWordToLE($800000));
AStream.WriteDWord(DWordToLE($008000));
AStream.WriteDWord(DWordToLE($000080));
AStream.WriteDWord(DWordToLE($808000));
AStream.WriteDWord(DWordToLE($800080));
AStream.WriteDWord(DWordToLE($008080));
AStream.WriteDWord(DWordToLE($C0C0C0));
AStream.WriteDWord(DWordToLE($808080)); //$17
{ Now some colors which we define ourselves }
AStream.WriteDWord(DWordToLE($E6E6E6)); //$18
AStream.WriteDWord(DWordToLE($CCCCCC)); //$19
{ And padding }
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF)); //$20
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF)); //$30
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
AStream.WriteDWord(DWordToLE($FFFFFF));
end;
{*******************************************************************
* TsSpreadBIFF8Writer.WriteStyle ()
*

View File

@ -31,6 +31,9 @@ const
BUILT_IN_COLOR_PALLETE_SILVER = $16; // C0C0C0H
BUILT_IN_COLOR_PALLETE_GREY = $17; // 808080H
EXTRA_COLOR_PALETTE_GREY10PCT = $18; // E6E6E6H
EXTRA_COLOR_PALETTE_GREY20PCT = $19; // E6E6E6H
type
{ TsSpreadBIFFReader }
@ -77,6 +80,9 @@ begin
scTEAL: Result := BUILT_IN_COLOR_PALLETE_TEAL;
scSilver: Result := BUILT_IN_COLOR_PALLETE_SILVER;
scGrey: Result := BUILT_IN_COLOR_PALLETE_GREY;
//
scGrey10pct: Result := EXTRA_COLOR_PALETTE_GREY10PCT;
scGrey20pct: Result := EXTRA_COLOR_PALETTE_GREY20PCT;
end;
end;