You've already forked lazarus-ccr
fpspreadsheet: Add units (mm, cm, in, pts, lines/chars) for column width and row heights. Update all demos (some issues left).
NOTE: This revision breaks existing code if the worksheet's DefaultRowHeight/DefaultColWidth is changed - value must be in millimeters now. Methods for accessing individual row heiths and column widths are fine, but are marked as deprecated, they use the old units. Optionally a unit parameter can be specified. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4568 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -46,7 +46,6 @@
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="main"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
|
@ -8,7 +8,7 @@ object Form1: TForm1
|
||||
ClientWidth = 521
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
LCLVersion = '1.5'
|
||||
LCLVersion = '1.7'
|
||||
object PageControl: TPageControl
|
||||
Left = 4
|
||||
Height = 302
|
||||
|
@ -127,6 +127,7 @@ var
|
||||
i: Integer;
|
||||
startDate: TDate;
|
||||
maxAge: Integer = 80 * 365;
|
||||
f: TField;
|
||||
begin
|
||||
if FExportDataset <> nil then
|
||||
FExportDataset.Free;
|
||||
@ -137,7 +138,7 @@ begin
|
||||
FExportDataset := TDbf.Create(self);
|
||||
FExportDataset.FilePathFull := DATADIR + DirectorySeparator;
|
||||
FExportDataset.TableName := TABLENAME;
|
||||
// FExportDataset.TableLevel := 4; // DBase IV: most widely used.
|
||||
FExportDataset.TableLevel := 4; // DBase IV: most widely used.
|
||||
FExportDataset.TableLevel := 25; // FoxPro supports FieldType nfCurrency
|
||||
FExportDataset.FieldDefs.Add('Last name', ftString);
|
||||
FExportDataset.FieldDefs.Add('First name', ftString);
|
||||
@ -153,6 +154,7 @@ begin
|
||||
// We generate random records by combining first names, last names and cities
|
||||
// defined in the FIRST_NAMES, LAST_NAMES and CITIES arrays. We also add a
|
||||
// random birthday.
|
||||
|
||||
for i:=1 to StrToInt(EdRecordCount.Text) do begin
|
||||
if (i mod 1000 = 0) then
|
||||
begin
|
||||
@ -165,8 +167,8 @@ begin
|
||||
FExportDataset.FieldByName('City').AsString := CITIES[Random(NUM_CITIES)];
|
||||
FExportDataset.FieldByName('Birthday').AsDateTime := startDate - random(maxAge);
|
||||
FExportDataset.FieldByName('Salary').AsFloat := 1000+Random(9000);
|
||||
FExportDataSet.FieldByName('Work begin').AsDateTime := EncodeTime(6+Random(4), Random(60), Random(60), 0);
|
||||
FExportDataSet.FieldByName('Work end').AsDateTime := EncodeTime(15+Random(4), Random(60), Random(60), 0);
|
||||
// FExportDataSet.FieldByName('Work begin').AsDateTime := 40000+EncodeTime(6+Random(4), Random(60), Random(60), 0);
|
||||
// FExportDataSet.FieldByName('Work end').AsDateTime := EncodeTime(15+Random(4), Random(60), Random(60), 0);
|
||||
FExportDataset.Post;
|
||||
end;
|
||||
FExportDataset.Close;
|
||||
|
@ -40,7 +40,6 @@
|
||||
<Unit0>
|
||||
<Filename Value="demo_expression_parser.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="demo_expression_parser"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="..\..\fpsexprparser.pas"/>
|
||||
|
@ -27,23 +27,26 @@ begin
|
||||
|
||||
worksheet.WriteNumber(0, 0, 1); // A1
|
||||
worksheet.WriteNumber(0, 1, 2.5); // B1
|
||||
{
|
||||
worksheet.WriteText(0, 0, 'Hallo'); // A1
|
||||
worksheet.WriteText(0, 1, 'World'); // B1
|
||||
}
|
||||
|
||||
worksheet.WriteUTF8Text(0, 0, 'Hallo'); // A1
|
||||
worksheet.WriteUTF8Text(0, 1, 'World'); // B1
|
||||
cell := worksheet.WriteFormula(1, 0, '=4+5'); // A2
|
||||
cell := worksheet.WriteFormula(2, 0, 'AND(TRUE(), TRUE(), TRUE())');
|
||||
cell := worksheet.WriteFormula(3, 0, 'SIN(A1+B1)');
|
||||
cell := worksheet.WriteFormula(4, 0, '=TRUE()');
|
||||
cell := worksheet.WriteFormula(5, 0, '=1-(4/2)^2*2-1'); // A2
|
||||
cell := Worksheet.WriteFormula(6, 0, 'datedif(today(),Date(2014,1,1),"D")');
|
||||
cell := Worksheet.WriteFormula(7, 0, 'Day(Date(2014, 1, 12))');
|
||||
cell := Worksheet.WriteFormula(8, 0, 'SUM(1,2,3)');
|
||||
cell := Worksheet.WriteFormula(9, 0, 'CELL("address",A1)');
|
||||
cell := Worksheet.WriteFormula(10, 0, 'REPT("Hallo", 3)');
|
||||
cell := Worksheet.WriteFormula(11, 0, '#REF!');
|
||||
{ Select one of these formulas }
|
||||
//cell := worksheet.WriteFormula(1, 0, '=4+5'); // A2
|
||||
//cell := worksheet.WriteFormula(1, 0, 'AND(TRUE(), TRUE(), TRUE())');
|
||||
cell := worksheet.WriteFormula(1, 0, 'SIN(A1+B1)');
|
||||
//cell := worksheet.WriteFormula(1, 0, '=TRUE()');
|
||||
//cell := worksheet.WriteFormula(1, 0, '=1-(4/2)^2*2-1'); // A2
|
||||
//cell := Worksheet.WriteFormula(1, 0, 'datedif(today(),Date(2014,1,1),"D")');
|
||||
//cell := Worksheet.WriteFormula(1, 0, 'Day(Date(2014, 1, 12))');
|
||||
//cell := Worksheet.WriteFormula(1, 0, 'SUM(1,2,3)');
|
||||
//cell := Worksheet.WriteFormula(1, 0, 'CELL("address",A1)');
|
||||
//cell := Worksheet.WriteFormula(1, 0, 'REPT("Hallo", 3)');
|
||||
//cell := Worksheet.WriteFormula(1, 0, '#REF!');
|
||||
|
||||
WriteLn('A1: ', worksheet.ReadAsUTF8Text(0, 0));
|
||||
WriteLn('B1: ', worksheet.ReadAsUTF8Text(0, 1));
|
||||
WriteLn('A1: ', worksheet.ReadAsText(0, 0));
|
||||
WriteLn('B1: ', worksheet.ReadAsText(0, 1));
|
||||
|
||||
parser := TsSpreadsheetParser.Create(worksheet);
|
||||
try
|
||||
|
@ -40,7 +40,6 @@
|
||||
<Unit0>
|
||||
<Filename Value="demo_recursive_calc.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="demo_recursive_calc"/>
|
||||
</Unit0>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
|
@ -32,24 +32,20 @@ begin
|
||||
worksheet := workbook.AddWorksheet('Calc_test');
|
||||
worksheet.WriteColWidth(0, 20);
|
||||
|
||||
// A1
|
||||
worksheet.WriteUTF8Text(0, 0, '=B2+1');
|
||||
// B1
|
||||
worksheet.WriteFormula(0, 1, 'B2+1');
|
||||
// A2
|
||||
worksheet.WriteUTF8Text(1, 0, '=B3+1');
|
||||
// B2
|
||||
worksheet.WriteFormula(1, 1, 'B3+1');
|
||||
// A3
|
||||
worksheet.WriteUTF8Text(2, 0, '(not dependent)');
|
||||
// B3
|
||||
worksheet.WriteNumber(2, 1, 1);
|
||||
worksheet.WriteUTF8Text(0, 0, '=B2+1'); // A1
|
||||
worksheet.WriteFormula(0, 1, 'B2+1'); // B1
|
||||
worksheet.WriteUTF8Text(1, 0, '=B3+1'); // A2
|
||||
worksheet.WriteFormula(1, 1, 'B3+1'); // B2
|
||||
worksheet.WriteUTF8Text(2, 0, '(not dependent)'); // A3
|
||||
worksheet.WriteNumber(2, 1, 1); // B3
|
||||
|
||||
workbook.WriteToFile(OutputFile, sfExcel8, true);
|
||||
writeln('Finished.');
|
||||
writeln;
|
||||
writeln('Please open "'+OutputFile+'" in "fpsgrid".');
|
||||
writeLn('It must show correct calculation results in cells B1 and B2.');
|
||||
|
||||
ReadLn;
|
||||
finally
|
||||
workbook.Free;
|
||||
end;
|
||||
|
@ -40,7 +40,6 @@
|
||||
<Unit0>
|
||||
<Filename Value="demo_sorting.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="demo_sorting"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="..\..\fpsexprparser.pas"/>
|
||||
|
@ -289,16 +289,16 @@ var
|
||||
try
|
||||
worksheet := workbook.AddWorksheet('Test');
|
||||
|
||||
worksheet.WriteUTF8Text(0, 0, 'E');
|
||||
worksheet.WriteUTF8Text(1, 0, 'E');
|
||||
worksheet.WriteUTF8Text(2, 0, 'C');
|
||||
worksheet.WriteUTF8Text(3, 0, 'B');
|
||||
worksheet.WriteUTF8Text(4, 0, 'D');
|
||||
worksheet.WriteUTF8Text(5, 0, 'D');
|
||||
worksheet.WriteUTF8Text(6, 0, 'A');
|
||||
worksheet.WriteUTF8Text(7, 0, 'B');
|
||||
worksheet.WriteUTF8Text(8, 0, 'C');
|
||||
worksheet.WriteUTF8Text(9, 0, 'A');
|
||||
worksheet.WriteText(0, 0, 'E');
|
||||
worksheet.WriteText(1, 0, 'E');
|
||||
worksheet.WriteText(2, 0, 'C');
|
||||
worksheet.WriteText(3, 0, 'B');
|
||||
worksheet.WriteText(4, 0, 'D');
|
||||
worksheet.WriteText(5, 0, 'D');
|
||||
worksheet.WriteText(6, 0, 'A');
|
||||
worksheet.WriteText(7, 0, 'B');
|
||||
worksheet.WriteText(8, 0, 'C');
|
||||
worksheet.WriteText(9, 0, 'A');
|
||||
|
||||
worksheet.WriteNumber(0, 1, 9); // A2 --> E
|
||||
worksheet.WriteNumber(1, 1, 8); // B2 --> E
|
||||
@ -322,7 +322,7 @@ var
|
||||
WriteLn(#9, 'A', #9, 'B');
|
||||
for i:=0 to 9 do
|
||||
begin
|
||||
s := worksheet.ReadAsUTF8Text(i, 0);
|
||||
s := worksheet.ReadAsText(i, 0);
|
||||
n := worksheet.ReadAsNumber(i, 1);
|
||||
WriteLn(i, #9, s, #9, FloatToStr(n));
|
||||
end;
|
||||
@ -345,16 +345,16 @@ var
|
||||
try
|
||||
worksheet := workbook.AddWorksheet('Test');
|
||||
|
||||
worksheet.WriteUTF8Text(0, 0, 'E');
|
||||
worksheet.WriteUTF8Text(0, 1, 'E');
|
||||
worksheet.WriteUTF8Text(0, 2, 'C');
|
||||
worksheet.WriteUTF8Text(0, 3, 'B');
|
||||
worksheet.WriteUTF8Text(0, 4, 'D');
|
||||
worksheet.WriteUTF8Text(0, 5, 'D');
|
||||
worksheet.WriteUTF8Text(0, 6, 'A');
|
||||
worksheet.WriteUTF8Text(0, 7, 'B');
|
||||
worksheet.WriteUTF8Text(0, 8, 'C');
|
||||
worksheet.WriteUTF8Text(0, 9, 'A');
|
||||
worksheet.WriteText(0, 0, 'E');
|
||||
worksheet.WriteText(0, 1, 'E');
|
||||
worksheet.WriteText(0, 2, 'C');
|
||||
worksheet.WriteText(0, 3, 'B');
|
||||
worksheet.WriteText(0, 4, 'D');
|
||||
worksheet.WriteText(0, 5, 'D');
|
||||
worksheet.WriteText(0, 6, 'A');
|
||||
worksheet.WriteText(0, 7, 'B');
|
||||
worksheet.WriteText(0, 8, 'C');
|
||||
worksheet.WriteText(0, 9, 'A');
|
||||
|
||||
worksheet.WriteNumber(1, 0, 9); // A2 --> E
|
||||
worksheet.WriteNumber(1, 1, 8); // B2 --> E
|
||||
@ -382,7 +382,7 @@ var
|
||||
|
||||
Write('1', #9);
|
||||
for i:=0 to 9 do
|
||||
Write(worksheet.ReadAsUTF8Text(0, i), #9);
|
||||
Write(worksheet.ReadAsText(0, i), #9);
|
||||
WriteLn;
|
||||
|
||||
Write('2', #9);
|
||||
@ -411,5 +411,7 @@ begin
|
||||
|
||||
SortTwoColumns_TwoKeys_1;
|
||||
SortTwoRows_TwoKeys_1;
|
||||
|
||||
ReadLn;
|
||||
end.
|
||||
|
||||
|
@ -41,7 +41,7 @@ begin
|
||||
// Write colors to worksheet
|
||||
for row := 0 to palette.Count-1 do begin
|
||||
Myworksheet.WriteBackgroundColor(row, 0, palette[row]);
|
||||
Myworksheet.WriteUTF8Text(row, 0, GetColorName(palette[row]));
|
||||
Myworksheet.WriteText(row, 0, GetColorName(palette[row]));
|
||||
MyWorksheet.WriteFontColor(row, 0, HighContrastColor(palette[row]));
|
||||
MyWorksheet.WriteHorAlignment(row, 0, haCenter);
|
||||
end;
|
||||
@ -49,7 +49,7 @@ begin
|
||||
palette.Free;
|
||||
end;
|
||||
|
||||
MyWorksheet.WriteColWidth(0, 25);
|
||||
MyWorksheet.WriteColWidth(0, 5.0, suCentimeters);
|
||||
|
||||
// Save the spreadsheet to a file
|
||||
MyWorkbook.WriteToFile(MyDir + TestFile, sfExcel8, True);
|
||||
|
@ -26,69 +26,69 @@ begin
|
||||
MyWorksheet := MyWorkbook.AddWorksheet('Worksheet1');
|
||||
|
||||
// Write some cells
|
||||
MyWorksheet.WriteUTF8Text(1, 0, 'Border');// A2
|
||||
MyWorksheet.WriteText(1, 0, 'Border'); // A2
|
||||
|
||||
MyWorksheet.WriteUTF8Text(1, 1, '[]'); // B2
|
||||
MyWorksheet.WriteText(1, 1, '[]'); // B2
|
||||
MyCell := MyWorksheet.GetCell(1, 1);
|
||||
MyCell^.Border := [];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(1, 3, '[N]');// D2
|
||||
MyWorksheet.WriteText(1, 3, '[N]'); // D2
|
||||
MyCell := MyWorksheet.GetCell(1, 3);
|
||||
MyCell^.Border := [cbNorth];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(1, 5, '[W]');// F2
|
||||
MyWorksheet.WriteText(1, 5, '[W]'); // F2
|
||||
MyCell := MyWorksheet.GetCell(1, 5);
|
||||
MyCell^.Border := [cbWest];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(1, 7, '[E]');// H2
|
||||
MyWorksheet.WriteText(1, 7, '[E]'); // H2
|
||||
MyCell := MyWorksheet.GetCell(1, 7);
|
||||
MyCell^.Border := [cbEast];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(1, 9, '[S]');// J2
|
||||
MyWorksheet.WriteText(1, 9, '[S]'); // J2
|
||||
MyCell := MyWorksheet.GetCell(1, 9);
|
||||
MyCell^.Border := [cbSouth];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(3, 1, '[N,W]');// B4
|
||||
MyWorksheet.WriteText(3, 1, '[N,W]'); // B4
|
||||
MyCell := MyWorksheet.GetCell(3, 1);
|
||||
MyCell^.Border := [cbNorth, cbWest];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(3, 3, '[N,E]');// D4
|
||||
MyWorksheet.WriteText(3, 3, '[N,E]'); // D4
|
||||
MyCell := MyWorksheet.GetCell(3, 3);
|
||||
MyCell^.Border := [cbNorth, cbEast];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(3, 5, '[N,S]');// F4
|
||||
MyWorksheet.WriteText(3, 5, '[N,S]'); // F4
|
||||
MyCell := MyWorksheet.GetCell(3, 5);
|
||||
MyCell^.Border := [cbNorth, cbSouth];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(3, 7, '[W,E]');// H4
|
||||
MyWorksheet.WriteText(3, 7, '[W,E]'); // H4
|
||||
MyCell := MyWorksheet.GetCell(3, 7);
|
||||
MyCell^.Border := [cbWest, cbEast];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(3, 9, '[W,S]');// J4
|
||||
MyWorksheet.WriteText(3, 9, '[W,S]'); // J4
|
||||
MyCell := MyWorksheet.GetCell(3, 9);
|
||||
MyCell^.Border := [cbWest, cbSouth];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(3, 11, '[E,S]');// L4
|
||||
MyWorksheet.WriteText(3, 11, '[E,S]'); // L4
|
||||
MyCell := MyWorksheet.GetCell(3, 11);
|
||||
MyCell^.Border := [cbEast, cbSouth];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(5, 1, '[N,W,E]');// B6
|
||||
MyWorksheet.WriteText(5, 1, '[N,W,E]');// B6
|
||||
MyCell := MyWorksheet.GetCell(5, 1);
|
||||
MyCell^.Border := [cbNorth, cbWest, cbEast];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(5, 3, '[N,W,S]');// D6
|
||||
MyWorksheet.WriteText(5, 3, '[N,W,S]');// D6
|
||||
MyCell := MyWorksheet.GetCell(5, 3);
|
||||
MyCell^.Border := [cbNorth, cbWest, cbSouth];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(5, 5, '[N,E,S]');// F6
|
||||
MyWorksheet.WriteText(5, 5, '[N,E,S]');// F6
|
||||
MyCell := MyWorksheet.GetCell(5, 5);
|
||||
MyCell^.Border := [cbNorth, cbEast, cbSouth];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(5, 7, '[W,E,S]');// H6
|
||||
MyWorksheet.WriteText(5, 7, '[W,E,S]');// H6
|
||||
MyCell := MyWorksheet.GetCell(5, 7);
|
||||
MyCell^.Border := [cbWest, cbEast, cbSouth];
|
||||
|
||||
MyWorksheet.WriteUTF8Text(5, 9, '[N,W,E,S]');// J6
|
||||
MyWorksheet.WriteText(5, 9, '[N,W,E,S]');// J6
|
||||
MyCell := MyWorksheet.GetCell(5, 9);
|
||||
MyCell^.Border := [cbNorth, cbWest, cbEast, cbSouth];
|
||||
MyCell^.BackgroundColor := scGreen;
|
||||
@ -102,36 +102,36 @@ begin
|
||||
|
||||
// Line 1
|
||||
|
||||
MyWorksheet.WriteUTF8Text(1, 1, 'Relatório');
|
||||
MyWorksheet.WriteText(1, 1, 'Relatório');
|
||||
MyCell := MyWorksheet.GetCell(1, 1);
|
||||
MyCell^.Border := [cbNorth, cbWest, cbSouth];
|
||||
MyCell^.BackgroundColor := scGrey20pct;
|
||||
|
||||
MyWorksheet.WriteUTF8Text(1, 2, ' ');
|
||||
MyWorksheet.WriteText(1, 2, ' ');
|
||||
MyCell := MyWorksheet.GetCell(1, 2);
|
||||
MyCell^.Border := [cbNorth, cbEast, cbSouth];
|
||||
MyCell^.BackgroundColor := scGrey20pct;
|
||||
|
||||
// Line 2
|
||||
|
||||
MyWorksheet.WriteUTF8Text(2, 1, 'Compras');
|
||||
MyWorksheet.WriteText(2, 1, 'Compras');
|
||||
MyCell := MyWorksheet.GetCell(2, 1);
|
||||
MyCell^.Border := [cbWest];
|
||||
MyCell^.BackgroundColor := scGrey10pct;
|
||||
|
||||
MyWorksheet.WriteUTF8Text(2, 2, 'R$ 20');
|
||||
MyWorksheet.WriteText(2, 2, 'R$ 20');
|
||||
MyCell := MyWorksheet.GetCell(2, 2);
|
||||
MyCell^.Border := [cbEast];
|
||||
MyCell^.BackgroundColor := scGrey10pct;
|
||||
|
||||
// Line 3
|
||||
|
||||
MyWorksheet.WriteUTF8Text(3, 1, 'Total:');
|
||||
MyWorksheet.WriteText(3, 1, 'Total:');
|
||||
MyCell := MyWorksheet.GetCell(3, 1);
|
||||
MyCell^.Border := [cbWest, cbSouth];
|
||||
MyCell^.BackgroundColor := scGrey10pct;
|
||||
|
||||
MyWorksheet.WriteUTF8Text(3, 2, 'R$ 20');
|
||||
MyWorksheet.WriteText(3, 2, 'R$ 20');
|
||||
MyCell := MyWorksheet.GetCell(3, 2);
|
||||
MyCell^.Border := [cbEast, cbSouth];
|
||||
MyCell^.BackgroundColor := scGrey10pct;
|
||||
|
@ -29,8 +29,8 @@ begin
|
||||
MyWorksheet := MyWorkbook.AddWorksheet('Worksheet1');
|
||||
|
||||
// Write some cells
|
||||
MyWorksheet.WriteUTF8Text(0, 1, 'Text Formula');// B1
|
||||
MyWorksheet.WriteUTF8Text(0, 2, 'RPN');// C1
|
||||
MyWorksheet.WriteText(0, 1, 'Text Formula');// B1
|
||||
MyWorksheet.WriteText(0, 2, 'RPN'); // C1
|
||||
|
||||
MyWorksheet.WriteNumber(0, 4, -3.14); // E1
|
||||
MyWorksheet.WriteNumber(1, 4, 100); // E2
|
||||
@ -39,7 +39,7 @@ begin
|
||||
MyWorksheet.WriteNumber(4, 4, 250); // E5
|
||||
|
||||
// =Sum(E2:E5)
|
||||
MyWorksheet.WriteUTF8Text(1, 0, '=Sum(E2:E5)'); // A2
|
||||
MyWorksheet.WriteText(1, 0, '=Sum(E2:E5)'); // A2
|
||||
MyFormula := '=Sum(E2:E5)';
|
||||
MyWorksheet.WriteFormula(1, 1, MyFormula); // B2
|
||||
MyWorksheet.WriteRPNFormula(1, 2, CreateRPNFormula( // C2
|
||||
@ -48,7 +48,7 @@ begin
|
||||
nil))));
|
||||
|
||||
// Write the formula =ABS(E1)
|
||||
MyWorksheet.WriteUTF8Text(2, 0, '=ABS(E1)'); // A3
|
||||
MyWorksheet.WriteText(2, 0, '=ABS(E1)'); // A3
|
||||
MyWorksheet.WriteFormula(2, 1, 'ABS(E1)'); // B3
|
||||
MyWorksheet.WriteRPNFormula(2, 2, CreateRPNFormula( // C3
|
||||
RPNCellValue('E1',
|
||||
@ -56,7 +56,7 @@ begin
|
||||
nil))));
|
||||
|
||||
// Write the formula =4+5
|
||||
MyWorksheet.WriteUTF8Text(3, 0, '=4+5'); // A4
|
||||
MyWorksheet.WriteText(3, 0, '=4+5'); // A4
|
||||
MyWorksheet.WriteFormula(3, 1, '=4+5'); // B4
|
||||
MyWorksheet.WriteRPNFormula(3, 2, CreateRPNFormula( //C4
|
||||
RPNNumber(4.0,
|
||||
@ -73,7 +73,7 @@ begin
|
||||
|
||||
// Line 1
|
||||
|
||||
MyWorksheet.WriteUTF8Text(1, 1, 'Relatório');
|
||||
MyWorksheet.WriteText(1, 1, 'Relatório');
|
||||
MyCell := MyWorksheet.GetCell(1, 1);
|
||||
MyWorksheet.WriteBorders(MyCell, [cbNorth, cbWest, cbSouth]);
|
||||
Myworksheet.WriteBackgroundColor(MyCell, scGray20pct);
|
||||
|
@ -10,8 +10,7 @@ var
|
||||
MyWorkbook: TsWorkbook;
|
||||
MyWorksheet: TsWorksheet;
|
||||
MyDir: string;
|
||||
cell: PCell;
|
||||
i, r, c: Integer;
|
||||
i: Integer;
|
||||
|
||||
const
|
||||
image1 = '../../images/components/TSWORKBOOKSOURCE.png';
|
||||
@ -25,7 +24,11 @@ begin
|
||||
MyWorkbook := TsWorkbook.Create;
|
||||
try
|
||||
MyWorksheet := MyWorkbook.AddWorksheet('Sheet 1');
|
||||
MyWorksheet.DefaultRowHeight := 1.2;
|
||||
|
||||
for i:=0 to 20 do
|
||||
MyWorksheet.WriteRowHeight(i, 4.5, suMillimeters);
|
||||
// MyWorksheet.DefaultRowHeight := 4.5; // millimeters
|
||||
|
||||
MyWorksheet.WriteText(0, 0, 'There are images in cells A3 and B3'); //
|
||||
// These images are offset by 1mm in both directions from the top/left cell edge
|
||||
MyWorksheet.WriteImage(2, 0, image1, 1.0, 1.0, 2.0, 2.0); // This image is magnified by factor 2
|
||||
|
@ -54,7 +54,7 @@ begin
|
||||
WriteLn(
|
||||
'Row: ', CurCell^.Row,
|
||||
' Col: ', CurCell^.Col,
|
||||
' Value: ', UTF8ToConsole(MyWorkSheet.ReadAsUTF8Text(CurCell^.Row, CurCell^.Col))
|
||||
' Value: ', UTF8ToConsole(MyWorkSheet.ReadAsText(CurCell^.Row, CurCell^.Col))
|
||||
);
|
||||
end;
|
||||
|
||||
@ -62,5 +62,11 @@ begin
|
||||
// Finalization
|
||||
MyWorkbook.Free;
|
||||
end;
|
||||
|
||||
{$ifdef WINDOWS}
|
||||
WriteLn;
|
||||
WriteLn('Press ENTER to quit...');
|
||||
ReadLn;
|
||||
{$ENDIF}
|
||||
end.
|
||||
|
||||
|
@ -29,10 +29,10 @@ begin
|
||||
MyWorkbook := TsWorkbook.Create;
|
||||
MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet');
|
||||
|
||||
//MyWorksheet.WriteColWidth(0, 5);
|
||||
//MyWorksheet.WriteColWidth(1, 30);
|
||||
|
||||
MyWorksheet.WriteRowHeight(0, 3); // 3 lines
|
||||
// Note: ColWidth and RowHeight is not available in CSV
|
||||
MyWorksheet.WriteColWidth(0, 5, suChars);
|
||||
MyWorksheet.WriteColWidth(1, 30, suChars);
|
||||
MyWorksheet.WriteRowHeight(0, 3, suLines); // 3 lines
|
||||
|
||||
// Turn off grid lines and hide headers
|
||||
//MyWorksheet.Options := MyWorksheet.Options - [soShowGridLines, soShowHeaders];
|
||||
@ -49,32 +49,32 @@ begin
|
||||
MyWorksheet.WriteNumber(0, 3, 4.0);
|
||||
|
||||
// Write some string cells
|
||||
MyWorksheet.WriteUTF8Text(1, 0, 'First');
|
||||
MyWorksheet.WriteText(1, 0, 'First');
|
||||
MyWorksheet.WriteFont (1, 0, 'Arial', 12, [fssBold, fssItalic, fssUnderline], scRed);
|
||||
MyWorksheet.WriteUTF8Text(1, 1, 'Second');
|
||||
MyWorksheet.WriteUTF8Text(1, 2, 'Third');
|
||||
MyWorksheet.WriteUTF8Text(1, 3, 'Fourth');
|
||||
MyWorksheet.WriteText(1, 1, 'Second');
|
||||
MyWorksheet.WriteText(1, 2, 'Third');
|
||||
MyWorksheet.WriteText(1, 3, 'Fourth');
|
||||
|
||||
// Write current date/time
|
||||
MyWorksheet.WriteDateTime(2, 0, now);
|
||||
|
||||
// Write cell with background color
|
||||
MyWorksheet.WriteUTF8Text(3, 0, 'Text');
|
||||
MyWorksheet.WriteText(3, 0, 'Text');
|
||||
MyWorksheet.WriteBackgroundColor(3, 0, scSilver);
|
||||
|
||||
// Empty cell with background color
|
||||
MyWorksheet.WriteBackgroundColor(3, 1, scGrey);
|
||||
|
||||
// Cell2 with top and bottom borders
|
||||
MyWorksheet.WriteUTF8Text(4, 0, 'Text');
|
||||
MyWorksheet.WriteText(4, 0, 'Text');
|
||||
MyWorksheet.WriteBorders(4, 0, [cbNorth, cbSouth]);
|
||||
MyWorksheet.WriteBorders(4, 1, [cbNorth, cbSouth]);
|
||||
MyWorksheet.WriteBorders(4, 2, [cbNorth, cbSouth]);
|
||||
|
||||
// Left, center, right aligned texts
|
||||
MyWorksheet.WriteUTF8Text(5, 0, 'L');
|
||||
MyWorksheet.WriteUTF8Text(5, 1, 'C');
|
||||
MyWorksheet.WriteUTF8Text(5, 2, 'R');
|
||||
MyWorksheet.WriteText(5, 0, 'L');
|
||||
MyWorksheet.WriteText(5, 1, 'C');
|
||||
MyWorksheet.WriteText(5, 2, 'R');
|
||||
MyWorksheet.WriteHorAlignment(5, 0, haLeft);
|
||||
MyWorksheet.WriteHorAlignment(5, 1, haCenter);
|
||||
MyWorksheet.WriteHorAlignment(5, 2, haRight);
|
||||
@ -93,96 +93,96 @@ begin
|
||||
// Write current date/time and test numbers for various formatting options
|
||||
|
||||
inc(r, 2);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortDate');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortDate');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortDate);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfLongDate');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfLongDate);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortTime');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortTime');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortTime);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfLongTime');
|
||||
MyWorksheet.WriteText(r, 0, 'nfLongTime');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfLongTime);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortDateTime');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortDateTime');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortDateTime);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, ''dd/mmm''');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, ''dd/mmm''');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'dd/mmm''');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, ''mmm/yy''');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, ''mmm/yy''');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'mmm/yy');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortTimeAM');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortTimeAM');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortTimeAM);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfLongTimeAM');
|
||||
MyWorksheet.WriteText(r, 0, 'nfLongTimeAM');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfLongTimeAM);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, nn:ss');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, nn:ss');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'nn:ss');
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, nn:ss.z');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, nn:ss.z');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'nn:ss.z');
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, mm:ss.zzz');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, mm:ss.zzz');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'mm:ss.zzz');
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
|
||||
// Write formatted numbers
|
||||
number := 12345.67890123456789;
|
||||
inc(r, 2);
|
||||
MyWorksheet.WriteUTF8Text(r, 1, '12345.67890123456789');
|
||||
MyWorksheet.WriteUTF8Text(r, 2, '-12345.67890123456789');
|
||||
MyWorksheet.WriteText(r, 1, '12345.67890123456789');
|
||||
MyWorksheet.WriteText(r, 2, '-12345.67890123456789');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfGeneral');
|
||||
MyWorksheet.WriteText(r, 0, 'nfGeneral');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfGeneral);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfGeneral);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 0 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 0);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 0);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 1 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 1 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 1);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 1);
|
||||
MyWorksheet.WriteFontColor(r, 2, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 2);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 3);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 3);
|
||||
MyWorksheet.WriteFontColor(r, 2, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 0 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 0);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 0);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 1 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 1 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 1);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 1);
|
||||
MyWorksheet.WriteFontColor(r, 2, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 2);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 3);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 3);
|
||||
MyWorksheet.WriteFontColor(r, 2, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfExp, 1 dec');
|
||||
MyWorksheet.WriteText(r, 0, 'nfExp, 1 dec');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfExp, 1);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfExp, 1);
|
||||
@ -192,13 +192,13 @@ begin
|
||||
MyWorksheet.WriteNumber(r, 4, -1.0/number, nfExp, 1);
|
||||
MyWorksheet.WriteFontColor(r, 4, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfExp, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfExp, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(r, 3, 1.0/number, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(r, 4, -1.0/number, nfExp, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfExp, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfExp, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfExp, 3);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfExp, 3);
|
||||
@ -208,17 +208,17 @@ begin
|
||||
MyWorksheet.WriteNumber(r, 4, -1.0/number, nfExp, 3);
|
||||
MyWorksheet.WriteFontColor(r, 4, scGray);
|
||||
inc(r,2);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCurrency, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCurrency, 0 decs');
|
||||
MyWorksheet.WriteCurrency(r, 1, number, nfCurrency, 0, '$');
|
||||
MyWorksheet.WriteCurrency(r, 2, -number, nfCurrency, 0, '$');
|
||||
MyWorksheet.WriteCurrency(r, 3, 0.0, nfCurrency, 0, '$');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCurrencyRed, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCurrencyRed, 0 decs');
|
||||
MyWorksheet.WriteCurrency(r, 1, number, nfCurrencyRed, 0, 'USD');
|
||||
MyWorksheet.WriteCurrency(r, 2, -number, nfCurrencyRed, 0, 'USD');
|
||||
MyWorksheet.WriteCurrency(r, 3, 0.0, nfCurrencyRed, 0, 'USD');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, "$"#,##0_);("$"#,##0)');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, "$"#,##0_);("$"#,##0)');
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, '"$"#,##0_);("$"#,##0)');
|
||||
@ -226,7 +226,7 @@ begin
|
||||
MyWorksheet.WriteNumberFormat(r, 2, nfCustom, '"$"#,##0_);("$"#,##0)');
|
||||
MyWorksheet.WriteFontColor(r, 2, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, "$"#,##0.0_);[Red]("$"#,##0.0)');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, "$"#,##0.0_);[Red]("$"#,##0.0)');
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, '"$"#,##0.0_);[Red]("$"#,##0.0)');
|
||||
@ -235,7 +235,7 @@ begin
|
||||
MyWorksheet.WriteFontColor(r, 2, scGray);
|
||||
inc(r);
|
||||
fmt := '"€"#,##0.0_);[Red]("€"#,##0.0)';
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, '+fmt);
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, '+fmt);
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, UTF8ToAnsi(fmt));
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
@ -244,7 +244,7 @@ begin
|
||||
MyWorksheet.WriteFontColor(r, 2, scGray);
|
||||
inc(r);
|
||||
fmt := '[Green]"¥"#,##0.0_);[Red]-"¥"#,##0.0';
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, '+fmt);
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, '+fmt);
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, UTF8ToAnsi(fmt));
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
@ -252,7 +252,7 @@ begin
|
||||
MyWorksheet.WriteNumberFormat(r, 2, nfCustom, UTF8ToAnsi(fmt));
|
||||
MyWorksheet.WriteFontColor(r, 2, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, _("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, _("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)');
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, '_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)');
|
||||
@ -264,34 +264,34 @@ begin
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 0 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 0);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 1 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfPercentage, 1 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 1);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfPercentage, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfPercentage, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 3);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, hh:mm:ss');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, hh:mm:ss');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval);
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, h:m:s');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, h:m:s');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'H:M:s');
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, hh:mm');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, hh:mm');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'hh:mm');
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, h:m');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, h:m');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'h:m');
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, h');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, h');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'h');
|
||||
MyWorksheet.WriteFontColor(r, 1, scGray);
|
||||
inc(r);
|
||||
|
@ -47,7 +47,7 @@ begin
|
||||
for CurCell in MyWorksheet.Cells do
|
||||
begin
|
||||
Write('Row: ', CurCell^.Row, ' Col: ', CurCell^.Col, ' Value: ',
|
||||
UTF8ToConsole(MyWorkSheet.ReadAsUTF8Text(CurCell^.Row, CurCell^.Col))
|
||||
UTF8ToConsole(MyWorkSheet.ReadAsText(CurCell^.Row, CurCell^.Col))
|
||||
);
|
||||
if HasFormula(CurCell) then
|
||||
Write(' (Formula ', CurCell^.FormulaValue, ')');
|
||||
@ -58,5 +58,11 @@ begin
|
||||
// Finalization
|
||||
MyWorkbook.Free;
|
||||
end;
|
||||
|
||||
{$ifdef Windows}
|
||||
WriteLn;
|
||||
WriteLn('Press ENTER to quit...');
|
||||
ReadLn;
|
||||
{$endif}
|
||||
end.
|
||||
|
||||
|
@ -21,10 +21,9 @@ var
|
||||
MyRPNFormula: TsRPNFormula;
|
||||
MyDir: string;
|
||||
number: Double;
|
||||
lCol: TCol;
|
||||
lRow: TRow;
|
||||
r: Integer;
|
||||
fmt: String;
|
||||
lCol: TCol;
|
||||
begin
|
||||
// Open the output file
|
||||
MyDir := ExtractFilePath(ParamStr(0));
|
||||
@ -33,11 +32,6 @@ begin
|
||||
MyWorkbook := TsWorkbook.Create;
|
||||
MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet');
|
||||
|
||||
//MyWorksheet.WriteColWidth(0, 5);
|
||||
//MyWorksheet.WriteColWidth(1, 30);
|
||||
|
||||
MyWorksheet.WriteRowHeight(0, 3); // 3 lines
|
||||
|
||||
// Turn off grid lines and hide headers
|
||||
//MyWorksheet.Options := MyWorksheet.Options - [soShowGridLines, soShowHeaders];
|
||||
|
||||
@ -81,32 +75,32 @@ begin
|
||||
MyWorksheet.WriteFormula(0, 7, '=SIN(A1+B1)');
|
||||
|
||||
// Write some string cells
|
||||
MyWorksheet.WriteUTF8Text(1, 0, 'First');
|
||||
MyWorksheet.WriteText(1, 0, 'First');
|
||||
MyWorksheet.WriteFont(1, 0, 'Arial', 12, [fssBold, fssItalic, fssUnderline], scRed);
|
||||
MyWorksheet.WriteUTF8Text(1, 1, 'Second');
|
||||
MyWorksheet.WriteUTF8Text(1, 2, 'Third');
|
||||
MyWorksheet.WriteUTF8Text(1, 3, 'Fourth');
|
||||
MyWorksheet.WriteText(1, 1, 'Second');
|
||||
MyWorksheet.WriteText(1, 2, 'Third');
|
||||
MyWorksheet.WriteText(1, 3, 'Fourth');
|
||||
|
||||
// Write current date/time
|
||||
MyWorksheet.WriteDateTime(2, 0, now);
|
||||
|
||||
// Write cell with background color
|
||||
MyWorksheet.WriteUTF8Text(3, 0, 'Text');
|
||||
MyWorksheet.WriteText(3, 0, 'Text');
|
||||
MyWorksheet.WriteBackgroundColor(3, 0, NA_COLOR);
|
||||
|
||||
// Empty cell with background color
|
||||
MyWorksheet.WriteBackgroundColor(3, 1, NA_COLOR);
|
||||
|
||||
// Cell2 with top and bottom borders
|
||||
MyWorksheet.WriteUTF8Text(4, 0, 'Text');
|
||||
MyWorksheet.WriteText(4, 0, 'Text');
|
||||
MyWorksheet.WriteBorders(4, 0, [cbNorth, cbSouth]);
|
||||
MyWorksheet.WriteBorders(4, 1, [cbNorth, cbSouth]);
|
||||
MyWorksheet.WriteBorders(4, 2, [cbNorth, cbSouth]);
|
||||
|
||||
// Left, center, right aligned texts
|
||||
MyWorksheet.WriteUTF8Text(5, 0, 'L');
|
||||
MyWorksheet.WriteUTF8Text(5, 1, 'C');
|
||||
MyWorksheet.WriteUTF8Text(5, 2, 'R');
|
||||
MyWorksheet.WriteText(5, 0, 'L');
|
||||
MyWorksheet.WriteText(5, 1, 'C');
|
||||
MyWorksheet.WriteText(5, 2, 'R');
|
||||
MyWorksheet.WriteHorAlignment(5, 0, haLeft);
|
||||
MyWorksheet.WriteHorAlignment(5, 1, haCenter);
|
||||
MyWorksheet.WriteHorAlignment(5, 2, haRight);
|
||||
@ -124,99 +118,100 @@ begin
|
||||
r:= 10;
|
||||
// Write current date/time and test numbers for various formatting options
|
||||
|
||||
MyWorksheet.WriteUTF8Text(r, 1, 'Formats in cyan cells are not supported by BIFF2');
|
||||
MyWorksheet.WriteText(r, 1, 'Formats in cyan cells are not supported by BIFF2');
|
||||
|
||||
inc(r, 2);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortDate');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortDate');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortDate);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfLongDate');
|
||||
MyWorksheet.WriteText(r, 0, 'nfLongDate');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfLongDate);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortTime');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortTime');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortTime);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfLongTime');
|
||||
MyWorksheet.WriteText(r, 0, 'nfLongTime');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfLongTime);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortDateTime');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortDateTime');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortDateTime);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfDayMonth');
|
||||
MyWorksheet.WriteText(r, 0, 'nfDayMonth');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfDayMonth);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfMonthYear');
|
||||
MyWorksheet.WriteText(r, 0, 'nfMonthYear');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfMonthYear);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortTimeAM');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortTimeAM');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortTimeAM);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfLongTimeAM');
|
||||
MyWorksheet.WriteText(r, 0, 'nfLongTimeAM');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfLongTimeAM);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, nn:ss');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, nn:ss');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'nn:ss');
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, nn:ss.z');
|
||||
(* FIXME: These millisecond formats cause an Excel format warning
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, nn:ss.z');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'nn:ss.z');
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, mm:ss.zzz');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, mm:ss.zzz');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'mm:ss.zzz');
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
|
||||
*)
|
||||
// Write formatted numbers
|
||||
number := 12345.67890123456789;
|
||||
inc(r, 2);
|
||||
MyWorksheet.WriteUTF8Text(r, 1, '12345.67890123456789');
|
||||
MyWorksheet.WriteUTF8Text(r, 2, '-12345.67890123456789');
|
||||
MyWorksheet.WriteText(r, 1, '12345.67890123456789');
|
||||
MyWorksheet.WriteText(r, 2, '-12345.67890123456789');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfGeneral');
|
||||
MyWorksheet.WriteText(r, 0, 'nfGeneral');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfGeneral);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfGeneral);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 0 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 0);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 0);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 1 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 1 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 1);
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 1);
|
||||
MyWorksheet.WriteFontColor(r, 2, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 2);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 3);
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 3);
|
||||
MyWorksheet.WriteFontColor(r, 2, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 0 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 0);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 0);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 1 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 1 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 1);
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 1);
|
||||
MyWorksheet.WriteFontColor(r, 2, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 2);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 3);
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 3);
|
||||
MyWorksheet.WriteFontColor(r, 2, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfExp, 1 dec');
|
||||
MyWorksheet.WriteText(r, 0, 'nfExp, 1 dec');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfExp, 1);
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfExp, 1);
|
||||
@ -226,13 +221,13 @@ begin
|
||||
MyWorksheet.WriteNumber(r, 4, -1.0/number, nfExp, 1);
|
||||
MyWorksheet.WriteFontColor(r, 4, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfExp, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfExp, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(r, 3, 1.0/number, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(r, 4, -1.0/number, nfExp, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfExp, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfExp, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfExp, 3);
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfExp, 3);
|
||||
@ -242,23 +237,25 @@ begin
|
||||
MyWorksheet.WriteNumber(r, 4, -1.0/number, nfExp, 3);
|
||||
MyWorksheet.WriteFontColor(r, 4, NA_COLOR);
|
||||
inc(r,2);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCurrency, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCurrency, 0 decs');
|
||||
MyWorksheet.WriteCurrency(r, 1, number, nfCurrency, 0, '$');
|
||||
MyWorksheet.WriteCurrency(r, 2, -number, nfCurrency, 0, '$');
|
||||
MyWorksheet.WriteCurrency(r, 3, 0.0, nfCurrency, 0, '$');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCurrencyRed, 0 decs');
|
||||
(* FIXME: This format causes an Excel format warning
|
||||
MyWorksheet.WriteText(r, 0, 'nfCurrencyRed, 0 decs');
|
||||
MyWorksheet.WriteCurrency(r, 1, number, nfCurrencyRed, 0, 'USD');
|
||||
MyWorksheet.WriteCurrency(r, 2, -number, nfCurrencyRed, 0, 'USD');
|
||||
MyWorksheet.WriteCurrency(r, 3, 0.0, nfCurrencyRed, 0, 'USD');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, "$"#,##0_);("$"#,##0)');
|
||||
inc(r); *)
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, "$"#,##0_);("$"#,##0)');
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, '"$"#,##0_);("$"#,##0)');
|
||||
MyWorksheet.WriteNumber(r, 2, -number);
|
||||
MyWorksheet.WriteNumberFormat(r, 2, nfCustom, '"$"#,##0_);("$"#,##0)');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, "$"#,##0.0_);[Red]("$"#,##0.0)');
|
||||
(* FIXME: These formats cause an Excel format warning
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, "$"#,##0.0_);[Red]("$"#,##0.0)');
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, '"$"#,##0.0_);[Red]("$"#,##0.0)');
|
||||
@ -267,7 +264,7 @@ begin
|
||||
MyWorksheet.WriteFontColor(r, 2, NA_COLOR);
|
||||
inc(r);
|
||||
fmt := '"€"#,##0.0_);[Red]("€"#,##0.0)';
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, '+fmt);
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, '+fmt);
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, UTF8ToAnsi(fmt));
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
@ -276,15 +273,16 @@ begin
|
||||
MyWorksheet.WriteFontColor(r, 2, NA_COLOR);
|
||||
inc(r);
|
||||
fmt := '[Green]"¥"#,##0.0_);[Red]-"¥"#,##0.0';
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, '+fmt);
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, '+fmt);
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, UTF8ToAnsi(fmt));
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
MyWorksheet.WriteNumber(r, 2, -number);
|
||||
MyWorksheet.WriteNumberFormat(r, 2, nfCustom, UTF8ToAnsi(fmt));
|
||||
MyWorksheet.WriteFontColor(r, 2, NA_COLOR);
|
||||
*)
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, _("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, _("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)');
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, '_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)');
|
||||
@ -293,53 +291,53 @@ begin
|
||||
MyWorksheet.WriteFontColor(r, 2, NA_COLOR);
|
||||
inc(r, 2);
|
||||
number := 1.333333333;
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfPercentage, 0 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 0);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 1 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfPercentage, 1 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 1);
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfPercentage, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfPercentage, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 3);
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, hh:mm:ss');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, hh:mm:ss');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval);
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, h:m:s');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, h:m:s');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'H:M:s');
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, hh:mm');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, hh:mm');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'hh:mm');
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, h:m');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, h:m');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'h:m');
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, h');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, h');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'h');
|
||||
MyWorksheet.WriteFontColor(r, 1, NA_COLOR);
|
||||
inc(r);
|
||||
|
||||
// Set width of columns 0 to 3
|
||||
MyWorksheet.WriteColWidth(0, 48); // 48 characters, default is 12 --> 4x default width
|
||||
lCol.Width := 24; // 24 characters, default is 12 --> 2x default width
|
||||
MyWorksheet.WriteColWidth(0, 10, suCentimeters); // 10 cm
|
||||
lCol.Width := 40; // WriteColInfo uses workbook units, i.e. mm
|
||||
MyWorksheet.WriteColInfo(1, lCol);
|
||||
MyWorksheet.WriteColInfo(2, lCol);
|
||||
MyWorksheet.WriteColInfo(3, lCol);
|
||||
MyWorksheet.WriteColInfo(4, lCol);
|
||||
MyWorksheet.WriteColWidth(5, 6); // default is characters: 6 characters
|
||||
|
||||
// Set height of rows 5 and 6
|
||||
lRow.Height := 4; // 4 lines
|
||||
MyWorksheet.WriteRowInfo(5, lRow);
|
||||
lRow.Height := 2; // 2 lines
|
||||
MyWorksheet.WriteRowInfo(6, lRow);
|
||||
MyWorksheet.WriteRowHeight(5, 4, suLines); // Lines
|
||||
MyWorksheet.WriteRowHeight(6, 2); // Lines is default...
|
||||
|
||||
// Save the spreadsheet to a file
|
||||
MyWorkbook.WriteToFile(MyDir + 'test' + STR_EXCEL_EXTENSION, sfExcel2, true);
|
||||
|
@ -46,7 +46,7 @@ begin
|
||||
begin
|
||||
Write('Row: ', CurCell^.Row,
|
||||
' Col: ', CurCell^.Col, ' Value: ',
|
||||
UTF8ToConsole(MyWorkSheet.ReadAsUTF8Text(CurCell^.Row, CurCell^.Col)));
|
||||
UTF8ToConsole(MyWorkSheet.ReadAsText(CurCell^.Row, CurCell^.Col)));
|
||||
if HasFormula(CurCell) then
|
||||
Write(' - Formula: ', CurCell^.FormulaValue);
|
||||
WriteLn;
|
||||
@ -56,5 +56,11 @@ begin
|
||||
// Finalization
|
||||
MyWorkbook.Free;
|
||||
end;
|
||||
|
||||
{$ifdef Windows}
|
||||
WriteLn;
|
||||
WriteLn('Press ENTER to quit...');
|
||||
Readln;
|
||||
{$endif}
|
||||
end.
|
||||
|
||||
|
@ -48,10 +48,10 @@ begin
|
||||
MyWorkbook.AddFont('Calibri', 20, [], scRed);
|
||||
|
||||
// Change row height
|
||||
MyWorksheet.WriteRowHeight(0, 1.1); // modify height of row 0 to 3 lines
|
||||
MyWorksheet.WriteRowHeight(0, 3); // modify height of row 0 to 3 lines
|
||||
|
||||
// Change colum widths
|
||||
MyWorksheet.WriteColWidth(0, 40);
|
||||
MyWorksheet.WriteColWidth(0, 40); // characters
|
||||
MyWorksheet.WriteColWidth(1, 20);
|
||||
MyWorksheet.WriteColWidth(2, 20);
|
||||
MyWorksheet.WriteColWidth(3, 15);
|
||||
@ -61,12 +61,11 @@ begin
|
||||
MyWorksheet.WriteNumber(0, 0, 1.0);// A1
|
||||
MyWorksheet.WriteVertAlignment(0, 0, vaCenter);
|
||||
|
||||
|
||||
MyWorksheet.WriteNumber(0, 1, 2.0);// B1
|
||||
MyWorksheet.WriteNumber(0, 2, 3.0);// C1
|
||||
MyWorksheet.WriteNumber(0, 3, 4.0);// D1
|
||||
|
||||
MyWorksheet.WriteUTF8Text(4, 2, Str_Total);// C5
|
||||
MyWorksheet.WriteText(4, 2, Str_Total);// C5
|
||||
MyWorksheet.WriteBorders(4, 2, [cbEast, cbNorth, cbWest, cbSouth]);
|
||||
myWorksheet.WriteFontColor(4, 2, scRed);
|
||||
MyWorksheet.WriteBackgroundColor(4, 2, scSilver);
|
||||
@ -74,35 +73,35 @@ begin
|
||||
|
||||
MyWorksheet.WriteNumber(4, 3, 10); // D5
|
||||
|
||||
MyWorksheet.WriteUTF8Text(4, 4, 'This is a long wrapped text.');
|
||||
MyWorksheet.WriteText(4, 4, 'This is a long wrapped text.');
|
||||
MyWorksheet.WriteUsedFormatting(4, 4, [uffWordWrap]);
|
||||
MyWorksheet.WriteHorAlignment(4, 4, haCenter);
|
||||
|
||||
MyWorksheet.WriteUTF8Text(4, 5, 'Stacked text');
|
||||
MyWorksheet.WriteText(4, 5, 'Stacked text');
|
||||
MyWorksheet.WriteTextRotation(4, 5, rtStacked);
|
||||
MyWorksheet.WriteHorAlignment(4, 5, haCenter);
|
||||
|
||||
MyWorksheet.WriteUTF8Text(4, 6, 'CW-rotated text');
|
||||
MyWorksheet.WriteText(4, 6, 'CW-rotated text');
|
||||
MyWorksheet.WriteTextRotation(4, 6, rt90DegreeClockwiseRotation);
|
||||
|
||||
MyWorksheet.WriteUTF8Text(4, 7, 'CCW-rotated text');
|
||||
MyWorksheet.WriteText(4, 7, 'CCW-rotated text');
|
||||
MyWorksheet.WriteTextRotation(4, 7, rt90DegreeCounterClockwiseRotation);
|
||||
|
||||
MyWorksheet.WriteUTF8Text(4, 8, 'CW-rotated text');
|
||||
MyWorksheet.WriteText(4, 8, 'CW-rotated text');
|
||||
MyWorksheet.WriteTextRotation(4, 8, rt90DegreeClockwiseRotation);
|
||||
MyWorksheet.WriteVertAlignment(4, 8, vaTop);
|
||||
MyWorksheet.WriteHorAlignment(4, 8, haLeft);
|
||||
|
||||
MyWorksheet.WriteUTF8Text(4, 9, 'CCW-rotated text');
|
||||
MyWorksheet.WriteText(4, 9, 'CCW-rotated text');
|
||||
MyWorksheet.WriteTextRotation(4, 9, rt90DegreeCounterClockwiseRotation);
|
||||
MyWorksheet.WriteVertAlignment(4, 9, vaTop);
|
||||
Myworksheet.WriteHorAlignment(4, 9, haRight);
|
||||
|
||||
MyWorksheet.WriteUTF8Text(4, 10, 'CW-rotated text');
|
||||
MyWorksheet.WriteText(4, 10, 'CW-rotated text');
|
||||
MyWorksheet.WriteTextRotation(4, 10, rt90DegreeClockwiseRotation);
|
||||
MyWorksheet.WriteVertAlignment(4, 10, vaCenter);
|
||||
|
||||
MyWorksheet.WriteUTF8Text(4, 11, 'CCW-rotated text');
|
||||
MyWorksheet.WriteText(4, 11, 'CCW-rotated text');
|
||||
MyWorksheet.WriteTextRotation(4, 11, rt90DegreeCounterClockwiseRotation);
|
||||
MyWorksheet.WriteVertAlignment(4, 11, vaCenter);
|
||||
|
||||
@ -170,133 +169,134 @@ begin
|
||||
|
||||
r := 10;
|
||||
// Write current date/time to cells B11:B16
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortDate');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortDate');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortDate);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfLongDate');
|
||||
MyWorksheet.WriteText(r, 0, 'nfLongDate');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfLongDate);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortTime');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortTime');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortTime);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfLongTime');
|
||||
MyWorksheet.WriteText(r, 0, 'nfLongTime');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfLongTime);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortDateTime');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortDateTime');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortDateTime);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, dd/mmm');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, dd/mmm');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'dd/mmm');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, mmm/yy');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, mmm/yy');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'mmm/yy');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfShortTimeAM');
|
||||
MyWorksheet.WriteText(r, 0, 'nfShortTimeAM');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfShortTimeAM);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfLongTimeAM');
|
||||
MyWorksheet.WriteText(r, 0, 'nfLongTimeAM');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfLongTimeAM);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, nn:ss');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, nn:ss');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'nn:ss');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, nn:ss.z');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, nn:ss.z');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'nn:ss.z');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, nn:ss.zzz');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, nn:ss.zzz');
|
||||
MyWorksheet.WriteDateTime(r, 1, now, nfCustom, 'nn:ss.zzz');
|
||||
|
||||
// Write formatted numbers
|
||||
number := 12345.67890123456789;
|
||||
inc(r, 2);
|
||||
MyWorksheet.WriteUTF8Text(r, 1, '12345.67890123456789');
|
||||
MyWorksheet.WriteUTF8Text(r, 2, '-12345.67890123456789');
|
||||
MyWorksheet.WriteText(r, 1, '12345.67890123456789');
|
||||
MyWorksheet.WriteText(r, 2, '-12345.67890123456789');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfGeneral');
|
||||
MyWorksheet.WriteText(r, 0, 'nfGeneral');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfGeneral);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfGeneral);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 0 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 0);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 0);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 1 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 1 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 1);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 1);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 2);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixed, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixed, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixed, 3);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixed, 3);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 0 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 0);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 0);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 1 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 1 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 1);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 1);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 2);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFixedTh, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFixedTh, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfFixedTh, 3);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfFixedTh, 3);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfExp, 1 dec');
|
||||
MyWorksheet.WriteText(r, 0, 'nfExp, 1 dec');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfExp, 1);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfExp, 1);
|
||||
MyWorksheet.WriteNumber(r, 3, 1.0/number, nfExp, 1);
|
||||
MyWorksheet.WriteNumber(r, 4, -1.0/number, nfExp, 1);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfExp, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfExp, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(r, 3, 1.0/number, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(r, 4, -1.0/number, nfExp, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfExp, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfExp, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfExp, 3);
|
||||
MyWorksheet.WriteNumber(r, 2, -number, nfExp, 3);
|
||||
MyWorksheet.WriteNumber(r, 3, 1.0/number, nfExp, 3);
|
||||
MyWorksheet.WriteNumber(r, 4, -1.0/number, nfExp, 3);
|
||||
|
||||
inc(r,2);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCurrency, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCurrency, 0 decs');
|
||||
MyWorksheet.WriteCurrency(r, 1, number, nfCurrency, 0, 'USD');
|
||||
MyWorksheet.WriteCurrency(r, 2, -number, nfCurrency, 0, 'USD');
|
||||
MyWorksheet.WriteCurrency(r, 3, 0.0, nfCurrency, 0, 'USD');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCurrencyRed, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCurrencyRed, 0 decs');
|
||||
MyWorksheet.WriteCurrency(r, 1, number, nfCurrencyRed, 0, 'USD');
|
||||
MyWorksheet.WriteCurrency(r, 2, -number, nfCurrencyRed, 0, 'USD');
|
||||
MyWorksheet.WriteCurrency(r, 3, 0.0, nfCurrencyRed, 0, 'USD');
|
||||
|
||||
inc(r, 2);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, "$"#,##0_);("$"#,##0)');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, "$"#,##0_);("$"#,##0)');
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, '"$"#,##0_);("$"#,##0)');
|
||||
MyWorksheet.WriteNumber(r, 2, -number);
|
||||
MyWorksheet.WriteNumberFormat(r, 2, nfCustom, '"$"#,##0_);("$"#,##0)');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, "$"#,##0.0_);[Red]("$"#,##0.0)');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, "$"#,##0.0_);[Red]("$"#,##0.0)');
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, '"$"#,##0.0_);[Red]("$"#,##0.0)');
|
||||
MyWorksheet.WriteNumber(r, 2, -number);
|
||||
MyWorksheet.WriteNumberFormat(r, 2, nfCustom, '"$"#,##0.0_);[Red]("$"#,##0.0)');
|
||||
inc(r);
|
||||
fmt := '"€"#,##0.0_);[Red]("€"#,##0.0)';
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, '+fmt);
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, '+fmt);
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, UTF8ToAnsi(fmt));
|
||||
MyWorksheet.WriteNumber(r, 2, -number);
|
||||
MyWorksheet.WriteNumberFormat(r, 2, nfCustom, UTF8ToAnsi(fmt));
|
||||
inc(r); { --- not working correctly: Except reports an error
|
||||
inc(r);
|
||||
{ --- not working correctly: Excel reports an error
|
||||
fmt := '[Green]"¥"#,##0.0_);[Red]-"¥"#,##0.0';
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, '+fmt);
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
@ -304,46 +304,46 @@ begin
|
||||
MyWorksheet.WriteNumber(r, 2, -number);
|
||||
MyWorksheet.WriteNumberFormat(r, 2, nfCustom, UTF8ToAnsi(fmt));
|
||||
inc(r); }
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfCustom, _("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)');
|
||||
MyWorksheet.WriteText(r, 0, 'nfCustom, _("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)');
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteNumberFormat(r, 1, nfCustom, '_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)');
|
||||
MyWorksheet.WriteNumber(r, 2, -number);
|
||||
MyWorksheet.WriteNumberFormat(r, 2, nfCustom, '_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)');
|
||||
inc(r, 2);
|
||||
number := 1.333333333;
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 0 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfPercentage, 0 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 0);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 1 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfPercentage, 1 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 1);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 2 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfPercentage, 2 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 2);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfPercentage, 3 decs');
|
||||
MyWorksheet.WriteText(r, 0, 'nfPercentage, 3 decs');
|
||||
MyWorksheet.WriteNumber(r, 1, number, nfPercentage, 3);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, hh:mm:ss');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, hh:mm:ss');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval);
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, h:m:s');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, h:m:s');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'H:M:s');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, hh:mm');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, hh:mm');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'hh:mm');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, h:m');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, h:m');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'h:m');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfTimeInterval, h');
|
||||
MyWorksheet.WriteText(r, 0, 'nfTimeInterval, h');
|
||||
MyWorksheet.WriteDateTime(r, 1, number, nfTimeInterval, 'h');
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFraction, ??/??');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFraction, ??/??');
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteFractionFormat(r, 1, false, 2, 2);
|
||||
|
||||
inc(r);
|
||||
MyWorksheet.WriteUTF8Text(r, 0, 'nfFraction, # ??/??');
|
||||
MyWorksheet.WriteText(r, 0, 'nfFraction, # ??/??');
|
||||
MyWorksheet.WriteNumber(r, 1, number);
|
||||
MyWorksheet.WriteFractionFormat(r, 1, true, 2, 2);
|
||||
|
||||
@ -353,10 +353,10 @@ begin
|
||||
MyWorksheet := MyWorkbook.AddWorksheet(Str_Worksheet2);
|
||||
|
||||
// Write some string cells
|
||||
MyWorksheet.WriteUTF8Text(0, 0, Str_First);
|
||||
MyWorksheet.WriteUTF8Text(0, 1, Str_Second);
|
||||
MyWorksheet.WriteUTF8Text(0, 2, Str_Third);
|
||||
MyWorksheet.WriteUTF8Text(0, 3, Str_Fourth);
|
||||
MyWorksheet.WriteText(0, 0, Str_First);
|
||||
MyWorksheet.WriteText(0, 1, Str_Second);
|
||||
MyWorksheet.WriteText(0, 2, Str_Third);
|
||||
MyWorksheet.WriteText(0, 3, Str_Fourth);
|
||||
|
||||
// Creates a new worksheet
|
||||
MyWorksheet := MyWorkbook.AddWorksheet('Colors');
|
||||
@ -366,7 +366,7 @@ begin
|
||||
for i:=0 to palette.Count-1 do begin
|
||||
MyWorksheet.WriteBlank(i, 0);
|
||||
Myworksheet.WriteBackgroundColor(i, 0, palette[i]);
|
||||
MyWorksheet.WriteUTF8Text(i, 1, GetColorName(palette[i]));
|
||||
MyWorksheet.WriteText(i, 1, GetColorName(palette[i]));
|
||||
end;
|
||||
finally
|
||||
palette.Free;
|
||||
|
@ -63,5 +63,11 @@ begin
|
||||
// Finalization
|
||||
MyWorkbook.Free;
|
||||
end;
|
||||
|
||||
{$IFDEF WINDOWS}
|
||||
WriteLn;
|
||||
WriteLn('Press ENTER to quit...');
|
||||
ReadLn;
|
||||
{$ENDIF}
|
||||
end.
|
||||
|
||||
|
@ -365,17 +365,17 @@ begin
|
||||
Myworksheet.WriteNumber(r, 1, number, nfFraction, '# ??/??');
|
||||
|
||||
// Set width of columns 0, 1 and 5
|
||||
MyWorksheet.WriteColWidth(0, 30);
|
||||
lCol.Width := 25;
|
||||
MyWorksheet.WriteColInfo(1, lCol);
|
||||
MyWorksheet.WriteColWidth(2, 15);
|
||||
MyWorksheet.WriteColWidth(3, 15);
|
||||
MyWorksheet.WriteColWidth(4, 15);
|
||||
lCol.Width := 5;
|
||||
MyWorksheet.WriteColWidth(0, 30, suChars);
|
||||
lCol.Width := 60;
|
||||
MyWorksheet.WriteColInfo(1, lCol); // ColInfo uses by default workbook units --> mm
|
||||
MyWorksheet.WriteColWidth(2, 15, suChars);
|
||||
MyWorksheet.WriteColWidth(3, 15, suChars);
|
||||
MyWorksheet.WriteColWidth(4, 15, suChars);
|
||||
lCol.Width := 12; // mm
|
||||
MyWorksheet.WriteColInfo(5, lCol);
|
||||
|
||||
// Set height of rows 0
|
||||
MyWorksheet.WriteRowHeight(0, 5); // 5 lines
|
||||
MyWorksheet.WriteRowHeight(0, 5, suLines); // 5 lines
|
||||
|
||||
// Creates a new worksheet
|
||||
MyWorksheet := MyWorkbook.AddWorksheet(Str_Worksheet2);
|
||||
|
@ -61,9 +61,9 @@ begin
|
||||
MyWorkbook.Free;
|
||||
end;
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
{$IFDEF WINDOWS}
|
||||
WriteLn;
|
||||
WriteLn('Press ENTER to exit.');
|
||||
WriteLn('Press ENTER to quit...');
|
||||
ReadLn;
|
||||
{$ENDIF}
|
||||
end.
|
||||
|
@ -54,7 +54,7 @@ begin
|
||||
Write(
|
||||
'Row: ', CurCell^.Row,
|
||||
' Col: ', CurCell^.Col,
|
||||
' Value: ', UTF8ToConsole(MyWorkSheet.ReadAsUTF8Text(CurCell^.Row, CurCell^.Col))
|
||||
' Value: ', UTF8ToConsole(MyWorkSheet.ReadAsText(CurCell^.Row, CurCell^.Col))
|
||||
);
|
||||
if MyWorksheet.HasHyperlink(CurCell) then
|
||||
Write(' Hyperlink: ', MyWorksheet.ReadHyperlink(CurCell).Target);
|
||||
@ -69,9 +69,9 @@ begin
|
||||
stream.Free;
|
||||
end;
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
{$IFDEF WINDOWS}
|
||||
WriteLn;
|
||||
WriteLn('Press ENTER to exit.');
|
||||
WriteLn('Press ENTER to quit...');
|
||||
ReadLn;
|
||||
{$ENDIF}
|
||||
end.
|
||||
|
@ -31,136 +31,136 @@ begin
|
||||
Myworksheet.LeftPaneWidth := 1;
|
||||
|
||||
// Write colwidth
|
||||
Myworksheet.WriteColWidth(1, 25); // 25 characters
|
||||
Myworksheet.WriteColWidth(1, 25, suChars); // approx 25 characters
|
||||
|
||||
// Write some cells
|
||||
row := 0;
|
||||
|
||||
MyWorksheet.WriteBlank(row, 0);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Description');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Example');
|
||||
MyWorksheet.WriteText(row, 1, 'Description');
|
||||
MyWorksheet.WriteText(row, 2, 'Example');
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is a text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Hello world!');
|
||||
MyWorksheet.WriteText(row, 1, 'This is a text:');
|
||||
MyWorksheet.WriteText(row, 2, 'Hello world!');
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is bold text:');
|
||||
Myworksheet.WriteUTF8Text(row, 2, 'Hello world!');
|
||||
MyWorksheet.WriteText(row, 1, 'This is bold text:');
|
||||
Myworksheet.WriteText(row, 2, 'Hello world!');
|
||||
Myworksheet.WriteFontStyle(row, 2, [fssBold]);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is a number:');
|
||||
MyWorksheet.WriteText(row, 1, 'This is a number:');
|
||||
MyWorksheet.WriteNumber(row, 2, 3.141592);
|
||||
Myworksheet.WriteHorAlignment(row, 2, haRight);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is a date:');
|
||||
MyWorksheet.WriteText(row, 1, 'This is a date:');
|
||||
Myworksheet.WriteDateTime(row, 2, date());
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is a long text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'A very, very, very, very long text, indeed');
|
||||
MyWorksheet.WriteText(row, 1, 'This is a long text:');
|
||||
MyWorksheet.WriteText(row, 2, 'A very, very, very, very long text, indeed');
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Centered text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'I am in the center.');
|
||||
MyWorksheet.WriteText(row, 1, 'Centered text:');
|
||||
MyWorksheet.WriteText(row, 2, 'I am in the center.');
|
||||
MyWorksheet.WriteHorAlignment(row, 2, haCenter);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is a long text with line break:');
|
||||
MyWorksheet.WriteText(row, 1, 'This is a long text with line break:');
|
||||
Myworksheet.WriteVertAlignment(row, 1, vaTop);
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'A very, very, very, very long text,<br /> indeed');
|
||||
MyWorksheet.WriteText(row, 2, 'A very, very, very, very long text,<br /> indeed');
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Merged rows');
|
||||
MyWorksheet.WriteText(row, 1, 'Merged rows');
|
||||
Myworksheet.MergeCells(row, 1, row+1, 1);
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'A');
|
||||
MyWorksheet.WriteText(row, 2, 'A');
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'B');
|
||||
MyWorksheet.WriteText(row, 2, 'B');
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Merged columns');
|
||||
MyWorksheet.WriteText(row, 1, 'Merged columns');
|
||||
MyWorksheet.WriteHorAlignment(row, 1, haCenter);
|
||||
MyWorksheet.MergeCells(row, 1, row, 2);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Right border:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'medium / red');
|
||||
MyWorksheet.WriteText(row, 1, 'Right border:');
|
||||
MyWorksheet.WriteText(row, 2, 'medium / red');
|
||||
MyWorksheet.WriteBorders(row, 2, [cbEast]);
|
||||
MyWorksheet.WriteBorderStyle(row, 2, cbEast, lsMedium, scRed);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Top border:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'top / dashed');
|
||||
MyWorksheet.WriteText(row, 1, 'Top border:');
|
||||
MyWorksheet.WriteText(row, 2, 'top / dashed');
|
||||
MyWorksheet.WriteBorders(row, 2, [cbNorth]);
|
||||
MyWorksheet.WriteBorderLineStyle(row, 2, cbNorth, lsDashed);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Left border:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'left / dotted');
|
||||
MyWorksheet.WriteText(row, 1, 'Left border:');
|
||||
MyWorksheet.WriteText(row, 2, 'left / dotted');
|
||||
MyWorksheet.WriteBorders(row, 2, [cbWest]);
|
||||
MyWorksheet.WriteBorderLineStyle(row, 2, cbWest, lsDotted);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Bottom border:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'bottom / double');
|
||||
MyWorksheet.WriteText(row, 1, 'Bottom border:');
|
||||
MyWorksheet.WriteText(row, 2, 'bottom / double');
|
||||
MyWorksheet.WriteBorders(row, 2, [cbSouth]);
|
||||
MyWorksheet.WriteBorderLineStyle(row, 2, cbSouth, lsDouble);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This row is high');
|
||||
MyWorksheet.WriteText(row, 1, 'This row is high');
|
||||
MyWorksheet.WriteRowHeight(row, 5);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Colors:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'yellow on blue');
|
||||
MyWorksheet.WriteText(row, 1, 'Colors:');
|
||||
MyWorksheet.WriteText(row, 2, 'yellow on blue');
|
||||
MyWorksheet.WriteFontColor(row, 2, scYellow);
|
||||
MyWorksheet.WriteBackgroundColor(row, 2, scBlue);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'RGB background color:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'color #FF77C3'); // HTML colors are big-endian
|
||||
MyWorksheet.WriteText(row, 1, 'RGB background color:');
|
||||
MyWorksheet.WriteText(row, 2, 'color #FF77C3'); // HTML colors are big-endian
|
||||
MyWorksheet.WriteBackgroundColor(row, 2, $C377FF); // fps colors are little-endian
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Bold text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Bold text');
|
||||
MyWorksheet.WriteText(row, 1, 'Bold text:');
|
||||
MyWorksheet.WriteText(row, 2, 'Bold text');
|
||||
MyWorksheet.WriteFontStyle(row, 2, [fssBold]);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Italic text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Italic text');
|
||||
MyWorksheet.WriteText(row, 1, 'Italic text:');
|
||||
MyWorksheet.WriteText(row, 2, 'Italic text');
|
||||
MyWorksheet.WriteFontStyle(row, 2, [fssItalic]);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Underlined text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Underlined text');
|
||||
MyWorksheet.WriteText(row, 1, 'Underlined text:');
|
||||
MyWorksheet.WriteText(row, 2, 'Underlined text');
|
||||
MyWorksheet.WriteFontStyle(row, 2, [fssUnderline]);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Strike-through text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Strike-through text');
|
||||
MyWorksheet.WriteText(row, 1, 'Strike-through text:');
|
||||
MyWorksheet.WriteText(row, 2, 'Strike-through text');
|
||||
MyWorksheet.WriteFontStyle(row, 2, [fssStrikeout]);
|
||||
inc(row);
|
||||
|
||||
|
@ -37,28 +37,28 @@ begin
|
||||
try
|
||||
sheet := srcWorkbook.AddWorksheet('Sheet');
|
||||
|
||||
sheet.WriteUTF8Text(0, 0, 'Link to biff8 test file');
|
||||
sheet.WriteText(0, 0, 'Link to biff8 test file');
|
||||
sheet.WriteHyperlink(0, 0, '../excel8demo/test.xls#''My Worksheet 2''!A1');
|
||||
//sheet.WriteHyperlink(0, 0, '../excel8demo/test.xls#''Meu Relatório''!A1');
|
||||
|
||||
sheet.WriteUTF8Text(1, 0, 'Link to ods test file');
|
||||
sheet.WriteText(1, 0, 'Link to ods test file');
|
||||
sheet.WriteHyperlink(1, 0, '..\opendocdemo\test.ods');
|
||||
|
||||
sheet.WriteUTF8Text(2, 0, 'E-Mail Link');
|
||||
sheet.WriteText(2, 0, 'E-Mail Link');
|
||||
sheet.WriteHyperlink(2, 0, 'mailto:someone@mail.com;someoneelse@mail.com?Subject=This is a test');
|
||||
|
||||
sheet.WriteUTF8Text(3, 0, 'Web-Hyperlink');
|
||||
sheet.WriteText(3, 0, 'Web-Hyperlink');
|
||||
sheet.WriteHyperlink(3, 0, 'http://www.lazarus-ide.org/');
|
||||
|
||||
sheet.WriteUTF8Text(4, 0, 'File-Link (absolute path)');
|
||||
sheet.WriteText(4, 0, 'File-Link (absolute path)');
|
||||
sheet.WriteHyperlink(4, 0, 'file:///'+ExpandFilename('..\..\..\tests\testooxml_1899.xlsx'));
|
||||
// This creates the URI such as "file:///D:\Prog_Lazarus\svn\lazarus-ccr\components\fpspreadsheet\tests\testooxml_1899.xlsx"
|
||||
// but makes sure that the file exists on your system.
|
||||
|
||||
sheet.WriteUTF8Text(5, 0, 'Jump to A10');
|
||||
sheet.WriteText(5, 0, 'Jump to A10');
|
||||
sheet.WriteHyperlink(5, 0, '#A10');
|
||||
|
||||
sheet.WriteColWidth(0, 40);
|
||||
sheet.WriteColWidth(0, 40, suChars);
|
||||
|
||||
srcWorkbook.WriteToFile(srcFile, true);
|
||||
finally
|
||||
@ -124,7 +124,6 @@ begin
|
||||
WriteLn('Failure finding linked worksheet.');
|
||||
continue;
|
||||
end;
|
||||
// linkedSheet := linkedWorkbook.GetWorksheetByName(bookmark);
|
||||
// Copy linked worksheet to new sheet in destination workbook
|
||||
destSheet := destWorkbook.CopyWorksheetFrom(linkedSheet);
|
||||
// Create sheet name
|
||||
@ -152,8 +151,11 @@ begin
|
||||
end else
|
||||
WriteLn('No hyperlinks found.');
|
||||
|
||||
{$IFDEF Windows}
|
||||
WriteLn;
|
||||
WriteLn('Press ENTER to close...');
|
||||
ReadLn;
|
||||
{$ENDIF}
|
||||
|
||||
finally
|
||||
// Clean up
|
||||
|
@ -25,7 +25,7 @@ begin
|
||||
|
||||
// Open the input file
|
||||
MyDir := ExtractFilePath(ParamStr(0));
|
||||
InputFileName := MyDir + 'a.xlsx';
|
||||
InputFileName := MyDir + 'test.xlsx';
|
||||
if not FileExists(InputFileName) then begin
|
||||
WriteLn('Input file ', InputFileName, ' does not exist. Please run opendocwrite first.');
|
||||
Halt;
|
||||
@ -49,10 +49,16 @@ begin
|
||||
WriteLn(
|
||||
'Row: ', cell^.Row,
|
||||
' Col: ', cell^.Col,
|
||||
' Value: ', UTF8ToConsole(MyWorkSheet.ReadAsUTF8Text(cell^.Row, cell^.Col))
|
||||
' Value: ', UTF8ToConsole(MyWorkSheet.ReadAsText(cell^.Row, cell^.Col))
|
||||
);
|
||||
|
||||
// Finalization
|
||||
MyWorkbook.Free;
|
||||
|
||||
{$ifdef WINDOWS}
|
||||
WriteLn;
|
||||
WriteLn('Press ENTER to quit...');
|
||||
ReadLn;
|
||||
{$ENDIF}
|
||||
end.
|
||||
|
||||
|
@ -34,10 +34,10 @@ begin
|
||||
MyWorksheet.WriteNumber(0, 3, 4.0);
|
||||
MyWorksheet.WriteUTF8Text(0, 4, '& " '' < >');
|
||||
|
||||
MyWorksheet.WriteUTF8Text(0, 26, 'AA'); // Test for column name
|
||||
MyWorksheet.WriteText(0, 26, 'AA'); // Test for column name
|
||||
|
||||
MyWorksheet.WriteColWidth(0, 20);
|
||||
MyWorksheet.WriteRowHeight(0, 4);
|
||||
MyWorksheet.WriteColWidth(0, 20, suChars);
|
||||
MyWorksheet.WriteRowHeight(0, 4, suLines);
|
||||
|
||||
// Write some formulas
|
||||
Myworksheet.WriteFormula(0, 5, '=A1-B1');
|
||||
@ -47,10 +47,10 @@ begin
|
||||
// Uncomment this to test large XLS files
|
||||
for i := 2 to 2{20} do
|
||||
begin
|
||||
MyWorksheet.WriteUTF8Text(i, 0, ParamStr(0));
|
||||
MyWorksheet.WriteUTF8Text(i, 1, ParamStr(0));
|
||||
MyWorksheet.WriteUTF8Text(i, 2, ParamStr(0));
|
||||
MyWorksheet.WriteUTF8Text(i, 3, ParamStr(0));
|
||||
MyWorksheet.WriteText(i, 0, ParamStr(0));
|
||||
MyWorksheet.WriteText(i, 1, ParamStr(0));
|
||||
MyWorksheet.WriteText(i, 2, ParamStr(0));
|
||||
MyWorksheet.WriteText(i, 3, ParamStr(0));
|
||||
end;
|
||||
|
||||
// Test for Bold
|
||||
@ -64,32 +64,32 @@ begin
|
||||
MyCell^.FontIndex := BOLD_FONTINDEX;
|
||||
|
||||
// Background and text color
|
||||
MyWorksheet.WriteUTF8Text(4, 0, 'white on red');
|
||||
MyWorksheet.WriteText(4, 0, 'white on red');
|
||||
Myworksheet.WriteBackgroundColor(4, 0, scRed);
|
||||
MyWorksheet.WriteFontColor(4, 0, scWhite);
|
||||
|
||||
// Border
|
||||
MyWorksheet.WriteUTF8Text(4, 2, 'left/right');
|
||||
MyWorksheet.WriteText(4, 2, 'left/right');
|
||||
Myworksheet.WriteBorders(4, 2, [cbWest, cbEast]);
|
||||
MyWorksheet.WriteHorAlignment(4, 2, haCenter);
|
||||
|
||||
Myworksheet.WriteUTF8Text(4, 4, 'top/bottom');
|
||||
Myworksheet.WriteText(4, 4, 'top/bottom');
|
||||
Myworksheet.WriteBorders(4, 4, [cbNorth, cbSouth]);
|
||||
MyWorksheet.WriteBorderStyle(4, 4, cbSouth, lsThick, scBlue);
|
||||
Myworksheet.WriteHorAlignment(4, 4, haRight);
|
||||
|
||||
// Wordwrap
|
||||
MyWorksheet.WriteUTF8Text(4, 6, 'This is a long, long, long, wrapped text.');
|
||||
MyWorksheet.WriteText(4, 6, 'This is a long, long, long, wrapped text.');
|
||||
MyWorksheet.WriteWordwrap(4, 6, true);
|
||||
|
||||
// Creates a new worksheet
|
||||
MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet 2');
|
||||
|
||||
// Write some string cells
|
||||
MyWorksheet.WriteUTF8Text(0, 0, 'First');
|
||||
MyWorksheet.WriteUTF8Text(0, 1, 'Second');
|
||||
MyWorksheet.WriteUTF8Text(0, 2, 'Third');
|
||||
MyWorksheet.WriteUTF8Text(0, 3, 'Fourth');
|
||||
MyWorksheet.WriteText(0, 0, 'First');
|
||||
MyWorksheet.WriteText(0, 1, 'Second');
|
||||
MyWorksheet.WriteText(0, 2, 'Third');
|
||||
MyWorksheet.WriteText(0, 3, 'Fourth');
|
||||
|
||||
// Write current date/time
|
||||
MyWorksheet.WriteDateTime(0, 5, now, nfShortDate);
|
||||
|
@ -49,10 +49,16 @@ begin
|
||||
WriteLn(
|
||||
'Row: ', cell^.Row,
|
||||
' Col: ', cell^.Col,
|
||||
' Value: ', UTF8ToConsole(MyWorkSheet.ReadAsUTF8Text(cell^.Row, cell^.Col))
|
||||
' Value: ', UTF8ToConsole(MyWorkSheet.ReadAsText(cell^.Row, cell^.Col))
|
||||
);
|
||||
|
||||
// Finalization
|
||||
MyWorkbook.Free;
|
||||
|
||||
{$IFDEF WINDOWS}
|
||||
WriteLn;
|
||||
Writeln('Press ENTER to quit...');
|
||||
ReadLn;
|
||||
{$ENDIF}
|
||||
end.
|
||||
|
||||
|
@ -43,7 +43,7 @@ begin
|
||||
MyWorksheet.WriteNumber(0, 1, 2.0); // B1
|
||||
MyWorksheet.WriteNumber(0, 2, 3.0); // C1
|
||||
MyWorksheet.WriteNumber(0, 3, 4.0); // D1
|
||||
MyWorksheet.WriteUTF8Text(4, 2, 'Total:');// C5
|
||||
MyWorksheet.WriteText(4, 2, 'Total:'); // C5
|
||||
MyWorksheet.WriteNumber(4, 3, 10); // D5
|
||||
MyWorksheet.WriteDateTime(5, 0, now);
|
||||
|
||||
@ -52,9 +52,9 @@ begin
|
||||
MyWorksheet.WriteFont(0, 1, 'Times New Roman', 16, [], scRed);
|
||||
|
||||
// Show number formats
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'Number formats:');
|
||||
MyWorksheet.WriteText(row, 0, 'Number formats:');
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfGeneral');
|
||||
MyWorksheet.WriteText(row, 0, 'nfGeneral');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfGeneral);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfGeneral);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfGeneral);
|
||||
@ -64,7 +64,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfGeneral);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfGeneral);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfFixed, 0 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfFixed, 0 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfFixed, 0);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfFixed, 0);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfFixed, 0);
|
||||
@ -74,7 +74,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfFixed, 0);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfFixed, 0);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfFixed, 2 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfFixed, 2 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfFixed, 2);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfFixed, 2);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfFixed, 2);
|
||||
@ -84,7 +84,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfFixed, 2);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfFixed, 2);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfFixed, 3 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfFixed, 3 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfFixed, 3);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfFixed, 3);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfFixed, 3);
|
||||
@ -94,7 +94,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfFixed, 3);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfFixed, 3);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfFixedTh, 0 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfFixedTh, 0 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfFixedTh, 0);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfFixedTh, 0);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfFixedTh, 0);
|
||||
@ -104,7 +104,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfFixedTh, 0);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfFixedTh, 0);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfFixedTh, 2 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfFixedTh, 2 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfFixedTh, 2);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfFixedTh, 2);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfFixedTh, 2);
|
||||
@ -114,7 +114,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfFixedTh, 2);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfFixedTh, 2);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfFixedTh, 3 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfFixedTh, 3 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfFixedTh, 3);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfFixedTh, 3);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfFixedTh, 3);
|
||||
@ -124,7 +124,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfFixedTh, 3);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfFixedTh, 3);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfPercentage, 0 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfPercentage, 0 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfPercentage, 0);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfPercentage, 0);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfPercentage, 0);
|
||||
@ -134,7 +134,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfPercentage, 0);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfPercentage, 0);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfPercentage, 2 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfPercentage, 2 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfPercentage, 2);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfPercentage, 2);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfPercentage, 2);
|
||||
@ -144,7 +144,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfPercentage, 2);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfPercentage, 2);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfPercentage, 3 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfPercentage, 3 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfPercentage, 3);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfPercentage, 3);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfPercentage, 3);
|
||||
@ -154,7 +154,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfPercentage, 3);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfPercentage, 3);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfExp, 0 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfExp, 0 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfExp, 0);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfExp, 0);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfExp, 0);
|
||||
@ -164,7 +164,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfExp, 0);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfExp, 0);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfExp, 2 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfExp, 2 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfExp, 2);
|
||||
@ -174,7 +174,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfExp, 2);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfExp, 2);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfExp, 3 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfExp, 3 decimals');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfExp, 3);
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfExp, 3);
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfExp, 3);
|
||||
@ -184,7 +184,7 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 7, number7, nfExp, 3);
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfExp, 3);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfCurrency, 2 decimals');
|
||||
MyWorksheet.WriteText(row, 0, 'nfCurrency, 2 decimals');
|
||||
MyWorksheet.WriteCurrency(row, 1, number1, nfCurrency, 2, '$');
|
||||
MyWorksheet.WriteCurrency(row, 2, number2, nfCurrency, 2, '$');
|
||||
MyWorksheet.WriteCurrency(row, 3, number3, nfCurrency, 2, '$');
|
||||
@ -194,7 +194,7 @@ begin
|
||||
MyWorksheet.WriteCurrency(row, 7, number7, nfCurrency, 2, '$');
|
||||
MyWorksheet.WriteCurrency(row, 8, number8, nfCurrency, 2, '$');
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfCurrencyRed, 2 decimals, >0: $ 1000, <0: ($ 1000)');
|
||||
MyWorksheet.WriteText(row, 0, 'nfCurrencyRed, 2 decimals, >0: $ 1000, <0: ($ 1000)');
|
||||
MyWorksheet.WriteCurrency(row, 1, number1, nfCurrencyRed, 2, '$', pcfCSV, ncfBCSVB);
|
||||
MyWorksheet.WriteCurrency(row, 2, number2, nfCurrencyRed, 2, '$', pcfCSV, ncfBCSVB);
|
||||
MyWorksheet.WriteCurrency(row, 3, number3, nfCurrencyRed, 2, '$', pcfCSV, ncfBCSVB);
|
||||
@ -204,7 +204,7 @@ begin
|
||||
MyWorksheet.WriteCurrency(row, 7, number7, nfCurrencyRed, 2, '$', pcfCSV, ncfBCSVB);
|
||||
MyWorksheet.WriteCurrency(row, 8, number8, nfCurrencyRed, 2, '$', pcfCSV, ncfBCSVB);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfFraction, 2 digits');
|
||||
MyWorksheet.WriteText(row, 0, 'nfFraction, 2 digits');
|
||||
MyWorksheet.WriteNumber(row, 1, number1, nfFraction, '# ???/???');
|
||||
MyWorksheet.WriteNumber(row, 2, number2, nfFraction, '# ???/???');
|
||||
MyWorksheet.WriteNumber(row, 3, number3, nfFraction, '# ???/???');
|
||||
@ -215,74 +215,73 @@ begin
|
||||
MyWorksheet.WriteNumber(row, 8, number8, nfFraction, '# ???/???');
|
||||
inc(row,2);
|
||||
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'Some date/time values in various formats:');
|
||||
MyWorksheet.WriteText(row, 0, 'Some date/time values in various formats:');
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfShortDateTime');
|
||||
MyWorksheet.WriteText(row, 0, 'nfShortDateTime');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfShortDateTime);
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfShortDateTime);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfShortDate');
|
||||
MyWorksheet.WriteText(row, 0, 'nfShortDate');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfShortDate);
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfShortDate);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfLongDate');
|
||||
MyWorksheet.WriteText(row, 0, 'nfLongDate');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfLongDate);
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfLongDate);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfShortTime');
|
||||
MyWorksheet.WriteText(row, 0, 'nfShortTime');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfShortTime);
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfShortTime);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfLongTime');
|
||||
MyWorksheet.WriteText(row, 0, 'nfLongTime');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfLongTime);
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfLongTime);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfShortTimeAM');
|
||||
MyWorksheet.WriteText(row, 0, 'nfShortTimeAM');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfShortTimeAM);
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfShortTimeAM);
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfLongTimeAM');
|
||||
MyWorksheet.WriteText(row, 0, 'nfLongTimeAM');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfLongTimeAM);
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfLongTimeAM);
|
||||
inc(row,2);
|
||||
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'Some custom formats');
|
||||
MyWorksheet.WriteText(row, 0, 'Some custom formats');
|
||||
inc(row);
|
||||
// In order to use a semicolon as a date-time separator it must be escaped either by
|
||||
// using the backslash or quotes (because the semicolon is the separator between sections)
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfCustom, dddd, dd/mm/yyyy\; hh:nn');
|
||||
MyWorksheet.WriteText(row, 0, 'nfCustom, dddd, dd/mm/yyyy\; hh:nn');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfCustom, 'dddd, dd/mm/yyyy\; hh:nn');
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfCustom, 'dddd, dd/mm/yyyy\; hh:nn');
|
||||
MyWorksheet.WriteUTF8Text(row, 3, 'The semicolon must be escaped otherwise it would be misunderstood as a section separator.');
|
||||
MyWorksheet.WriteUTF8Text(row, 4, 'This format is not displayed correctly by Open/LibreOffice.');
|
||||
MyWorksheet.WriteText(row, 3, 'The semicolon must be escaped otherwise it would be misunderstood as a section separator.');
|
||||
MyWorksheet.WriteText(row, 4, 'This format is not displayed correctly by Open/LibreOffice.');
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfCustom, dddd, dd/mm/yyyy"; "hh:nn');
|
||||
MyWorksheet.WriteText(row, 0, 'nfCustom, dddd, dd/mm/yyyy"; "hh:nn');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfCustom, 'dddd, dd/mm/yyyy"; "hh:nn');
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfCustom, 'dddd, dd/mm/yyyy"; "hh:nn');
|
||||
MyWorksheet.WriteUTF8Text(row, 3, 'The semicolon must be escaped otherwise it would be misunderstood as a section separator.');
|
||||
MyWorksheet.WriteUTF8Text(row, 4, 'This format is not displayed correctly by Open/LibreOffice.');
|
||||
MyWorksheet.WriteText(row, 3, 'The semicolon must be escaped otherwise it would be misunderstood as a section separator.');
|
||||
MyWorksheet.WriteText(row, 4, 'This format is not displayed correctly by Open/LibreOffice.');
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfCustom, dd/mmm');
|
||||
MyWorksheet.WriteText(row, 0, 'nfCustom, dd/mmm');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfCustom, 'dd/mmm');
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfCustom, 'dd/mmm');
|
||||
MyWorksheet.WriteUTF8Text(row, 3, 'The slash is replaced by the date or time separator of the FormatSettings');
|
||||
MyWorksheet.WriteText(row, 3, 'The slash is replaced by the date or time separator of the FormatSettings');
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfCustom, mmm/yy');
|
||||
MyWorksheet.WriteText(row, 0, 'nfCustom, mmm/yy');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfCustom, 'mmm/yy');
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfCustom, 'mmm/yy');
|
||||
MyWorksheet.WriteUTF8Text(row, 3, 'The slash is replaced by the date or time separator of the FormatSettings');
|
||||
MyWorksheet.WriteText(row, 3, 'The slash is replaced by the date or time separator of the FormatSettings');
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 0, 'nfCustom, mmm-yy');
|
||||
MyWorksheet.WriteText(row, 0, 'nfCustom, mmm-yy');
|
||||
MyWorksheet.WriteDateTime(row, 1, dt1, nfCustom, 'mmm-yy');
|
||||
MyWorksheet.WriteDateTime(row, 2, dt2, nfCustom, 'mmm-yy');
|
||||
MyWorksheet.WriteUTF8Text(row, 3, 'The dash is used literally');
|
||||
MyWorksheet.WriteText(row, 3, 'The dash is used literally');
|
||||
|
||||
// Creates a new worksheet
|
||||
MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet 2');
|
||||
|
||||
// Save the spreadsheet to a file
|
||||
MyWorkbook.WriteToFile(MyDir + 'test.ods',
|
||||
sfOpenDocument);
|
||||
MyWorkbook.WriteToFile(MyDir + 'test.ods', sfOpenDocument);
|
||||
MyWorkbook.Free;
|
||||
end.
|
||||
|
||||
|
@ -50,7 +50,7 @@ begin
|
||||
begin
|
||||
Write('Row: ', CurCell^.Row,
|
||||
' Col: ', CurCell^.Col, ' Value: ',
|
||||
UTF8ToConsole(MyWorkSheet.ReadAsUTF8Text(CurCell^.Row, CurCell^.Col))
|
||||
UTF8ToConsole(MyWorkSheet.ReadAsText(CurCell^.Row, CurCell^.Col))
|
||||
);
|
||||
if HasFormula(CurCell) then
|
||||
WriteLn(' Formula: ', CurCell^.FormulaValue)
|
||||
@ -60,5 +60,11 @@ begin
|
||||
|
||||
// Finalization
|
||||
MyWorkbook.Free;
|
||||
|
||||
{$IFDEF WINDOWS}
|
||||
WriteLn;
|
||||
WriteLn('Press ENTER to quit...');
|
||||
ReadLn;
|
||||
{$ENDIF}
|
||||
end.
|
||||
|
||||
|
@ -30,136 +30,136 @@ begin
|
||||
Myworksheet.LeftPaneWidth := 1;
|
||||
|
||||
// Write colwidth
|
||||
Myworksheet.WriteColWidth(1, 25); // 25 characters
|
||||
Myworksheet.WriteColWidth(1, 25, suChars); // 25 characters
|
||||
|
||||
// Write some cells
|
||||
row := 0;
|
||||
|
||||
MyWorksheet.WriteBlank(row, 0);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Description');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Example');
|
||||
MyWorksheet.WriteText(row, 1, 'Description');
|
||||
MyWorksheet.WriteText(row, 2, 'Example');
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is a text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Hello world!');
|
||||
MyWorksheet.WriteText(row, 1, 'This is a text:');
|
||||
MyWorksheet.WriteText(row, 2, 'Hello world!');
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is bold text:');
|
||||
Myworksheet.WriteUTF8Text(row, 2, 'Hello world!');
|
||||
MyWorksheet.WriteText(row, 1, 'This is bold text:');
|
||||
Myworksheet.WriteText(row, 2, 'Hello world!');
|
||||
Myworksheet.WriteFontStyle(row, 2, [fssBold]);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is a number:');
|
||||
MyWorksheet.WriteText(row, 1, 'This is a number:');
|
||||
MyWorksheet.WriteNumber(row, 2, 3.141592);
|
||||
Myworksheet.WriteHorAlignment(row, 2, haRight);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is a date:');
|
||||
MyWorksheet.WriteText(row, 1, 'This is a date:');
|
||||
Myworksheet.WriteDateTime(row, 2, date());
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is a long text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'A very, very, very, very long text, indeed');
|
||||
MyWorksheet.WriteText(row, 1, 'This is a long text:');
|
||||
MyWorksheet.WriteText(row, 2, 'A very, very, very, very long text, indeed');
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Centered text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'I am in the center.');
|
||||
MyWorksheet.WriteText(row, 1, 'Centered text:');
|
||||
MyWorksheet.WriteText(row, 2, 'I am in the center.');
|
||||
MyWorksheet.WriteHorAlignment(row, 2, haCenter);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This is a long text with line break:');
|
||||
MyWorksheet.WriteText(row, 1, 'This is a long text with line break:');
|
||||
Myworksheet.WriteVertAlignment(row, 1, vaTop);
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'A very, very, very, very long text,<br /> indeed');
|
||||
MyWorksheet.WriteText(row, 2, 'A very, very, very, very long text,<br /> indeed');
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Merged rows');
|
||||
MyWorksheet.WriteText(row, 1, 'Merged rows');
|
||||
Myworksheet.MergeCells(row, 1, row+1, 1);
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'A');
|
||||
MyWorksheet.WriteText(row, 2, 'A');
|
||||
inc(row);
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'B');
|
||||
MyWorksheet.WriteText(row, 2, 'B');
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Merged columns');
|
||||
MyWorksheet.WriteText(row, 1, 'Merged columns');
|
||||
MyWorksheet.WriteHorAlignment(row, 1, haCenter);
|
||||
MyWorksheet.MergeCells(row, 1, row, 2);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Right border:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'medium / red');
|
||||
MyWorksheet.WriteText(row, 1, 'Right border:');
|
||||
MyWorksheet.WriteText(row, 2, 'medium / red');
|
||||
MyWorksheet.WriteBorders(row, 2, [cbEast]);
|
||||
MyWorksheet.WriteBorderStyle(row, 2, cbEast, lsMedium, scRed);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Top border:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'top / dashed');
|
||||
MyWorksheet.WriteText(row, 1, 'Top border:');
|
||||
MyWorksheet.WriteText(row, 2, 'top / dashed');
|
||||
MyWorksheet.WriteBorders(row, 2, [cbNorth]);
|
||||
MyWorksheet.WriteBorderLineStyle(row, 2, cbNorth, lsDashed);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Left border:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'left / dotted');
|
||||
MyWorksheet.WriteText(row, 1, 'Left border:');
|
||||
MyWorksheet.WriteText(row, 2, 'left / dotted');
|
||||
MyWorksheet.WriteBorders(row, 2, [cbWest]);
|
||||
MyWorksheet.WriteBorderLineStyle(row, 2, cbWest, lsDotted);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Bottom border:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'bottom / double');
|
||||
MyWorksheet.WriteText(row, 1, 'Bottom border:');
|
||||
MyWorksheet.WriteText(row, 2, 'bottom / double');
|
||||
MyWorksheet.WriteBorders(row, 2, [cbSouth]);
|
||||
MyWorksheet.WriteBorderLineStyle(row, 2, cbSouth, lsDouble);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'This row is high');
|
||||
MyWorksheet.WriteText(row, 1, 'This row is high');
|
||||
MyWorksheet.WriteRowHeight(row, 5);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Colors:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'yellow on blue');
|
||||
MyWorksheet.WriteText(row, 1, 'Colors:');
|
||||
MyWorksheet.WriteText(row, 2, 'yellow on blue');
|
||||
MyWorksheet.WriteFontColor(row, 2, scYellow);
|
||||
MyWorksheet.WriteBackgroundColor(row, 2, scBlue);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'RGB background color:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'color #FF77C3'); // HTML colors are big-endian
|
||||
MyWorksheet.WriteText(row, 1, 'RGB background color:');
|
||||
MyWorksheet.WriteText(row, 2, 'color #FF77C3'); // HTML colors are big-endian
|
||||
MyWorksheet.WriteBackgroundColor(row, 2, $C377FF); // fps colors are little-endian
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Bold text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Bold text');
|
||||
MyWorksheet.WriteText(row, 1, 'Bold text:');
|
||||
MyWorksheet.WriteText(row, 2, 'Bold text');
|
||||
MyWorksheet.WriteFontStyle(row, 2, [fssBold]);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Italic text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Italic text');
|
||||
MyWorksheet.WriteText(row, 1, 'Italic text:');
|
||||
MyWorksheet.WriteText(row, 2, 'Italic text');
|
||||
MyWorksheet.WriteFontStyle(row, 2, [fssItalic]);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Underlined text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Underlined text');
|
||||
MyWorksheet.WriteText(row, 1, 'Underlined text:');
|
||||
MyWorksheet.WriteText(row, 2, 'Underlined text');
|
||||
MyWorksheet.WriteFontStyle(row, 2, [fssUnderline]);
|
||||
inc(row);
|
||||
|
||||
MyWorksheet.WriteNumber(row, 0, row);
|
||||
MyWorksheet.WriteUTF8Text(row, 1, 'Strike-through text:');
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'Strike-through text');
|
||||
MyWorksheet.WriteText(row, 1, 'Strike-through text:');
|
||||
MyWorksheet.WriteText(row, 2, 'Strike-through text');
|
||||
MyWorksheet.WriteFontStyle(row, 2, [fssStrikeout]);
|
||||
inc(row);
|
||||
|
||||
|
@ -73,7 +73,6 @@
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="mainform"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
|
@ -7,7 +7,7 @@ object Form1: TForm1
|
||||
ClientHeight = 634
|
||||
ClientWidth = 877
|
||||
OnCreate = FormCreate
|
||||
LCLVersion = '1.5'
|
||||
LCLVersion = '1.7'
|
||||
object Panel1: TPanel
|
||||
Left = 0
|
||||
Height = 40
|
||||
@ -78,6 +78,8 @@ object Form1: TForm1
|
||||
Align = alClient
|
||||
AutoAdvance = aaDown
|
||||
ColCount = 27
|
||||
DefaultColWidth = 64
|
||||
DefaultRowHeight = 22
|
||||
Font.Color = clBlack
|
||||
Font.Height = -15
|
||||
Font.Name = 'Calibri'
|
||||
@ -125,7 +127,6 @@ object Form1: TForm1
|
||||
)
|
||||
Title.Visible = True
|
||||
Align = alTop
|
||||
ParentColor = False
|
||||
object Chart1AreaSeries1: TAreaSeries
|
||||
AreaBrush.Color = clSkyBlue
|
||||
AreaLinesPen.Style = psClear
|
||||
@ -158,7 +159,6 @@ object Form1: TForm1
|
||||
)
|
||||
Title.Visible = True
|
||||
Align = alClient
|
||||
ParentColor = False
|
||||
object Chart2BarSeries1: TBarSeries
|
||||
Marks.Distance = 15
|
||||
Marks.Format = '%0:.2f'
|
||||
@ -199,7 +199,6 @@ object Form1: TForm1
|
||||
)
|
||||
Title.Visible = True
|
||||
Align = alBottom
|
||||
ParentColor = False
|
||||
object Chart3PieSeries1: TPieSeries
|
||||
Legend.Multiplicity = lmPoint
|
||||
Marks.Distance = 8
|
||||
|
@ -7,12 +7,20 @@ object FPSChartForm: TFPSChartForm
|
||||
ClientHeight = 382
|
||||
ClientWidth = 697
|
||||
OnCreate = FormCreate
|
||||
LCLVersion = '1.5'
|
||||
LCLVersion = '1.7'
|
||||
object MyChart: TChart
|
||||
AnchorSideLeft.Control = Bevel1
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = editXAxis
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = Owner
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = Owner
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 352
|
||||
Height = 264
|
||||
Top = 112
|
||||
Width = 336
|
||||
Height = 263
|
||||
Top = 111
|
||||
Width = 337
|
||||
AxisList = <
|
||||
item
|
||||
Minors = <>
|
||||
@ -34,23 +42,39 @@ object FPSChartForm: TFPSChartForm
|
||||
Title.Text.Strings = (
|
||||
'TAChart'
|
||||
)
|
||||
ParentColor = False
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Top = 8
|
||||
BorderSpacing.Right = 8
|
||||
BorderSpacing.Bottom = 8
|
||||
object MyChartBarSeries1: TBarSeries
|
||||
BarBrush.Color = clRed
|
||||
Source = FPSChartSource
|
||||
end
|
||||
end
|
||||
object WorksheetGrid: TsWorksheetGrid
|
||||
AnchorSideLeft.Control = Owner
|
||||
AnchorSideTop.Control = editXAxis
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = Bevel1
|
||||
AnchorSideBottom.Control = Owner
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 8
|
||||
Height = 264
|
||||
Top = 112
|
||||
Height = 263
|
||||
Top = 111
|
||||
Width = 336
|
||||
FrozenCols = 0
|
||||
FrozenRows = 0
|
||||
ReadFormulas = False
|
||||
TextOverflow = True
|
||||
WorkbookSource = WorksheetGrid.internal
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
AutoAdvance = aaDown
|
||||
BorderSpacing.Left = 8
|
||||
BorderSpacing.Top = 8
|
||||
BorderSpacing.Bottom = 8
|
||||
ColCount = 27
|
||||
DefaultColWidth = 64
|
||||
DefaultRowHeight = 22
|
||||
ExtendedSelect = False
|
||||
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goEditing, goThumbTracking]
|
||||
RowCount = 101
|
||||
@ -70,6 +94,7 @@ object FPSChartForm: TFPSChartForm
|
||||
Height = 42
|
||||
Top = 4
|
||||
Width = 678
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
AutoSize = False
|
||||
Caption = 'Please add data to the grid or load it from a file, then choose the location of the data for the X and Y axises and click on the button "Create Graphic" to generate a chart.'
|
||||
ParentColor = False
|
||||
@ -147,6 +172,15 @@ object FPSChartForm: TFPSChartForm
|
||||
TabOrder = 6
|
||||
Text = 'B3:B14'
|
||||
end
|
||||
object Bevel1: TBevel
|
||||
AnchorSideLeft.Control = Owner
|
||||
AnchorSideLeft.Side = asrCenter
|
||||
Left = 344
|
||||
Height = 50
|
||||
Top = 83
|
||||
Width = 8
|
||||
Shape = bsSpacer
|
||||
end
|
||||
object FPSChartSource: TsWorksheetChartSource
|
||||
PointsNumber = 5
|
||||
YFirstCellCol = 1
|
||||
|
@ -15,6 +15,7 @@ type
|
||||
{ TFPSChartForm }
|
||||
|
||||
TFPSChartForm = class(TForm)
|
||||
Bevel1: TBevel;
|
||||
btnCreateGraphic: TButton;
|
||||
btnLoadSpreadsheet: TButton;
|
||||
editSourceFile: TFileNameEdit;
|
||||
|
@ -120,8 +120,6 @@ object Form1: TForm1
|
||||
FrozenCols = 0
|
||||
FrozenRows = 0
|
||||
ReadFormulas = True
|
||||
SelectionPen.JoinStyle = pjsMiter
|
||||
SelectionPen.Width = 3
|
||||
WorkbookSource = WorksheetGrid.internal
|
||||
Align = alClient
|
||||
AutoAdvance = aaDown
|
||||
|
@ -5,7 +5,7 @@ unit mainform;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
|
||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
|
||||
StdCtrls, Menus, ExtCtrls, ActnList, Spin, Buttons, ButtonPanel,
|
||||
fpspreadsheetgrid, fpsallformats;
|
||||
|
||||
@ -47,7 +47,8 @@ var
|
||||
implementation
|
||||
|
||||
uses
|
||||
fpcanvas, fpstypes, fpsutils, fpsRegFileFormats, fpspreadsheet;
|
||||
fpcanvas, lazutf8,
|
||||
fpstypes, fpsutils, fpsRegFileFormats, fpspreadsheet;
|
||||
|
||||
|
||||
{ TForm1 }
|
||||
|
@ -11,7 +11,7 @@ object MainFrm: TMainFrm
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
ShowHint = True
|
||||
LCLVersion = '1.5'
|
||||
LCLVersion = '1.7'
|
||||
object MainToolBar: TToolBar
|
||||
Left = 0
|
||||
Height = 28
|
||||
|
@ -5,7 +5,7 @@ unit wtMain;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
|
||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
|
||||
StdCtrls, Menus, ExtCtrls, ComCtrls, ActnList, Grids, ColorBox, SynEdit,
|
||||
SynEditHighlighter, SynHighlighterHTML, SynHighlighterMulti,
|
||||
SynHighlighterCss, SynGutterCodeFolding, fpspreadsheetgrid,
|
||||
@ -216,9 +216,9 @@ var
|
||||
implementation
|
||||
|
||||
uses
|
||||
TypInfo, LCLIntf, LCLType, LCLVersion, clipbrd, fpcanvas,
|
||||
TypInfo, LazUtf8, LCLIntf, LCLType, LCLVersion, clipbrd, fpcanvas,
|
||||
SynHighlighterWikiTable,
|
||||
fpsutils;
|
||||
fpsutils, fpsRegFileFormats;
|
||||
|
||||
const
|
||||
DROPDOWN_COUNT = 24;
|
||||
@ -264,7 +264,7 @@ begin
|
||||
BeginUpdate;
|
||||
try
|
||||
if TAction(Sender).Tag = 0 then begin
|
||||
CellBorders[Selection] := [];
|
||||
CellBorders[Selection.Left, Selection.Top, Selection.Right, Selection.Bottom] := [];
|
||||
exit;
|
||||
end;
|
||||
// Top and bottom edges
|
||||
@ -421,7 +421,7 @@ begin
|
||||
if AcFontItalic.Checked then Include(style, fssItalic);
|
||||
if AcFontStrikeout.Checked then Include(style, fssStrikeout);
|
||||
if AcFontUnderline.Checked then Include(style, fssUnderline);
|
||||
CellFontStyles[Selection] := style;
|
||||
CellFontStyles[Selection.Left, Selection.Top, Selection.Right, Selection.Bottom] := style;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -433,7 +433,8 @@ begin
|
||||
hor_align := TsHorAlignment(TAction(Sender).Tag - HORALIGN_TAG)
|
||||
else
|
||||
hor_align := haDefault;
|
||||
with WorksheetGrid do HorAlignments[Selection] := hor_align;
|
||||
with WorksheetGrid do
|
||||
HorAlignments[Selection.Left, Selection.Top, Selection.Right, Selection.Bottom] := hor_align;
|
||||
UpdateHorAlignmentActions;
|
||||
end;
|
||||
|
||||
@ -521,13 +522,15 @@ begin
|
||||
vert_align := TsVertAlignment(TAction(Sender).Tag - VERTALIGN_TAG)
|
||||
else
|
||||
vert_align := vaDefault;
|
||||
with WorksheetGrid do VertAlignments[Selection] := vert_align;
|
||||
with WorksheetGrid do
|
||||
VertAlignments[Selection.Left, Selection.Top, Selection.Right, Selection.Bottom] := vert_align;
|
||||
UpdateVertAlignmentActions;
|
||||
end;
|
||||
|
||||
procedure TMainFrm.AcWordwrapExecute(Sender: TObject);
|
||||
begin
|
||||
with WorksheetGrid do Wordwraps[Selection] := TAction(Sender).Checked;
|
||||
with WorksheetGrid do
|
||||
Wordwraps[Selection.Left, Selection.Top, Selection.Right, Selection.Bottom] := TAction(Sender).Checked;
|
||||
end;
|
||||
|
||||
procedure TMainFrm.BeforeRun;
|
||||
@ -558,9 +561,13 @@ var
|
||||
clr: TsColor;
|
||||
begin
|
||||
if CbBackgroundColor.ItemIndex <= 0 then
|
||||
with WorksheetGrid do BackgroundColors[Selection] := scNotDefined
|
||||
with WorksheetGrid do
|
||||
BackgroundColors[Selection.Left, selection.Top, Selection.Right, Selection.Bottom] :=
|
||||
scNotDefined
|
||||
else
|
||||
with WorksheetGrid do BackgroundColors[Selection] := PtrInt(CbBackgroundColor.Items.Objects[CbBackgroundColor.ItemIndex]);
|
||||
with WorksheetGrid do
|
||||
BackgroundColors[Selection.Left, selection.Top, Selection.Right, Selection.Bottom] :=
|
||||
PtrInt(CbBackgroundColor.Items.Objects[CbBackgroundColor.ItemIndex]);
|
||||
end;
|
||||
|
||||
procedure TMainFrm.FontComboBoxSelect(Sender: TObject);
|
||||
@ -569,7 +576,8 @@ var
|
||||
begin
|
||||
fname := FontCombobox.Items[FontCombobox.ItemIndex];
|
||||
if fname <> '' then
|
||||
with WorksheetGrid do CellFontNames[Selection] := fName;
|
||||
with WorksheetGrid do
|
||||
CellFontNames[Selection.Left, selection.Top, Selection.Right, Selection.Bottom] := fName;
|
||||
end;
|
||||
|
||||
procedure TMainFrm.FontSizeComboBoxSelect(Sender: TObject);
|
||||
@ -578,7 +586,8 @@ var
|
||||
begin
|
||||
sz := StrToInt(FontSizeCombobox.Items[FontSizeCombobox.ItemIndex]);
|
||||
if sz > 0 then
|
||||
with WorksheetGrid do CellFontSizes[Selection] := sz;
|
||||
with WorksheetGrid do
|
||||
CellFontSizes[Selection.Left, selection.Top, Selection.Right, Selection.Bottom] := sz;
|
||||
end;
|
||||
|
||||
procedure TMainFrm.FormActivate(Sender: TObject);
|
||||
@ -698,8 +707,9 @@ begin
|
||||
// Update user interface
|
||||
Caption := Format('wikitable maker - %s (%s)', [
|
||||
AFilename,
|
||||
GetFileFormatName(WorksheetGrid.Workbook.FileFormat)
|
||||
GetSpreadTechnicalName(WorksheetGrid.Workbook.FileFormatID)
|
||||
]);
|
||||
|
||||
AcShowGridLines.Checked := WorksheetGrid.ShowGridLines;
|
||||
AcShowHeaders.Checked := WorksheetGrid.ShowHeaders;
|
||||
AcRowTitles.Checked := WorksheetGrid.FrozenCols <> 0;
|
||||
@ -740,7 +750,8 @@ procedure TMainFrm.UpdateBackgroundColorIndex;
|
||||
var
|
||||
clr: TsColor;
|
||||
begin
|
||||
with WorksheetGrid do clr := BackgroundColors[Selection];
|
||||
with WorksheetGrid do
|
||||
clr := BackgroundColors[Selection.Left, Selection.Top, Selection.Right, Selection.Bottom];
|
||||
if (clr = scNotDefined) or (clr = scTransparent) then
|
||||
CbBackgroundColor.ItemIndex := 0 // no fill
|
||||
else
|
||||
@ -753,7 +764,8 @@ var
|
||||
ac: TAction;
|
||||
hor_align: TsHorAlignment;
|
||||
begin
|
||||
with WorksheetGrid do hor_align := HorAlignments[Selection];
|
||||
with WorksheetGrid do
|
||||
hor_align := HorAlignments[Selection.Left, Selection.Top, Selection.Right, Selection.Bottom];
|
||||
for i:=0 to ActionList.ActionCount-1 do begin
|
||||
ac := TAction(ActionList.Actions[i]);
|
||||
if (ac.Tag >= HORALIGN_TAG) and (ac.Tag < HORALIGN_TAG+10) then
|
||||
@ -765,7 +777,8 @@ procedure TMainFrm.UpdateFontNameIndex;
|
||||
var
|
||||
fname: String;
|
||||
begin
|
||||
with WorksheetGrid do fname := CellFontNames[Selection];
|
||||
with WorksheetGrid do
|
||||
fname := CellFontNames[Selection.Left, Selection.Top, Selection.Right, Selection.Bottom];
|
||||
if fname = '' then
|
||||
FontCombobox.ItemIndex := -1
|
||||
else
|
||||
@ -776,7 +789,8 @@ procedure TMainFrm.UpdateFontSizeIndex;
|
||||
var
|
||||
sz: Single;
|
||||
begin
|
||||
with WorksheetGrid do sz := CellFontSizes[Selection];
|
||||
with WorksheetGrid do
|
||||
sz := CellFontSizes[Selection.Left, Selection.Top, Selection.Right, Selection.Bottom];
|
||||
if sz < 0 then
|
||||
FontSizeCombobox.ItemIndex := -1
|
||||
else
|
||||
@ -787,7 +801,8 @@ procedure TMainFrm.UpdateFontStyleActions;
|
||||
var
|
||||
style: TsFontStyles;
|
||||
begin
|
||||
with WorksheetGrid do style := CellFontStyles[Selection];
|
||||
with WorksheetGrid do
|
||||
style := CellFontStyles[Selection.Left, Selection.Top, Selection.Right, Selection.Bottom];
|
||||
AcFontBold.Checked := fssBold in style;
|
||||
AcFontItalic.Checked := fssItalic in style;
|
||||
AcFontUnderline.Checked := fssUnderline in style;
|
||||
@ -800,7 +815,8 @@ var
|
||||
ac: TAction;
|
||||
vert_align: TsVertAlignment;
|
||||
begin
|
||||
with WorksheetGrid do vert_align := VertAlignments[Selection];
|
||||
with WorksheetGrid do
|
||||
vert_align := VertAlignments[Selection.Left, Selection.Top, Selection.Right, Selection.Bottom];
|
||||
for i:=0 to ActionList.ActionCount-1 do begin
|
||||
ac := TAction(ActionList.Actions[i]);
|
||||
if (ac.Tag >= VERTALIGN_TAG) and (ac.Tag < VERTALIGN_TAG+10) then
|
||||
|
@ -192,7 +192,7 @@ begin
|
||||
begin
|
||||
for i:=0 to ExportFields.Count-1 do
|
||||
begin
|
||||
FSheet.WriteUTF8Text(FRow,i,ExportFields[i].ExportedName);
|
||||
FSheet.WriteText(FRow,i,ExportFields[i].ExportedName);
|
||||
end;
|
||||
inc(FRow);
|
||||
end;
|
||||
@ -304,13 +304,13 @@ begin
|
||||
else if Field.Datatype in [ftBCD,ftCurrency,ftFloat,ftFMTBcd] then
|
||||
FSheet.WriteCurrency(FRow, EF.Index, Field.AsFloat)
|
||||
else if Field.DataType in [ftString,ftFixedChar] then
|
||||
FSheet.WriteUTF8Text(FRow, EF.Index, Field.AsString)
|
||||
FSheet.WriteText(FRow, EF.Index, Field.AsString)
|
||||
else if (Field.DataType in ([ftWideMemo,ftWideString,ftFixedWideChar]+BlobFieldTypes)) then
|
||||
FSheet.WriteUTF8Text(FRow, EF.Index, UTF8Encode(Field.AsWideString))
|
||||
FSheet.WriteText(FRow, EF.Index, UTF8Encode(Field.AsWideString))
|
||||
{ Note: we test for the wide text fields before the MemoFieldTypes, in order to
|
||||
let ftWideMemo end up at the right place }
|
||||
else if Field.DataType in MemoFieldTypes then
|
||||
FSheet.WriteUTF8Text(FRow, EF.Index, Field.AsString)
|
||||
FSheet.WriteText(FRow, EF.Index, Field.AsString)
|
||||
else if Field.DataType=ftBoolean then
|
||||
FSheet.WriteBoolValue(FRow, EF.Index, Field.AsBoolean)
|
||||
else if Field.DataType in DateFieldTypes then
|
||||
@ -327,7 +327,7 @@ begin
|
||||
FSheet.WriteDateTime(FRow, EF.Index, Field.AsDateTime, nfShortDateTime);
|
||||
end
|
||||
else //fallback to string
|
||||
FSheet.WriteUTF8Text(FRow, EF.Index, Field.AsString);
|
||||
FSheet.WriteText(FRow, EF.Index, Field.AsString);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -1321,7 +1321,7 @@ begin
|
||||
if (col <> nil) and (col^.Width > 0) then
|
||||
w := col^.Width;
|
||||
end;
|
||||
w := w * FWorkbook.GetDefaultFont.Size;
|
||||
w := FWorkbook.ConvertUnits(w, FWorkbook.Units, suPoints);
|
||||
Result:= Format(' width="%.1fpt"', [w], FPointSeparatorSettings);
|
||||
end;
|
||||
|
||||
@ -1396,7 +1396,7 @@ begin
|
||||
row := FWorksheet.FindRow(ARowIndex);
|
||||
if row <> nil then
|
||||
h := row^.Height;
|
||||
h := (h + ROW_HEIGHT_CORRECTION) * FWorkbook.GetDefaultFont.Size;
|
||||
h := FWorkbook.ConvertUnits(h, FWorkbook.Units, suPoints);
|
||||
Result := Format(' height="%.1fpt"', [h], FPointSeparatorSettings);
|
||||
end;
|
||||
|
||||
|
@ -54,8 +54,8 @@ type
|
||||
function LoadFromStream(AStream: TStream; AName: String): Boolean;
|
||||
property FileName: String read FFileName;
|
||||
property ImageType: TsImagetype read FImageType;
|
||||
property ImageWidth: Double read FWidth;
|
||||
property ImageHeight: Double read FHeight;
|
||||
property ImageWidth: Double read FWidth write FWidth;
|
||||
property ImageHeight: Double read FHeight write FWidth;
|
||||
property Stream: TMemoryStream read FStream;
|
||||
end;
|
||||
|
||||
@ -866,17 +866,10 @@ begin
|
||||
end;
|
||||
|
||||
function TsEmbeddedObj.CheckStream(AImageType: TsImageType): Boolean;
|
||||
var
|
||||
w, h: Double;
|
||||
begin
|
||||
FImageType := GetImageInfo(FStream, w, h, AImageType);
|
||||
if FImageType <> itUnknown then
|
||||
begin
|
||||
FWidth := inToMM(w);
|
||||
FHeight := inToMM(h);
|
||||
Result := true;
|
||||
end else
|
||||
Result := false;
|
||||
FImageType := GetImageInfo(FStream, FWidth, FHeight, AImageType);
|
||||
// FWidth and FHeight are in inches here.
|
||||
Result := FImageType <> itUnknown;
|
||||
end;
|
||||
|
||||
function TsEmbeddedObj.LoadFromFile(const AFileName: String): Boolean;
|
||||
|
@ -1436,7 +1436,7 @@ function ApplyTextFormat(AText: String; AParams: TsNumFormatParams): String;
|
||||
var
|
||||
sct: TsNumFormatSection;
|
||||
element: TsNumFormatElement;
|
||||
i, n: Integer;
|
||||
i: Integer;
|
||||
begin
|
||||
Result := '';
|
||||
for sct in AParams.Sections do
|
||||
|
@ -328,8 +328,8 @@ const
|
||||
|
||||
FALSE_TRUE: Array[boolean] of String = ('false', 'true');
|
||||
|
||||
COLWIDTH_EPS = 1e-2; // for mm
|
||||
ROWHEIGHT_EPS = 1e-2; // for lines
|
||||
COLWIDTH_EPS = 1e-3;
|
||||
ROWHEIGHT_EPS = 1e-3;
|
||||
|
||||
type
|
||||
|
||||
@ -344,7 +344,7 @@ type
|
||||
TColumnStyleData = class
|
||||
public
|
||||
Name: String;
|
||||
ColWidth: Double; // in mm
|
||||
ColWidth: Double; // in workbook units
|
||||
end;
|
||||
|
||||
{ Column data items stored in the ColumnList }
|
||||
@ -359,7 +359,7 @@ type
|
||||
TRowStyleData = class
|
||||
public
|
||||
Name: String;
|
||||
RowHeight: Double; // in mm
|
||||
RowHeight: Double; // in workbook units
|
||||
AutoRowHeight: Boolean;
|
||||
end;
|
||||
|
||||
@ -1030,31 +1030,20 @@ end;
|
||||
procedure TsSpreadOpenDocReader.ApplyColWidths;
|
||||
var
|
||||
colIndex: Integer;
|
||||
colWidth: Single;
|
||||
colStyleIndex: Integer;
|
||||
colStyle: TColumnStyleData;
|
||||
factor: Double;
|
||||
col: PCol;
|
||||
i: Integer;
|
||||
begin
|
||||
factor := FWorkbook.GetDefaultFont.Size/2;
|
||||
for i:=0 to FColumnList.Count-1 do
|
||||
begin
|
||||
colIndex := TColumnData(FColumnList[i]).Col;
|
||||
colStyleIndex := TColumnData(FColumnList[i]).ColStyleIndex;
|
||||
colStyle := TColumnStyleData(FColumnStyleList[colStyleIndex]);
|
||||
{ The column width stored in colStyle is in mm (see ReadColumnStyles).
|
||||
We convert it to character count by converting it to points and then by
|
||||
dividing the points by the approximate width of the '0' character which
|
||||
is assumed to be 50% of the default font point size. }
|
||||
colWidth := mmToPts(colStyle.ColWidth)/factor;
|
||||
{ Add only column records to the worksheet if their width is different from
|
||||
the default column width. }
|
||||
if not SameValue(colWidth, FWorksheet.DefaultColWidth, COLWIDTH_EPS) then
|
||||
begin
|
||||
col := FWorksheet.GetCol(colIndex);
|
||||
col^.Width := colWidth;
|
||||
end;
|
||||
// Add only column records to the worksheet if their width is different from
|
||||
// the default column width. The column width stored in colStyle is already
|
||||
// in workbook units (see ReadColumnStyles).
|
||||
if not SameValue(colStyle.ColWidth, FWorksheet.DefaultColWidth, COLWIDTH_EPS) then
|
||||
FWorksheet.WriteColWidth(colIndex, colStyle.ColWidth, FWorkbook.Units);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1828,7 +1817,8 @@ begin
|
||||
s := GetAttrValue(styleChildNode, 'style:column-width');
|
||||
if s <> '' then
|
||||
begin
|
||||
colWidth := PtsToMM(HTMLLengthStrToPts(s)); // convert to mm
|
||||
colWidth := FWorkbook.ConvertUnits(HTMLLengthStrToPts(s), suPoints, FWorkbook.Units);
|
||||
// convert to workbook units
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
@ -3235,7 +3225,7 @@ var
|
||||
rowStyleName: String;
|
||||
rowStyleIndex: Integer;
|
||||
rowStyle: TRowStyleData;
|
||||
rowHeight: Single;
|
||||
rowHeight: Double;
|
||||
autoRowHeight: Boolean;
|
||||
col: Integer;
|
||||
cellNode: TDOMNode;
|
||||
@ -3254,11 +3244,7 @@ var
|
||||
if rowStyleIndex > -1 then // just for safety
|
||||
begin
|
||||
rowStyle := TRowStyleData(FRowStyleList[rowStyleIndex]);
|
||||
rowHeight := rowStyle.RowHeight; // in mm (see ReadRowStyles)
|
||||
rowHeight := mmToPts(rowHeight) / Workbook.GetDefaultFontSize;
|
||||
if rowHeight > ROW_HEIGHT_CORRECTION
|
||||
then rowHeight := rowHeight - ROW_HEIGHT_CORRECTION // in "lines"
|
||||
else rowHeight := 0;
|
||||
rowHeight := rowStyle.RowHeight; // in Workbook units (see ReadRowStyles)
|
||||
autoRowHeight := rowStyle.AutoRowHeight;
|
||||
end else
|
||||
autoRowHeight := true;
|
||||
@ -3356,7 +3342,7 @@ var
|
||||
// Transfer non-default row heights to sheet's rows
|
||||
if not autoRowHeight then
|
||||
for i:=1 to rowsRepeated do
|
||||
FWorksheet.WriteRowHeight(row + i - 1, rowHeight);
|
||||
FWorksheet.WriteRowHeight(row + i - 1, rowHeight, FWorkbook.Units);
|
||||
|
||||
row := row + rowsRepeated;
|
||||
end;
|
||||
@ -3416,7 +3402,8 @@ begin
|
||||
begin
|
||||
s := GetAttrValue(styleChildNode, 'style:row-height');
|
||||
if s <> '' then
|
||||
rowHeight := PtsToMm(HTMLLengthStrToPts(s)); // convert to mm
|
||||
rowHeight := FWorkbook.ConvertUnits(HTMLLengthStrToPts(s), suPoints, FWorkbook.Units);
|
||||
// convert to workbook units
|
||||
s := GetAttrValue(styleChildNode, 'style:use-optimal-row-height');
|
||||
if s = 'true' then
|
||||
auto := true;
|
||||
@ -4206,21 +4193,19 @@ var
|
||||
found: Boolean;
|
||||
colstyle: TColumnStyleData;
|
||||
w: Double;
|
||||
multiplier: Double;
|
||||
begin
|
||||
{ At first, add the default column width }
|
||||
colStyle := TColumnStyleData.Create;
|
||||
colStyle.Name := 'co1';
|
||||
colStyle.ColWidth := 12; //Workbook.DefaultColWidth;
|
||||
colStyle.ColWidth := FWorkbook.ConvertUnits(12, suChars, FWorkbook.Units);
|
||||
FColumnStyleList.Add(colStyle);
|
||||
|
||||
for i:=0 to Workbook.GetWorksheetCount-1 do
|
||||
begin
|
||||
sheet := Workbook.GetWorksheetByIndex(i);
|
||||
// colStyle.ColWidth := sheet.DefaultColWidth;
|
||||
for c:=0 to sheet.GetLastColIndex do
|
||||
begin
|
||||
w := sheet.GetColWidth(c);
|
||||
w := sheet.GetColWidth(c, FWorkbook.Units);
|
||||
// Look for this width in the current ColumnStyleList
|
||||
found := false;
|
||||
for j := 0 to FColumnStyleList.Count-1 do
|
||||
@ -4239,7 +4224,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
(*
|
||||
{ fpspreadsheet's column width is the count of '0' characters of the
|
||||
default font. On average, the width of the '0' is about half of the
|
||||
point size of the font. --> we can convert the fps col width to pts and
|
||||
@ -4250,6 +4235,7 @@ begin
|
||||
w := TColumnStyleData(FColumnStyleList[i]).ColWidth * multiplier;
|
||||
TColumnStyleData(FColumnStyleList[i]).ColWidth := PtsToMM(w);
|
||||
end;
|
||||
*)
|
||||
end;
|
||||
|
||||
{ Collects the fonts used by headers and footers in the FHeaderFooterFontList }
|
||||
@ -4308,13 +4294,13 @@ var
|
||||
row: PRow;
|
||||
found: Boolean;
|
||||
rowstyle: TRowStyleData;
|
||||
h, multiplier: Double;
|
||||
h: Double;
|
||||
begin
|
||||
{ At first, add the default row height }
|
||||
{ Initially, row height units will be the same as in the sheet, i.e. in "lines" }
|
||||
{ Initially, row height units will be the same as in the workbook }
|
||||
rowStyle := TRowStyleData.Create;
|
||||
rowStyle.Name := 'ro1';
|
||||
rowStyle.RowHeight := 1; //Workbook.DefaultRowHeight;
|
||||
rowStyle.RowHeight := FWorkbook.ConvertUnits(15, suPoints, FWorkbook.Units);
|
||||
rowStyle.AutoRowHeight := true;
|
||||
FRowStyleList.Add(rowStyle);
|
||||
|
||||
@ -4326,7 +4312,7 @@ begin
|
||||
row := sheet.FindRow(r);
|
||||
if row <> nil then
|
||||
begin
|
||||
h := sheet.GetRowHeight(r);
|
||||
h := sheet.GetRowHeight(r, FWorkbook.Units);
|
||||
// Look for this height in the current RowStyleList
|
||||
found := false;
|
||||
for j:=0 to FRowStyleList.Count-1 do
|
||||
@ -4348,7 +4334,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
(*
|
||||
{ fpspreadsheet's row heights are measured as line count of the default font.
|
||||
Using the default font size (which is in points) we convert the line count
|
||||
to points and then to millimeters as needed by ods. }
|
||||
@ -4357,7 +4343,7 @@ begin
|
||||
begin
|
||||
h := (TRowStyleData(FRowStyleList[i]).RowHeight + ROW_HEIGHT_CORRECTION) * multiplier;
|
||||
TRowStyleData(FRowStyleList[i]).RowHeight := PtsToMM(h);
|
||||
end;
|
||||
end; *)
|
||||
end;
|
||||
|
||||
{ Is called before zipping the individual file parts. Rewinds the streams. }
|
||||
@ -4847,7 +4833,8 @@ begin
|
||||
// Column width
|
||||
AppendToStream(AStream, Format(
|
||||
'<style:table-column-properties style:column-width="%.3fmm" fo:break-before="auto"/>',
|
||||
[colStyle.ColWidth], FPointSeparatorSettings));
|
||||
[FWorkbook.ConvertUnits(colStyle.ColWidth, FWorkbook.Units, suMillimeters)],
|
||||
FPointSeparatorSettings));
|
||||
|
||||
// End
|
||||
AppendToStream(AStream,
|
||||
@ -4860,15 +4847,16 @@ procedure TsSpreadOpenDocWriter.WriteColumns(AStream: TStream;
|
||||
var
|
||||
lastCol: Integer;
|
||||
c, k: Integer;
|
||||
w, w_mm: Double;
|
||||
widthMultiplier: Double;
|
||||
w: Double;
|
||||
// w, w_mm: Double;
|
||||
// widthMultiplier: Double;
|
||||
styleName: String;
|
||||
colsRepeated: Integer;
|
||||
colsRepeatedStr: String;
|
||||
firstRepeatedPrintCol, lastRepeatedPrintCol: Longint;
|
||||
headerCols: Boolean;
|
||||
begin
|
||||
widthMultiplier := Workbook.GetFont(0).Size / 2;
|
||||
// widthMultiplier := Workbook.GetFont(0).Size / 2;
|
||||
lastCol := ASheet.GetLastColIndex;
|
||||
firstRepeatedPrintCol := ASheet.PageLayout.RepeatedCols.FirstIndex;
|
||||
lastRepeatedPrintCol := ASheet.PageLayout.RepeatedCols.LastIndex;
|
||||
@ -4881,9 +4869,7 @@ begin
|
||||
c := 0;
|
||||
while (c <= lastCol) do
|
||||
begin
|
||||
w := ASheet.GetColWidth(c);
|
||||
// Convert to mm
|
||||
w_mm := PtsToMM(w * widthMultiplier);
|
||||
w := ASheet.GetColWidth(c, FWorkbook.Units);
|
||||
|
||||
if (c = firstRepeatedPrintCol) then
|
||||
begin
|
||||
@ -4894,7 +4880,7 @@ begin
|
||||
// Find width in ColumnStyleList to retrieve corresponding style name
|
||||
styleName := '';
|
||||
for k := 0 to FColumnStyleList.Count-1 do
|
||||
if SameValue(TColumnStyleData(FColumnStyleList[k]).ColWidth, w_mm, COLWIDTH_EPS) then begin
|
||||
if SameValue(TColumnStyleData(FColumnStyleList[k]).ColWidth, w, COLWIDTH_EPS) then begin
|
||||
styleName := TColumnStyleData(FColumnStyleList[k]).Name;
|
||||
break;
|
||||
end;
|
||||
@ -4907,7 +4893,7 @@ begin
|
||||
if headerCols then
|
||||
while (k <= lastCol) and (k <= lastRepeatedPrintCol) do
|
||||
begin
|
||||
if ASheet.GetColWidth(k) = w then
|
||||
if ASheet.GetColWidth(k, FWorkbook.Units) = w then
|
||||
inc(colsRepeated)
|
||||
else
|
||||
break;
|
||||
@ -4916,7 +4902,7 @@ begin
|
||||
else
|
||||
while (k <= lastCol) and (k < firstRepeatedPrintCol) do
|
||||
begin
|
||||
if ASheet.GetColWidth(k) = w then
|
||||
if ASheet.GetColWidth(k, FWorkbook.Units) = w then
|
||||
inc(colsRepeated)
|
||||
else
|
||||
break;
|
||||
@ -5231,8 +5217,7 @@ var
|
||||
cell: PCell; // current cell
|
||||
styleName: String;
|
||||
k: Integer;
|
||||
h, h_mm: Single; // row height in "lines" and millimeters, respectively
|
||||
h1: Single;
|
||||
h, h1: Double;
|
||||
colsRepeated: Cardinal;
|
||||
rowsRepeated: Cardinal;
|
||||
colsRepeatedStr: String;
|
||||
@ -5240,12 +5225,10 @@ var
|
||||
firstCol, firstRow, lastCol, lastRow: Cardinal;
|
||||
firstRepeatedPrintRow, lastRepeatedPrintRow: Cardinal;
|
||||
rowStyleData: TRowStyleData;
|
||||
defFontSize: Single;
|
||||
emptyRowsAbove: Boolean;
|
||||
headerRows: Boolean;
|
||||
begin
|
||||
// some abbreviations...
|
||||
defFontSize := Workbook.GetFont(0).Size;
|
||||
GetSheetDimensions(ASheet, firstRow, lastRow, firstCol, lastCol);
|
||||
emptyRowsAbove := firstRow > 0;
|
||||
|
||||
@ -5278,12 +5261,11 @@ begin
|
||||
begin
|
||||
styleName := '';
|
||||
|
||||
h := row^.Height; // row height in "lines"
|
||||
h_mm := PtsToMM((h + ROW_HEIGHT_CORRECTION) * defFontSize); // in mm
|
||||
h := row^.Height; // row height in workbook units
|
||||
for k := 0 to FRowStyleList.Count-1 do begin
|
||||
rowStyleData := TRowStyleData(FRowStyleList[k]);
|
||||
// Compare row heights, but be aware of rounding errors
|
||||
if SameValue(rowStyleData.RowHeight, h_mm, 1E-3) then
|
||||
if SameValue(rowStyleData.RowHeight, h, ROWHEIGHT_EPS) then
|
||||
begin
|
||||
styleName := rowStyleData.Name;
|
||||
break;
|
||||
@ -5318,7 +5300,7 @@ begin
|
||||
begin
|
||||
if ASheet.Cells.GetFirstCellOfRow(rr) <> nil then
|
||||
break;
|
||||
h1 := ASheet.GetRowHeight(rr);
|
||||
h1 := ASheet.GetRowHeight(rr, FWorkbook.Units);
|
||||
if not SameValue(h, h1, ROWHEIGHT_EPS) then
|
||||
break;
|
||||
inc(rr);
|
||||
@ -5431,7 +5413,9 @@ begin
|
||||
|
||||
// Column width
|
||||
AppendToStream(AStream, Format(
|
||||
'<style:table-row-properties style:row-height="%.3fmm" ', [rowStyle.RowHeight], FPointSeparatorSettings));
|
||||
'<style:table-row-properties style:row-height="%.3fmm" ',
|
||||
[FWorkbook.ConvertUnits(rowStyle.RowHeight, FWorkbook.Units, suMillimeters)],
|
||||
FPointSeparatorSettings));
|
||||
if rowStyle.AutoRowHeight then
|
||||
AppendToStream(AStream, 'style:use-optimal-row-height="true" ');
|
||||
AppendToStream(AStream, 'fo:break-before="auto"/>');
|
||||
@ -6041,25 +6025,20 @@ function TsSpreadOpenDocWriter.WritePageLayoutAsXMLString(AStyleName: String;
|
||||
function CalcStyleStr(AName, AHeaderFooterImageStr: String;
|
||||
APageMargin, AHeaderFooterMargin: Double): String;
|
||||
var
|
||||
h: Double;
|
||||
marginKind: String;
|
||||
begin
|
||||
h := PtsToMM(FWorkbook.GetDefaultFontSize);
|
||||
if AName = 'header' then marginKind := 'bottom' else marginKind := 'top';
|
||||
Result := Format(
|
||||
'<style:%s-style>' + // e.g. <style:header-style>
|
||||
'<style:header-footer-properties ' +
|
||||
'fo:margin-left="0mm" fo:margin-right="0mm" '+
|
||||
// 'fo:min-height="%.2fmm" fo:margin-%s="%.2fmm" ' + // margin-bottom or -top
|
||||
'svg:height="%.2fmm" fo:margin-%s="%.2fmm" ' +
|
||||
'svg:height="%.2fmm" fo:margin-%s="%.2fmm" ' + // fo:margin-bottom or -top
|
||||
'fo:background-color="transparent">' +
|
||||
'%s' +
|
||||
'</style:header-footer-properties>' +
|
||||
'</style:%s-style>', [
|
||||
AName,
|
||||
APageMargin - AHeaderFooterMargin, marginKind, 0.0, // - h, marginKind, h,
|
||||
// AHeaderFooterMargin, marginKind, APageMargin-AHeaderFooterMargin-h,
|
||||
// AHeaderFooterMargin-APageMargin-h, marginKind, AHeaderFooterMargin-APageMargin,
|
||||
APageMargin - AHeaderFooterMargin, marginKind, 0.0,
|
||||
AHeaderFooterImageStr,
|
||||
AName
|
||||
], FPointSeparatorSettings);
|
||||
@ -6387,19 +6366,17 @@ var
|
||||
value: variant;
|
||||
styleCell: PCell;
|
||||
styleName: String;
|
||||
h, h_mm: Single; // row height in "lines" and millimeters, respectively
|
||||
h: Single; // row height workbook units
|
||||
k: Integer;
|
||||
rowStyleData: TRowStyleData;
|
||||
rowsRepeated: Cardinal;
|
||||
colsRepeated: Cardinal;
|
||||
colsRepeatedStr: String;
|
||||
defFontSize: Single;
|
||||
lastCol, lastRow: Cardinal;
|
||||
begin
|
||||
// some abbreviations...
|
||||
lastCol := Workbook.VirtualColCount - 1;
|
||||
lastRow := Workbook.VirtualRowCount - 1;
|
||||
defFontSize := Workbook.GetFont(0).Size;
|
||||
|
||||
rowsRepeated := 1;
|
||||
r := 0;
|
||||
@ -6413,13 +6390,12 @@ begin
|
||||
begin
|
||||
styleName := '';
|
||||
|
||||
h := row^.Height; // row height in "lines"
|
||||
h_mm := PtsToMM((h + ROW_HEIGHT_CORRECTION) * defFontSize); // in mm
|
||||
h := row^.Height; // row height in workbook units
|
||||
for k := 0 to FRowStyleList.Count-1 do
|
||||
begin
|
||||
rowStyleData := TRowStyleData(FRowStyleList[k]);
|
||||
// Compare row heights, but be aware of rounding errors
|
||||
if SameValue(rowStyleData.RowHeight, h_mm, 1E-3) then
|
||||
if SameValue(rowStyleData.RowHeight, h, ROWHEIGHT_EPS) then
|
||||
begin
|
||||
styleName := rowStyleData.Name;
|
||||
break;
|
||||
@ -6431,7 +6407,6 @@ begin
|
||||
|
||||
// No empty rows allowed here for the moment!
|
||||
|
||||
|
||||
// Write the row XML
|
||||
AppendToStream(AStream, Format(
|
||||
'<table:table-row table:style-name="%s">', [styleName]));
|
||||
|
@ -55,12 +55,12 @@ type
|
||||
|
||||
{@@ The record TRow contains information about a spreadsheet row:
|
||||
@param Row The index of the row (beginning with 0)
|
||||
@param Height The height of the row (expressed as lines count of the default font)
|
||||
@param Height The height of the row (expressed in the units defined in the workbook)
|
||||
Only rows with heights that cannot be derived from the font height have a
|
||||
row record. }
|
||||
TRow = record
|
||||
Row: Cardinal;
|
||||
Height: Single; // in "lines"
|
||||
Height: Single;
|
||||
end;
|
||||
|
||||
{@@ Pointer to a TRow record }
|
||||
@ -68,11 +68,11 @@ type
|
||||
|
||||
{@@ The record TCol contains information about a spreadsheet column:
|
||||
@param Col The index of the column (beginning with 0)
|
||||
@param Width The width of the column (expressed in character count of the "0" character of the default font.
|
||||
@param Width The width of the column (expressed in the units defined in the workbook)
|
||||
Only columns with non-default widths have a column record. }
|
||||
TCol = record
|
||||
Col: Cardinal;
|
||||
Width: Single; // in "characters". Excel uses the width of char "0" in 1st font
|
||||
Width: Single;
|
||||
end;
|
||||
|
||||
{@@ Pointer to a TCol record }
|
||||
@ -428,9 +428,11 @@ type
|
||||
function GetCellCountInRow(ARow: Cardinal): Cardinal;
|
||||
function GetCellCountInCol(ACol: Cardinal): Cardinal;
|
||||
function GetRow(ARow: Cardinal): PRow;
|
||||
function GetRowHeight(ARow: Cardinal): Single;
|
||||
function GetRowHeight(ARow: Cardinal; AUnits: TsSizeUnits): Single; overload;
|
||||
function GetRowHeight(ARow: Cardinal): Single; overload; deprecated 'Use version with parameter AUnits.';
|
||||
function GetCol(ACol: Cardinal): PCol;
|
||||
function GetColWidth(ACol: Cardinal): Single;
|
||||
function GetColWidth(ACol: Cardinal; AUnits: TsSizeUnits): Single; overload;
|
||||
function GetColWidth(ACol: Cardinal): Single; overload; deprecated 'Use version with parameter AUnits.';
|
||||
procedure DeleteCol(ACol: Cardinal);
|
||||
procedure DeleteRow(ARow: Cardinal);
|
||||
procedure InsertCol(ACol: Cardinal);
|
||||
@ -440,9 +442,11 @@ type
|
||||
procedure RemoveCol(ACol: Cardinal);
|
||||
procedure RemoveRow(ARow: Cardinal);
|
||||
procedure WriteRowInfo(ARow: Cardinal; AData: TRow);
|
||||
procedure WriteRowHeight(ARow: Cardinal; AHeight: Single);
|
||||
procedure WriteRowHeight(ARow: Cardinal; AHeight: Single; AUnits: TsSizeUnits); overload;
|
||||
procedure WriteRowHeight(ARow: Cardinal; AHeight: Single); overload; deprecated 'Use version with parameter AUnits';
|
||||
procedure WriteColInfo(ACol: Cardinal; AData: TCol);
|
||||
procedure WriteColWidth(ACol: Cardinal; AWidth: Single);
|
||||
procedure WriteColWidth(ACol: Cardinal; AWidth: Single; AUnits: TsSizeUnits); overload;
|
||||
procedure WriteColWidth(ACol: Cardinal; AWidth: Single); overload; deprecated 'Use version with parameter AUnits';
|
||||
|
||||
// Sorting
|
||||
procedure Sort(const ASortParams: TsSortParams;
|
||||
@ -491,12 +495,12 @@ type
|
||||
procedure UnmergeCells(ARange: String); overload;
|
||||
|
||||
{ Embedded images }
|
||||
procedure CalcImageCell(AIndex: Integer; x, y, AWidth, AHeight: Double;
|
||||
out ARow, ACol: Cardinal; out ARowOffs, AColOffs, AScaleX, AScaleY: Double);
|
||||
procedure CalcImageExtent(AIndex: Integer;
|
||||
out ARow1, ACol1, ARow2, ACol2: Cardinal;
|
||||
out ARowOffs1, AColOffs1, ARowOffs2, AColOffs2: Double;
|
||||
out x, y, AWidth, AHeight: Double);
|
||||
procedure CalcImageCell(AIndex: Integer; x, y, AWidth, AHeight: Double;
|
||||
out ARow, ACol: Cardinal; out ARowOffs, AColOffs, AScaleX, AScaleY: Double);
|
||||
function GetImage(AIndex: Integer): TsImage;
|
||||
function GetImageCount: Integer;
|
||||
procedure RemoveAllImages;
|
||||
@ -650,6 +654,7 @@ type
|
||||
FLockCount: Integer;
|
||||
FLog: TStringList;
|
||||
FSearchEngine: TObject;
|
||||
FUnits: TsSizeUnits;
|
||||
|
||||
{ Setter/Getter }
|
||||
function GetErrorMsg: String;
|
||||
@ -784,6 +789,7 @@ type
|
||||
procedure RemoveAllEmbeddedObj;
|
||||
|
||||
{ Utilities }
|
||||
function ConvertUnits(AValue: Double; AFromUnits, AToUnits: TsSizeUnits): Double;
|
||||
procedure DisableNotifications;
|
||||
procedure EnableNotifications;
|
||||
function NotificationsEnabled: Boolean;
|
||||
@ -806,6 +812,7 @@ type
|
||||
property VirtualColCount: cardinal read FVirtualColCount write SetVirtualColCount;
|
||||
property VirtualRowCount: cardinal read FVirtualRowCount write SetVirtualRowCount;
|
||||
property Options: TsWorkbookOptions read FOptions write FOptions;
|
||||
property Units: TsSizeUnits read FUnits;
|
||||
|
||||
{@@ This event fires whenever a new worksheet is added }
|
||||
property OnAddWorksheet: TsWorksheetEvent read FOnAddWorksheet write FOnAddWorksheet;
|
||||
@ -1029,8 +1036,8 @@ begin
|
||||
|
||||
FPageLayout := TsPageLayout.Create(self);
|
||||
|
||||
FDefaultColWidth := 12;
|
||||
FDefaultRowHeight := 1;
|
||||
FDefaultColWidth := ptsToMM(72); // Excel: about 72 pts
|
||||
FDefaultRowHeight := ptsToMM(15); // Excel: 15pts
|
||||
|
||||
FFirstRowIndex := UNASSIGNED_ROW_COL_INDEX;
|
||||
FFirstColIndex := UNASSIGNED_ROW_COL_INDEX;
|
||||
@ -3336,16 +3343,15 @@ end;
|
||||
|
||||
procedure TsWorksheet.CalcImageCell(AIndex: Integer; x, y, AWidth, AHeight: Double;
|
||||
out ARow, ACol: Cardinal; out ARowOffs, AColOffs, AScaleX, AScaleY: Double);
|
||||
// All lengths are in workbook units!
|
||||
var
|
||||
colW, rowH, sum: Double;
|
||||
factor: Double;
|
||||
embobj: TsEmbeddedObj;
|
||||
begin
|
||||
factor := FWorkbook.GetDefaultFont.Size/2; // Width of "0" character in pts
|
||||
ACol := 0;
|
||||
sum := 0;
|
||||
repeat
|
||||
colW := ptsToMM(GetColWidth(ACol) * factor);
|
||||
colW := GetColWidth(ACol, FWorkbook.Units);;
|
||||
sum := sum + colW;
|
||||
inc(ACol);
|
||||
until sum > x;
|
||||
@ -3353,11 +3359,10 @@ begin
|
||||
AColOffs := x - sum;
|
||||
dec(ACol);
|
||||
|
||||
factor := FWorkbook.GetDefaultFont.Size; // Height of line in pts
|
||||
ARow := 0;
|
||||
sum := 0;
|
||||
repeat
|
||||
rowH := ptsToMM(CalcRowHeight(ARow) * factor); // row height in mm
|
||||
rowH := CalcRowHeight(ARow);
|
||||
sum := sum + rowH;
|
||||
inc(ARow);
|
||||
until sum > y;
|
||||
@ -3377,32 +3382,33 @@ end;
|
||||
@param ACol1 Index of the column containing the left edege of the image
|
||||
@param ARow2 Index of the row containing the right edge of the image
|
||||
@param ACol2 Index of the column containing the bottom edge of the image
|
||||
@param ARowOffs1 Distance between the top edge of image and row 1, in mm
|
||||
@param AColOffs1 Distance between the left edge of image and column 1, in mm
|
||||
@param ARowOffs2 Distance between the bottom edge of image and top of row 2, in mm
|
||||
@param AColOffs2 Distance between the right edge of image and left of col 2, in mm
|
||||
@param x Absolute coordinate of left edge of image, in mm
|
||||
@param y Absolute coordinate of top edge of image, in mm
|
||||
@param AWidth Width of the image, in mm
|
||||
@param AHeight Height of the image, in mm
|
||||
@param ARowOffs1 Distance between the top edge of image and row 1
|
||||
@param AColOffs1 Distance between the left edge of image and column 1
|
||||
@param ARowOffs2 Distance between the bottom edge of image and top of row 2
|
||||
@param AColOffs2 Distance between the right edge of image and left of col 2
|
||||
@param x Absolute coordinate of left edge of image
|
||||
@param y Absolute coordinate of top edge of image
|
||||
@param AWidth Width of the image
|
||||
@param AHeight Height of the image
|
||||
|
||||
All dimensions are in workbook units
|
||||
-------------------------------------------------------------------------------}
|
||||
procedure TsWorksheet.CalcImageExtent(AIndex: Integer;
|
||||
out ARow1, ACol1, ARow2, ACol2: Cardinal;
|
||||
out ARowOffs1, AColOffs1, ARowOffs2, AColOffs2: Double;
|
||||
out x,y, AWidth, AHeight: Double); // mm
|
||||
out x,y, AWidth, AHeight: Double);
|
||||
var
|
||||
img: TsImage;
|
||||
obj: TsEmbeddedObj;
|
||||
colW, rowH: Double;
|
||||
totH, totW: Double;
|
||||
r, c: Integer;
|
||||
factor: Double;
|
||||
begin
|
||||
img := GetImage(AIndex);
|
||||
|
||||
ARow1 := img.Row;
|
||||
ACol1 := img.Col;
|
||||
ARowOffs1 := img.OffsetX; // millimeters
|
||||
ARowOffs1 := img.OffsetX;
|
||||
AColOffs1 := img.OffsetY;
|
||||
|
||||
obj := FWorkbook.GetEmbeddedObj(img.Index);
|
||||
@ -3410,11 +3416,10 @@ begin
|
||||
AHeight := obj.ImageHeight * img.ScaleY;
|
||||
|
||||
// Find x coordinate of left image edge, in inches.
|
||||
factor := FWorkbook.GetDefaultFont.Size/2; // Width of "0" character in pts
|
||||
x := AColOffs1;
|
||||
for c := 0 to ACol1-1 do
|
||||
begin
|
||||
colW := ptsToMM(GetColWidth(c) * factor); // in mm
|
||||
colW := GetColWidth(c, FWorkbook.Units);
|
||||
x := x + colW;
|
||||
end;
|
||||
|
||||
@ -3423,7 +3428,7 @@ begin
|
||||
ACol2 := ACol1;
|
||||
while (totW < AWidth) do
|
||||
begin
|
||||
colW := ptsToMM(GetColWidth(ACol2) * factor);
|
||||
colW := GetColWidth(ACol2, FWorkbook.Units);
|
||||
totW := totW + colW;
|
||||
if totW >= AWidth then
|
||||
begin
|
||||
@ -3434,11 +3439,10 @@ begin
|
||||
end;
|
||||
|
||||
// Find y coordinate of top image edge, in inches.
|
||||
factor := FWorkbook.GetDefaultFont.Size; // Height of line in pts
|
||||
y := ARowOffs1;
|
||||
for r := 0 to ARow1 - 1 do
|
||||
begin
|
||||
rowH := ptsToMM(CalcRowHeight(r) * factor); // row height in mm
|
||||
rowH := CalcRowHeight(r);
|
||||
y := y + rowH;
|
||||
end;
|
||||
|
||||
@ -3447,7 +3451,7 @@ begin
|
||||
ARow2 := ARow1;
|
||||
while (totH < AHeight) do
|
||||
begin
|
||||
rowH := ptsToMM(CalcRowHeight(ARow2) * factor);
|
||||
rowH := CalcRowHeight(ARow2);
|
||||
totH := totH + rowH;
|
||||
if totH >= AHeight then
|
||||
begin
|
||||
@ -3466,10 +3470,10 @@ end;
|
||||
@param AFileName Name of the image file
|
||||
@param AOffsetX The image is offset horizontally from the left edge of
|
||||
the anchor cell. May reach into another cell.
|
||||
Value is in millimeters.
|
||||
Value is in workbook units.
|
||||
@param AOffsetY The image is offset vertically from the top edge of the
|
||||
anchor cell. May reach into another cell.
|
||||
Value is in millimeters.
|
||||
Value is in workbook units.
|
||||
@param AScaleX Horizontal scaling factor of the image
|
||||
@param AScaleY Vertical scaling factor of the image
|
||||
@return Index into the internal image list.
|
||||
@ -3501,10 +3505,10 @@ end;
|
||||
@param AStream Stream which contains the image data
|
||||
@param AOffsetX The image is offset horizontally from the left edge of
|
||||
the anchor cell. May reach into another cell.
|
||||
Value is in millimeters.
|
||||
Value is in workbook units.
|
||||
@param AOffsetY The image is offset vertically from the top edge of the
|
||||
anchor cell. May reach into another cell.
|
||||
Value is in millimeters.
|
||||
Value is in workbook units.
|
||||
@param AScaleX Horizontal scaling factor of the image
|
||||
@param AScaleY Vertical scaling factor of the image
|
||||
@return Index into the internal image list.
|
||||
@ -3536,6 +3540,7 @@ begin
|
||||
img^.Index := AImageIndex;
|
||||
Result := FImages.Add(img);
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Removes an image from the internal image list.
|
||||
The image is identified by its index.
|
||||
@ -6157,28 +6162,24 @@ end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Calculates the optimum height of a given row. Depends on the font size
|
||||
of the individual cells in the row.
|
||||
of the individual cells in the row. Is converted to workbook units.
|
||||
|
||||
@param ARow Index of the row to be considered
|
||||
@return Row height in line count of the default font.
|
||||
@return Row height in workbook units
|
||||
-------------------------------------------------------------------------------}
|
||||
function TsWorksheet.CalcAutoRowHeight(ARow: Cardinal): Single;
|
||||
var
|
||||
cell: PCell;
|
||||
h0: Single;
|
||||
begin
|
||||
Result := 0;
|
||||
h0 := Workbook.GetDefaultFontSize;
|
||||
for cell in Cells.GetRowEnumerator(ARow) do
|
||||
Result := Max(Result, ReadCellFont(cell).Size / h0);
|
||||
Result := Max(Result, ReadCellFont(cell).Size);
|
||||
Result := FWorkbook.ConvertUnits(Result, suPoints, FWorkbook.Units);
|
||||
// FixMe: This is not correct if text is rotated or wrapped
|
||||
{
|
||||
if Result = 0 then
|
||||
Result := DefaultRowHeight;
|
||||
}
|
||||
end;
|
||||
|
||||
function TsWorksheet.CalcRowHeight(ARow: Cardinal): Single;
|
||||
// In workbook units
|
||||
begin
|
||||
Result := CalcAutoRowHeight(ARow);
|
||||
if Result = 0 then
|
||||
@ -6327,9 +6328,10 @@ end;
|
||||
the default column width is returned.
|
||||
|
||||
@param ACol Index of the column considered
|
||||
@return Width of the column (in count of "0" characters of the default font)
|
||||
@param AUnits Units for the column width.
|
||||
@return Width of the column
|
||||
-------------------------------------------------------------------------------}
|
||||
function TsWorksheet.GetColWidth(ACol: Cardinal): Single;
|
||||
function TsWorksheet.GetColWidth(ACol: Cardinal; AUnits: TsSizeUnits): Single;
|
||||
var
|
||||
col: PCol;
|
||||
begin
|
||||
@ -6342,17 +6344,24 @@ begin
|
||||
Result := col^.Width
|
||||
else
|
||||
Result := FDefaultColWidth;
|
||||
Result := FWorkbook.ConvertUnits(Result, FWorkbook.Units, AUnits);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TsWorksheet.GetColWidth(ACol: Cardinal): Single;
|
||||
begin
|
||||
Result := GetColWidth(ACol, suChars);
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Returns the height of the given row. If there is no row record then the
|
||||
default row height is returned
|
||||
|
||||
@param ARow Index of the row considered
|
||||
@return Height of the row (in line count of the default font).
|
||||
@param AUnits Units for the row height.
|
||||
@return Height of the row
|
||||
-------------------------------------------------------------------------------}
|
||||
function TsWorksheet.GetRowHeight(ARow: Cardinal): Single;
|
||||
function TsWorksheet.GetRowHeight(ARow: Cardinal; AUnits: TsSizeUnits): Single;
|
||||
var
|
||||
row: PRow;
|
||||
begin
|
||||
@ -6365,9 +6374,15 @@ begin
|
||||
Result := row^.Height
|
||||
else
|
||||
Result := FDefaultRowHeight;
|
||||
Result := FWorkbook.ConvertUnits(Result, FWorkbook.Units, AUnits);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TsWorksheet.GetRowHeight(ARow: Cardinal): Single;
|
||||
begin
|
||||
Result := GetRowHeight(ARow, suLines);
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Deletes the column at the index specified. Cells with greader column indexes
|
||||
are moved one column to the left. Merged cell blocks and cell references in
|
||||
@ -6748,7 +6763,8 @@ end;
|
||||
Creates a new row record if it does not yet exist.
|
||||
|
||||
@param ARow Index of the row record which will be created or modified
|
||||
@param AData Data to be written.
|
||||
@param AData Data to be written. Expected to be already in the units
|
||||
defined for the workbook
|
||||
-------------------------------------------------------------------------------}
|
||||
procedure TsWorksheet.WriteRowInfo(ARow: Cardinal; AData: TRow);
|
||||
var
|
||||
@ -6763,17 +6779,23 @@ end;
|
||||
does not yet exist.
|
||||
|
||||
@param ARow Index of the row to be considered
|
||||
@param AHeight Row height to be assigned to the row. The row height is
|
||||
expressed as the line count of the default font size.
|
||||
@param AHeight Row height to be assigned to the row.
|
||||
@param AUnits Units measuring the row height.
|
||||
-------------------------------------------------------------------------------}
|
||||
procedure TsWorksheet.WriteRowHeight(ARow: Cardinal; AHeight: Single);
|
||||
procedure TsWorksheet.WriteRowHeight(ARow: Cardinal; AHeight: Single;
|
||||
AUnits: TsSizeUnits);
|
||||
var
|
||||
AElement: PRow;
|
||||
begin
|
||||
if ARow = UNASSIGNED_ROW_COL_INDEX then
|
||||
exit;
|
||||
AElement := GetRow(ARow);
|
||||
AElement^.Height := AHeight;
|
||||
AElement^.Height := FWorkbook.ConvertUnits(AHeight, AUnits, FWorkbook.FUnits);
|
||||
end;
|
||||
|
||||
procedure TsWorksheet.WriteRowHeight(ARow: Cardinal; AHeight: Single);
|
||||
begin
|
||||
WriteRowHeight(ARow, AHeight, suLines);
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
@ -6784,7 +6806,8 @@ end;
|
||||
Creates a new column record if it does not yet exist.
|
||||
|
||||
@param ACol Index of the column record which will be created or modified
|
||||
@param AData Data to be written (essentially column width).
|
||||
@param AData Data to be written (essentially column width). The column
|
||||
width is already in the units defined for the workbook.
|
||||
-------------------------------------------------------------------------------}
|
||||
procedure TsWorksheet.WriteColInfo(ACol: Cardinal; AData: TCol);
|
||||
var
|
||||
@ -6799,19 +6822,24 @@ end;
|
||||
does not yet exist.
|
||||
|
||||
@param ACol Index of the column to be considered
|
||||
@param AWidth Width to be assigned to the column. The column width is
|
||||
expressed as the count of "0" characters of the default font.
|
||||
@param AWidth Width to be assigned to the column.
|
||||
@param AUnits Units used for parameter AWidth.
|
||||
-------------------------------------------------------------------------------}
|
||||
procedure TsWorksheet.WriteColWidth(ACol: Cardinal; AWidth: Single);
|
||||
procedure TsWorksheet.WriteColWidth(ACol: Cardinal; AWidth: Single;
|
||||
AUnits: TsSizeUnits);
|
||||
var
|
||||
AElement: PCol;
|
||||
begin
|
||||
if ACol = UNASSIGNED_ROW_COL_INDEX then
|
||||
exit;
|
||||
AElement := GetCol(ACol);
|
||||
AElement^.Width := AWidth;
|
||||
AElement^.Width := FWorkbook.ConvertUnits(AWidth, AUnits, FWorkbook.FUnits);
|
||||
end;
|
||||
|
||||
procedure TsWorksheet.WriteColWidth(ACol: Cardinal; AWidth: Single);
|
||||
begin
|
||||
WriteColWidth(ACol, AWidth, suChars);
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------}
|
||||
{ TsWorkbook }
|
||||
@ -6869,6 +6897,53 @@ begin
|
||||
TsWorksheet(sheet).CalcFormulas;
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Conversion of length values between units
|
||||
-------------------------------------------------------------------------------}
|
||||
function TsWorkbook.ConvertUnits(AValue: Double;
|
||||
AFromUnits, AToUnits: TsSizeUnits): Double;
|
||||
begin
|
||||
if AFromUnits = AToUnits then
|
||||
begin
|
||||
Result := AValue;
|
||||
exit;
|
||||
end;
|
||||
// Convert to mm
|
||||
case AFromUnits of
|
||||
suMillimeters:
|
||||
Result := AValue;
|
||||
suCentimeters:
|
||||
Result := AValue * 10.0;
|
||||
suInches:
|
||||
Result := inToMM(AValue);
|
||||
suPoints:
|
||||
Result := ptsToMM(AValue);
|
||||
suChars:
|
||||
Result := ptsToMM(GetDefaultFont.Size * ZERO_WIDTH_FACTOR * AValue);
|
||||
suLines:
|
||||
Result := ptsToMM(GetDefaultFont.Size * (AValue + ROW_HEIGHT_CORRECTION));
|
||||
else
|
||||
raise Exception.Create('Unit not supported.');
|
||||
end;
|
||||
// Convert from mm
|
||||
case AToUnits of
|
||||
suMillimeters: ; // nothing to do
|
||||
suCentimeters:
|
||||
Result := Result * 0.1;
|
||||
suInches:
|
||||
Result := mmToIn(Result);
|
||||
suPoints:
|
||||
Result := mmToPts(Result);
|
||||
suChars:
|
||||
Result := mmToPts(Result) / (GetDefaultFont.Size * ZERO_WIDTH_FACTOR);
|
||||
suLines:
|
||||
Result := mmToPts(Result) / GetDefaultFont.Size - ROW_HEIGHT_CORRECTION;
|
||||
else
|
||||
raise Exception.Create('Unit not supported.');
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Helper method for clearing the spreadsheet list.
|
||||
-------------------------------------------------------------------------------}
|
||||
@ -6926,6 +7001,7 @@ begin
|
||||
FWorksheets := TFPList.Create;
|
||||
FLog := TStringList.Create;
|
||||
FFormatID := sfidUnknown;
|
||||
FUnits := suMillimeters; // Units for column width and row height
|
||||
|
||||
FormatSettings := UTF8FormatSettings;
|
||||
FormatSettings.ShortDateFormat := MakeShortDateFormat(FormatSettings.ShortDateFormat);
|
||||
@ -8314,6 +8390,8 @@ var
|
||||
rdest, cdest: Integer; // row and column index at destination
|
||||
nselS, nselD: Integer; // count of selected blocks
|
||||
begin
|
||||
Unused(ATransposed);
|
||||
|
||||
if AStream = nil then
|
||||
exit;
|
||||
|
||||
@ -8452,13 +8530,13 @@ begin
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Creates a new "embedded" stream and load the specified file.
|
||||
Creates a new "embedded" stream and loads the specified file.
|
||||
Returns the index of the embedded file item.
|
||||
Image dimensions are converted to workbook units.
|
||||
-------------------------------------------------------------------------------}
|
||||
function TsWorkbook.AddEmbeddedObj(const AFileName: String): Integer;
|
||||
var
|
||||
obj: TsEmbeddedObj = nil;
|
||||
w, h: Double;
|
||||
begin
|
||||
if not FileExists(AFileName) then
|
||||
begin
|
||||
@ -8469,8 +8547,11 @@ begin
|
||||
|
||||
obj := TsEmbeddedObj.Create;
|
||||
if obj.LoadFromFile(AFileName) then
|
||||
begin
|
||||
obj.ImageWidth := ConvertUnits(obj.ImageWidth, suInches, FUnits);
|
||||
obj.ImageHeight := ConvertUnits(obj.ImageHeight, suInches, FUnits);
|
||||
Result := FEmbeddedObjList.Add(obj)
|
||||
else
|
||||
end else
|
||||
begin
|
||||
AddErrorMsg(rsFileFormatNotSupported, [AFileName]);
|
||||
obj.Free;
|
||||
@ -8486,7 +8567,6 @@ function TsWorkbook.AddEmbeddedObj(AStream: TStream;
|
||||
const AName: String = ''): Integer;
|
||||
var
|
||||
obj: TsEmbeddedObj = nil;
|
||||
w, h: Double;
|
||||
begin
|
||||
obj := TsEmbeddedObj.Create;
|
||||
if obj.LoadFromStream(AStream, AName) then
|
||||
|
@ -84,7 +84,7 @@ type
|
||||
TsWorkbookChartSource = class(TCustomChartSource, IsSpreadsheetControl)
|
||||
private
|
||||
FWorkbookSource: TsWorkbookSource;
|
||||
FWorkbook: TsWorkbook;
|
||||
// FWorkbook: TsWorkbook;
|
||||
FWorksheets: array[TsXYRange] of TsWorksheet;
|
||||
FRangeStr: array[TsXYRange] of String;
|
||||
FRanges: array[TsXYRange] of TsCellRangeArray;
|
||||
@ -323,13 +323,13 @@ var
|
||||
L: TStrings;
|
||||
range: TsCellRange;
|
||||
begin
|
||||
if (FWorkbook = nil) or (FWorksheets[AIndex] = nil) or (Length(FRanges) = 0) then
|
||||
if (Workbook = nil) or (FWorksheets[AIndex] = nil) or (Length(FRanges) = 0) then
|
||||
exit('');
|
||||
|
||||
L := TStringList.Create;
|
||||
try
|
||||
if AListSeparator = #0 then
|
||||
L.Delimiter := FWorkbook.FormatSettings.ListSeparator
|
||||
L.Delimiter := Workbook.FormatSettings.ListSeparator
|
||||
else
|
||||
L.Delimiter := AListSeparator;
|
||||
L.StrictDelimiter := true;
|
||||
@ -412,7 +412,7 @@ begin
|
||||
Result := WorkbookSource.Workbook
|
||||
else
|
||||
Result := nil;
|
||||
FWorkbook := Result;
|
||||
// FWorkbook := Result;
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
@ -547,7 +547,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Standard component notification: The ChartSource is notified that the
|
||||
WorkbookSource is being removed.
|
||||
@ -582,7 +581,7 @@ const
|
||||
var
|
||||
range: TsCellRange;
|
||||
begin
|
||||
if (FWorkbook = nil) or (FRangeStr[AIndex] = '') //or (FWorksheets[AIndex] = nil)
|
||||
if (Workbook = nil) or (FRangeStr[AIndex] = '') //or (FWorksheets[AIndex] = nil)
|
||||
then begin
|
||||
FWorksheets[AIndex] := nil;
|
||||
SetLength(FRanges[AIndex], 0);
|
||||
@ -591,7 +590,7 @@ begin
|
||||
exit;
|
||||
end;
|
||||
|
||||
if FWorkbook.TryStrToCellRanges(FRangeStr[AIndex], FWorksheets[AIndex], FRanges[AIndex])
|
||||
if Workbook.TryStrToCellRanges(FRangeStr[AIndex], FWorksheets[AIndex], FRanges[AIndex])
|
||||
then begin
|
||||
for range in FRanges[AIndex] do
|
||||
if (range.Col1 <> range.Col2) and (range.Row1 <> range.Row2) then
|
||||
@ -602,7 +601,7 @@ begin
|
||||
// Make sure to include worksheet name in RangeString.
|
||||
FRangeStr[AIndex] := BuildRangeStr(AIndex);
|
||||
end else
|
||||
if (FWorkbook.GetWorksheetCount > 0) then begin
|
||||
if (Workbook.GetWorksheetCount > 0) then begin
|
||||
if FWorksheets[AIndex] = nil then
|
||||
raise Exception.CreateFmt('Worksheet of %s cell range "%s" does not exist.',
|
||||
[XY[AIndex], FRangeStr[AIndex]])
|
||||
@ -660,7 +659,7 @@ begin
|
||||
FWorkbookSource := AValue;
|
||||
if FWorkbookSource <> nil then
|
||||
FWorkbookSource.AddListener(self);
|
||||
FWorkbook := GetWorkbook;
|
||||
// FWorkbook := GetWorkbook;
|
||||
ListenerNotification([lniWorkbook, lniWorksheet]);
|
||||
end;
|
||||
|
||||
|
@ -3269,50 +3269,54 @@ begin
|
||||
AStrings.Add('Last column=');
|
||||
AStrings.Add('Active cell=');
|
||||
AStrings.Add('Selection=');
|
||||
AStrings.Add('Default column width=');
|
||||
AStrings.Add('Default row height=');
|
||||
AStrings.Add('Page layout=');
|
||||
end else
|
||||
begin
|
||||
AStrings.Add(Format('Name=%s', [ASheet.Name]));
|
||||
AStrings.Add(Format('First row=%d', [Integer(ASheet.GetFirstRowIndex)]));
|
||||
AStrings.Add(Format('Last row=%d', [ASheet.GetLastRowIndex]));
|
||||
AStrings.Add(Format('First column=%d', [Integer(ASheet.GetFirstColIndex)]));
|
||||
AStrings.Add(Format('Last column=%d', [ASheet.GetLastColIndex]));
|
||||
AStrings.Add(Format('Active cell=%s', [GetCellString(ASheet.ActiveCellRow, ASheet.ActiveCellCol)]));
|
||||
AStrings.Add(Format('Selection=%s', [ASheet.GetSelectionAsString]));
|
||||
AStrings.Add(Format('Comments=%d items', [ASheet.Comments.Count]));
|
||||
AStrings.Add(Format('Hyperlinks=%d items', [ASheet.Hyperlinks.Count]));
|
||||
AStrings.Add(Format('MergedCells=%d items', [ASheet.MergedCells.Count]));
|
||||
AStrings.Add('Name=%s', [ASheet.Name]);
|
||||
AStrings.Add('First row=%d', [Integer(ASheet.GetFirstRowIndex)]);
|
||||
AStrings.Add('Last row=%d', [ASheet.GetLastRowIndex]);
|
||||
AStrings.Add('First column=%d', [Integer(ASheet.GetFirstColIndex)]);
|
||||
AStrings.Add('Last column=%d', [ASheet.GetLastColIndex]);
|
||||
AStrings.Add('Active cell=%s', [GetCellString(ASheet.ActiveCellRow, ASheet.ActiveCellCol)]);
|
||||
AStrings.Add('Selection=%s', [ASheet.GetSelectionAsString]);
|
||||
AStrings.Add('Default column width=%.1f %s', [ASheet.DefaultColWidth, SizeUnitNames[ASheet.Workbook.Units]]);
|
||||
AStrings.Add('Default row height=%.1f %s', [ASheet.DefaultRowHeight, SizeUnitNames[ASheet.Workbook.Units]]);
|
||||
AStrings.Add('Comments=%d items', [ASheet.Comments.Count]);
|
||||
AStrings.Add('Hyperlinks=%d items', [ASheet.Hyperlinks.Count]);
|
||||
AStrings.Add('MergedCells=%d items', [ASheet.MergedCells.Count]);
|
||||
|
||||
if ienPageLayout in FExpanded then
|
||||
begin
|
||||
AStrings.Add('(-) Page layout=');
|
||||
AStrings.Add(Format(' Orientation=%s', [GetEnumName(TypeInfo(TsPageOrientation), ord(ASheet.PageLayout.Orientation))]));
|
||||
AStrings.Add(Format(' Page width=%.1f mm', [ASheet.PageLayout.PageWidth]));
|
||||
AStrings.Add(Format(' Page height=%.1f mm', [ASheet.PageLayout.PageHeight]));
|
||||
AStrings.Add(Format(' Left margin=%.1f mm', [ASheet.PageLayout.LeftMargin]));
|
||||
AStrings.Add(Format(' Right margin=%.1f mm', [ASheet.PageLayout.RightMargin]));
|
||||
AStrings.Add(Format(' Top margin=%.1f mm', [ASheet.PageLayout.TopMargin]));
|
||||
AStrings.Add(Format(' Bottom margin=%.1f mm', [ASheet.PageLayout.BottomMargin]));
|
||||
AStrings.Add(Format(' Header distance=%.1f mm', [ASheet.PageLayout.HeaderMargin]));
|
||||
AStrings.Add(Format(' Footer distance=%.1f mm', [ASheet.PageLayout.FooterMargin]));
|
||||
AStrings.Add(' Orientation=%s', [GetEnumName(TypeInfo(TsPageOrientation), ord(ASheet.PageLayout.Orientation))]);
|
||||
AStrings.Add(' Page width=%.1f mm', [ASheet.PageLayout.PageWidth]);
|
||||
AStrings.Add(' Page height=%.1f mm', [ASheet.PageLayout.PageHeight]);
|
||||
AStrings.Add(' Left margin=%.1f mm', [ASheet.PageLayout.LeftMargin]);
|
||||
AStrings.Add(' Right margin=%.1f mm', [ASheet.PageLayout.RightMargin]);
|
||||
AStrings.Add(' Top margin=%.1f mm', [ASheet.PageLayout.TopMargin]);
|
||||
AStrings.Add(' Bottom margin=%.1f mm', [ASheet.PageLayout.BottomMargin]);
|
||||
AStrings.Add(' Header distance=%.1f mm', [ASheet.PageLayout.HeaderMargin]);
|
||||
AStrings.Add(' Footer distance=%.1f mm', [ASheet.PageLayout.FooterMargin]);
|
||||
if poUseStartPageNumber in ASheet.PageLayout.Options then
|
||||
AStrings.Add(Format(' Start page number=%d', [ASheet.pageLayout.StartPageNumber]))
|
||||
AStrings.Add(' Start page number=%d', [ASheet.pageLayout.StartPageNumber])
|
||||
else
|
||||
AStrings.Add(' Start page number=automatic');
|
||||
AStrings.Add(Format(' Scaling factor=%d%%', [ASheet.PageLayout.ScalingFactor]));
|
||||
AStrings.Add(Format(' Copies=%d', [ASheet.PageLayout.Copies]));
|
||||
AStrings.Add(' Scaling factor=%d%%', [ASheet.PageLayout.ScalingFactor]);
|
||||
AStrings.Add(' Copies=%d', [ASheet.PageLayout.Copies]);
|
||||
if (ASheet.PageLayout.Options * [poDifferentOddEven, poDifferentFirst] <> []) then
|
||||
begin
|
||||
AStrings.Add(Format(' Header (first)=%s', [StringReplace(ASheet.PageLayout.Headers[0], LineEnding, '\n', [rfReplaceAll])]));
|
||||
AStrings.Add(Format(' Header (odd)=%s', [StringReplace(ASheet.PageLayout.Headers[1], LineEnding, '\n', [rfReplaceAll])]));
|
||||
AStrings.Add(Format(' Header (even)=%s', [StringReplace(ASheet.PageLayout.Headers[2], LineEnding, '\n', [rfReplaceAll])]));
|
||||
AStrings.Add(Format(' Footer (first)=%s', [StringReplace(ASheet.PageLayout.Footers[0], LineEnding, '\n', [rfReplaceAll])]));
|
||||
AStrings.Add(Format(' Footer (odd)=%s', [StringReplace(ASheet.PageLayout.Footers[1], LineEnding, '\n', [rfReplaceall])]));
|
||||
AStrings.Add(Format(' Footer (even)=%s', [StringReplace(ASheet.PageLayout.Footers[2], LineEnding, '\n', [rfReplaceAll])]));
|
||||
AStrings.Add(' Header (first)=%s', [StringReplace(ASheet.PageLayout.Headers[0], LineEnding, '\n', [rfReplaceAll])]);
|
||||
AStrings.Add(' Header (odd)=%s', [StringReplace(ASheet.PageLayout.Headers[1], LineEnding, '\n', [rfReplaceAll])]);
|
||||
AStrings.Add(' Header (even)=%s', [StringReplace(ASheet.PageLayout.Headers[2], LineEnding, '\n', [rfReplaceAll])]);
|
||||
AStrings.Add(' Footer (first)=%s', [StringReplace(ASheet.PageLayout.Footers[0], LineEnding, '\n', [rfReplaceAll])]);
|
||||
AStrings.Add(' Footer (odd)=%s', [StringReplace(ASheet.PageLayout.Footers[1], LineEnding, '\n', [rfReplaceall])]);
|
||||
AStrings.Add(' Footer (even)=%s', [StringReplace(ASheet.PageLayout.Footers[2], LineEnding, '\n', [rfReplaceAll])]);
|
||||
end else
|
||||
begin
|
||||
AStrings.Add(Format(' Header=%s', [StringReplace(ASheet.PageLayout.Headers[1], LineEnding, '\n', [rfReplaceAll])]));
|
||||
AStrings.Add(Format(' Footer=%s', [StringReplace(ASheet.PageLayout.Footers[1], LineEnding, '\n', [rfReplaceAll])]));
|
||||
AStrings.Add(' Header=%s', [StringReplace(ASheet.PageLayout.Headers[1], LineEnding, '\n', [rfReplaceAll])]);
|
||||
AStrings.Add(' Footer=%s', [StringReplace(ASheet.PageLayout.Footers[1], LineEnding, '\n', [rfReplaceAll])]);
|
||||
end;
|
||||
|
||||
if ASheet.PageLayout.HeaderImages[hfsLeft].Index > -1 then
|
||||
|
@ -79,8 +79,8 @@ type
|
||||
FHyperlinkCell: PCell; // Selected cell if it stores a hyperlink
|
||||
FOnClickHyperlink: TsHyperlinkClickEvent;
|
||||
function CalcAutoRowHeight(ARow: Integer): Integer;
|
||||
function CalcColWidth(AWidth: Single): Integer;
|
||||
function CalcRowHeight(AHeight: Single): Integer;
|
||||
function CalcColWidthFromSheet(AWidth: Single): Integer;
|
||||
function CalcRowHeightFromSheet(AHeight: Single): Integer;
|
||||
procedure ChangedCellHandler(ASender: TObject; ARow, ACol: Cardinal);
|
||||
procedure ChangedFontHandler(ASender: TObject; ARow, ACol: Cardinal);
|
||||
procedure FixNeighborCellBorders(ACell: PCell);
|
||||
@ -1098,20 +1098,17 @@ begin
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Converts the column width, given in "characters" of the default font, to pixels.
|
||||
All chars are assumed to have the same width defined by the width of the
|
||||
"0" character. Therefore, this calculation is only approximate.
|
||||
Converts the column width, given in units used by the worksheet, to pixels.
|
||||
|
||||
@param AWidth Width of a column given as "character count".
|
||||
@param AWidth Width of a column in units used by the worksheet
|
||||
@return Column width in pixels.
|
||||
-------------------------------------------------------------------------------}
|
||||
function TsCustomWorksheetGrid.CalcColWidth(AWidth: Single): Integer;
|
||||
function TsCustomWorksheetGrid.CalcColWidthFromSheet(AWidth: Single): Integer;
|
||||
var
|
||||
w0: Integer;
|
||||
w_pts: Double;
|
||||
begin
|
||||
Convert_sFont_to_Font(Workbook.GetFont(0), Canvas.Font);
|
||||
w0 := Canvas.TextWidth('0');
|
||||
Result := Round(AWidth * w0);
|
||||
w_pts := Workbook.ConvertUnits(AWidth, Workbook.Units, suPoints);
|
||||
Result := PtsToPx(w_pts, Screen.PixelsPerInch);
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
@ -1138,19 +1135,18 @@ begin
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Converts the row height (from a worksheet row record), given in lines, to
|
||||
pixels as needed by the grid
|
||||
Converts the row height (from a worksheet row record), given in units used by
|
||||
the sheet, to pixels as needed by the grid
|
||||
|
||||
@param AHeight Row height expressed as default font line count from the
|
||||
worksheet
|
||||
@param AHeight Row height expressed in units used by the worksheet.
|
||||
@result Row height in pixels.
|
||||
-------------------------------------------------------------------------------}
|
||||
function TsCustomWorksheetGrid.CalcRowHeight(AHeight: Single): Integer;
|
||||
function TsCustomWorksheetGrid.CalcRowHeightFromSheet(AHeight: Single): Integer;
|
||||
var
|
||||
h_pts: Single;
|
||||
begin
|
||||
h_pts := AHeight * (Workbook.GetFont(0).Size + ROW_HEIGHT_CORRECTION);
|
||||
Result := PtsToPX(h_pts, Screen.PixelsPerInch) + 4;
|
||||
h_pts := Workbook.ConvertUnits(AHeight, Workbook.Units, suPoints);;
|
||||
Result := PtsToPx(h_pts, Screen.PixelsPerInch); // + 4;
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
@ -1158,17 +1154,19 @@ end;
|
||||
worksheet.
|
||||
|
||||
@param AValue Column width in pixels
|
||||
@result Count of characters '0' in the worksheet's default font.
|
||||
@result Column width expressed in units defined by the workbook.
|
||||
-------------------------------------------------------------------------------}
|
||||
function TsCustomWorksheetGrid.CalcWorksheetColWidth(AValue: Integer): Single;
|
||||
var
|
||||
w_pts: Double;
|
||||
begin
|
||||
Result := 0;
|
||||
if Worksheet <> nil then
|
||||
begin
|
||||
// The grid's column width is in "pixels", the worksheet's column width is
|
||||
// in "characters".
|
||||
Convert_sFont_to_Font(Workbook.GetDefaultFont, Canvas.Font);
|
||||
Result := AValue / Canvas.TextWidth('0');
|
||||
// The grid's column width is in "pixels", the worksheet's column width
|
||||
// has the units defined by the workbook.
|
||||
w_pts := PxToPts(AValue, Screen.PixelsPerInch);
|
||||
Result := Workbook.ConvertUnits(w_pts, suPoints, Workbook.Units);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1177,7 +1175,7 @@ end;
|
||||
worksheet.
|
||||
|
||||
@param AValue Row height in pixels
|
||||
@result Row height expressed as default font line count.
|
||||
@result Row height expressed in units defined by the workbook.
|
||||
-------------------------------------------------------------------------------}
|
||||
function TsCustomWorksheetGrid.CalcWorksheetRowHeight(AValue: Integer): Single;
|
||||
var
|
||||
@ -1186,10 +1184,10 @@ begin
|
||||
Result := 0;
|
||||
if Worksheet <> nil then
|
||||
begin
|
||||
// The grid's row heights are in "pixels", the worksheet's row heights are
|
||||
// in "lines"
|
||||
h_pts := PxToPts(AValue - 4, Screen.PixelsPerInch); // height in points
|
||||
Result := h_pts / (Workbook.GetDefaultFontSize + ROW_HEIGHT_CORRECTION);
|
||||
// The grid's row heights are in "pixels", the worksheet's row height
|
||||
// has the units defined by the workbook.
|
||||
h_pts := PxToPts(AValue, Screen.PixelsPerInch);
|
||||
Result := Workbook.ConvertUnits(h_pts, suPoints, Workbook.Units);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -3471,11 +3469,11 @@ begin
|
||||
if IsColumn then
|
||||
begin
|
||||
w := CalcWorksheetColWidth(ColWidths[AIndex]);
|
||||
Worksheet.WriteColWidth(GetWorksheetCol(AIndex), w);
|
||||
Worksheet.WriteColWidth(GetWorksheetCol(AIndex), w, Workbook.Units);
|
||||
end else
|
||||
begin
|
||||
h := CalcWorksheetRowHeight(RowHeights[AIndex]);
|
||||
Worksheet.WriteRowHeight(GetWorksheetRow(AIndex), h);
|
||||
Worksheet.WriteRowHeight(GetWorksheetRow(AIndex), h, Workbook.Units);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -4681,9 +4679,9 @@ begin
|
||||
begin
|
||||
lCol := Worksheet.FindCol(i - FHeaderCount);
|
||||
if lCol <> nil then
|
||||
w := CalcColWidth(lCol^.Width)
|
||||
w := CalcColWidthFromSheet(lCol^.Width)
|
||||
else
|
||||
w := CalcColWidth(Worksheet.DefaultColWidth);
|
||||
w := CalcColWidthFromSheet(Worksheet.DefaultColWidth);
|
||||
end;
|
||||
ColWidths[i] := w;
|
||||
end;
|
||||
@ -4726,7 +4724,7 @@ begin
|
||||
begin
|
||||
lRow := Worksheet.FindRow(r - FHeaderCount);
|
||||
if (lRow <> nil) then
|
||||
h := CalcRowHeight(lRow^.Height)
|
||||
h := CalcRowHeightFromSheet(lRow^.Height)
|
||||
else
|
||||
h := CalcAutoRowHeight(r);
|
||||
end else
|
||||
|
@ -83,18 +83,33 @@ const
|
||||
{@@ Index of italic default font in workbook's font list - not used directly }
|
||||
ITALIC_FONTINDEX = 3;
|
||||
|
||||
{@@ Takes account of effect of cell margins on row height by adding this
|
||||
value to the nominal row height. Note that this is an empirical value
|
||||
and may be wrong. }
|
||||
ROW_HEIGHT_CORRECTION = 0.2;
|
||||
|
||||
{@@ Line ending character in cell texts with fixed line break. Using a
|
||||
unique value simplifies many things... }
|
||||
FPS_LINE_ENDING = #10;
|
||||
|
||||
|
||||
type
|
||||
{@@ Units for size dimensions }
|
||||
TsSizeUnits = (suChars, suLines, suMillimeters, suCentimeters, suPoints, suInches);
|
||||
|
||||
const
|
||||
{@@ Unit names }
|
||||
SizeUnitNames: array[TsSizeUnits] of string = (
|
||||
'chars', 'lines', 'mm', 'cm', 'pt', 'in');
|
||||
|
||||
{@@ Takes account of effect of cell margins on row height by adding this
|
||||
value to the nominal row height. Note that this is an empirical value
|
||||
and may be wrong. }
|
||||
ROW_HEIGHT_CORRECTION = 0.3;
|
||||
|
||||
{@@ Ratio of the width of the "0" character to the font size.
|
||||
Empirical value to match Excel and LibreOffice column withs.
|
||||
Needed because Excel defines colum width in terms of count of the "0"
|
||||
character. }
|
||||
ZERO_WIDTH_FACTOR = 351/640;
|
||||
|
||||
|
||||
type
|
||||
{@@ Tokens to identify the <b>elements in an expanded formula</b>.
|
||||
|
||||
NOTE: When adding or rearranging items
|
||||
|
@ -1530,6 +1530,7 @@ begin
|
||||
Result := true;
|
||||
end;
|
||||
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Excel's unit of row heights is "twips", i.e. 1/20 point.
|
||||
Converts Twips to points.
|
||||
@ -1682,8 +1683,10 @@ end;
|
||||
@return Value converted to millimeters
|
||||
-------------------------------------------------------------------------------}
|
||||
function PtsToMM(AValue: Double): Double;
|
||||
const
|
||||
PTS = 25.4 / 72.0;
|
||||
begin
|
||||
Result := AValue / 72 * 25.4;
|
||||
Result := AValue * PTS;
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
@ -2122,6 +2125,14 @@ end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
Initializes the fields of a TsImage record
|
||||
|
||||
@param ARow Index of the anchor row
|
||||
@param ACol Index of the anchor column
|
||||
@param AOffsetX Distance of the left image edge from the left edge of the
|
||||
anchor column. Measured in the units defined by the workbook.
|
||||
@param AOffsetY Distance of the top image edge from the top edge of the
|
||||
anchor row. Measured in the units defined by the workbook.
|
||||
@return TsImage record containing these values.
|
||||
-------------------------------------------------------------------------------}
|
||||
procedure InitImageRecord(out AValue: TsImage; ARow, ACol: Cardinal;
|
||||
AOffsetX, AOffsetY, AScaleX, AScaleY: Double);
|
||||
@ -2143,8 +2154,6 @@ begin
|
||||
with AImage do
|
||||
begin
|
||||
Index := -1;
|
||||
//ScaleX := 1.0;
|
||||
//ScaleY := 1.0;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -124,7 +124,7 @@ begin
|
||||
|
||||
// Comment in label cell
|
||||
col := 1;
|
||||
MyWorksheet.WriteUTF8Text(row, col, 'Cell with comment');
|
||||
MyWorksheet.WriteText(row, col, 'Cell with comment');
|
||||
Myworksheet.WriteComment(row, col, ACommentText);
|
||||
|
||||
// Comment in number cell
|
||||
|
@ -194,7 +194,7 @@ begin
|
||||
cctNumber:
|
||||
cell := MyWorksheet.WriteNumber(row+col, col, SourceCells[row].NumberValue);
|
||||
cctUTF8String:
|
||||
cell := Myworksheet.WriteUTF8Text(row+col, col, SourceCells[row].UTF8StringValue);
|
||||
cell := Myworksheet.WriteText(row+col, col, SourceCells[row].UTF8StringValue);
|
||||
cctEmpty:
|
||||
cell := MyWorksheet.WriteBlank(row+col, col);
|
||||
end;
|
||||
|
@ -265,7 +265,7 @@ begin
|
||||
if s[col+1] = 'x' then s[col+1] := ' ';
|
||||
end;
|
||||
if s[col+1] = 'x' then
|
||||
MyWorksheet.WriteUTF8Text(row, col, CELLTEXT)
|
||||
MyWorksheet.WriteText(row, col, CELLTEXT)
|
||||
else
|
||||
if s[col+1] = 'o' then
|
||||
MyWorksheet.WriteBlank(row, col);
|
||||
|
@ -112,7 +112,7 @@ begin
|
||||
for row := row1 to row2 do begin
|
||||
MyWorksheet.WriteBlank(row, 0);
|
||||
MyWorksheet.WriteNumber(row, 1, 1.0);
|
||||
MyWorksheet.WriteUTF8Text(row, 2, 'A');
|
||||
MyWorksheet.WriteText(row, 2, 'A');
|
||||
MyWorksheet.WriteFormula(Row, 3, formula);
|
||||
MyWorksheet.WriteRPNFormula(row, 4, CreateRPNFormula(
|
||||
RPNCellValue('A1', nil)));
|
||||
@ -135,7 +135,7 @@ begin
|
||||
for col := col1 to col2 do begin
|
||||
MyWorksheet.WriteBlank(0, col);
|
||||
MyWorksheet.WriteNumber(1, col, 1.0);
|
||||
MyWorksheet.WriteUTF8Text(2, col, 'A');
|
||||
MyWorksheet.WriteText(2, col, 'A');
|
||||
MyWorksheet.WriteFormula(3, col, formula);
|
||||
MyWorksheet.WriteRPNFormula(4, col, CreateRPNFormula(
|
||||
RPNCellValue('A1', nil)));
|
||||
@ -172,7 +172,7 @@ begin
|
||||
// to file.
|
||||
for row := 0 to palette.Count-1 do
|
||||
begin
|
||||
MyWorksheet.WriteUTF8Text(row, 0, s);
|
||||
MyWorksheet.WriteText(row, 0, s);
|
||||
MyWorksheet.WriteFontColor(row, 0, palette[row]);
|
||||
end;
|
||||
|
||||
@ -202,7 +202,7 @@ begin
|
||||
MyWorkbook := TsWorkbook.Create;
|
||||
try
|
||||
MyWorkSheet:= MyWorkBook.AddWorksheet(ERROR_SHEET);
|
||||
MyWorksheet.WriteUTF8Text(0, 0, s);
|
||||
MyWorksheet.WriteText(0, 0, s);
|
||||
TempFile:=NewTempFile;
|
||||
MyWorkBook.WriteToFile(TempFile, AFormat, true);
|
||||
ErrList.Text := MyWorkbook.ErrorMsg;
|
||||
@ -219,7 +219,7 @@ begin
|
||||
MyWorkbook := TsWorkbook.Create;
|
||||
try
|
||||
MyWorksheet := MyWorkbook.AddWorksheet(ERROR_SHEET);
|
||||
Myworksheet.WriteUTF8Text(0, 0, s);
|
||||
Myworksheet.WriteText(0, 0, s);
|
||||
TempFile := NewTempFile;
|
||||
Myworkbook.WriteToFile(TempFile, AFormat, true);
|
||||
ErrList.Text := MyWorkbook.ErrorMsg;
|
||||
|
@ -1186,7 +1186,7 @@ begin
|
||||
try
|
||||
MyWorkSheet:= MyWorkBook.AddWorksheet(RowHeightSheet);
|
||||
for Row := Low(SollRowHeights) to High(SollRowHeights) do
|
||||
MyWorksheet.WriteRowHeight(Row, SollRowHeights[Row]);
|
||||
MyWorksheet.WriteRowHeight(Row, SollRowHeights[Row], suLines);
|
||||
TempFile:=NewTempFile;
|
||||
MyWorkBook.WriteToFile(TempFile, AFormat, true);
|
||||
finally
|
||||
@ -1205,7 +1205,7 @@ begin
|
||||
fail('Error in test code. Failed to get named worksheet');
|
||||
for Row := Low(SollRowHeights) to High(SollRowHeights) do
|
||||
begin
|
||||
ActualRowHeight := MyWorksheet.GetRowHeight(Row);
|
||||
ActualRowHeight := MyWorksheet.GetRowHeight(Row, suLines);
|
||||
// Take care of rounding errors - due to missing details of calculation
|
||||
// they can be quite large...
|
||||
if abs(ActualRowHeight - SollRowHeights[Row]) > 1e-2 then
|
||||
|
@ -210,7 +210,7 @@ begin
|
||||
CheckEquals(expected, actual,
|
||||
'Test saved hyperlink target, cell '+CellNotation(MyWorksheet, row, col));
|
||||
|
||||
actual := MyWorksheet.ReadAsUTF8Text(cell);
|
||||
actual := MyWorksheet.ReadAsText(cell);
|
||||
if row = 0 then begin
|
||||
// An originally blank cell shows the hyperlink.Target.
|
||||
// But Worksheet.WriteHyperlink removes the "file:///" protocol
|
||||
|
@ -987,7 +987,7 @@ begin
|
||||
'0'..'9': MyWorksheet.WriteNumber(row, col, StrToInt(s[col+1]));
|
||||
'F' : MyWorksheet.WriteFormula(row, col, InsDelTestData[ATestIndex].Formula);
|
||||
'M' : begin
|
||||
MyWorksheet.WriteUTF8Text(row, col, 'M');
|
||||
MyWorksheet.WriteText(row, col, 'M');
|
||||
MyWorksheet.MergeCells(
|
||||
row,
|
||||
col,
|
||||
|
@ -130,10 +130,8 @@ const
|
||||
var
|
||||
MyWorksheet: TsWorksheet;
|
||||
MyWorkbook: TsWorkbook;
|
||||
i, ilast, n, row, col: Integer;
|
||||
i, ilast, row, col: Integer;
|
||||
TempFile: string; //write xls/xml to this file and read back from it
|
||||
L: TStringList;
|
||||
s: String;
|
||||
sortParams: TsSortParams;
|
||||
actualNumber: Double;
|
||||
actualString: String;
|
||||
@ -157,12 +155,12 @@ begin
|
||||
0: for i :=0 to High(SollSortNumbers) do // Numbers only
|
||||
MyWorksheet.WriteNumber(i, col, SollSortNumbers[i]);
|
||||
1: for i := 0 to High(SollSortStrings) do // Strings only
|
||||
Myworksheet.WriteUTF8Text(i, col, SollSortStrings[i]);
|
||||
Myworksheet.WriteText(i, col, SollSortStrings[i]);
|
||||
2: begin // Numbers and strings
|
||||
for i := 0 to High(SollSortNumbers) do
|
||||
MyWorkSheet.WriteNumber(i*2, col, SollSortNumbers[i]);
|
||||
for i := 0 to High(SollSortStrings) do
|
||||
MyWorksheet.WriteUTF8Text(i*2+1, col, SollSortStrings[i]);
|
||||
MyWorksheet.WriteText(i*2+1, col, SollSortStrings[i]);
|
||||
end;
|
||||
end
|
||||
end
|
||||
@ -171,12 +169,12 @@ begin
|
||||
0: for i := 0 to High(SollSortNumbers) do
|
||||
MyWorksheet.WriteNumber(row, i, SollSortNumbers[i]);
|
||||
1: for i := 0 to High(SollSortStrings) do
|
||||
MyWorksheet.WriteUTF8Text(row, i, SollSortStrings[i]);
|
||||
MyWorksheet.WriteText(row, i, SollSortStrings[i]);
|
||||
2: begin
|
||||
for i := 0 to High(SollSortNumbers) do
|
||||
myWorkSheet.WriteNumber(row, i*2, SollSortNumbers[i]);
|
||||
for i:=0 to High(SollSortStrings) do
|
||||
MyWorksheet.WriteUTF8Text(row, i*2+1, SollSortStrings[i]);
|
||||
MyWorksheet.WriteText(row, i*2+1, SollSortStrings[i]);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -257,7 +255,7 @@ begin
|
||||
end;
|
||||
1: begin
|
||||
cell := MyWorksheet.FindCell(row, col);
|
||||
actualString := MyWorksheet.ReadAsUTF8Text(cell);
|
||||
actualString := MyWorksheet.ReadAsText(cell);
|
||||
expectedString := char(ord('A') + i);
|
||||
CheckEquals(expectedstring, actualstring,
|
||||
'Sorted cell string mismatch, cell '+CellNotation(MyWorksheet, row, col));
|
||||
@ -279,7 +277,7 @@ begin
|
||||
CheckEquals(expectednumber, actualnumber,
|
||||
'Sorted cell number mismatch, cell '+CellNotation(MyWorksheet, row, col));
|
||||
end else begin
|
||||
actualstring := MyWorksheet.ReadAsUTF8Text(row, col);
|
||||
actualstring := MyWorksheet.ReadAsText(row, col);
|
||||
expectedstring := char(ord('A') + i - Length(SollSortNumbers));
|
||||
CheckEquals(expectedstring, actualstring,
|
||||
'Sorted cell string mismatch, cell '+CellNotation(MyWorksheet, row, col));
|
||||
@ -302,14 +300,9 @@ const
|
||||
var
|
||||
MyWorksheet: TsWorksheet;
|
||||
MyWorkbook: TsWorkbook;
|
||||
i, ilast, n, row, col: Integer;
|
||||
MyCell: PCell;
|
||||
i, ilast, row, col: Integer;
|
||||
TempFile: string; //write xls/xml to this file and read back from it
|
||||
L: TStringList;
|
||||
s: String;
|
||||
sortParams: TsSortParams;
|
||||
sortOptions: TsSortOptions;
|
||||
r1,r2,c1,c2: Cardinal;
|
||||
actualNumber: Double;
|
||||
actualString: String;
|
||||
expectedNumber: Double;
|
||||
@ -340,14 +333,14 @@ begin
|
||||
// We will sort primarily according to column A, and seconarily according
|
||||
// to B. The construction allows us to determine if the sorting is correct.
|
||||
for i:=0 to iLast do
|
||||
MyWorksheet.WriteUTF8Text(i, col, char(ord('A')+round(SollSortNumbers[i]) div 2));
|
||||
MyWorksheet.WriteText(i, col, char(ord('A')+round(SollSortNumbers[i]) div 2));
|
||||
end else
|
||||
begin
|
||||
// The same with the rows...
|
||||
for i:=0 to iLast do
|
||||
MyWorksheet.WriteNumber(row+1, i, SollSortNumbers[i]);
|
||||
for i:=0 to iLast do
|
||||
MyWorksheet.WriteUTF8Text(row, i, char(ord('A')+round(SollSortNumbers[i]) div 2));
|
||||
MyWorksheet.WriteText(row, i, char(ord('A')+round(SollSortNumbers[i]) div 2));
|
||||
end;
|
||||
|
||||
MyWorkBook.WriteToFile(TempFile, AFormat, true);
|
||||
@ -404,7 +397,7 @@ begin
|
||||
// Now read the string. It must be the character corresponding to the
|
||||
// half of the number
|
||||
col := 0;
|
||||
actualString := MyWorksheet.ReadAsUTF8Text(row, col);
|
||||
actualString := MyWorksheet.ReadAsText(row, col);
|
||||
expectedString := char(ord('A') + round(expectedNumber) div 2);
|
||||
CheckEquals(expectedstring, actualstring,
|
||||
'Sorted cell string mismatch, cell '+CellNotation(MyWorksheet, row, col));
|
||||
@ -421,7 +414,7 @@ begin
|
||||
'Sorted cell number mismatch, cell '+CellNotation(MyWorksheet, row, col));
|
||||
|
||||
row := 0;
|
||||
actualstring := MyWorksheet.ReadAsUTF8Text(row, col);
|
||||
actualstring := MyWorksheet.ReadAsText(row, col);
|
||||
expectedString := char(ord('A') + round(expectedNumber) div 2);
|
||||
CheckEquals(expectedstring, actualstring,
|
||||
'Sorted cell string mismatch, cell '+CellNotation(MyWorksheet, row, col));
|
||||
|
@ -111,7 +111,7 @@ begin
|
||||
end;
|
||||
for row := Length(SollNumbers) to worksheet.GetLastRowIndex do
|
||||
begin
|
||||
s := worksheet.ReadAsUTF8Text(row, col);
|
||||
s := worksheet.ReadAsText(row, col);
|
||||
CheckEquals(SollStrings[row - Length(SollNumbers)], s,
|
||||
'Test string value mismatch, cell '+CellNotation(workSheet, row, col));
|
||||
end;
|
||||
|
@ -488,7 +488,8 @@ begin
|
||||
begin
|
||||
lCol := FWorksheet.FindCol(j);
|
||||
if lCol <> nil then
|
||||
lColWidthStr := Format(' width="%.0fpt"', [lCol^.Width*FWorkbook.GetDefaultFontSize*0.5]);
|
||||
lColWidthStr := Format(' width="%.0fpt"',
|
||||
[FWorkbook.ConvertUnits(lCol^.Width, FWorkbook.Units, suPoints)]);
|
||||
end;
|
||||
|
||||
// Row height (to be considered in first column)
|
||||
@ -496,7 +497,8 @@ begin
|
||||
begin
|
||||
lRow := FWorksheet.FindRow(i);
|
||||
if lRow <> nil then
|
||||
lRowHeightStr := Format(' height="%.0fpt"', [lRow^.Height*FWorkbook.GetDefaultFontSize]);
|
||||
lRowHeightStr := Format(' height="%.0fpt"',
|
||||
[FWorkbook.ConvertUnits(lRow^.Height, FWorkbook.Units, suPoints)]);
|
||||
end;
|
||||
|
||||
// Font
|
||||
|
@ -363,10 +363,12 @@ begin
|
||||
end;
|
||||
|
||||
procedure TsSpreadBIFF2Reader.ReadColWidth(AStream: TStream);
|
||||
const
|
||||
EPS = 1E-3;
|
||||
var
|
||||
c, c1, c2: Cardinal;
|
||||
w: Word;
|
||||
col: TCol;
|
||||
colwidth: Single;
|
||||
begin
|
||||
// read column start and end index of column range
|
||||
c1 := AStream.ReadByte;
|
||||
@ -374,22 +376,25 @@ begin
|
||||
// read col width in 1/256 of the width of "0" character
|
||||
w := WordLEToN(AStream.ReadWord);
|
||||
// calculate width in units of "characters"
|
||||
col.Width := w / 256;
|
||||
colwidth := FWorkbook.ConvertUnits(w / 256, suChars, FWorkbook.Units);
|
||||
// assign width to columns, but only if different from default column width.
|
||||
if not SameValue(col.Width, FWorksheet.DefaultColWidth) then
|
||||
if not SameValue(colwidth, FWorksheet.DefaultColWidth, EPS) then
|
||||
for c := c1 to c2 do
|
||||
FWorksheet.WriteColInfo(c, col);
|
||||
FWorksheet.WriteColWidth(c, colwidth, FWorkbook.Units);
|
||||
end;
|
||||
|
||||
procedure TsSpreadBIFF2Reader.ReadDefRowHeight(AStream: TStream);
|
||||
var
|
||||
hw: word;
|
||||
h : Single;
|
||||
begin
|
||||
hw := WordLEToN(AStream.ReadWord);
|
||||
FWorksheet.DefaultRowHeight := FWorkbook.ConvertUnits(
|
||||
TwipsToPts(hw and $8000), suPoints, FWorkbook.Units);
|
||||
{
|
||||
h := TwipsToPts(hw and $8000) / FWorkbook.GetDefaultFontSize;
|
||||
if h > ROW_HEIGHT_CORRECTION then
|
||||
FWorksheet.DefaultRowHeight := h - ROW_HEIGHT_CORRECTION;
|
||||
}
|
||||
end;
|
||||
|
||||
procedure TsSpreadBIFF2Reader.ReadFONT(AStream: TStream);
|
||||
@ -789,12 +794,16 @@ begin
|
||||
begin
|
||||
lRow := FWorksheet.GetRow(WordLEToN(rowrec.RowIndex));
|
||||
// Row height is encoded into the 15 remaining bits in units "twips" (1/20 pt)
|
||||
lRow^.Height := FWorkbook.ConvertUnits(
|
||||
TwipsToPts(h and $7FFF), suPoints, FWorkbook.Units);
|
||||
{
|
||||
// We need it in "lines" units.
|
||||
lRow^.Height := TwipsToPts(h and $7FFF) / Workbook.GetFont(0).Size;
|
||||
if lRow^.Height > ROW_HEIGHT_CORRECTION then
|
||||
lRow^.Height := lRow^.Height - ROW_HEIGHT_CORRECTION
|
||||
else
|
||||
lRow^.Height := 0;
|
||||
}
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1227,7 +1236,7 @@ begin
|
||||
|
||||
{ Column width }
|
||||
{ calculate width to be in units of 1/256 of pixel width of character "0" }
|
||||
w := round(ACol^.Width * 256);
|
||||
w := round(FWorkbook.ConvertUnits(ACol^.Width, FWorkbook.Units, suChars)*256);
|
||||
rec.ColWidth := WordToLE(w);
|
||||
|
||||
{ Write out }
|
||||
@ -1780,7 +1789,8 @@ begin
|
||||
{ Default height for unused rows, in twips = 1/20 of a point
|
||||
Bits 0-14: Default height for unused rows, in twips
|
||||
Bit 15 = 1: Row height not changed manually }
|
||||
h := (AWorksheet.DefaultRowHeight + ROW_HEIGHT_CORRECTION) * FWorkbook.GetDefaultFontSize;
|
||||
h := FWorkbook.ConvertUnits(AWorksheet.DefaultRowHeight, FWorkbook.Units, suPoints);
|
||||
// h := (AWorksheet.DefaultRowHeight + ROW_HEIGHT_CORRECTION) * FWorkbook.GetDefaultFontSize;
|
||||
AStream.WriteWord(WordToLE(PtsToTwips(h)));
|
||||
end;
|
||||
|
||||
@ -1964,7 +1974,6 @@ var
|
||||
containsXF: Boolean;
|
||||
rowheight: Word;
|
||||
w: Word;
|
||||
h: Single;
|
||||
begin
|
||||
if (ARowIndex >= FLimitations.MaxRowCount) or (AFirstColIndex >= FLimitations.MaxColCount)
|
||||
or (ALastColIndex >= FLimitations.MaxColCount)
|
||||
@ -1988,14 +1997,17 @@ begin
|
||||
AStream.WriteWord(WordToLE(Word(ALastColIndex) + 1));
|
||||
|
||||
{ Row height (in twips, 1/20 point) and info on custom row height }
|
||||
h := Workbook.GetFont(0).Size;
|
||||
if (ARow = nil) or (ARow^.Height = ASheet.DefaultRowHeight) then
|
||||
rowheight := PtsToTwips((ASheet.DefaultRowHeight + ROW_HEIGHT_CORRECTION) * h)
|
||||
rowheight := PtsToTwips(FWorkbook.ConvertUnits(
|
||||
ASheet.DefaultRowHeight, FWorkbook.Units, suPoints))
|
||||
// rowheight := PtsToTwips((ASheet.DefaultRowHeight + ROW_HEIGHT_CORRECTION) * h)
|
||||
else
|
||||
if (ARow^.Height = 0) then
|
||||
rowheight := 0
|
||||
else
|
||||
rowheight := PtsToTwips((ARow^.Height + ROW_HEIGHT_CORRECTION) * h);
|
||||
rowheight := PtsToTwips(FWorkbook.ConvertUnits(
|
||||
ARow^.Height, FWorkbook.Units, suPoints));
|
||||
// rowheight := PtsToTwips((ARow^.Height + ROW_HEIGHT_CORRECTION) * h);
|
||||
w := rowheight and $7FFF;
|
||||
AStream.WriteWord(WordToLE(w));
|
||||
|
||||
|
@ -691,8 +691,8 @@ var
|
||||
begin
|
||||
// read width in 1/256 of the width of "0" character
|
||||
w := WordLEToN(AStream.ReadWord);
|
||||
// calculate width in units of "characters" and use it as DefaultColWidth
|
||||
ASheet.DefaultColWidth := w / 256;
|
||||
// calculate width in workbook units and use it as DefaultColWidth
|
||||
ASheet.DefaultColWidth := FWorkbook.ConvertUnits(w / 256, suChars, FWorkbook.Units);
|
||||
end;
|
||||
|
||||
{ Reads a STRING record which contains the result of string formula. }
|
||||
@ -1322,6 +1322,8 @@ procedure TsSpreadBIFF5Writer.WriteDefinedName(AStream: TStream;
|
||||
var
|
||||
sheetIdx: Integer;
|
||||
begin
|
||||
Unused(AIndexToREF);
|
||||
|
||||
sheetIdx := FWorkbook.GetWorksheetIndex(AWorksheet);
|
||||
|
||||
{ Token for tArea3dR }
|
||||
|
@ -1399,7 +1399,7 @@ const
|
||||
var
|
||||
c, c1, c2: Cardinal;
|
||||
w: Word;
|
||||
col: TCol;
|
||||
colwidth: Double;
|
||||
begin
|
||||
// read column start and end index of column range
|
||||
c1 := WordLEToN(AStream.ReadWord);
|
||||
@ -1407,11 +1407,11 @@ begin
|
||||
// read col width in 1/256 of the width of "0" character
|
||||
w := WordLEToN(AStream.ReadWord);
|
||||
// calculate width in units of "characters"
|
||||
col.Width := w / 256;
|
||||
colwidth := FWorkbook.ConvertUnits(w / 256, suChars, FWorkbook.Units);
|
||||
// assign width to columns, but only if different from default column width
|
||||
if not SameValue(col.Width, FWorksheet.DefaultColWidth, EPS) then
|
||||
if not SameValue(colwidth, FWorksheet.DefaultColWidth, EPS) then
|
||||
for c := c1 to c2 do
|
||||
FWorksheet.WriteColInfo(c, col);
|
||||
FWorksheet.WriteColWidth(c, colwidth, FWorkbook.Units);
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
@ -1511,9 +1511,12 @@ end;
|
||||
Reads the default column width
|
||||
-------------------------------------------------------------------------------}
|
||||
procedure TsSpreadBIFFReader.ReadDefColWidth(AStream: TStream);
|
||||
var
|
||||
w: Word;
|
||||
begin
|
||||
// The file contains the column width in characters
|
||||
FWorksheet.DefaultColWidth := WordLEToN(AStream.ReadWord);
|
||||
w := WordLEToN(AStream.ReadWord);
|
||||
FWorksheet.DefaultColWidth := FWorkbook.ConvertUnits(w, suChars, FWorkbook.Units);
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
@ -1523,16 +1526,14 @@ end;
|
||||
procedure TsSpreadBIFFReader.ReadDefRowHeight(AStream: TStream);
|
||||
var
|
||||
hw: Word;
|
||||
h: Single;
|
||||
begin
|
||||
// Options
|
||||
AStream.ReadWord;
|
||||
|
||||
// Height, in Twips (1/20 pt).
|
||||
hw := WordLEToN(AStream.ReadWord);
|
||||
h := TwipsToPts(hw) / FWorkbook.GetDefaultFontSize;
|
||||
if h > ROW_HEIGHT_CORRECTION then
|
||||
FWorksheet.DefaultRowHeight := h - ROW_HEIGHT_CORRECTION;
|
||||
FWorksheet.DefaultRowHeight := FWorkbook.ConvertUnits(
|
||||
TwipsToPts(hw), suPoints, FWorkbook.Units);
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
@ -2089,13 +2090,8 @@ begin
|
||||
if rowrec.Flags and $00000040 <> 0 then begin
|
||||
lRow := FWorksheet.GetRow(WordLEToN(rowrec.RowIndex));
|
||||
// row height is encoded into the 15 lower bits in units "twips" (1/20 pt)
|
||||
// we need it in "lines", i.e. we divide the points by the point size of the default font
|
||||
h := WordLEToN(rowrec.Height) and $7FFF;
|
||||
lRow^.Height := TwipsToPts(h) / FWorkbook.GetDefaultFontSize;
|
||||
if lRow^.Height > ROW_HEIGHT_CORRECTION then
|
||||
lRow^.Height := lRow^.Height - ROW_HEIGHT_CORRECTION
|
||||
else
|
||||
lRow^.Height := 0;
|
||||
lRow^.Height := FWorkbook.ConvertUnits(TwipsToPts(h), suPoints, FWorkbook.Units);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -3183,7 +3179,7 @@ begin
|
||||
rec.EndCol := WordToLE(ACol^.Col);
|
||||
|
||||
{ calculate width to be in units of 1/256 of pixel width of character "0" }
|
||||
w := round(ACol^.Width * 256);
|
||||
w := round(FWorkbook.ConvertUnits(ACol^.Width, FWorkbook.Units, suChars)*256);
|
||||
|
||||
rec.ColWidth := WordToLE(w);
|
||||
rec.XFIndex := WordToLE(15); // Index of XF record, not used
|
||||
@ -3309,13 +3305,16 @@ end;
|
||||
-------------------------------------------------------------------------------}
|
||||
procedure TsSpreadBIFFWriter.WriteDefaultColWidth(AStream: TStream;
|
||||
AWorksheet: TsWorksheet);
|
||||
var
|
||||
colwidth: Single;
|
||||
begin
|
||||
{ BIFF record header }
|
||||
WriteBIFFHeader(AStream, INT_EXCEL_ID_DEFCOLWIDTH, 2);
|
||||
|
||||
{ Column width in characters, using the width of the zero character
|
||||
from default font (first FONT record in the file). }
|
||||
AStream.WriteWord(round(FWorksheet.DefaultColWidth));
|
||||
colwidth := FWorkbook.ConvertUnits(AWorksheet.DefaultColWidth, FWorkbook.Units, suChars);
|
||||
AStream.WriteWord(round(colwidth));
|
||||
end;
|
||||
|
||||
{@@ ----------------------------------------------------------------------------
|
||||
@ -3327,7 +3326,7 @@ end;
|
||||
procedure TsSpreadBIFFWriter.WriteDefaultRowHeight(AStream: TStream;
|
||||
AWorksheet: TsWorksheet);
|
||||
var
|
||||
h: Single;
|
||||
h: Double;
|
||||
begin
|
||||
{ BIFF record header }
|
||||
WriteBIFFHeader(AStream, INT_EXCEL_ID_DEFROWHEIGHT, 4);
|
||||
@ -3340,7 +3339,7 @@ begin
|
||||
AStream.WriteWord(WordToLE($0001));
|
||||
|
||||
{ Default height for unused rows, in twips = 1/20 of a point }
|
||||
h := (AWorksheet.DefaultRowHeight + ROW_HEIGHT_CORRECTION) * FWorkbook.GetDefaultFontSize;
|
||||
h := FWorkbook.ConvertUnits(AWorksheet.DefaultRowHeight, FWorkbook.Units, suPoints);
|
||||
AStream.WriteWord(WordToLE(PtsToTwips(h)));
|
||||
end;
|
||||
|
||||
@ -4243,7 +4242,6 @@ var
|
||||
spaceabove, spacebelow: Boolean;
|
||||
colindex: Cardinal;
|
||||
rowheight: Word;
|
||||
h: Single;
|
||||
fmt: PsCellFormat;
|
||||
begin
|
||||
if (ARowIndex >= FLimitations.MaxRowCount) or
|
||||
@ -4287,14 +4285,13 @@ begin
|
||||
AStream.WriteWord(WordToLE(Word(ALastColIndex) + 1));
|
||||
|
||||
{ Row height (in twips, 1/20 point) and info on custom row height }
|
||||
h := Workbook.GetFont(0).Size; // Point size of default font
|
||||
if (ARow = nil) or (ARow^.Height = ASheet.DefaultRowHeight) then
|
||||
rowheight := PtsToTwips((ASheet.DefaultRowHeight + ROW_HEIGHT_CORRECTION) * h)
|
||||
rowheight := PtsToTwips(FWorkbook.ConvertUnits(ASheet.DefaultRowHeight, FWorkbook.Units, suPoints))
|
||||
else
|
||||
if (ARow^.Height = 0) then
|
||||
rowheight := 0
|
||||
else
|
||||
rowheight := PtsToTwips((ARow^.Height + ROW_HEIGHT_CORRECTION)*h);
|
||||
rowheight := PtsToTwips(FWorkbook.ConvertUnits(ARow^.Height, FWorkbook.Units, suPoints));
|
||||
w := rowheight and $7FFF;
|
||||
AStream.WriteWord(WordToLE(w));
|
||||
|
||||
|
@ -671,15 +671,9 @@ var
|
||||
cell: PCell;
|
||||
rowheightStr: String;
|
||||
colwidthStr: String;
|
||||
defFnt: TsFont;
|
||||
col: PCol;
|
||||
row: PRow;
|
||||
cw_fact, rh_fact: Double;
|
||||
begin
|
||||
defFnt := FWorkbook.GetDefaultFont;
|
||||
cw_fact := defFnt.Size * 0.5; // ColWidthFactor = Approx width of "0" character in pts
|
||||
rh_fact := defFnt.Size; // RowHeightFactor = Height of a single line
|
||||
|
||||
r1 := 0;
|
||||
c1 := 0;
|
||||
r2 := AWorksheet.GetLastRowIndex;
|
||||
@ -691,8 +685,8 @@ begin
|
||||
'ss:DefaultRowHeight="%.2f">' + LF,
|
||||
[
|
||||
AWorksheet.GetLastColIndex + 1, AWorksheet.GetLastRowIndex + 1,
|
||||
FWorksheet.DefaultColWidth * cw_fact,
|
||||
(FWorksheet.DefaultRowHeight + ROW_HEIGHT_CORRECTION) * rh_fact
|
||||
FWorkbook.ConvertUnits(AWorksheet.DefaultColWidth, FWorkbook.Units, suPoints),
|
||||
FWorkbook.ConvertUnits(AWorksheet.DefaultRowHeight, FWorkbook.Units, suPoints)
|
||||
],
|
||||
FPointSeparatorSettings
|
||||
));
|
||||
@ -700,11 +694,10 @@ begin
|
||||
for c := c1 to c2 do
|
||||
begin
|
||||
col := FWorksheet.FindCol(c);
|
||||
// column width in the worksheet is in multiples of the "0" character width.
|
||||
// In the xml file, it is needed in pts.
|
||||
// column width is needed in pts.
|
||||
if Assigned(col) then
|
||||
colwidthStr := Format(' ss:Width="%0.2f"',
|
||||
[col^.Width * cw_fact],
|
||||
[FWorkbook.ConvertUnits(col^.Width, FWorkbook.Units, suPoints)],
|
||||
FPointSeparatorSettings)
|
||||
else
|
||||
colwidthStr := '';
|
||||
@ -715,11 +708,10 @@ begin
|
||||
for r := r1 to r2 do
|
||||
begin
|
||||
row := FWorksheet.FindRow(r);
|
||||
// Row height in the worksheet is in multiples of the default font height
|
||||
// In the xml file, it is needed in pts.
|
||||
// Row height is needed in pts.
|
||||
if Assigned(row) then
|
||||
rowheightStr := Format(' ss:Height="%.2f"',
|
||||
[(row^.Height + ROW_HEIGHT_CORRECTION) * rh_fact],
|
||||
[FWorkbook.ConvertUnits(row^.Height, FWorkbook.Units, suPoints)],
|
||||
FPointSeparatorSettings
|
||||
)
|
||||
else
|
||||
|
@ -982,7 +982,7 @@ end;
|
||||
|
||||
procedure TsSpreadOOXMLReader.ReadCols(ANode: TDOMNode; AWorksheet: TsWorksheet);
|
||||
const
|
||||
EPS = 1e-2;
|
||||
EPS = 1e-3;
|
||||
var
|
||||
colNode: TDOMNode;
|
||||
col, col1, col2: Cardinal;
|
||||
@ -1008,7 +1008,7 @@ begin
|
||||
if (s <> '') and TryStrToFloat(s, w, FPointSeparatorSettings) then
|
||||
if not SameValue(w, AWorksheet.DefaultColWidth, EPS) then
|
||||
for col := col1 to col2 do
|
||||
AWorksheet.WriteColWidth(col, w);
|
||||
AWorksheet.WriteColWidth(col, w, suChars);
|
||||
end;
|
||||
end;
|
||||
colNode := colNode.NextSibling;
|
||||
@ -1719,7 +1719,6 @@ var
|
||||
s: String;
|
||||
ht: Single;
|
||||
r: Cardinal;
|
||||
row: PRow;
|
||||
begin
|
||||
if ANode = nil then
|
||||
exit;
|
||||
@ -1729,12 +1728,7 @@ begin
|
||||
r := StrToInt(s) - 1;
|
||||
s := GetAttrValue(ANode, 'ht');
|
||||
ht := StrToFloat(s, FPointSeparatorSettings); // seems to be in "Points"
|
||||
row := AWorksheet.GetRow(r);
|
||||
row^.Height := ht / FWorkbook.GetDefaultFontSize;
|
||||
if row^.Height > ROW_HEIGHT_CORRECTION then
|
||||
row^.Height := row^.Height - ROW_HEIGHT_CORRECTION
|
||||
else
|
||||
row^.Height := 0;
|
||||
AWorksheet.WriteRowHeight(r, ht, suPoints);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1808,7 +1802,7 @@ end;
|
||||
procedure TsSpreadOOXMLReader.ReadSheetFormatPr(ANode: TDOMNode;
|
||||
AWorksheet: TsWorksheet);
|
||||
var
|
||||
w, h: Single;
|
||||
w, h: Double;
|
||||
s: String;
|
||||
begin
|
||||
if ANode = nil then
|
||||
@ -1816,16 +1810,11 @@ begin
|
||||
|
||||
s := GetAttrValue(ANode, 'defaultColWidth'); // is in characters
|
||||
if (s <> '') and TryStrToFloat(s, w, FPointSeparatorSettings) then
|
||||
AWorksheet.DefaultColWidth := w;
|
||||
AWorksheet.DefaultColWidth := FWorkbook.ConvertUnits(w, suChars, FWorkbook.Units);
|
||||
|
||||
s := GetAttrValue(ANode, 'defaultRowHeight'); // in in points
|
||||
if (s <> '') and TryStrToFloat(s, h, FPointSeparatorSettings) then begin
|
||||
h := h / Workbook.GetDefaultFontSize;
|
||||
if h > ROW_HEIGHT_CORRECTION then begin
|
||||
h := h - ROW_HEIGHT_CORRECTION;
|
||||
AWorksheet.DefaultRowHeight := h;
|
||||
end;
|
||||
end;
|
||||
s := GetAttrValue(ANode, 'defaultRowHeight'); // is in points
|
||||
if (s <> '') and TryStrToFloat(s, h, FPointSeparatorSettings) then //begin
|
||||
AWorksheet.DefaultRowHeight := FWorkbook.ConvertUnits(h, suPoints, FWorkbook.Units);
|
||||
end;
|
||||
|
||||
procedure TsSpreadOOXMLReader.ReadSheetList(ANode: TDOMNode; AList: TStrings);
|
||||
@ -2474,22 +2463,17 @@ var
|
||||
c: Integer;
|
||||
w: Single;
|
||||
begin
|
||||
{
|
||||
if AWorksheet.Cols.Count = 0 then
|
||||
exit;
|
||||
}
|
||||
|
||||
AppendToStream(AStream,
|
||||
'<cols>');
|
||||
|
||||
for c:=0 to AWorksheet.GetLastColIndex do begin
|
||||
col := AWorksheet.FindCol(c);
|
||||
if col <> nil then
|
||||
w := col^.Width
|
||||
w := FWorkbook.ConvertUnits(col^.Width, FWorkbook.Units, suChars)
|
||||
else
|
||||
w := AWorksheet.DefaultColWidth;
|
||||
w := FWorkbook.ConvertUnits(AWorksheet.DefaultColWidth, FWorkbook.Units, suChars);
|
||||
AppendToStream(AStream, Format(
|
||||
'<col min="%d" max="%d" width="%g" customWidth="1" />',
|
||||
'<col min="%d" max="%d" width="%.2f" customWidth="1" />',
|
||||
[c+1, c+1, w], FPointSeparatorSettings)
|
||||
);
|
||||
end;
|
||||
@ -2910,10 +2894,7 @@ var
|
||||
styleCell: PCell;
|
||||
cell: PCell;
|
||||
rh: String;
|
||||
h0: Single;
|
||||
begin
|
||||
h0 := Workbook.GetDefaultFontSize; // Point size of default font
|
||||
|
||||
AppendToStream(AStream,
|
||||
'<sheetData>');
|
||||
|
||||
@ -2924,8 +2905,8 @@ begin
|
||||
for r := 0 to r2 do begin
|
||||
row := AWorksheet.FindRow(r);
|
||||
if row <> nil then
|
||||
rh := Format(' ht="%g" customHeight="1"', [
|
||||
(row^.Height + ROW_HEIGHT_CORRECTION)*h0],
|
||||
rh := Format(' ht="%.2f" customHeight="1"',
|
||||
[FWorkbook.ConvertUnits(row^.Height, FWorkbook.Units, suPoints)],
|
||||
FPointSeparatorSettings)
|
||||
else
|
||||
rh := '';
|
||||
@ -2981,14 +2962,15 @@ begin
|
||||
// If the row has a custom height add this value to the <row> specification
|
||||
row := AWorksheet.FindRow(r);
|
||||
if row <> nil then
|
||||
rh := Format(' ht="%g" customHeight="1"', [
|
||||
(row^.Height + ROW_HEIGHT_CORRECTION)*h0], FPointSeparatorSettings)
|
||||
rh := Format(' ht="%.2f" customHeight="1"',
|
||||
[FWorkbook.ConvertUnits(row^.Height, FWorkbook.Units, suPoints)],
|
||||
FPointSeparatorSettings)
|
||||
else
|
||||
rh := '';
|
||||
AppendToStream(AStream, Format(
|
||||
'<row r="%d" spans="%d:%d"%s>', [r+1, c1+1, c2+1, rh]));
|
||||
// Write cells belonging to this row.
|
||||
|
||||
// Write cells belonging to this row.
|
||||
{ // Strange: the RowEnumerator is very slow here... ?!
|
||||
for cell in AWorksheet.Cells.GetRowEnumerator(r) do
|
||||
WriteCellToStream(AStream, cell);
|
||||
@ -3013,10 +2995,11 @@ procedure TsSpreadOOXMLWriter.WriteSheetFormatPr(AStream: TStream;
|
||||
var
|
||||
w, h: Single;
|
||||
begin
|
||||
w := AWorksheet.DefaultColWidth;
|
||||
h := (AWorksheet.DefaultRowHeight + ROW_HEIGHT_CORRECTION) * Workbook.GetDefaultFontSize;
|
||||
// Excel has column width in characters, and row heights in pts.
|
||||
w := FWorkbook.ConvertUnits(AWorksheet.DefaultColWidth, FWorkbook.Units, suChars);
|
||||
h := FWorkbook.ConvertUnits(AWorksheet.DefaultRowHeight, FWorkbook.Units, suPoints);
|
||||
AppendToStream(AStream, Format(
|
||||
'<sheetFormatPr baseColWidth="%g" defaultRowHeight="%g" customHeight="true" />',
|
||||
'<sheetFormatPr baseColWidth="%.2f" defaultRowHeight="%.2f" customHeight="true" />',
|
||||
[w, h],
|
||||
FPointSeparatorSettings));
|
||||
end;
|
||||
|
Reference in New Issue
Block a user