From 9a4f358ae228b2e1d962fd6e709a152f8e0a9996 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Wed, 8 Jul 2020 17:56:08 +0000 Subject: [PATCH] fpspreadsheet: Fix unit conversion error in colwidth calculation. CopyWorksheetFrom() now copies also DefaultFont and DefaultColWidth git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7529 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../source/common/fpspreadsheet.pas | 18 ++++++++++++++++++ .../source/common/fpsreaderwriter.pas | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/components/fpspreadsheet/source/common/fpspreadsheet.pas b/components/fpspreadsheet/source/common/fpspreadsheet.pas index f46289ee7..42472c07b 100644 --- a/components/fpspreadsheet/source/common/fpspreadsheet.pas +++ b/components/fpspreadsheet/source/common/fpspreadsheet.pas @@ -9267,6 +9267,8 @@ var col: PCol; row: PRow; i: Integer; + w: Single; + fnt: TsFont; begin Result := nil; if (AWorksheet = nil) then @@ -9275,18 +9277,34 @@ begin Result := AddWorksheet(AWorksheet.Name, ReplaceDuplicateName); inc(FNotificationLock); try + // Make sure to use the same default font, colwidths depend on it! + if Result.WorkBook <> AWorksheet.Workbook then + begin + fnt := AWorksheet.Workbook.GetDefaultFont; + Result.Workbook.SetDefaultFont(fnt.FontName, fnt.Size); + end; + + // Copy DefaultColWidth + w := AWorksheet.ReadDefaultColWidth(suMillimeters); + Result.WriteDefaultColWidth(w, suMillimeters); + + // Copy cells (incl formulas, comments, hyperlinks etc). for cell in AWorksheet.Cells do begin r := cell^.Row; c := cell^.Col; Result.CopyCell(r, c, r, c, AWorksheet); end; + + // Copy col records for i := 0 to AWorksheet.Cols.Count-1 do begin col := AWorksheet.Cols[i]; c := col^.Col; Result.CopyCol(c, c, AWorksheet); end; + + // Copy row records for i := 0 to AWorksheet.Rows.Count-1 do begin row := AWorksheet.Rows[i]; diff --git a/components/fpspreadsheet/source/common/fpsreaderwriter.pas b/components/fpspreadsheet/source/common/fpsreaderwriter.pas index 7e68ad05d..9d7f7ddcf 100644 --- a/components/fpspreadsheet/source/common/fpsreaderwriter.pas +++ b/components/fpspreadsheet/source/common/fpsreaderwriter.pas @@ -422,7 +422,7 @@ begin if lCol^.ColWidthType = cwtCustom then w0 := lCol^.Width else - w0 := sheet.DefaultColWidth; + w0 := sheet.ReadDefaultColWidth(sheet.Workbook.Units); // w := PCol(sheet.Cols[0])^.Width; for c := 1 to sheet.Cols.Count-1 do begin lCol := PCol(sheet.Cols[c]);