Kaydet (Commit) 691f2451 authored tarafından Kohei Yoshida's avatar Kohei Yoshida

Removed the incorrect assumption about the data layout field.

The Excel import filter code assumed that the data layout field be
always the last row field, which is totally wrong.  The data layout
field can be at any column/row field position in fact.
üst ec7ed71c
...@@ -44,8 +44,7 @@ public: ...@@ -44,8 +44,7 @@ public:
~ScDPOutputGeometry(); ~ScDPOutputGeometry();
/** /**
* @param nCount number of row fields, <b>excluding the data layout * @param nCount number of row fields.
* field if exists</b>.
*/ */
void setRowFieldCount(sal_uInt32 nCount); void setRowFieldCount(sal_uInt32 nCount);
void setColumnFieldCount(sal_uInt32 nCount); void setColumnFieldCount(sal_uInt32 nCount);
...@@ -65,7 +64,7 @@ private: ...@@ -65,7 +64,7 @@ private:
private: private:
ScRange maOutRange; ScRange maOutRange;
sal_uInt32 mnRowFields; /// number of row fields (data layout field NOT included!) sal_uInt32 mnRowFields; /// number of row fields
sal_uInt32 mnColumnFields; sal_uInt32 mnColumnFields;
sal_uInt32 mnPageFields; sal_uInt32 mnPageFields;
sal_uInt32 mnDataFields; sal_uInt32 mnDataFields;
......
...@@ -82,8 +82,6 @@ void ScDPOutputGeometry::getColumnFieldPositions(vector<ScAddress>& rAddrs) cons ...@@ -82,8 +82,6 @@ void ScDPOutputGeometry::getColumnFieldPositions(vector<ScAddress>& rAddrs) cons
return; return;
} }
bool bDataLayout = mnDataFields > 1;
SCROW nCurRow = maOutRange.aStart.Row(); SCROW nCurRow = maOutRange.aStart.Row();
if (mnPageFields) if (mnPageFields)
...@@ -97,7 +95,7 @@ void ScDPOutputGeometry::getColumnFieldPositions(vector<ScAddress>& rAddrs) cons ...@@ -97,7 +95,7 @@ void ScDPOutputGeometry::getColumnFieldPositions(vector<ScAddress>& rAddrs) cons
SCROW nRow = nCurRow; SCROW nRow = nCurRow;
SCTAB nTab = maOutRange.aStart.Tab(); SCTAB nTab = maOutRange.aStart.Tab();
SCCOL nColStart = static_cast<SCCOL>(maOutRange.aStart.Col() + mnRowFields + (bDataLayout ? 1 : 0)); SCCOL nColStart = static_cast<SCCOL>(maOutRange.aStart.Col() + mnRowFields);
SCCOL nColEnd = nColStart + static_cast<SCCOL>(mnColumnFields-1); SCCOL nColEnd = nColStart + static_cast<SCCOL>(mnColumnFields-1);
for (SCCOL nCol = nColStart; nCol <= nColEnd; ++nCol) for (SCCOL nCol = nColStart; nCol <= nColEnd; ++nCol)
......
...@@ -1444,7 +1444,7 @@ void XclImpPivotTable::Convert() ...@@ -1444,7 +1444,7 @@ void XclImpPivotTable::Convert()
pDPObj->SetSaveData( aSaveData ); pDPObj->SetSaveData( aSaveData );
pDPObj->SetSheetDesc( aDesc ); pDPObj->SetSheetDesc( aDesc );
pDPObj->SetOutRange( aOutRange ); pDPObj->SetOutRange( aOutRange );
pDPObj->SetAlive( sal_True ); pDPObj->SetAlive(true);
pDPObj->SetHeaderLayout( maPTViewEx9Info.mnGridLayout == 0 ); pDPObj->SetHeaderLayout( maPTViewEx9Info.mnGridLayout == 0 );
GetDoc().GetDPCollection()->InsertNewTable(pDPObj); GetDoc().GetDPCollection()->InsertNewTable(pDPObj);
...@@ -1472,11 +1472,7 @@ void XclImpPivotTable::ApplyMergeFlags(const ScRange& rOutRange, const ScDPSaveD ...@@ -1472,11 +1472,7 @@ void XclImpPivotTable::ApplyMergeFlags(const ScRange& rOutRange, const ScDPSaveD
aGeometry.setColumnFieldCount(maPTInfo.mnColFields); aGeometry.setColumnFieldCount(maPTInfo.mnColFields);
aGeometry.setPageFieldCount(maPTInfo.mnPageFields); aGeometry.setPageFieldCount(maPTInfo.mnPageFields);
aGeometry.setDataFieldCount(maPTInfo.mnDataFields); aGeometry.setDataFieldCount(maPTInfo.mnDataFields);
aGeometry.setRowFieldCount(maPTInfo.mnRowFields);
// Excel includes data layout field in the row field count. We need to
// subtract it.
bool bDataLayout = maPTInfo.mnDataFields > 1;
aGeometry.setRowFieldCount(maPTInfo.mnRowFields - static_cast<sal_uInt32>(bDataLayout));
ScDocument& rDoc = GetDoc(); ScDocument& rDoc = GetDoc();
...@@ -1486,7 +1482,7 @@ void XclImpPivotTable::ApplyMergeFlags(const ScRange& rOutRange, const ScDPSaveD ...@@ -1486,7 +1482,7 @@ void XclImpPivotTable::ApplyMergeFlags(const ScRange& rOutRange, const ScDPSaveD
for (; itr != itrEnd; ++itr) for (; itr != itrEnd; ++itr)
{ {
sal_uInt16 nMFlag = SC_MF_BUTTON; sal_uInt16 nMFlag = SC_MF_BUTTON;
String aName; rtl::OUString aName;
rDoc.GetString(itr->Col(), itr->Row(), itr->Tab(), aName); rDoc.GetString(itr->Col(), itr->Row(), itr->Tab(), aName);
if (rSaveData.HasInvisibleMember(aName)) if (rSaveData.HasInvisibleMember(aName))
nMFlag |= SC_MF_HIDDEN_MEMBER; nMFlag |= SC_MF_HIDDEN_MEMBER;
...@@ -1502,7 +1498,7 @@ void XclImpPivotTable::ApplyMergeFlags(const ScRange& rOutRange, const ScDPSaveD ...@@ -1502,7 +1498,7 @@ void XclImpPivotTable::ApplyMergeFlags(const ScRange& rOutRange, const ScDPSaveD
for (; itr != itrEnd; ++itr) for (; itr != itrEnd; ++itr)
{ {
sal_Int16 nMFlag = SC_MF_BUTTON | SC_MF_BUTTON_POPUP; sal_Int16 nMFlag = SC_MF_BUTTON | SC_MF_BUTTON_POPUP;
String aName; rtl::OUString aName;
rDoc.GetString(itr->Col(), itr->Row(), itr->Tab(), aName); rDoc.GetString(itr->Col(), itr->Row(), itr->Tab(), aName);
if (rSaveData.HasInvisibleMember(aName)) if (rSaveData.HasInvisibleMember(aName))
nMFlag |= SC_MF_HIDDEN_MEMBER; nMFlag |= SC_MF_HIDDEN_MEMBER;
...@@ -1511,39 +1507,19 @@ void XclImpPivotTable::ApplyMergeFlags(const ScRange& rOutRange, const ScDPSaveD ...@@ -1511,39 +1507,19 @@ void XclImpPivotTable::ApplyMergeFlags(const ScRange& rOutRange, const ScDPSaveD
vector<ScAddress> aRowBtns; vector<ScAddress> aRowBtns;
aGeometry.getRowFieldPositions(aRowBtns); aGeometry.getRowFieldPositions(aRowBtns);
if (aRowBtns.empty()) itr = aRowBtns.begin();
{ itrEnd = aRowBtns.end();
if (bDataLayout) for (; itr != itrEnd; ++itr)
{
// No row fields, but the data layout button exists.
SCROW nRow = aGeometry.getRowFieldHeaderRow();
SCCOL nCol = rOutRange.aStart.Col();
SCTAB nTab = rOutRange.aStart.Tab();
rDoc.ApplyFlagsTab(nCol, nRow, nCol, nRow, nTab, SC_MF_BUTTON);
}
}
else
{ {
itr = aRowBtns.begin(); sal_Int16 nMFlag = SC_MF_BUTTON | SC_MF_BUTTON_POPUP;
itrEnd = aRowBtns.end(); rtl::OUString aName;
for (; itr != itrEnd; ++itr) rDoc.GetString(itr->Col(), itr->Row(), itr->Tab(), aName);
{ if (rSaveData.HasInvisibleMember(aName))
sal_Int16 nMFlag = SC_MF_BUTTON | SC_MF_BUTTON_POPUP; nMFlag |= SC_MF_HIDDEN_MEMBER;
String aName; rDoc.ApplyFlagsTab(itr->Col(), itr->Row(), itr->Col(), itr->Row(), itr->Tab(), nMFlag);
rDoc.GetString(itr->Col(), itr->Row(), itr->Tab(), aName);
if (rSaveData.HasInvisibleMember(aName))
nMFlag |= SC_MF_HIDDEN_MEMBER;
rDoc.ApplyFlagsTab(itr->Col(), itr->Row(), itr->Col(), itr->Row(), itr->Tab(), nMFlag);
}
if (bDataLayout)
{
--itr; // move back to the last row field position.
rDoc.ApplyFlagsTab(itr->Col(), itr->Row(), itr->Col(), itr->Row(), itr->Tab(), SC_MF_BUTTON);
}
} }
} }
// ============================================================================
// ============================================================================ // ============================================================================
XclImpPivotTableManager::XclImpPivotTableManager( const XclImpRoot& rRoot ) : XclImpPivotTableManager::XclImpPivotTableManager( const XclImpRoot& rRoot ) :
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment