summaryrefslogtreecommitdiff
path: root/sc/source/core/tool
diff options
context:
space:
mode:
authorofftkp <parisoplop@gmail.com>2022-11-17 16:41:42 +0200
committerTomaž Vajngerl <quikee@gmail.com>2022-11-30 14:24:10 +0100
commit933e045422957e15cad47ef925d4f9a852c826b1 (patch)
tree1102557670f6c4d578739d6c4b8ab1fc8a2a7ef6 /sc/source/core/tool
parente788317bb58f4e4ad3bf57ee7b0e995cb4407ede (diff)
xlsx: Import table column attribute XML_totalsRowFunction
Import table column attribute totalsRowFunction and also export it, which fixes a warning when roundtripped on a different office suite. Change-Id: Icc76fc310aef3bd51bcefebece57f962a56b7cca Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142843 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'sc/source/core/tool')
-rw-r--r--sc/source/core/tool/dbdata.cxx17
1 files changed, 14 insertions, 3 deletions
diff --git a/sc/source/core/tool/dbdata.cxx b/sc/source/core/tool/dbdata.cxx
index cf518d0e2890..dc10d6a0503e 100644
--- a/sc/source/core/tool/dbdata.cxx
+++ b/sc/source/core/tool/dbdata.cxx
@@ -609,7 +609,7 @@ bool ScDBData::UpdateReference(const ScDocument* pDoc, UpdateRefMode eUpdateRefM
if (bDoUpdate && eRet != UR_INVALID)
{
// MoveTo() invalidates column names via SetArea(); adjust, remember and set new.
- AdjustTableColumnNames( eUpdateRefMode, nDx, nCol1, nOldCol1, nOldCol2, theCol1, theCol2);
+ AdjustTableColumnAttributes( eUpdateRefMode, nDx, nCol1, nOldCol1, nOldCol2, theCol1, theCol2);
::std::vector<OUString> aNames( maTableColumnNames);
bool bTableColumnNamesDirty = mbTableColumnNamesDirty;
// tdf#48025, tdf#141946: update the column index of the filter criteria,
@@ -686,7 +686,12 @@ void ScDBData::SetTableColumnNames( ::std::vector< OUString >&& rNames )
mbTableColumnNamesDirty = false;
}
-void ScDBData::AdjustTableColumnNames( UpdateRefMode eUpdateRefMode, SCCOL nDx, SCCOL nCol1,
+void ScDBData::SetTableColumnAttributes( ::std::vector< TableColumnAttributes >&& rAttributes )
+{
+ maTableColumnAttributes = std::move(rAttributes);
+}
+
+void ScDBData::AdjustTableColumnAttributes( UpdateRefMode eUpdateRefMode, SCCOL nDx, SCCOL nCol1,
SCCOL nOldCol1, SCCOL nOldCol2, SCCOL nNewCol1, SCCOL nNewCol2 )
{
if (maTableColumnNames.empty())
@@ -698,6 +703,7 @@ void ScDBData::AdjustTableColumnNames( UpdateRefMode eUpdateRefMode, SCCOL nDx,
return; // not moved or entirely moved, nothing to do
::std::vector<OUString> aNewNames;
+ ::std::vector<TableColumnAttributes> aNewAttributes;
if (eUpdateRefMode == URM_INSDEL)
{
if (nDx > 0)
@@ -714,22 +720,27 @@ void ScDBData::AdjustTableColumnNames( UpdateRefMode eUpdateRefMode, SCCOL nDx,
if (nDx > 0)
n += nDx;
aNewNames.resize(n);
+ aNewAttributes.resize(n);
+ maTableColumnAttributes.resize(n);
// Copy head.
for (size_t i = 0; i < nHead; ++i)
{
aNewNames[i] = maTableColumnNames[i];
+ aNewAttributes[i] = maTableColumnAttributes[i];
}
// Copy tail, inserted middle range, if any, stays empty.
for (size_t i = n - nTail, j = maTableColumnNames.size() - nTail; i < n; ++i, ++j)
{
aNewNames[i] = maTableColumnNames[j];
+ aNewAttributes[i] = maTableColumnAttributes[j];
}
}
} // else empty aNewNames invalidates names/offsets
SAL_WARN_IF( !maTableColumnNames.empty() && aNewNames.empty(),
- "sc.core", "ScDBData::AdjustTableColumnNames - invalidating column names/offsets");
+ "sc.core", "ScDBData::AdjustTableColumnAttributes - invalidating column attributes/offsets");
aNewNames.swap( maTableColumnNames);
+ aNewAttributes.swap(maTableColumnAttributes);
if (maTableColumnNames.empty())
mbTableColumnNamesDirty = true;
if (mbTableColumnNamesDirty)