From 5b946b751f439883d0df7b2f81fed59f77e8e499 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Fri, 18 Mar 2016 19:50:40 +0000 Subject: [PATCH] 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 --- .../db_import_export/db_export_import.lpi | 1 - .../examples/db_import_export/main.lfm | 2 +- .../examples/db_import_export/main.pas | 8 +- .../examples/other/demo_expression_parser.lpi | 1 - .../examples/other/demo_expression_parser.pas | 37 +-- .../examples/other/demo_recursive_calc.lpi | 1 - .../examples/other/demo_recursive_calc.pas | 20 +- .../examples/other/demo_sorting.lpi | 1 - .../examples/other/demo_sorting.pas | 46 ++-- .../examples/other/demo_write_colors.lpr | 4 +- .../examples/other/demo_write_formatting.pas | 46 ++-- .../examples/other/demo_write_formula.pas | 22 +- .../examples/other/demo_write_images.lpr | 9 +- .../examples/read_write/csvdemo/csvread.lpr | 8 +- .../examples/read_write/csvdemo/csvwrite.lpr | 106 ++++----- .../read_write/excel2demo/excel2read.lpr | 8 +- .../read_write/excel2demo/excel2write.lpr | 132 ++++++----- .../read_write/excel5demo/excel5read.lpr | 8 +- .../read_write/excel5demo/excel5write.lpr | 122 +++++----- .../read_write/excel8demo/excel8read.lpr | 6 + .../read_write/excelxmldemo/excelxmlwrite.lpr | 16 +- .../examples/read_write/htmldemo/htmlread.lpr | 4 +- .../read_write/htmldemo/htmlread_http.lpr | 6 +- .../read_write/htmldemo/htmlwrite.lpr | 80 +++---- .../read_write/hyperlinkdemo/collectlinks.lpr | 18 +- .../read_write/ooxmldemo/ooxmlread.lpr | 10 +- .../read_write/ooxmldemo/ooxmlwrite.lpr | 30 +-- .../read_write/opendocdemo/opendocread.lpr | 8 +- .../read_write/opendocdemo/opendocwrite.lpr | 81 ++++--- .../wikitabledemo/wikitableread.lpr | 8 +- .../wikitabledemo/wikitablewrite.lpr | 80 +++---- .../fpschartsource.lpi | 1 - .../mainform.lfm | 7 +- .../worksheetchartsource/mainform.lfm | 48 +++- .../worksheetchartsource/mainform.pas | 1 + .../examples/visual/fpsgrid/mainform.lfm | 2 - .../examples/visual/fpsgrid/mainform.pas | 5 +- .../examples/visual/wikitablemaker/wtmain.lfm | 2 +- .../examples/visual/wikitablemaker/wtmain.pas | 54 +++-- components/fpspreadsheet/fpsexport.pas | 10 +- components/fpspreadsheet/fpshtml.pas | 4 +- components/fpspreadsheet/fpsimages.pas | 17 +- components/fpspreadsheet/fpsnumformat.pas | 2 +- components/fpspreadsheet/fpsopendocument.pas | 125 ++++------ components/fpspreadsheet/fpspreadsheet.pas | 216 ++++++++++++------ .../fpspreadsheet/fpspreadsheetchart.pas | 17 +- .../fpspreadsheet/fpspreadsheetctrls.pas | 66 +++--- .../fpspreadsheet/fpspreadsheetgrid.pas | 64 +++--- components/fpspreadsheet/fpstypes.pas | 25 +- components/fpspreadsheet/fpsutils.pas | 15 +- .../fpspreadsheet/tests/commenttests.pas | 2 +- components/fpspreadsheet/tests/copytests.pas | 2 +- .../fpspreadsheet/tests/emptycelltests.pas | 2 +- components/fpspreadsheet/tests/errortests.pas | 10 +- .../fpspreadsheet/tests/formattests.pas | 4 +- .../fpspreadsheet/tests/hyperlinktests.pas | 2 +- .../fpspreadsheet/tests/insertdeletetests.pas | 2 +- .../fpspreadsheet/tests/sortingtests.pas | 31 +-- .../fpspreadsheet/tests/virtualmodetests.pas | 2 +- components/fpspreadsheet/wikitable.pas | 6 +- components/fpspreadsheet/xlsbiff2.pas | 34 ++- components/fpspreadsheet/xlsbiff5.pas | 6 +- components/fpspreadsheet/xlscommon.pas | 43 ++-- components/fpspreadsheet/xlsxml.pas | 20 +- components/fpspreadsheet/xlsxooxml.pas | 59 ++--- 65 files changed, 990 insertions(+), 845 deletions(-) diff --git a/components/fpspreadsheet/examples/db_import_export/db_export_import.lpi b/components/fpspreadsheet/examples/db_import_export/db_export_import.lpi index 9b90a89bd..42b4a8748 100644 --- a/components/fpspreadsheet/examples/db_import_export/db_export_import.lpi +++ b/components/fpspreadsheet/examples/db_import_export/db_export_import.lpi @@ -46,7 +46,6 @@ - diff --git a/components/fpspreadsheet/examples/db_import_export/main.lfm b/components/fpspreadsheet/examples/db_import_export/main.lfm index a5f4a10dd..f899d966e 100644 --- a/components/fpspreadsheet/examples/db_import_export/main.lfm +++ b/components/fpspreadsheet/examples/db_import_export/main.lfm @@ -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 diff --git a/components/fpspreadsheet/examples/db_import_export/main.pas b/components/fpspreadsheet/examples/db_import_export/main.pas index 0c2bbbaed..a0255fb02 100644 --- a/components/fpspreadsheet/examples/db_import_export/main.pas +++ b/components/fpspreadsheet/examples/db_import_export/main.pas @@ -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; diff --git a/components/fpspreadsheet/examples/other/demo_expression_parser.lpi b/components/fpspreadsheet/examples/other/demo_expression_parser.lpi index 23a7af816..95621c6d0 100644 --- a/components/fpspreadsheet/examples/other/demo_expression_parser.lpi +++ b/components/fpspreadsheet/examples/other/demo_expression_parser.lpi @@ -40,7 +40,6 @@ - diff --git a/components/fpspreadsheet/examples/other/demo_expression_parser.pas b/components/fpspreadsheet/examples/other/demo_expression_parser.pas index abe1e06da..7d23ae617 100644 --- a/components/fpspreadsheet/examples/other/demo_expression_parser.pas +++ b/components/fpspreadsheet/examples/other/demo_expression_parser.pas @@ -25,25 +25,28 @@ begin try worksheet := workbook.AddWorksheet('Test'); - worksheet.WriteNumber(0, 0, 1); // A1 - worksheet.WriteNumber(0, 1, 2.5); // B1 + 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 diff --git a/components/fpspreadsheet/examples/other/demo_recursive_calc.lpi b/components/fpspreadsheet/examples/other/demo_recursive_calc.lpi index 100aa9695..7d51ad825 100644 --- a/components/fpspreadsheet/examples/other/demo_recursive_calc.lpi +++ b/components/fpspreadsheet/examples/other/demo_recursive_calc.lpi @@ -40,7 +40,6 @@ - diff --git a/components/fpspreadsheet/examples/other/demo_recursive_calc.pas b/components/fpspreadsheet/examples/other/demo_recursive_calc.pas index f53f2aa20..3705d5fef 100644 --- a/components/fpspreadsheet/examples/other/demo_recursive_calc.pas +++ b/components/fpspreadsheet/examples/other/demo_recursive_calc.pas @@ -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; diff --git a/components/fpspreadsheet/examples/other/demo_sorting.lpi b/components/fpspreadsheet/examples/other/demo_sorting.lpi index 62cc1b40b..d81f66b6c 100644 --- a/components/fpspreadsheet/examples/other/demo_sorting.lpi +++ b/components/fpspreadsheet/examples/other/demo_sorting.lpi @@ -40,7 +40,6 @@ - diff --git a/components/fpspreadsheet/examples/other/demo_sorting.pas b/components/fpspreadsheet/examples/other/demo_sorting.pas index bcfaeabd4..e7d857cf9 100644 --- a/components/fpspreadsheet/examples/other/demo_sorting.pas +++ b/components/fpspreadsheet/examples/other/demo_sorting.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. diff --git a/components/fpspreadsheet/examples/other/demo_write_colors.lpr b/components/fpspreadsheet/examples/other/demo_write_colors.lpr index 178c185db..f00cb5bf9 100644 --- a/components/fpspreadsheet/examples/other/demo_write_colors.lpr +++ b/components/fpspreadsheet/examples/other/demo_write_colors.lpr @@ -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); diff --git a/components/fpspreadsheet/examples/other/demo_write_formatting.pas b/components/fpspreadsheet/examples/other/demo_write_formatting.pas index dc2b2da7e..de4f2e2a0 100644 --- a/components/fpspreadsheet/examples/other/demo_write_formatting.pas +++ b/components/fpspreadsheet/examples/other/demo_write_formatting.pas @@ -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; diff --git a/components/fpspreadsheet/examples/other/demo_write_formula.pas b/components/fpspreadsheet/examples/other/demo_write_formula.pas index 582efc788..f1c0bfa2c 100644 --- a/components/fpspreadsheet/examples/other/demo_write_formula.pas +++ b/components/fpspreadsheet/examples/other/demo_write_formula.pas @@ -29,17 +29,17 @@ 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 - MyWorksheet.WriteNumber(2, 4, 200); // E3 - Myworksheet.WriteNumber(3, 4, 300); // E4 - MyWorksheet.WriteNumber(4, 4, 250); // E5 + MyWorksheet.WriteNumber(0, 4, -3.14); // E1 + MyWorksheet.WriteNumber(1, 4, 100); // E2 + MyWorksheet.WriteNumber(2, 4, 200); // E3 + Myworksheet.WriteNumber(3, 4, 300); // E4 + 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); diff --git a/components/fpspreadsheet/examples/other/demo_write_images.lpr b/components/fpspreadsheet/examples/other/demo_write_images.lpr index 6d51df7e2..82f05fc30 100644 --- a/components/fpspreadsheet/examples/other/demo_write_images.lpr +++ b/components/fpspreadsheet/examples/other/demo_write_images.lpr @@ -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 diff --git a/components/fpspreadsheet/examples/read_write/csvdemo/csvread.lpr b/components/fpspreadsheet/examples/read_write/csvdemo/csvread.lpr index 950e5cda4..3fbacf6e4 100644 --- a/components/fpspreadsheet/examples/read_write/csvdemo/csvread.lpr +++ b/components/fpspreadsheet/examples/read_write/csvdemo/csvread.lpr @@ -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. diff --git a/components/fpspreadsheet/examples/read_write/csvdemo/csvwrite.lpr b/components/fpspreadsheet/examples/read_write/csvdemo/csvwrite.lpr index 15eb56968..a2a0a5fbd 100644 --- a/components/fpspreadsheet/examples/read_write/csvdemo/csvwrite.lpr +++ b/components/fpspreadsheet/examples/read_write/csvdemo/csvwrite.lpr @@ -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); diff --git a/components/fpspreadsheet/examples/read_write/excel2demo/excel2read.lpr b/components/fpspreadsheet/examples/read_write/excel2demo/excel2read.lpr index 9e292d599..644dbd2f6 100644 --- a/components/fpspreadsheet/examples/read_write/excel2demo/excel2read.lpr +++ b/components/fpspreadsheet/examples/read_write/excel2demo/excel2read.lpr @@ -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. diff --git a/components/fpspreadsheet/examples/read_write/excel2demo/excel2write.lpr b/components/fpspreadsheet/examples/read_write/excel2demo/excel2write.lpr index 9214e6395..e7fe4fbe1 100644 --- a/components/fpspreadsheet/examples/read_write/excel2demo/excel2write.lpr +++ b/components/fpspreadsheet/examples/read_write/excel2demo/excel2write.lpr @@ -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); diff --git a/components/fpspreadsheet/examples/read_write/excel5demo/excel5read.lpr b/components/fpspreadsheet/examples/read_write/excel5demo/excel5read.lpr index 6a8c30635..d9fc15711 100644 --- a/components/fpspreadsheet/examples/read_write/excel5demo/excel5read.lpr +++ b/components/fpspreadsheet/examples/read_write/excel5demo/excel5read.lpr @@ -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. diff --git a/components/fpspreadsheet/examples/read_write/excel5demo/excel5write.lpr b/components/fpspreadsheet/examples/read_write/excel5demo/excel5write.lpr index 646c16c06..dbc61e581 100644 --- a/components/fpspreadsheet/examples/read_write/excel5demo/excel5write.lpr +++ b/components/fpspreadsheet/examples/read_write/excel5demo/excel5write.lpr @@ -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; diff --git a/components/fpspreadsheet/examples/read_write/excel8demo/excel8read.lpr b/components/fpspreadsheet/examples/read_write/excel8demo/excel8read.lpr index 66df1d5df..afc537f31 100644 --- a/components/fpspreadsheet/examples/read_write/excel8demo/excel8read.lpr +++ b/components/fpspreadsheet/examples/read_write/excel8demo/excel8read.lpr @@ -63,5 +63,11 @@ begin // Finalization MyWorkbook.Free; end; + + {$IFDEF WINDOWS} + WriteLn; + WriteLn('Press ENTER to quit...'); + ReadLn; + {$ENDIF} end. diff --git a/components/fpspreadsheet/examples/read_write/excelxmldemo/excelxmlwrite.lpr b/components/fpspreadsheet/examples/read_write/excelxmldemo/excelxmlwrite.lpr index 651c68b41..94b39ac58 100644 --- a/components/fpspreadsheet/examples/read_write/excelxmldemo/excelxmlwrite.lpr +++ b/components/fpspreadsheet/examples/read_write/excelxmldemo/excelxmlwrite.lpr @@ -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); diff --git a/components/fpspreadsheet/examples/read_write/htmldemo/htmlread.lpr b/components/fpspreadsheet/examples/read_write/htmldemo/htmlread.lpr index 4387d8e3e..cf5584808 100644 --- a/components/fpspreadsheet/examples/read_write/htmldemo/htmlread.lpr +++ b/components/fpspreadsheet/examples/read_write/htmldemo/htmlread.lpr @@ -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. diff --git a/components/fpspreadsheet/examples/read_write/htmldemo/htmlread_http.lpr b/components/fpspreadsheet/examples/read_write/htmldemo/htmlread_http.lpr index 6406d943b..bc9bfa82d 100644 --- a/components/fpspreadsheet/examples/read_write/htmldemo/htmlread_http.lpr +++ b/components/fpspreadsheet/examples/read_write/htmldemo/htmlread_http.lpr @@ -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. diff --git a/components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpr b/components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpr index 0dbddc4f0..e15c05747 100644 --- a/components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpr +++ b/components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpr @@ -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,
indeed'); + MyWorksheet.WriteText(row, 2, 'A very, very, very, very long text,
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); diff --git a/components/fpspreadsheet/examples/read_write/hyperlinkdemo/collectlinks.lpr b/components/fpspreadsheet/examples/read_write/hyperlinkdemo/collectlinks.lpr index 7902b1cf1..c67ee50dd 100644 --- a/components/fpspreadsheet/examples/read_write/hyperlinkdemo/collectlinks.lpr +++ b/components/fpspreadsheet/examples/read_write/hyperlinkdemo/collectlinks.lpr @@ -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 diff --git a/components/fpspreadsheet/examples/read_write/ooxmldemo/ooxmlread.lpr b/components/fpspreadsheet/examples/read_write/ooxmldemo/ooxmlread.lpr index 4865fe2d2..50d0beb62 100644 --- a/components/fpspreadsheet/examples/read_write/ooxmldemo/ooxmlread.lpr +++ b/components/fpspreadsheet/examples/read_write/ooxmldemo/ooxmlread.lpr @@ -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. diff --git a/components/fpspreadsheet/examples/read_write/ooxmldemo/ooxmlwrite.lpr b/components/fpspreadsheet/examples/read_write/ooxmldemo/ooxmlwrite.lpr index ee2914c39..ddf872f2f 100644 --- a/components/fpspreadsheet/examples/read_write/ooxmldemo/ooxmlwrite.lpr +++ b/components/fpspreadsheet/examples/read_write/ooxmldemo/ooxmlwrite.lpr @@ -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); diff --git a/components/fpspreadsheet/examples/read_write/opendocdemo/opendocread.lpr b/components/fpspreadsheet/examples/read_write/opendocdemo/opendocread.lpr index 2f6badcb9..5e5f4dda1 100644 --- a/components/fpspreadsheet/examples/read_write/opendocdemo/opendocread.lpr +++ b/components/fpspreadsheet/examples/read_write/opendocdemo/opendocread.lpr @@ -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. diff --git a/components/fpspreadsheet/examples/read_write/opendocdemo/opendocwrite.lpr b/components/fpspreadsheet/examples/read_write/opendocdemo/opendocwrite.lpr index 9102c082f..da1e9da80 100644 --- a/components/fpspreadsheet/examples/read_write/opendocdemo/opendocwrite.lpr +++ b/components/fpspreadsheet/examples/read_write/opendocdemo/opendocwrite.lpr @@ -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. diff --git a/components/fpspreadsheet/examples/read_write/wikitabledemo/wikitableread.lpr b/components/fpspreadsheet/examples/read_write/wikitabledemo/wikitableread.lpr index 525a24b22..4b15b1264 100644 --- a/components/fpspreadsheet/examples/read_write/wikitabledemo/wikitableread.lpr +++ b/components/fpspreadsheet/examples/read_write/wikitabledemo/wikitableread.lpr @@ -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. diff --git a/components/fpspreadsheet/examples/read_write/wikitabledemo/wikitablewrite.lpr b/components/fpspreadsheet/examples/read_write/wikitabledemo/wikitablewrite.lpr index ce3940f06..face5acc1 100644 --- a/components/fpspreadsheet/examples/read_write/wikitabledemo/wikitablewrite.lpr +++ b/components/fpspreadsheet/examples/read_write/wikitabledemo/wikitablewrite.lpr @@ -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,
indeed'); + MyWorksheet.WriteText(row, 2, 'A very, very, very, very long text,
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); diff --git a/components/fpspreadsheet/examples/visual/fpschart/workbookchartsource-deprecated/fpschartsource.lpi b/components/fpspreadsheet/examples/visual/fpschart/workbookchartsource-deprecated/fpschartsource.lpi index 52a0a9779..8e5f3323b 100644 --- a/components/fpspreadsheet/examples/visual/fpschart/workbookchartsource-deprecated/fpschartsource.lpi +++ b/components/fpspreadsheet/examples/visual/fpschart/workbookchartsource-deprecated/fpschartsource.lpi @@ -73,7 +73,6 @@ -
diff --git a/components/fpspreadsheet/examples/visual/fpschart/workbookchartsource-deprecated/mainform.lfm b/components/fpspreadsheet/examples/visual/fpschart/workbookchartsource-deprecated/mainform.lfm index 43faf2de5..01319f44a 100644 --- a/components/fpspreadsheet/examples/visual/fpschart/workbookchartsource-deprecated/mainform.lfm +++ b/components/fpspreadsheet/examples/visual/fpschart/workbookchartsource-deprecated/mainform.lfm @@ -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 diff --git a/components/fpspreadsheet/examples/visual/fpschart/worksheetchartsource/mainform.lfm b/components/fpspreadsheet/examples/visual/fpschart/worksheetchartsource/mainform.lfm index f75c2e3ab..560f98636 100644 --- a/components/fpspreadsheet/examples/visual/fpschart/worksheetchartsource/mainform.lfm +++ b/components/fpspreadsheet/examples/visual/fpschart/worksheetchartsource/mainform.lfm @@ -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 diff --git a/components/fpspreadsheet/examples/visual/fpschart/worksheetchartsource/mainform.pas b/components/fpspreadsheet/examples/visual/fpschart/worksheetchartsource/mainform.pas index 684d79c15..64882e44d 100644 --- a/components/fpspreadsheet/examples/visual/fpschart/worksheetchartsource/mainform.pas +++ b/components/fpspreadsheet/examples/visual/fpschart/worksheetchartsource/mainform.pas @@ -15,6 +15,7 @@ type { TFPSChartForm } TFPSChartForm = class(TForm) + Bevel1: TBevel; btnCreateGraphic: TButton; btnLoadSpreadsheet: TButton; editSourceFile: TFileNameEdit; diff --git a/components/fpspreadsheet/examples/visual/fpsgrid/mainform.lfm b/components/fpspreadsheet/examples/visual/fpsgrid/mainform.lfm index 20f24c11a..017b087d6 100644 --- a/components/fpspreadsheet/examples/visual/fpsgrid/mainform.lfm +++ b/components/fpspreadsheet/examples/visual/fpsgrid/mainform.lfm @@ -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 diff --git a/components/fpspreadsheet/examples/visual/fpsgrid/mainform.pas b/components/fpspreadsheet/examples/visual/fpsgrid/mainform.pas index e9e961da7..4cb44063c 100644 --- a/components/fpspreadsheet/examples/visual/fpsgrid/mainform.pas +++ b/components/fpspreadsheet/examples/visual/fpsgrid/mainform.pas @@ -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 } diff --git a/components/fpspreadsheet/examples/visual/wikitablemaker/wtmain.lfm b/components/fpspreadsheet/examples/visual/wikitablemaker/wtmain.lfm index fecd89c90..b85c963c8 100644 --- a/components/fpspreadsheet/examples/visual/wikitablemaker/wtmain.lfm +++ b/components/fpspreadsheet/examples/visual/wikitablemaker/wtmain.lfm @@ -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 diff --git a/components/fpspreadsheet/examples/visual/wikitablemaker/wtmain.pas b/components/fpspreadsheet/examples/visual/wikitablemaker/wtmain.pas index 0399d6d86..90ef9ad30 100644 --- a/components/fpspreadsheet/examples/visual/wikitablemaker/wtmain.pas +++ b/components/fpspreadsheet/examples/visual/wikitablemaker/wtmain.pas @@ -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 diff --git a/components/fpspreadsheet/fpsexport.pas b/components/fpspreadsheet/fpsexport.pas index 64ccb3b79..bc16ff8e1 100644 --- a/components/fpspreadsheet/fpsexport.pas +++ b/components/fpspreadsheet/fpsexport.pas @@ -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; diff --git a/components/fpspreadsheet/fpshtml.pas b/components/fpspreadsheet/fpshtml.pas index de9cf31a0..a386cc059 100644 --- a/components/fpspreadsheet/fpshtml.pas +++ b/components/fpspreadsheet/fpshtml.pas @@ -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; diff --git a/components/fpspreadsheet/fpsimages.pas b/components/fpspreadsheet/fpsimages.pas index db11db01f..99c5ecf47 100644 --- a/components/fpspreadsheet/fpsimages.pas +++ b/components/fpspreadsheet/fpsimages.pas @@ -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; diff --git a/components/fpspreadsheet/fpsnumformat.pas b/components/fpspreadsheet/fpsnumformat.pas index f2813612c..0d5892720 100644 --- a/components/fpspreadsheet/fpsnumformat.pas +++ b/components/fpspreadsheet/fpsnumformat.pas @@ -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 diff --git a/components/fpspreadsheet/fpsopendocument.pas b/components/fpspreadsheet/fpsopendocument.pas index 8dda6aede..4ff619fff 100755 --- a/components/fpspreadsheet/fpsopendocument.pas +++ b/components/fpspreadsheet/fpsopendocument.pas @@ -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,22 +344,22 @@ type TColumnStyleData = class public Name: String; - ColWidth: Double; // in mm + ColWidth: Double; // in workbook units end; { Column data items stored in the ColumnList } TColumnData = class public Col: Integer; - ColStyleIndex: integer; // index into FColumnStyleList of reader - DefaultCellStyleIndex: Integer; // Index of default cell style in FCellStyleList of reader + ColStyleIndex: integer; // index into FColumnStyleList of reader + DefaultCellStyleIndex: Integer; // Index of default cell style in FCellStyleList of reader end; { Row style items stored in RowStyleList of the reader } 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( '', - [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( - ''); @@ -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( '' + // e.g. '' + '%s' + '' + '', [ 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( '', [styleName])); diff --git a/components/fpspreadsheet/fpspreadsheet.pas b/components/fpspreadsheet/fpspreadsheet.pas index 47d299c05..65ff85bb9 100755 --- a/components/fpspreadsheet/fpspreadsheet.pas +++ b/components/fpspreadsheet/fpspreadsheet.pas @@ -54,13 +54,13 @@ 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 Row The index of the row (beginning with 0) + @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 @@ -6326,10 +6327,11 @@ end; Returns the width of the given column. If there is no column record then 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 ACol Index of the column considered + @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 ARow Index of the row considered + @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 diff --git a/components/fpspreadsheet/fpspreadsheetchart.pas b/components/fpspreadsheet/fpspreadsheetchart.pas index 95e5034e2..7723fedf9 100644 --- a/components/fpspreadsheet/fpspreadsheetchart.pas +++ b/components/fpspreadsheet/fpspreadsheetchart.pas @@ -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; diff --git a/components/fpspreadsheet/fpspreadsheetctrls.pas b/components/fpspreadsheet/fpspreadsheetctrls.pas index b1b2a2e40..f35b0d85b 100644 --- a/components/fpspreadsheet/fpspreadsheetctrls.pas +++ b/components/fpspreadsheet/fpspreadsheetctrls.pas @@ -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(' Start page number=automatic'); + 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 diff --git a/components/fpspreadsheet/fpspreadsheetgrid.pas b/components/fpspreadsheet/fpspreadsheetgrid.pas index b6a657bdb..89d4fa523 100644 --- a/components/fpspreadsheet/fpspreadsheetgrid.pas +++ b/components/fpspreadsheet/fpspreadsheetgrid.pas @@ -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 diff --git a/components/fpspreadsheet/fpstypes.pas b/components/fpspreadsheet/fpstypes.pas index 7e1fabee1..d51ee3f86 100644 --- a/components/fpspreadsheet/fpstypes.pas +++ b/components/fpspreadsheet/fpstypes.pas @@ -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 elements in an expanded formula. NOTE: When adding or rearranging items diff --git a/components/fpspreadsheet/fpsutils.pas b/components/fpspreadsheet/fpsutils.pas index 333766dc6..c93bc0b87 100644 --- a/components/fpspreadsheet/fpsutils.pas +++ b/components/fpspreadsheet/fpsutils.pas @@ -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; diff --git a/components/fpspreadsheet/tests/commenttests.pas b/components/fpspreadsheet/tests/commenttests.pas index 2f8354dbd..88f4661a9 100644 --- a/components/fpspreadsheet/tests/commenttests.pas +++ b/components/fpspreadsheet/tests/commenttests.pas @@ -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 diff --git a/components/fpspreadsheet/tests/copytests.pas b/components/fpspreadsheet/tests/copytests.pas index 72584184b..93fc037d6 100644 --- a/components/fpspreadsheet/tests/copytests.pas +++ b/components/fpspreadsheet/tests/copytests.pas @@ -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; diff --git a/components/fpspreadsheet/tests/emptycelltests.pas b/components/fpspreadsheet/tests/emptycelltests.pas index 95fa31509..827eba0d8 100644 --- a/components/fpspreadsheet/tests/emptycelltests.pas +++ b/components/fpspreadsheet/tests/emptycelltests.pas @@ -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); diff --git a/components/fpspreadsheet/tests/errortests.pas b/components/fpspreadsheet/tests/errortests.pas index 204adf293..73e3407bf 100644 --- a/components/fpspreadsheet/tests/errortests.pas +++ b/components/fpspreadsheet/tests/errortests.pas @@ -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; diff --git a/components/fpspreadsheet/tests/formattests.pas b/components/fpspreadsheet/tests/formattests.pas index ee9a81b23..536846edb 100644 --- a/components/fpspreadsheet/tests/formattests.pas +++ b/components/fpspreadsheet/tests/formattests.pas @@ -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 diff --git a/components/fpspreadsheet/tests/hyperlinktests.pas b/components/fpspreadsheet/tests/hyperlinktests.pas index 75f6095b3..5baf2e450 100644 --- a/components/fpspreadsheet/tests/hyperlinktests.pas +++ b/components/fpspreadsheet/tests/hyperlinktests.pas @@ -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 diff --git a/components/fpspreadsheet/tests/insertdeletetests.pas b/components/fpspreadsheet/tests/insertdeletetests.pas index b3600f8b7..d16c61cdd 100644 --- a/components/fpspreadsheet/tests/insertdeletetests.pas +++ b/components/fpspreadsheet/tests/insertdeletetests.pas @@ -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, diff --git a/components/fpspreadsheet/tests/sortingtests.pas b/components/fpspreadsheet/tests/sortingtests.pas index 8636ed679..f53af4e61 100644 --- a/components/fpspreadsheet/tests/sortingtests.pas +++ b/components/fpspreadsheet/tests/sortingtests.pas @@ -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)); diff --git a/components/fpspreadsheet/tests/virtualmodetests.pas b/components/fpspreadsheet/tests/virtualmodetests.pas index baa7533d5..939954555 100644 --- a/components/fpspreadsheet/tests/virtualmodetests.pas +++ b/components/fpspreadsheet/tests/virtualmodetests.pas @@ -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; diff --git a/components/fpspreadsheet/wikitable.pas b/components/fpspreadsheet/wikitable.pas index 39efef76f..df1344e95 100644 --- a/components/fpspreadsheet/wikitable.pas +++ b/components/fpspreadsheet/wikitable.pas @@ -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 diff --git a/components/fpspreadsheet/xlsbiff2.pas b/components/fpspreadsheet/xlsbiff2.pas index 2dbb8a890..5b04d3fcc 100755 --- a/components/fpspreadsheet/xlsbiff2.pas +++ b/components/fpspreadsheet/xlsbiff2.pas @@ -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)); diff --git a/components/fpspreadsheet/xlsbiff5.pas b/components/fpspreadsheet/xlsbiff5.pas index 526971b44..c22920484 100755 --- a/components/fpspreadsheet/xlsbiff5.pas +++ b/components/fpspreadsheet/xlsbiff5.pas @@ -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 } diff --git a/components/fpspreadsheet/xlscommon.pas b/components/fpspreadsheet/xlscommon.pas index 469fcd251..feba0f919 100644 --- a/components/fpspreadsheet/xlscommon.pas +++ b/components/fpspreadsheet/xlscommon.pas @@ -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)); diff --git a/components/fpspreadsheet/xlsxml.pas b/components/fpspreadsheet/xlsxml.pas index 6a6620e9f..534127134 100644 --- a/components/fpspreadsheet/xlsxml.pas +++ b/components/fpspreadsheet/xlsxml.pas @@ -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 diff --git a/components/fpspreadsheet/xlsxooxml.pas b/components/fpspreadsheet/xlsxooxml.pas index 038432a7f..dd3c7a9ec 100755 --- a/components/fpspreadsheet/xlsxooxml.pas +++ b/components/fpspreadsheet/xlsxooxml.pas @@ -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, ''); 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( - '', + '', [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, ''); @@ -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 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( '', [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( - '', + '', [w, h], FPointSeparatorSettings)); end;