summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2012-03-27 05:14:06 +0200
committerNoel Power <noel.power@novell.com>2012-03-27 12:19:57 +0100
commit6c6a4ed070acc0b106e951864fa5d20927f5c1e0 (patch)
tree3bd44f55292ff190c3eb6692ceec265727321339
parent14d47f6f6ed9f9e682136cc72d6fe44a9e0c7d9e (diff)
export all style information to xls/xlsx, fdo#46738
Fixes that if more than 84 empty but formatted rows at the end of a file have been found the export skipped those rows. Signed-off-by: Noel Power <noel.power@novell.com>
-rw-r--r--sc/inc/attarray.hxx2
-rw-r--r--sc/inc/column.hxx2
-rw-r--r--sc/inc/document.hxx1
-rw-r--r--sc/inc/table.hxx2
-rw-r--r--sc/source/core/data/attarray.cxx4
-rw-r--r--sc/source/core/data/column2.cxx4
-rw-r--r--sc/source/core/data/document.cxx13
-rw-r--r--sc/source/core/data/table1.cxx4
-rw-r--r--sc/source/filter/excel/xetable.cxx2
9 files changed, 24 insertions, 10 deletions
diff --git a/sc/inc/attarray.hxx b/sc/inc/attarray.hxx
index b58472e4fb2a..27a086ea3ec5 100644
--- a/sc/inc/attarray.hxx
+++ b/sc/inc/attarray.hxx
@@ -175,7 +175,7 @@ public:
bool IsEmpty() const;
bool GetFirstVisibleAttr( SCROW& rFirstRow ) const;
- bool GetLastVisibleAttr( SCROW& rLastRow, SCROW nLastData ) const;
+ bool GetLastVisibleAttr( SCROW& rLastRow, SCROW nLastData, bool bFullFormattedArea = false ) const;
bool HasVisibleAttrIn( SCROW nStartRow, SCROW nEndRow ) const;
bool IsVisibleEqual( const ScAttrArray& rOther,
SCROW nStartRow, SCROW nEndRow ) const;
diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index f86bf9baadaf..313dcd6c89d2 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -183,7 +183,7 @@ public:
bool HasSelectionMatrixFragment(const ScMarkData& rMark) const;
bool GetFirstVisibleAttr( SCROW& rFirstRow ) const;
- bool GetLastVisibleAttr( SCROW& rLastRow ) const;
+ bool GetLastVisibleAttr( SCROW& rLastRow, bool bFullFormattedArea = false ) const;
bool HasVisibleAttrIn( SCROW nStartRow, SCROW nEndRow ) const;
bool IsVisibleAttrEqual( const ScColumn& rCol, SCROW nStartRow = 0,
SCROW nEndRow = MAXROW ) const;
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 50bcd27827b4..6167634eaba6 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -940,6 +940,7 @@ public:
SCCOL& rEndCol, SCROW& rEndRow, bool bIncludeOld, bool bOnlyDown ) const;
SC_DLLPUBLIC bool GetCellArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const;
SC_DLLPUBLIC bool GetTableArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const;
+ SC_DLLPUBLIC void GetFormattedAndUsedArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const;
SC_DLLPUBLIC bool GetPrintArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow,
bool bNotes = true ) const;
SC_DLLPUBLIC bool GetPrintAreaHor( SCTAB nTab, SCROW nStartRow, SCROW nEndRow,
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index 4f1fe38abe9c..10775e2fa60c 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -405,7 +405,7 @@ public:
bool GetCellArea( SCCOL& rEndCol, SCROW& rEndRow ) const; // FALSE = empty
bool GetTableArea( SCCOL& rEndCol, SCROW& rEndRow ) const;
- bool GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes ) const;
+ bool GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes, bool bFullFormattedArea = false ) const;
bool GetPrintAreaHor( SCROW nStartRow, SCROW nEndRow,
SCCOL& rEndCol, bool bNotes ) const;
bool GetPrintAreaVer( SCCOL nStartCol, SCCOL nEndCol,
diff --git a/sc/source/core/data/attarray.cxx b/sc/source/core/data/attarray.cxx
index 2aa660aec239..5714e7c8b314 100644
--- a/sc/source/core/data/attarray.cxx
+++ b/sc/source/core/data/attarray.cxx
@@ -1831,7 +1831,7 @@ bool ScAttrArray::GetFirstVisibleAttr( SCROW& rFirstRow ) const
const SCROW SC_VISATTR_STOP = 84;
-bool ScAttrArray::GetLastVisibleAttr( SCROW& rLastRow, SCROW nLastData ) const
+bool ScAttrArray::GetLastVisibleAttr( SCROW& rLastRow, SCROW nLastData, bool bFullFormattedArea ) const
{
// #i30830# changed behavior:
// ignore all attributes starting with the first run of SC_VISATTR_STOP equal rows
@@ -1862,7 +1862,7 @@ bool ScAttrArray::GetLastVisibleAttr( SCROW& rLastRow, SCROW nLastData ) const
if ( nAttrStartRow <= nLastData )
nAttrStartRow = nLastData + 1;
SCROW nAttrSize = pData[nEndPos].nRow + 1 - nAttrStartRow;
- if ( nAttrSize >= SC_VISATTR_STOP )
+ if ( nAttrSize >= SC_VISATTR_STOP && !bFullFormattedArea )
{
bFound = false; // ignore this range and below
}
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index 22d3da4ba709..95b6cf8631b4 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -1443,14 +1443,14 @@ bool ScColumn::GetFirstVisibleAttr( SCROW& rFirstRow ) const
return false;
}
-bool ScColumn::GetLastVisibleAttr( SCROW& rLastRow ) const
+bool ScColumn::GetLastVisibleAttr( SCROW& rLastRow, bool bFullFormattedArea ) const
{
if (pAttrArray)
{
// row of last cell is needed
SCROW nLastData = GetLastVisDataPos( true ); // always including notes, 0 if none
- return pAttrArray->GetLastVisibleAttr( rLastRow, nLastData );
+ return pAttrArray->GetLastVisibleAttr( rLastRow, nLastData, bFullFormattedArea );
}
else
return false;
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 93a067eb5a72..ddfafc2d75a8 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -967,6 +967,19 @@ bool ScDocument::GetTableArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) cons
return false;
}
+void ScDocument::GetFormattedAndUsedArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const
+{
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB> (maTabs.size()))
+ if (maTabs[nTab])
+ {
+ maTabs[nTab]->GetPrintArea( rEndCol, rEndRow, true, true );
+ return;
+ }
+
+ rEndCol = 0;
+ rEndRow = 0;
+}
+
bool ScDocument::ShrinkToDataArea(SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, SCROW& rEndRow) const
{
if (!ValidTab(nTab) || nTab >= static_cast<SCTAB> (maTabs.size()) || !maTabs[nTab])
diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index 06b8203c15d2..31c3f46767c2 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -554,7 +554,7 @@ bool ScTable::GetTableArea( SCCOL& rEndCol, SCROW& rEndRow ) const
const SCCOL SC_COLUMNS_STOP = 30;
-bool ScTable::GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes ) const
+bool ScTable::GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes, bool bFullFormattedArea ) const
{
bool bFound = false;
SCCOL nMaxX = 0;
@@ -577,7 +577,7 @@ bool ScTable::GetPrintArea( SCCOL& rEndCol, SCROW& rEndRow, bool bNotes ) const
for (i=0; i<=MAXCOL; i++) // Attribute testen
{
SCROW nLastRow;
- if (aCol[i].GetLastVisibleAttr( nLastRow ))
+ if (aCol[i].GetLastVisibleAttr( nLastRow, bFullFormattedArea ))
{
bFound = true;
nMaxX = i;
diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx
index 257118825cae..b3166181d427 100644
--- a/sc/source/filter/excel/xetable.cxx
+++ b/sc/source/filter/excel/xetable.cxx
@@ -2187,7 +2187,7 @@ XclExpCellTable::XclExpCellTable( const XclExpRoot& rRoot ) :
// find used area (non-empty cells)
SCCOL nLastUsedScCol;
SCROW nLastUsedScRow;
- rDoc.GetTableArea( nScTab, nLastUsedScCol, nLastUsedScRow );
+ rDoc.GetFormattedAndUsedArea( nScTab, nLastUsedScCol, nLastUsedScRow );
ScRange aUsedRange( 0, 0, nScTab, nLastUsedScCol, nLastUsedScRow, nScTab );
GetAddressConverter().ValidateRange( aUsedRange, true );