sc/inc/document.hxx | 2 +- sc/source/core/data/documen8.cxx | 4 ++-- sc/source/filter/excel/xlroot.cxx | 9 ++++++--- sc/source/filter/inc/xlroot.hxx | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-)
New commits: commit 29f72210e92e0152d52b3a1d0253fbb5d8e2dead Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Tue Sep 5 16:58:22 2023 +0200 Commit: Caolán McNamara <caolan.mcnam...@collabora.com> CommitDate: Wed Sep 6 11:10:28 2023 +0200 lok: save to xlsx changes column size When xlsx spreadsheet was opened in LOK on every save default column width was decreased. This doesn't happen in non-LOK case. Column width in Excel are defined by double value which specifies number of '0' characters which fit into the column. On export we use mnCharWidth from XclRootData to convert Calc twips size to number of characters. In LOK case it was 102 while in non-lok case 101. It was caused by different Reference Device used in ScDocument::GetRefDevice() because in LOK case we are in WYSWIG mode as introduced in ScModelObj::initializeForTiledRendering in commit c25062f: sc tiled rendering: Don't adjust the text width according to printer. Let's use for export purpose the GetVirtualDevice_100th_mm() Change-Id: I6709194d7924e8c7e0aaa75ff3901afbcc1f8c11 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156576 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Tested-by: Caolán McNamara <caolan.mcnam...@collabora.com> Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 97b47ee94d00..262ad6e1cd8f 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -2186,7 +2186,7 @@ public: SfxPrinter* GetPrinter( bool bCreateIfNotExist = true ); void SetPrinter( VclPtr<SfxPrinter> const & pNewPrinter ); VirtualDevice* GetVirtualDevice_100th_mm(); - SC_DLLPUBLIC OutputDevice* GetRefDevice(); // WYSIWYG: Printer, otherwise VirtualDevice... + SC_DLLPUBLIC OutputDevice* GetRefDevice(bool bForceVirtDev = false); // WYSIWYG: Printer, otherwise VirtualDevice... bool GetNextSpellingCell( SCCOL& nCol, SCROW& nRow, SCTAB nTab, bool bInSel, const ScMarkData& rMark) const; diff --git a/sc/source/core/data/documen8.cxx b/sc/source/core/data/documen8.cxx index 94072cd2931f..04696b7696e9 100644 --- a/sc/source/core/data/documen8.cxx +++ b/sc/source/core/data/documen8.cxx @@ -196,11 +196,11 @@ VirtualDevice* ScDocument::GetVirtualDevice_100th_mm() return mpVirtualDevice_100th_mm; } -OutputDevice* ScDocument::GetRefDevice() +OutputDevice* ScDocument::GetRefDevice(bool bForceVirtDev) { // Create printer like ref device, see Writer... OutputDevice* pRefDevice = nullptr; - if ( SC_MOD()->GetInputOptions().GetTextWysiwyg() ) + if ( !bForceVirtDev && SC_MOD()->GetInputOptions().GetTextWysiwyg() ) pRefDevice = GetPrinter(); else pRefDevice = GetVirtualDevice_100th_mm(); diff --git a/sc/source/filter/excel/xlroot.cxx b/sc/source/filter/excel/xlroot.cxx index 47f5ff7806c1..b340b1b537c8 100644 --- a/sc/source/filter/excel/xlroot.cxx +++ b/sc/source/filter/excel/xlroot.cxx @@ -25,6 +25,7 @@ #include <com/sun/star/frame/Desktop.hpp> #include <com/sun/star/frame/XFrame.hpp> #include <com/sun/star/i18n/ScriptType.hpp> +#include <comphelper/lok.hxx> #include <comphelper/processfactory.hxx> #include <comphelper/servicehelper.hxx> #include <sot/storage.hxx> @@ -37,6 +38,7 @@ #include <sfx2/sfxsids.hrc> #include <vcl/font.hxx> #include <vcl/settings.hxx> +#include <vcl/virdev.hxx> #include <comphelper/diagnose_ex.hxx> #include <editeng/editstat.hxx> @@ -208,7 +210,8 @@ void XclRoot::SetTextEncoding( rtl_TextEncoding eTextEnc ) void XclRoot::SetCharWidth( const XclFontData& rFontData ) { mrData.mnCharWidth = 0; - if( OutputDevice* pPrinter = GetPrinter() ) + bool bIsLOK = comphelper::LibreOfficeKit::isActive(); + if( OutputDevice* pPrinter = GetPrinter( bIsLOK ) ) { vcl::Font aFont( rFontData.maName, Size( 0, rFontData.mnHeight ) ); aFont.SetFamily( rFontData.GetScFamily( GetTextEncoding() ) ); @@ -299,9 +302,9 @@ ScModelObj* XclRoot::GetDocModelObj() const return pDocShell ? comphelper::getFromUnoTunnel<ScModelObj>( pDocShell->GetModel() ) : nullptr; } -OutputDevice* XclRoot::GetPrinter() const +OutputDevice* XclRoot::GetPrinter(bool bForceVirtDev) const { - return GetDoc().GetRefDevice(); + return GetDoc().GetRefDevice(bForceVirtDev); } ScStyleSheetPool& XclRoot::GetStyleSheetPool() const diff --git a/sc/source/filter/inc/xlroot.hxx b/sc/source/filter/inc/xlroot.hxx index 10b4554e155f..3085ee8c8516 100644 --- a/sc/source/filter/inc/xlroot.hxx +++ b/sc/source/filter/inc/xlroot.hxx @@ -204,7 +204,7 @@ public: /** Returns the object model of the Calc document. */ ScModelObj* GetDocModelObj() const; /** Returns pointer to the printer of the Calc document. */ - OutputDevice* GetPrinter() const; + OutputDevice* GetPrinter(bool bForceVirtDev = false) const; /** Returns the style sheet pool of the Calc document. */ ScStyleSheetPool& GetStyleSheetPool() const; /** Returns the defined names container of the Calc document. */