24 #include <document.hxx>
29 #include <unonames.hxx>
40 #include <com/sun/star/sheet/DataImportMode.hpp>
41 #include <com/sun/star/table/TableOrientation.hpp>
42 #include <osl/diagnose.h>
64 const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
87 nSourceType(
sheet::DataImportMode_NONE),
89 nSubTotalsUserListIndex(0),
92 bContainsSubTotal(
false),
99 bSubTotalsBindFormatsToContent(
false),
100 bSubTotalsIsCaseSensitive(
false),
101 bSubTotalsInsertPageBreaks(
false),
102 bSubTotalsSortGroups(
false),
103 bSubTotalsEnabledUserList(
false),
104 bSubTotalsAscending(true),
105 bFilterConditionSourceRange(
false),
112 for(
auto &aIter : *rAttrList )
114 switch( aIter.getToken() )
162 sal_Int32 nOffset = 0;
172 nRefresh = std::max( static_cast<sal_Int32>(fTime * 86400.0), sal_Int32(0) );
196 sal_Int32 nElement,
const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
249 ::std::unique_ptr<ScDBData>
pData(
273 case sheet::DataImportMode_NONE:
276 case sheet::DataImportMode_SQL:
280 case sheet::DataImportMode_TABLE:
285 case sheet::DataImportMode_QUERY:
291 OSL_FAIL(
"Unknown data import mode");
294 pData->SetImportParam(aParam);
301 beans::PropertyValue aProperty;
303 table::TableOrientation eOrient =
mpQueryParam->bByRow ?
304 table::TableOrientation_ROWS : table::TableOrientation_COLUMNS;
305 aProperty.Value <<= eOrient;
318 pData->SetSortParam(aParam);
337 const uno::Sequence<sheet::SubTotalColumn>& rColumns = rSubTotalRule.aSubTotalColumns;
338 sal_Int32 nColCount = rColumns.getLength();
339 sal_Int16 nGroupColumn = rSubTotalRule.nSubTotalRuleGroupFieldNumber;
341 aParam.
nField[nPos] =
static_cast<SCCOL>(nGroupColumn);
350 const sheet::SubTotalColumn* pAry = rColumns.getConstArray();
365 pData->SetSubTotalParam(aParam);
368 if (pData->HasImportParam() && !pData->HasImportSelection())
409 pData->GetArea(aRange);
411 setAutoFilterFlags(*pDoc, *pData);
423 pData->GetArea(aRange);
425 if (setAutoFilterFlags(*pDoc, *pData))
438 setAutoFilterFlags(*pDoc, *pData);
448 pDatabaseRangeContext(pTempDatabaseRangeContext)
450 if ( rAttrList.is() )
452 for (
auto &aIter : *rAttrList)
454 switch (aIter.getToken())
476 sal_Int32 nElement,
const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
500 pDatabaseRangeContext(pTempDatabaseRangeContext)
502 if ( rAttrList.is() )
504 for (
auto &aIter : *rAttrList)
506 switch (aIter.getToken())
526 sal_Int32 nElement,
const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
550 pDatabaseRangeContext(pTempDatabaseRangeContext)
552 if ( rAttrList.is() )
554 for (
auto &aIter : *rAttrList)
556 switch (aIter.getToken())
575 sal_Int32 nElement,
const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
601 if ( rAttrList.is() )
604 if (aIter != rAttrList->end())
605 sConRes = aIter.toString();
607 if (!sConRes.isEmpty())
619 pDatabaseRangeContext(pTempDatabaseRangeContext)
621 if ( !rAttrList.is() )
624 for (
auto &aIter : *rAttrList)
626 switch (aIter.getToken())
646 sal_Int32 nElement,
const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
675 if ( !rAttrList.is() )
678 for (
auto &aIter : *rAttrList)
680 switch (aIter.getToken())
684 const OUString &sValue = aIter.toString();
685 if (sValue.getLength() > 8)
687 std::u16string_view sTemp = sValue.subView(0, 8);
688 if (sTemp ==
u"UserList")
691 sTemp = sValue.subView(8);
732 pDatabaseRangeContext(pTempDatabaseRangeContext)
734 if ( rAttrList.is() )
736 for (
auto &aIter : *rAttrList)
738 switch (aIter.getToken())
753 sal_Int32 nElement,
const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
781 pSubTotalRuleContext(pTempSubTotalRuleContext)
783 if ( !rAttrList.is() )
786 for (
auto &aIter : *rAttrList)
788 switch (aIter.getToken())
806 sheet::SubTotalColumn aSubTotalColumn;
void SetSubTotalsAscending(const bool bTemp)
::std::vector< ScSortKeyState > maKeyState
bool bGroupActive[MAXSUBTOTAL]
active groups
ScXMLSubTotalRuleContext(ScXMLImport &rImport, const rtl::Reference< sax_fastparser::FastAttributeList > &rAttrList, ScXMLDatabaseRangeContext *pTempDatabaseRangeContext)
const Link< Timer *, void > & GetRefreshHandler() const
bool insert(std::unique_ptr< ScDBData > p)
Takes ownership of p and attempts to insert it into the collection.
bool HasAutoFilter() const
ScXMLDatabaseRangeContext * pDatabaseRangeContext
SC_DLLPUBLIC ScDBCollection * GetDBCollection() const
SCCOL nField[MAXSUBTOTAL]
associated field
bool bUserDef
sort user defined
virtual ~ScXMLDatabaseRangeContext() override
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
std::unique_ptr< ScDBData > ConvertToDBData(const OUString &rName)
std::unique_ptr< ScRefreshTimerControl > const & GetRefreshTimerControlAddress() const
ScXMLDatabaseRangeContext * pDatabaseRangeContext
ScXMLSourceQueryContext(ScXMLImport &rImport, const rtl::Reference< sax_fastparser::FastAttributeList > &rAttrList, ScXMLDatabaseRangeContext *pTempDatabaseRangeContext)
XML_DATABASE_SOURCE_QUERY
void AddSubTotalColumn(const css::sheet::SubTotalColumn &rSubTotalColumn)
SC_DLLPUBLIC void SetAnonymousDBData(SCTAB nTab, std::unique_ptr< ScDBData > pDBData)
virtual ~ScXMLSourceSQLContext() override
ScDocument * GetDocument()
std::unique_ptr< sal_Int32[]> pData
SC_DLLPUBLIC bool ApplyFlagsTab(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, ScMF nFlags)
bool bSubTotalsInsertPageBreaks
XML_ON_UPDATE_KEEP_STYLES
std::unique_ptr< ScQueryParam > mpQueryParam
bool bSubTotalsEnabledUserList
virtual void SAL_CALL endFastElement(sal_Int32 nElement) override
virtual void SAL_CALL endFastElement(sal_Int32 nElement) override
void SetSubTotalsBindFormatsToContent(const bool bTemp)
bool IsXMLToken(std::u16string_view rString, enum XMLTokenEnum eToken)
FastAttributeList & castToFastAttributeList(const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList)
bool bPagebreak
page break at change of group
void SetSubTotalsSortGroups(const bool bTemp)
ScXMLSubTotalFieldContext(ScXMLImport &rImport, const rtl::Reference< sax_fastparser::FastAttributeList > &rAttrList, ScXMLSubTotalRuleContext *pSubTotalRuleContext)
virtual ~ScXMLSubTotalFieldContext() override
void SetSubTotalsInsertPageBreaks(const bool bTemp)
exports com.sun.star. sheet
sal_uInt16 nUserIndex
index into list
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
sal_Int32 SCCOLROW
a type capable of holding either SCCOL or SCROW
ScSubTotalRule aSubTotalRule
virtual void SAL_CALL endFastElement(sal_Int32 nElement) override
ScXMLDatabaseRangeContext * pDatabaseRangeContext
css::sheet::DataImportMode nSourceType
ScXMLSortGroupsContext(ScXMLImport &rImport, const rtl::Reference< sax_fastparser::FastAttributeList > &rAttrList, ScXMLDatabaseRangeContext *pTempDatabaseRangeContext)
ScRange aFilterConditionSourceRangeAddress
void SetSubTotalsIsCaseSensitive(const bool bTemp)
XML_GROUP_BY_FIELD_NUMBER
static bool GetRangeFromString(ScRange &rRange, const OUString &rRangeStr, const ScDocument &rDocument, formula::FormulaGrammar::AddressConvention eConv, sal_Int32 &nOffset, sal_Unicode cSeparator= ' ', sal_Unicode cQuote= '\'')
ScXMLSubTotalRulesContext(ScXMLImport &rImport, const rtl::Reference< sax_fastparser::FastAttributeList > &rAttrList, ScXMLDatabaseRangeContext *pTempDatabaseRangeContext)
ScXMLDatabaseRangeContext(ScXMLImport &rImport, const rtl::Reference< sax_fastparser::FastAttributeList > &rAttrList)
virtual void SAL_CALL endFastElement(sal_Int32 nElement) override
This class exists only to provide GetScImport() to its derived classes.
virtual ~ScXMLSourceQueryContext() override
SCCOL nSubTotals[MAXSUBTOTAL]
number of SubTotals
ScXMLConResContext(ScXMLImport &rImport, const rtl::Reference< sax_fastparser::FastAttributeList > &rAttrList, ScXMLDatabaseRangeContext *pTempDatabaseRangeContext)
css::uno::Sequence< css::beans::PropertyValue > aSortSequence
void SetSourceObject(const OUString &sTempSourceObject)
constexpr OUStringLiteral STR_DB_GLOBAL_NONAME
virtual void SAL_CALL endFastElement(sal_Int32 nElement) override
std::unique_ptr< ScSubTotalFunc[]> pFunctions[MAXSUBTOTAL]
array of associated functions
virtual ~ScXMLDatabaseRangesContext() override
static void convertDuration(OUStringBuffer &rBuffer, const double fTime)
virtual void SAL_CALL endFastElement(sal_Int32 nElement) override
ScXMLImport & GetScImport()
sal_Int32 toInt32(std::u16string_view str, sal_Int16 radix=10)
ScXMLDatabaseRangeContext * pDatabaseRangeContext
constexpr OUStringLiteral STR_DB_LOCAL_NONAME
ScXMLDatabaseRangeContext * pDatabaseRangeContext
void GetArea(SCTAB &rTab, SCCOL &rCol1, SCROW &rRow1, SCCOL &rCol2, SCROW &rRow2) const
static void FillSortParam(ScSortParam &rParam, const css::uno::Sequence< css::beans::PropertyValue > &rSeq)
OUString sDatabaseRangeName
bool bSubTotalsIsCaseSensitive
ScXMLSubTotalRuleContext * pSubTotalRuleContext
static css::sheet::GeneralFunction GetFunctionFromString(std::u16string_view rString)
ScXMLSourceTableContext(ScXMLImport &rImport, const rtl::Reference< sax_fastparser::FastAttributeList > &rAttrList, ScXMLDatabaseRangeContext *pTempDatabaseRangeContext)
virtual ~ScXMLSortGroupsContext() override
void SetDatabaseName(const OUString &sTempDatabaseName)
#define SC_UNONAME_ORIENT
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
virtual ~ScXMLSubTotalRulesContext() override
bool bSubTotalsSortGroups
virtual ~ScXMLSubTotalRuleContext() override
sal_Int16 nSubTotalRuleGroupFieldNumber
sal_uInt16 GetSortKeyCount() const
void SetConnectionResource(const OUString &sTempConRes)
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
XML_DATABASE_SOURCE_TABLE
bool bIncludePattern
sort formats
#define XML_ELEMENT(prefix, name)
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
virtual ~ScXMLConResContext() override
bool bSubTotalsBindFormatsToContent
std::vector< ScSubTotalRule > aSubTotalRules
void AddSubTotalRule(const ScSubTotalRule &rRule)
ScDBCollection::RangeType meRangeType
void SetSubTotalsEnabledUserList(const bool bTemp)
XML_PAGE_BREAKS_ON_GROUP_CHANGE
XML_BIND_STYLES_TO_CONTENT
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
ScXMLDatabaseRangesContext(ScXMLImport &rImport)
void PrepareQuery(SCTAB nTab, ScQueryParam &rQueryParam)
virtual ~ScXMLSourceTableContext() override
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
sal_Int16 nSubTotalsUserListIndex
XML_DISPLAY_FILTER_BUTTONS
bool bFilterConditionSourceRange
std::unique_ptr< SCCOL[]> pSubTotals[MAXSUBTOTAL]
array of columns to be calculated
void SetNative(const bool bTempNative)
OUString sConnectionResource
ScXMLSourceSQLContext(ScXMLImport &rImport, const rtl::Reference< sax_fastparser::FastAttributeList > &rAttrList, ScXMLDatabaseRangeContext *pTempDatabaseRangeContext)
bool bAscending
sort ascending
void SetSubTotalsUserListIndex(const sal_Int16 nTemp)
static SC_DLLPUBLIC ScSubTotalFunc toSubTotalFunc(ScGeneralFunction eGenFunc)
void SetSourceType(const css::sheet::DataImportMode nTempSourceType)
bool m_bDetectedRangeSegmentation false