sc/inc/column.hxx                |   14 ++++++++------
 sc/source/core/data/document.cxx |    3 +--
 sc/source/core/data/table2.cxx   |    7 ++++---
 3 files changed, 13 insertions(+), 11 deletions(-)

New commits:
commit 0e6465ecc0b4c607480f798b6f15e4dbbbbebb77
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Mon Mar 7 21:02:11 2022 +0100
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Tue Mar 8 11:27:39 2022 +0100

    fix GetAttr() for unallocated columns
    
    Change-Id: Id7cbebf68ec3cc54d773bc5745fab192d043f952
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131150
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index 503cbaebddb1..fd4d0fe5dfea 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -129,6 +129,12 @@ public:
     ScAttrArray& AttrArray() { return *pAttrArray; }
     const ScAttrArray& AttrArray() const { return *pAttrArray; }
 
+    const SfxPoolItem&      GetAttr( SCROW nRow, sal_uInt16 nWhich ) const;
+    template<class T> const T&  GetAttr( SCROW nRow, TypedWhichId<T> nWhich ) 
const
+    {
+        return static_cast<const T&>(GetAttr(nRow, sal_uInt16(nWhich)));
+    }
+
     const ScPatternAttr*    GetPattern( SCROW nRow ) const;
     const ScPatternAttr*    GetMostUsedPattern( SCROW nStartRow, SCROW nEndRow 
) const;
     SCROW       ApplySelectionCache( SfxItemPoolCache* pCache, const 
ScMarkData& rMark, ScEditDataArray* pDataArray, bool* const pIsChanged,
@@ -497,11 +503,7 @@ public:
     void PreprocessDBDataUpdate(
         sc::EndListeningContext& rEndListenCxt, sc::CompileFormulaContext& 
rCompileCxt );
 
-    const SfxPoolItem&      GetAttr( SCROW nRow, sal_uInt16 nWhich ) const;
-    template<class T> const T&  GetAttr( SCROW nRow, TypedWhichId<T> nWhich ) 
const
-    {
-        return static_cast<const T&>(GetAttr(nRow, sal_uInt16(nWhich)));
-    }
+    using ScColumnData::GetAttr;
     using ScColumnData::GetPattern;
     using ScColumnData::GetNumberFormat;
 
@@ -914,7 +916,7 @@ inline const ScPatternAttr* ScColumnData::GetPattern( SCROW 
nRow ) const
     return pAttrArray->GetPattern( nRow );
 }
 
-inline const SfxPoolItem& ScColumn::GetAttr( SCROW nRow, sal_uInt16 nWhich ) 
const
+inline const SfxPoolItem& ScColumnData::GetAttr( SCROW nRow, sal_uInt16 nWhich 
) const
 {
     return pAttrArray->GetPattern( nRow )->GetItemSet().Get(nWhich);
 }
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 3ec08575a713..5cb0a435f988 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -4733,8 +4733,7 @@ void ScDocument::ExtendHidden( SCCOL& rX1, SCROW& rY1, 
SCCOL& rX2, SCROW& rY2, S
 
 const SfxPoolItem* ScDocument::GetAttr( SCCOL nCol, SCROW nRow, SCTAB nTab, 
sal_uInt16 nWhich ) const
 {
-    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && 
maTabs[nTab] &&
-         nCol < maTabs[nTab]->GetAllocatedColumnsCount())
+    if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && 
maTabs[nTab] )
     {
         const SfxPoolItem* pTemp = maTabs[nTab]->GetAttr( nCol, nRow, nWhich );
         if (pTemp)
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index c16bfddecc9d..a4cd147147f7 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -2161,10 +2161,11 @@ void ScTable::ResetChanged( const ScRange& rRange )
 
 const SfxPoolItem* ScTable::GetAttr( SCCOL nCol, SCROW nRow, sal_uInt16 nWhich 
) const
 {
-    if (ValidColRow(nCol, nRow) && nCol < GetAllocatedColumnsCount())
-        return &aCol[nCol].GetAttr( nRow, nWhich );
-    else
+    if (!ValidColRow(nCol, nRow))
         return nullptr;
+    if (nCol < GetAllocatedColumnsCount())
+        return &aCol[nCol].GetAttr( nRow, nWhich );
+    return &aDefaultColData.GetAttr( nRow, nWhich );
 }
 
 sal_uInt32 ScTable::GetNumberFormat( const ScInterpreterContext& rContext, 
const ScAddress& rPos ) const

Reply via email to