diff options
Diffstat (limited to 'sc')
464 files changed, 29627 insertions, 6154 deletions
diff --git a/sc/CppunitTest_sc_cache_test.mk b/sc/CppunitTest_sc_cache_test.mk index 9eeadcc6dd26..625c3035f140 100644 --- a/sc/CppunitTest_sc_cache_test.mk +++ b/sc/CppunitTest_sc_cache_test.mk @@ -78,8 +78,7 @@ $(eval $(call gb_CppunitTest_use_vcl,sc_cache_test)) $(eval $(call gb_CppunitTest_use_components,sc_cache_test,\ basic/util/sb \ - chart2/source/chartcore \ - chart2/source/controller/chartcontroller \ + chart2/source/chart2 \ comphelper/util/comphelp \ configmgr/source/configmgr \ dbaccess/util/dba \ diff --git a/sc/CppunitTest_sc_cond_format_merge.mk b/sc/CppunitTest_sc_cond_format_merge.mk index c588e44580ff..03b40956288e 100644 --- a/sc/CppunitTest_sc_cond_format_merge.mk +++ b/sc/CppunitTest_sc_cond_format_merge.mk @@ -74,8 +74,7 @@ $(eval $(call gb_CppunitTest_use_vcl,sc_cond_format_merge)) $(eval $(call gb_CppunitTest_use_components,sc_cond_format_merge,\ basic/util/sb \ - chart2/source/chartcore \ - chart2/source/controller/chartcontroller \ + chart2/source/chart2 \ comphelper/util/comphelp \ configmgr/source/configmgr \ dbaccess/util/dba \ diff --git a/sc/CppunitTest_sc_dataprovider.mk b/sc/CppunitTest_sc_dataprovider.mk index f0f61bd278c0..e952eb5632b8 100644 --- a/sc/CppunitTest_sc_dataprovider.mk +++ b/sc/CppunitTest_sc_dataprovider.mk @@ -82,8 +82,7 @@ $(eval $(call gb_CppunitTest_use_vcl,sc_dataprovider)) $(eval $(call gb_CppunitTest_use_components,sc_dataprovider,\ basic/util/sb \ - chart2/source/chartcore \ - chart2/source/controller/chartcontroller \ + chart2/source/chart2 \ comphelper/util/comphelp \ configmgr/source/configmgr \ connectivity/source/cpool/dbpool2 \ diff --git a/sc/CppunitTest_sc_filters_test.mk b/sc/CppunitTest_sc_filters_test.mk index 3dae5136e1e3..98940da5691f 100644 --- a/sc/CppunitTest_sc_filters_test.mk +++ b/sc/CppunitTest_sc_filters_test.mk @@ -78,8 +78,7 @@ $(eval $(call gb_CppunitTest_use_vcl,sc_filters_test)) $(eval $(call gb_CppunitTest_use_components,sc_filters_test,\ basic/util/sb \ - chart2/source/chartcore \ - chart2/source/controller/chartcontroller \ + chart2/source/chart2 \ comphelper/util/comphelp \ configmgr/source/configmgr \ connectivity/source/manager/sdbc2 \ diff --git a/sc/CppunitTest_sc_mark_test.mk b/sc/CppunitTest_sc_mark_test.mk index 60686043fd4b..a81c4e0b8a85 100644 --- a/sc/CppunitTest_sc_mark_test.mk +++ b/sc/CppunitTest_sc_mark_test.mk @@ -78,8 +78,7 @@ $(eval $(call gb_CppunitTest_use_vcl,sc_mark_test)) $(eval $(call gb_CppunitTest_use_components,sc_mark_test,\ basic/util/sb \ - chart2/source/chartcore \ - chart2/source/controller/chartcontroller \ + chart2/source/chart2 \ comphelper/util/comphelp \ configmgr/source/configmgr \ dbaccess/util/dba \ diff --git a/sc/CppunitTest_sc_tiledrendering.mk b/sc/CppunitTest_sc_tiledrendering.mk index 5a2f4d971332..a00fdb0259f0 100644 --- a/sc/CppunitTest_sc_tiledrendering.mk +++ b/sc/CppunitTest_sc_tiledrendering.mk @@ -31,6 +31,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sc_tiledrendering, \ sc \ scfilt \ scui \ + scqahelper \ subsequenttest \ test \ unotest \ @@ -49,6 +50,7 @@ $(eval $(call gb_CppunitTest_use_externals,sc_tiledrendering,\ $(eval $(call gb_CppunitTest_set_include,sc_tiledrendering,\ -I$(SRCDIR)/sc/source/ui/inc \ -I$(SRCDIR)/sc/inc \ + -I$(SRCDIR)/sc/qa/unit/helper \ $$(INCLUDE) \ )) diff --git a/sc/CppunitTest_sc_tiledrendering2.mk b/sc/CppunitTest_sc_tiledrendering2.mk index 9acb0bffe924..2d70c6dcbb47 100644 --- a/sc/CppunitTest_sc_tiledrendering2.mk +++ b/sc/CppunitTest_sc_tiledrendering2.mk @@ -31,6 +31,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sc_tiledrendering2, \ sc \ scfilt \ scui \ + scqahelper \ subsequenttest \ test \ unotest \ @@ -49,6 +50,7 @@ $(eval $(call gb_CppunitTest_use_externals,sc_tiledrendering2,\ $(eval $(call gb_CppunitTest_set_include,sc_tiledrendering2,\ -I$(SRCDIR)/sc/source/ui/inc \ -I$(SRCDIR)/sc/inc \ + -I$(SRCDIR)/sc/qa/unit/helper \ $$(INCLUDE) \ )) diff --git a/sc/IwyuFilter_sc.yaml b/sc/IwyuFilter_sc.yaml index cf98aaffb989..31f7c83b6101 100644 --- a/sc/IwyuFilter_sc.yaml +++ b/sc/IwyuFilter_sc.yaml @@ -286,9 +286,13 @@ excludelist: sc/inc/scitems.hxx: # needed for defines - svl/typedwhich.hxx + # needed in --fwdecl mode + - class ScConsolidateItem sc/inc/scmatrix.hxx: # base class has to be a complete type - svl/sharedstringpool.hxx + # needed in --fwdecl mode, quotation needed for handling the colon + - 'enum class FormulaError : sal_uInt16' sc/inc/scmod.hxx: # Needed for macro define - sfx2/app.hxx diff --git a/sc/Library_scfilt.mk b/sc/Library_scfilt.mk index e4936656676e..e2cd534226d9 100644 --- a/sc/Library_scfilt.mk +++ b/sc/Library_scfilt.mk @@ -234,6 +234,8 @@ $(eval $(call gb_Library_use_externals,scfilt,\ )) $(eval $(call gb_Library_add_exception_objects,scfilt,\ + sc/source/filter/orcus/autofilter \ + sc/source/filter/orcus/global \ sc/source/filter/orcus/interface \ sc/source/filter/orcus/orcusfiltersimpl \ sc/source/filter/orcus/xmlcontext \ diff --git a/sc/Library_scqahelper.mk b/sc/Library_scqahelper.mk index 6e8c9eca7327..071a69dcfbc2 100644 --- a/sc/Library_scqahelper.mk +++ b/sc/Library_scqahelper.mk @@ -69,6 +69,8 @@ $(eval $(call gb_Library_use_libraries,scqahelper,\ $(eval $(call gb_Library_add_exception_objects,scqahelper,\ sc/qa/unit/helper/qahelper \ sc/qa/unit/helper/scfiltertestbase \ + sc/qa/unit/helper/sctiledrenderingtest \ + sc/qa/unit/helper/sctestviewcallback \ sc/qa/unit/functions_test \ )) diff --git a/sc/README.md b/sc/README.md index 9f21cc2ca755..741d7ec5cd02 100644 --- a/sc/README.md +++ b/sc/README.md @@ -55,9 +55,12 @@ properties, see ODF v1.3 part4 3.4 Host-Defined Behaviors https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocument-v1.3-os-part4-formula.html#__RefHeading__1017868_715980110 * Array Functions + * CHOOSECOLS * CHOOSEROWS * DROP * EXPAND + * HSTACK + * VSTACK * TAKE * TOCOL * TOROW diff --git a/sc/inc/PivotTableDataProvider.hxx b/sc/inc/PivotTableDataProvider.hxx index a1df012ccad1..dd2d5dd585dc 100644 --- a/sc/inc/PivotTableDataProvider.hxx +++ b/sc/inc/PivotTableDataProvider.hxx @@ -24,7 +24,6 @@ #include <vector> #include <unordered_map> -namespace com::sun::star::chart2::data { class XDataSequence; } namespace com::sun::star::chart2::data { class XDataSource; } namespace com::sun::star::chart2::data { class XLabeledDataSequence; } namespace com::sun::star::uno { class XComponentContext; } @@ -35,6 +34,7 @@ namespace sc { struct ValueAndFormat; +class PivotTableDataSequence; typedef cppu::WeakImplHelper<css::chart2::data::XDataProvider, css::chart2::data::XPivotTableDataProvider, @@ -147,11 +147,11 @@ private: css::uno::Reference<css::chart2::data::XLabeledDataSequence> newLabeledDataSequence(); - css::uno::Reference<css::chart2::data::XDataSequence> assignLabelsToDataSequence(size_t nIndex); + rtl::Reference<PivotTableDataSequence> assignLabelsToDataSequence(size_t nIndex); - css::uno::Reference<css::chart2::data::XDataSequence> assignValuesToDataSequence(size_t nIndex); + rtl::Reference<PivotTableDataSequence> assignValuesToDataSequence(size_t nIndex); - css::uno::Reference<css::chart2::data::XDataSequence> assignFirstCategoriesToDataSequence(); + rtl::Reference<PivotTableDataSequence> assignFirstCategoriesToDataSequence(); void collectPivotTableData(); diff --git a/sc/inc/address.hxx b/sc/inc/address.hxx index 70885c139968..4acc2a7677ed 100644 --- a/sc/inc/address.hxx +++ b/sc/inc/address.hxx @@ -958,13 +958,6 @@ bool ConvertDoubleRef( const ScDocument& rDocument, const OUString& rRefString, /// append alpha representation of column to buffer SC_DLLPUBLIC void ScColToAlpha( OUStringBuffer& rBuffer, SCCOL nCol); -inline void ScColToAlpha( OUString& rStr, SCCOL nCol) -{ - OUStringBuffer aBuf(4); - ScColToAlpha( aBuf, nCol); - rStr += aBuf; -} - inline OUString ScColToAlpha( SCCOL nCol ) { OUStringBuffer aBuf(4); diff --git a/sc/inc/appoptio.hxx b/sc/inc/appoptio.hxx index af637c5dbdef..d4beeec78c06 100644 --- a/sc/inc/appoptio.hxx +++ b/sc/inc/appoptio.hxx @@ -76,6 +76,10 @@ public: void SetShowSharedDocumentWarning( bool bNew ) { mbShowSharedDocumentWarning = bNew; } bool GetShowSharedDocumentWarning() const { return mbShowSharedDocumentWarning; } + + void SetClickChangeRotation( bool bNew ) { bClickChangeRotation = bNew; } + bool IsClickChangeRotation() const { return bClickChangeRotation; } + ScOptionsUtil::KeyBindingType GetKeyBindingType() const { return meKeyBindingType; } void SetKeyBindingType( ScOptionsUtil::KeyBindingType e ) { meKeyBindingType = e; } @@ -104,6 +108,7 @@ private: sal_Int32 nDefaultObjectSizeWidth; sal_Int32 nDefaultObjectSizeHeight; bool mbShowSharedDocumentWarning; + bool bClickChangeRotation; ScOptionsUtil::KeyBindingType meKeyBindingType; bool mbLinksInsertedLikeMSExcel; }; diff --git a/sc/inc/arealink.hxx b/sc/inc/arealink.hxx index aabe8b8a8c7e..077076f8ba8a 100644 --- a/sc/inc/arealink.hxx +++ b/sc/inc/arealink.hxx @@ -24,7 +24,6 @@ #include <sfx2/lnkbase.hxx> #include "scdllapi.h" -class SfxObjectShell; class ScDocShell; class SAL_DLLPUBLIC_RTTI ScAreaLink final : public ::sfx2::SvBaseLink, public ScRefreshTimer diff --git a/sc/inc/attarray.hxx b/sc/inc/attarray.hxx index 6de20af590a2..facdac80dc85 100644 --- a/sc/inc/attarray.hxx +++ b/sc/inc/attarray.hxx @@ -29,7 +29,6 @@ #include <svl/itemset.hxx> -class ScDocument; class ScEditDataArray; class ScMarkArray; class ScStyleSheet; diff --git a/sc/inc/cellsuno.hxx b/sc/inc/cellsuno.hxx index fdf1c2816e1d..98ef58e9ae02 100644 --- a/sc/inc/cellsuno.hxx +++ b/sc/inc/cellsuno.hxx @@ -108,11 +108,12 @@ class SvxBoxInfoItem; class SvxItemPropertySet; class SvxUnoText; class ScDocument; -class SfxBroadcaster; class SfxHint; class SfxItemPropertyMap; class SfxItemPropertySet; struct SfxItemPropertyMapEntry; +class ScTableRowsObj; +class SolarMutexGuard; namespace editeng { class SvxBorderLine; } @@ -607,6 +608,14 @@ public: virtual OUString SAL_CALL getImplementationName() override; virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + + rtl::Reference< ScCellRangeObj > + getScCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop, + sal_Int32 nRight, sal_Int32 nBottom ); + rtl::Reference< ScTableRowsObj > + getScRowsByPosition( SolarMutexGuard& rGuard, sal_Int32 nLeft, sal_Int32 nTop, + sal_Int32 nRight, sal_Int32 nBottom ); + rtl::Reference< ScTableRowsObj > getScRows(); }; //! really derive cell from range? diff --git a/sc/inc/chgtrack.hxx b/sc/inc/chgtrack.hxx index 9e3aed17aa55..5b781f98d64c 100644 --- a/sc/inc/chgtrack.hxx +++ b/sc/inc/chgtrack.hxx @@ -644,7 +644,7 @@ class SAL_DLLPUBLIC_RTTI ScChangeActionContent final : public ScChangeAction const ScCellValue& rOrgCell, const ScDocument* pFromDoc, ScDocument* pToDoc ); - static void SetCell( OUString& rStr, ScCellValue& rCell, sal_uLong nFormat, const ScDocument* pDoc ); + static void SetCell( OUString& rStr, const ScCellValue& rCell, sal_uLong nFormat, const ScDocument* pDoc ); static bool NeedsNumberFormat( const ScCellValue& rVal ); diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx index 373c06eda05c..55b1f10cb8a8 100644 --- a/sc/inc/colorscale.hxx +++ b/sc/inc/colorscale.hxx @@ -48,12 +48,14 @@ private: ScConditionalFormat* mpFormat; Color maColor; ScColorScaleEntryType meType; - bool mbGreaterThanOrEqual; + ScConditionMode meMode; void setListener(); public: - SC_DLLPUBLIC ScColorScaleEntry(double nVal, const Color& rCol, ScColorScaleEntryType eType = COLORSCALE_VALUE); + SC_DLLPUBLIC ScColorScaleEntry(double nVal, const Color& rCol, + ScColorScaleEntryType eType = COLORSCALE_VALUE, + ScConditionMode eMode = ScConditionMode::EqGreater); SC_DLLPUBLIC ScColorScaleEntry(); ScColorScaleEntry(const ScColorScaleEntry& rEntry); ScColorScaleEntry(ScDocument* pDoc, const ScColorScaleEntry& rEntry); @@ -63,8 +65,8 @@ public: void SetColor(const Color&); SC_DLLPUBLIC double GetValue() const; SC_DLLPUBLIC void SetValue(double nValue); - SC_DLLPUBLIC bool GetGreaterThanOrEqual() const; - SC_DLLPUBLIC void SetGreaterThanOrEqual(bool bGreaterThanOrEqual); + SC_DLLPUBLIC ScConditionMode GetMode() const; + SC_DLLPUBLIC void SetMode(ScConditionMode eMode); SC_DLLPUBLIC void SetFormula(const OUString& rFormula, ScDocument& rDoc, const ScAddress& rAddr, formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_DEFAULT); diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index 22e3ad1e284c..0c6be7ea0c6d 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -59,11 +59,9 @@ struct NoteEntry; class DocumentStreamAccess; class CellValues; class TableValues; -struct RowSpan; class RowHeightContext; class CompileFormulaContext; struct SetFormulaDirtyContext; -enum class MatrixEdge; class ColumnIterator; class Sparkline; @@ -81,8 +79,6 @@ class SvxBoxItem; class ScDocument; class ScEditDataArray; class ScFormulaCell; -class ScMarkData; -class ScPatternAttr; class ScStyleSheet; class SvtBroadcaster; class ScTypedStrData; @@ -93,7 +89,6 @@ struct ScSetStringParam; struct ScColWidthParam; struct ScRefCellValue; struct ScCellValue; -class ScHint; enum class ScMF; struct ScFilterEntries; struct ScInterpreterContext; @@ -175,11 +170,6 @@ public: bool TestInsertRow( SCSIZE nSize ) const; void InsertRow( SCROW nStartRow, SCSIZE nSize ); void DeleteRow( SCROW nStartRow, SCSIZE nSize ); - - // Applies a function to the selected ranges. - // The function looks like - // ApplyDataFunc(ScColumnData& applyTo, SCROW nTop, SCROW nBottom) - template <typename ApplyDataFunc> void Apply(const ScMarkData&, SCCOL, ApplyDataFunc); }; // Use protected inheritance to prevent publishing some internal ScColumnData @@ -241,7 +231,7 @@ friend class sc::CellStoreEvent; SCROW nRow, SCTAB nTab, const OUString& rString, formula::FormulaGrammar::AddressConvention eConv, const ScSetStringParam* pParam ); - void duplicateSparkline(sc::CopyFromClipContext& rContext, sc::ColumnBlockPosition* pBlockPos, + void duplicateSparkline(const sc::CopyFromClipContext& rContext, sc::ColumnBlockPosition* pBlockPos, size_t nColOffset, size_t nDestSize, ScAddress aDestPosition); public: @@ -1070,22 +1060,4 @@ inline void ScColumnData::DeleteRow(SCROW nStartRow, SCSIZE nSize) pAttrArray->DeleteRow( nStartRow, nSize ); } -template <typename ApplyDataFunc> -void ScColumnData::Apply(const ScMarkData& rMark, SCCOL nCol, ApplyDataFunc apply) -{ - if (rMark.IsMultiMarked()) - { - ScMultiSelIter aMultiIter(rMark.GetMultiSelData(), nCol); - SCROW nTop, nBottom; - while (aMultiIter.Next(nTop, nBottom)) - apply(*this, nTop, nBottom); - } - else if (rMark.IsMarked()) - { - const ScRange& aRange = rMark.GetMarkArea(); - if (aRange.aStart.Col() <= nCol && nCol <= aRange.aEnd.Col()) - apply(*this, aRange.aStart.Row(), aRange.aEnd.Row()); - } -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/inc/compiler.hxx b/sc/inc/compiler.hxx index 046761650847..179beb5e8b2c 100644 --- a/sc/inc/compiler.hxx +++ b/sc/inc/compiler.hxx @@ -253,7 +253,7 @@ public: virtual ScCharFlags getCharTableFlags( sal_Unicode c, sal_Unicode cLast ) const = 0; protected: - std::unique_ptr<ScCharFlags[]> mpCharTable; + const std::array<ScCharFlags, 128>& mrCharTable; }; friend struct Convention; diff --git a/sc/inc/conditio.hxx b/sc/inc/conditio.hxx index 2e3ea5639f96..abcf24b00933 100644 --- a/sc/inc/conditio.hxx +++ b/sc/inc/conditio.hxx @@ -366,7 +366,7 @@ public: virtual void SetParent( ScConditionalFormat* pNew ) override; - bool IsCellValid( ScRefCellValue& rCell, const ScAddress& rPos ) const; + bool IsCellValid( const ScRefCellValue& rCell, const ScAddress& rPos ) const; ScConditionMode GetOperation() const { return eOp; } void SetOperation(ScConditionMode eMode); @@ -605,9 +605,9 @@ public: SC_DLLPUBLIC const ScFormatEntry* GetEntry( sal_uInt16 nPos ) const; - SC_DLLPUBLIC OUString GetCellStyle( ScRefCellValue& rCell, const ScAddress& rPos ) const; + SC_DLLPUBLIC OUString GetCellStyle( const ScRefCellValue& rCell, const ScAddress& rPos ) const; - SC_DLLPUBLIC ScCondFormatData GetData( ScRefCellValue& rCell, const ScAddress& rPos ) const; + SC_DLLPUBLIC ScCondFormatData GetData( const ScRefCellValue& rCell, const ScAddress& rPos ) const; bool EqualEntries( const ScConditionalFormat& r, bool bIgnoreSrcPos = false ) const; diff --git a/sc/inc/datauno.hxx b/sc/inc/datauno.hxx index 9159e0af1718..6d152b1bc2ee 100644 --- a/sc/inc/datauno.hxx +++ b/sc/inc/datauno.hxx @@ -22,7 +22,7 @@ #include "global.hxx" #include "queryparam.hxx" #include "subtotalparam.hxx" - +#include "dapiuno.hxx" #include <com/sun/star/sheet/GeneralFunction.hpp> #include <com/sun/star/sheet/XCellRangeReferrer.hpp> #include <com/sun/star/sheet/XSheetFilterDescriptor.hpp> @@ -42,15 +42,12 @@ #include <com/sun/star/util/XRefreshable.hpp> #include <cppuhelper/implbase.hxx> #include <rtl/ref.hxx> +#include <sal/types.h> #include <svl/itemprop.hxx> #include <svl/lstner.hxx> #include <vector> -namespace com::sun::star::sheet { struct TableFilterField2; } -namespace com::sun::star::sheet { struct TableFilterField3; } -namespace com::sun::star::sheet { struct TableFilterField; } - class ScDBData; class ScDocShell; @@ -370,7 +367,7 @@ public: // ScDataPilotFilterDescriptor - FilterDescriptor of a DataPilotDescriptors -class ScDataPilotFilterDescriptor final : public ScFilterDescriptorBase +class SC_DLLPUBLIC ScDataPilotFilterDescriptor final : public ScFilterDescriptorBase { private: rtl::Reference<ScDataPilotDescriptorBase> mxParent; @@ -384,7 +381,7 @@ public: virtual void PutData( const ScQueryParam& rParam ) override; }; -class ScDatabaseRangeObj final : public cppu::WeakImplHelper< +class SAL_DLLPUBLIC_RTTI ScDatabaseRangeObj final : public cppu::WeakImplHelper< css::sheet::XDatabaseRange, css::util::XRefreshable, css::container::XNamed, @@ -407,7 +404,7 @@ private: void Refreshed_Impl(); public: - ScDatabaseRangeObj(ScDocShell* pDocSh, OUString aNm); + SC_DLLPUBLIC ScDatabaseRangeObj(ScDocShell* pDocSh, OUString aNm); SC_DLLPUBLIC ScDatabaseRangeObj(ScDocShell* pDocSh, const SCTAB nTab); virtual ~ScDatabaseRangeObj() override; @@ -424,7 +421,7 @@ public: virtual void SAL_CALL setName( const OUString& aName ) override; // XDatabaseRange - virtual css::table::CellRangeAddress SAL_CALL getDataArea() override; + SC_DLLPUBLIC virtual css::table::CellRangeAddress SAL_CALL getDataArea() override; virtual void SAL_CALL setDataArea( const css::table::CellRangeAddress& aDataArea ) override; virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getSortDescriptor() override; @@ -449,9 +446,9 @@ public: // XPropertySet virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override; - virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, + SC_DLLPUBLIC virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const css::uno::Any& aValue ) override; - virtual css::uno::Any SAL_CALL getPropertyValue( + SC_DLLPUBLIC virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) override; virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const css::uno::Reference< diff --git a/sc/inc/dociter.hxx b/sc/inc/dociter.hxx index 190d284a39e8..0737bed223ec 100644 --- a/sc/inc/dociter.hxx +++ b/sc/inc/dociter.hxx @@ -37,16 +37,8 @@ class ScDocument; class ScPatternAttr; -class ScAttrArray; -class ScAttrIterator; -class ScFlatBoolRowSegments; class ScMatrix; -struct ScDBQueryParamBase; -struct ScQueryParam; -struct ScDBQueryParamInternal; -struct ScDBQueryParamMatrix; class ScFormulaCell; -class OutputDevice; struct ScInterpreterContext; enum class SvNumFormatType : sal_Int16; diff --git a/sc/inc/docpool.hxx b/sc/inc/docpool.hxx index af6d9535177d..c62f12caf387 100644 --- a/sc/inc/docpool.hxx +++ b/sc/inc/docpool.hxx @@ -23,9 +23,6 @@ #include <svl/itempool.hxx> #include "scdllapi.h" -class ScStyleSheet; -class ScDocument; - class SC_DLLPUBLIC ScDocumentPool final : public SfxItemPool { public: diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 06ae276b3484..50e0f09b9e28 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -66,7 +66,6 @@ namespace oox namespace xls { class Connection; - struct ConnectionModel; } } @@ -96,23 +95,18 @@ class StartListeningContext; class EndListeningContext; class CopyFromClipContext; class ColumnSpanSet; -class RangeColumnSpanSet; struct ColumnBlockPosition; struct RefUpdateContext; class EditTextIterator; struct NoteEntry; -class DocumentStreamAccess; class DocumentLinkManager; class CellValues; class TableValues; class RowHeightContext; struct SetFormulaDirtyContext; -class RefMovedHint; struct ReorderParam; -class FormulaGroupAreaListener; class ColumnSet; class UpdatedRangeNames; -class TableColumnBlockPositionSet; class ColumnIterator; class ExternalDataMapper; class Sparkline; @@ -128,7 +122,6 @@ class SdrObject; class SfxBroadcaster; class SfxListener; class SfxItemSet; -class SfxObjectShell; class SfxBindings; class SfxPoolItem; class SfxItemPool; @@ -159,7 +152,6 @@ class ScDetOpList; class ScDocOptions; class ScDocProtection; class ScDocumentPool; -class ScDrawLayer; class ScExtDocOptions; class ScExternalRefManager; class ScFormulaCell; @@ -187,7 +179,6 @@ struct ScSortParam; class ScRefreshTimerControl; class ScUnoListenerCalls; class ScUnoRefList; -class ScRecursionHelper; struct RowInfo; struct ScTableInfo; struct ScTabOpParam; @@ -195,7 +186,6 @@ class VirtualDevice; class ScAutoNameCache; class ScTemporaryChartLock; class ScLookupCache; -struct ScLookupCacheMap; class ScSortedRangeCache; struct ScSortedRangeCacheMap; class ScUndoManager; @@ -221,7 +211,6 @@ class BitmapEx; class ScColumnsRange; struct ScFilterEntries; typedef o3tl::sorted_vector<sal_uInt32> ScCondFormatIndexes; -struct ScSheetLimits; struct ScDataAreaExtras; enum class ScConditionMode; @@ -631,7 +620,7 @@ public: void setHasConnectionXml(bool bUse) { mbConnectionXml = bUse; } bool hasConnectionXml() { return mbConnectionXml; } - void setHasCustomXml(bool bUse, OUString& sCustomXmlPath) + void setHasCustomXml(bool bUse, const OUString& sCustomXmlPath) { mbCustomXml = bUse; aCustomXmlFragmentPath = sCustomXmlPath; @@ -1903,7 +1892,7 @@ public: // pCell is an optimization, must point to rPos SC_DLLPUBLIC const SfxItemSet* GetCondResult( SCCOL nCol, SCROW nRow, SCTAB nTab, ScRefCellValue* pCell = nullptr ) const; - const SfxItemSet* GetCondResult( ScRefCellValue& rCell, const ScAddress& rPos, + const SfxItemSet* GetCondResult( const ScRefCellValue& rCell, const ScAddress& rPos, const ScConditionalFormatList& rList, const ScCondFormatIndexes& rIndex ) const; const SfxPoolItem* GetEffItem( SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich ) const; diff --git a/sc/inc/docuno.hxx b/sc/inc/docuno.hxx index 5586ee4f8963..ecdca483588e 100644 --- a/sc/inc/docuno.hxx +++ b/sc/inc/docuno.hxx @@ -55,9 +55,6 @@ #include <svl/itemprop.hxx> #include <vcl/ITiledRenderable.hxx> -namespace com::sun::star::chart2::data { class XDataProvider; } -namespace com::sun::star::sheet::opencl { struct OpenCLPlatform; } - class ScDocShell; class ScAnnotationObj; class ScMarkData; @@ -71,6 +68,8 @@ class ScRangeList; class ScPrintUIOptions; class ScSheetSaveData; struct ScFormatSaveData; +class ScTableSheetsObj; +class SolarMutexGuard; class SAL_DLLPUBLIC_RTTI ScModelObj : public SfxBaseModel, public vcl::ITiledRenderable, @@ -163,8 +162,9 @@ public: virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; /// XSpreadsheetDocument - virtual css::uno::Reference< css::sheet::XSpreadsheets > SAL_CALL - getSheets() override; + SC_DLLPUBLIC virtual css::uno::Reference< css::sheet::XSpreadsheets > SAL_CALL + getSheets() override final; + SC_DLLPUBLIC rtl::Reference< ScTableSheetsObj > getScSheets(); /// XDataProviderAccess virtual ::css::uno::Reference< css::chart2::data::XDataProvider > SAL_CALL @@ -449,7 +449,6 @@ class ScTableSheetsObj final : public cppu::WeakImplHelper< private: ScDocShell* pDocShell; - rtl::Reference<ScTableSheetObj> GetObjectByIndex_Impl(sal_Int32 nIndex) const; rtl::Reference<ScTableSheetObj> GetObjectByName_Impl(const OUString& aName) const; public: @@ -511,6 +510,8 @@ public: virtual OUString SAL_CALL getImplementationName() override; virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + + rtl::Reference<ScTableSheetObj> GetSheetByIndex(sal_Int32 nIndex) const; }; class ScTableColumnsObj final : public cppu::WeakImplHelper< @@ -637,6 +638,9 @@ public: virtual OUString SAL_CALL getImplementationName() override; virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + + void setPropertyValueIsFiltered( SolarMutexGuard& rGuard, bool b ); + bool getPropertyValueOHeight( SolarMutexGuard& rGuard ); }; class ScSpreadsheetSettingsObj final : public cppu::WeakImplHelper< diff --git a/sc/inc/dpcache.hxx b/sc/inc/dpcache.hxx index 1e7d7075e813..9e7e3397f69f 100644 --- a/sc/inc/dpcache.hxx +++ b/sc/inc/dpcache.hxx @@ -36,7 +36,6 @@ struct ScQueryParam; class ScDPObject; class ScDocument; -class SvNumberFormatter; struct ScInterpreterContext; enum class SvNumFormatType : sal_Int16; @@ -139,9 +138,9 @@ public: SCROW GetIdByItemData(tools::Long nDim, const ScDPItemData& rItem) const; - static sal_uInt32 GetLocaleIndependentFormat( ScInterpreterContext& rContext, sal_uInt32 nNumFormat ); + static sal_uInt32 GetLocaleIndependentFormat( const ScInterpreterContext& rContext, sal_uInt32 nNumFormat ); static OUString GetLocaleIndependentFormattedNumberString( double fValue ); - static OUString GetLocaleIndependentFormattedString( double fValue, ScInterpreterContext& rContext, sal_uInt32 nNumFormat ); + static OUString GetLocaleIndependentFormattedString( double fValue, const ScInterpreterContext& rContext, sal_uInt32 nNumFormat ); SC_DLLPUBLIC OUString GetFormattedString(tools::Long nDim, const ScDPItemData& rItem, bool bLocaleIndependent) const; ScInterpreterContext& GetInterpreterContext() const; diff --git a/sc/inc/dpobject.hxx b/sc/inc/dpobject.hxx index ce05a46f7c6b..fb137dab306a 100644 --- a/sc/inc/dpobject.hxx +++ b/sc/inc/dpobject.hxx @@ -63,7 +63,6 @@ class ScSheetSourceDesc; class ScDPTableData; class ScDPDimensionSaveData; class ScRangeList; -class ScDPCache; class ScDocument; struct ScDPServiceDesc @@ -193,7 +192,7 @@ public: tools::Rectangle& rPosRect, css::sheet::DataPilotFieldOrientation& rOrient, tools::Long& rDimPos ); bool IsFilterButton( const ScAddress& rPos ); - static OUString GetFormattedString(ScDPTableData* pTableData, tools::Long nDimension, const double fValue); + static OUString GetFormattedString(const ScDPTableData* pTableData, tools::Long nDimension, const double fValue); SC_DLLPUBLIC OUString GetFormattedString( std::u16string_view rDimName, const double fValue ); double GetPivotData( diff --git a/sc/inc/dptabsrc.hxx b/sc/inc/dptabsrc.hxx index d9381c40c64a..2244fd8bc664 100644 --- a/sc/inc/dptabsrc.hxx +++ b/sc/inc/dptabsrc.hxx @@ -51,7 +51,6 @@ namespace com::sun::star { namespace sheet { - struct DataPilotFieldFilter; struct MemberResult; } } diff --git a/sc/inc/editutil.hxx b/sc/inc/editutil.hxx index 0173b4aa7f26..7bd593d34a5a 100644 --- a/sc/inc/editutil.hxx +++ b/sc/inc/editutil.hxx @@ -109,7 +109,7 @@ class ScEnginePoolHelper { protected: rtl::Reference<SfxItemPool> m_pEnginePool; - std::unique_ptr<SfxItemSet> m_pDefaults; + std::optional<SfxItemSet> m_oDefaults; bool m_bDeleteEnginePool; ScEnginePoolHelper( SfxItemPool* pEnginePool, bool bDeleteEnginePool ); @@ -134,7 +134,7 @@ public: void SetDefaults( const SfxItemSet& rDefaults ); /// Becomes the owner of the SfxItemSet - void SetDefaults( std::unique_ptr<SfxItemSet> pDefaults ); + void SetDefaults( SfxItemSet&& aDefaults ); /// Set the item in the default ItemSet which is created /// if it doesn't exist yet. @@ -148,7 +148,7 @@ public: void SetTextCurrentDefaults( const EditTextObject& rTextObject ); /// Current defaults are not applied, new defaults are applied void SetTextNewDefaults( const EditTextObject& rTextObject, - std::unique_ptr<SfxItemSet> pDefaults ); + SfxItemSet&& aDefaults ); /// New defaults are applied, but not stored void SetTextTempDefaults( const EditTextObject& rTextObject, const SfxItemSet& rDefaults ); @@ -156,7 +156,7 @@ public: /// SetText and apply defaults already set void SetTextCurrentDefaults( const OUString& rText ); /// Current defaults are not applied, new defaults are applied - void SetTextNewDefaults( const OUString& rText, std::unique_ptr<SfxItemSet> pDefaults ); + void SetTextNewDefaults( const OUString& rText, SfxItemSet&& aDefaults ); /// Paragraph attributes that are not defaults are copied to /// character attributes and all paragraph attributes reset diff --git a/sc/inc/fillinfo.hxx b/sc/inc/fillinfo.hxx index caecd6a7072b..de66e7a370e2 100644 --- a/sc/inc/fillinfo.hxx +++ b/sc/inc/fillinfo.hxx @@ -29,8 +29,6 @@ #include <o3tl/typed_flags_set.hxx> #include <optional> -class SfxItemSet; -class SvxBrushItem; class SvxBoxItem; class SvxLineItem; class SvxShadowItem; @@ -92,6 +90,7 @@ struct ScIconSetInfo { sal_Int32 nIconIndex; ScIconSetType eIconSetType; + ScConditionMode eConditionMode; tools::Long mnHeight = 0; bool mbShowValue; }; diff --git a/sc/inc/fstalgorithm.hxx b/sc/inc/fstalgorithm.hxx index 4d46cfaaa28c..40b28d8d8a8f 100644 --- a/sc/inc/fstalgorithm.hxx +++ b/sc/inc/fstalgorithm.hxx @@ -103,7 +103,7 @@ std::vector<Span> toSpanArray( const mdds::flat_segment_tree<Key,bool>& rTree, K typedef mdds::flat_segment_tree<Key,bool> FstType; std::vector<Span> aSpans; - if (!rTree.is_tree_valid()) + if (!rTree.valid_tree()) return aSpans; bool bThisVal = false; diff --git a/sc/inc/global.hxx b/sc/inc/global.hxx index e37b2dbaef58..ca35a1c968e1 100644 --- a/sc/inc/global.hxx +++ b/sc/inc/global.hxx @@ -491,7 +491,6 @@ class LocaleDataWrapper; class SvtSysLocale; class CalendarWrapper; class CollatorWrapper; -class IntlWrapper; class ScFieldEditEngine; namespace com::sun::star { diff --git a/sc/inc/globstr.hrc b/sc/inc/globstr.hrc index ceca2b5d31c7..c641672a7bbc 100644 --- a/sc/inc/globstr.hrc +++ b/sc/inc/globstr.hrc @@ -588,6 +588,7 @@ #define STR_SENSITIVITY_INCREASE NC_("STR_SENSITIVITY_INCREASE", "Allowable Increase") #define STR_SENSITIVITY_SHADOWPRICE NC_("STR_SENSITIVITY_SHADOWPRICE", "Shadow Price") #define STR_SENSITIVITY_RHS NC_("STR_SENSITIVITY_RHS", "Constraint R.H. Side") +#define STD_ERR_CSV_PARSE NC_("STD_ERR_CSV_PARSE", "An error occurred while parsing the CSV file.") #endif diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h index 582ef1457ab7..8aaf758181ef 100644 --- a/sc/inc/helpids.h +++ b/sc/inc/helpids.h @@ -600,9 +600,12 @@ inline constexpr OUString HID_FUNC_XMATCH_MS = u"SC_HID_FUNC_XMATCH_MS"_ustr; inline constexpr OUString HID_FUNC_FILTER_MS = u"SC_HID_FUNC_FILTER_MS"_ustr; inline constexpr OUString HID_FUNC_SORT_MS = u"SC_HID_FUNC_SORT_MS"_ustr; inline constexpr OUString HID_FUNC_SORTBY_MS = u"SC_HID_FUNC_SORTBY_MS"_ustr; +inline constexpr OUString HID_FUNC_CHOOSECOLS_MS = u"SC_HID_FUNC_CHOOSECOLS_MS"_ustr; inline constexpr OUString HID_FUNC_CHOOSEROWS_MS = u"SC_HID_FUNC_CHOOSEROWS_MS"_ustr; inline constexpr OUString HID_FUNC_DROP_MS = u"SC_HID_FUNC_DROP_MS"_ustr; inline constexpr OUString HID_FUNC_EXPAND_MS = u"SC_HID_FUNC_EXPAND_MS"_ustr; +inline constexpr OUString HID_FUNC_HSTACK_MS = u"SC_HID_FUNC_HSTACK_MS"_ustr; +inline constexpr OUString HID_FUNC_VSTACK_MS = u"SC_HID_FUNC_VSTACK_MS"_ustr; inline constexpr OUString HID_FUNC_TAKE_MS = u"SC_HID_FUNC_TAKE_MS"_ustr; inline constexpr OUString HID_FUNC_TOCOL_MS = u"SC_HID_FUNC_TOCOL_MS"_ustr; inline constexpr OUString HID_FUNC_TOROW_MS = u"SC_HID_FUNC_TOROW_MS"_ustr; diff --git a/sc/inc/interpretercontext.hxx b/sc/inc/interpretercontext.hxx index 4f66f29e31b6..f03450354eb3 100644 --- a/sc/inc/interpretercontext.hxx +++ b/sc/inc/interpretercontext.hxx @@ -37,8 +37,6 @@ struct DelayedSetNumberFormat sal_uInt32 mnNumberFormat; }; -class ScInterpreterContextPool; - struct ScInterpreterContext { const ScDocument* mpDoc; @@ -166,9 +164,6 @@ private: SvNumberFormatter* mpFormatter; }; -class ScThreadedInterpreterContextGetterGuard; -class ScInterpreterContextGetterGuard; - class ScInterpreterContextPool { friend class ScThreadedInterpreterContextGetterGuard; diff --git a/sc/inc/lookupcache.hxx b/sc/inc/lookupcache.hxx index bc50045f06a8..f71013dfded4 100644 --- a/sc/inc/lookupcache.hxx +++ b/sc/inc/lookupcache.hxx @@ -28,6 +28,7 @@ class ScDocument; struct ScLookupCacheMap; struct ScQueryEntry; +enum class LookupSearchMode; /** Lookup cache for one range used with interpreter functions such as VLOOKUP and MATCH. Caches query for a specific row and the resulting address looked @@ -35,7 +36,6 @@ struct ScQueryEntry; performed, which usually occur to obtain a different offset column of the same query. */ - class ScLookupCache final : public SvtListener { public: @@ -56,14 +56,6 @@ public: GREATER_EQUAL }; - enum SearchMode - { - SEARCHFWD = 1, - SEARCHREV = -1, - SEARCHBASC = 2, - SEARCHDESC = -2 - }; - class QueryCriteria { union @@ -74,7 +66,7 @@ public: bool mbAlloc; bool mbString; QueryOp meOp; - SearchMode meSearchMode; + LookupSearchMode meSearchMode; void deleteString() { @@ -86,12 +78,12 @@ public: public: - explicit QueryCriteria( const ScQueryEntry & rEntry, sal_Int8 nSearchMode ); + explicit QueryCriteria( const ScQueryEntry & rEntry, LookupSearchMode nSearchMode ); QueryCriteria( const QueryCriteria & r ); ~QueryCriteria(); QueryOp getQueryOp() const { return meOp; } - SearchMode getSearchMode() const { return meSearchMode; } + LookupSearchMode getSearchMode() const { return meSearchMode; } void setDouble( double fVal ) { @@ -163,9 +155,9 @@ private: SCROW mnRow; SCTAB mnTab; QueryOp meOp; - SearchMode meSearchMode; + LookupSearchMode meSearchMode; - QueryKey( const ScAddress & rAddress, const QueryOp eOp, SearchMode eSearchMode ) : + QueryKey( const ScAddress & rAddress, const QueryOp eOp, LookupSearchMode eSearchMode ) : mnRow( rAddress.Row()), mnTab( rAddress.Tab()), meOp( eOp), diff --git a/sc/inc/lookupsearchmode.hxx b/sc/inc/lookupsearchmode.hxx new file mode 100644 index 000000000000..fb6b278b8179 --- /dev/null +++ b/sc/inc/lookupsearchmode.hxx @@ -0,0 +1,33 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +/** Mode used with interpreter functions such as VLOOKUP and MATCH. */ +enum class LookupSearchMode +{ + Forward = 1, // Perform a search starting at the first item. This is the default. + Reverse = -1, // Perform a reverse search starting at the last item. + BinaryAscending + = 2, // Perform a binary search that relies on lookup_array being sorted in ascending order. + BinaryDescending + = -2 // Perform a binary search that relies on lookup_array being sorted in descending order. +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/inc/markarr.hxx b/sc/inc/markarr.hxx index 45fcba6e28b8..1e50a437df74 100644 --- a/sc/inc/markarr.hxx +++ b/sc/inc/markarr.hxx @@ -23,7 +23,6 @@ #include <tools/long.hxx> #include <vector> -class ScRangeList; struct ScSheetLimits; struct ScMarkEntry diff --git a/sc/inc/markdata.hxx b/sc/inc/markdata.hxx index 340accf38755..a704a4d356fb 100644 --- a/sc/inc/markdata.hxx +++ b/sc/inc/markdata.hxx @@ -33,8 +33,6 @@ struct ColRowSpan; } -class ScMarkArray; - //! todo: //! It should be possible to have MarkArrays for each table, in order to //! enable "search all" across more than one table again! diff --git a/sc/inc/patattr.hxx b/sc/inc/patattr.hxx index b75ee42e64f3..99d0d1e51788 100644 --- a/sc/inc/patattr.hxx +++ b/sc/inc/patattr.hxx @@ -91,8 +91,9 @@ public: SfxItemPool& GetPool() const { return mrSfxItemPool; } void CellStyleDeleted(const ScStyleSheet& rStyle); - void CellStyleCreated(ScDocument& rDoc, const OUString& rName); - void UpdateAllStyleSheets(ScDocument& rDoc); + void CellStyleCreated(const ScDocument& rDoc, const OUString& rName); + void RenameCellStyle(ScStyleSheet& rStyle, const OUString& rNewName); + void UpdateAllStyleSheets(const ScDocument& rDoc); void AllStylesToNames(); void ReIndexRegistered(); }; diff --git a/sc/inc/poolcach.hxx b/sc/inc/poolcach.hxx index f53d0e6532fb..3dc9d29b21b5 100644 --- a/sc/inc/poolcach.hxx +++ b/sc/inc/poolcach.hxx @@ -21,8 +21,6 @@ #include "patattr.hxx" #include <vector> -class CellAttributeHelper; -class SfxItemSet; class SfxPoolItem; class ScItemPoolCache diff --git a/sc/inc/postit.hxx b/sc/inc/postit.hxx index 407ee0d3ce09..2e54e64c44b5 100644 --- a/sc/inc/postit.hxx +++ b/sc/inc/postit.hxx @@ -189,7 +189,7 @@ class SC_DLLPUBLIC ScNoteUtil bool bAlwaysCreateCaption, sal_uInt32 nPostItId, bool bShouldAutoStamp = true); - static ScNoteData CreateNoteData(ScDocument& rDoc, const ScAddress& rPos, + static ScNoteData CreateNoteData(const ScDocument& rDoc, const ScAddress& rPos, const tools::Rectangle& rCaptionRect, bool bShown); public: diff --git a/sc/inc/queryentry.hxx b/sc/inc/queryentry.hxx index 9798b83df785..ad130549cb0f 100644 --- a/sc/inc/queryentry.hxx +++ b/sc/inc/queryentry.hxx @@ -66,6 +66,7 @@ struct SC_DLLPUBLIC ScQueryEntry final ScQueryEntry(); ScQueryEntry(const ScQueryEntry& r); + ScQueryEntry(ScQueryEntry&& r) noexcept; ~ScQueryEntry(); /// creates pSearchParam and pSearchText if necessary diff --git a/sc/inc/queryevaluator.hxx b/sc/inc/queryevaluator.hxx index ff086e9fa8bf..d522a766f455 100644 --- a/sc/inc/queryevaluator.hxx +++ b/sc/inc/queryevaluator.hxx @@ -103,7 +103,7 @@ class ScQueryEvaluator const ScQueryEntry& rEntry, const ScQueryEntry::Item& rItem); - std::pair<bool, bool> processEntry(SCROW nRow, SCCOL nCol, ScRefCellValue& aCell, + std::pair<bool, bool> processEntry(SCROW nRow, SCCOL nCol, const ScRefCellValue& aCell, const ScQueryEntry& rEntry, size_t nEntryIndex); bool equalCellSharedString(const ScRefCellValue& rCell, SCROW nRow, SCCOLROW nField, diff --git a/sc/inc/queryiter.hxx b/sc/inc/queryiter.hxx index 67f0e16fc0b5..6fa91b7c1347 100644 --- a/sc/inc/queryiter.hxx +++ b/sc/inc/queryiter.hxx @@ -22,6 +22,7 @@ #include "queryparam.hxx" #include "mtvelements.hxx" #include "types.hxx" +#include "lookupsearchmode.hxx" struct ScComplexRefData; class ScSortedRangeCache; @@ -269,10 +270,13 @@ public: void AdvanceQueryParamEntryField(); void AdvanceQueryParamEntryFieldForBinarySearch(); - void SetSortedBinarySearchMode( sal_Int8 nSearchMode ) + void SetSortedBinarySearchMode( LookupSearchMode nSearchMode ) { - nSortedBinarySearch = sal::static_int_cast<sal_uInt8>(nSearchMode == 2 ? - nSearchbAscd : (nSearchMode == -2 ? nSearchbDesc : nBinarySearchDisabled)); + nSortedBinarySearch = + nSearchMode == LookupSearchMode::BinaryAscending + ? nSearchbAscd + : (nSearchMode == LookupSearchMode::BinaryDescending + ? nSearchbDesc : nBinarySearchDisabled); } void SetLookupMode( sal_uInt16 nVal ) diff --git a/sc/inc/queryparam.hxx b/sc/inc/queryparam.hxx index 5b27bce3bf77..913050521232 100644 --- a/sc/inc/queryparam.hxx +++ b/sc/inc/queryparam.hxx @@ -30,7 +30,6 @@ struct ScInterpreterContext; struct ScDBQueryParamInternal; -struct ScQueryEntry; namespace svl { @@ -58,7 +57,7 @@ struct SAL_DLLPUBLIC_RTTI ScQueryParamBase SC_DLLPUBLIC ScQueryEntry& GetEntry(SCSIZE n); SC_DLLPUBLIC ScQueryEntry& AppendEntry(); ScQueryEntry* FindEntryByField(SCCOLROW nField, bool bNew); - std::vector<ScQueryEntry*> FindAllEntriesByField(SCCOLROW nField); + SC_DLLPUBLIC std::vector<ScQueryEntry*> FindAllEntriesByField(SCCOLROW nField); SC_DLLPUBLIC bool RemoveEntryByField(SCCOLROW nField); SC_DLLPUBLIC void RemoveAllEntriesByField(SCCOLROW nField); void Resize(size_t nNew); diff --git a/sc/inc/rangecache.hxx b/sc/inc/rangecache.hxx index 4f0e810db0a8..0e04d47c4ad9 100644 --- a/sc/inc/rangecache.hxx +++ b/sc/inc/rangecache.hxx @@ -30,7 +30,6 @@ class ScDocument; struct ScInterpreterContext; struct ScQueryParam; -struct ScSortedRangeCacheMap; /** Sorted cache for one range used with interpreter functions such as VLOOKUP and MATCH. Caches sorted order for cells in the given range, which must diff --git a/sc/inc/rangeseq.hxx b/sc/inc/rangeseq.hxx index 1657811e2e40..289c37a10b7e 100644 --- a/sc/inc/rangeseq.hxx +++ b/sc/inc/rangeseq.hxx @@ -43,7 +43,7 @@ public: static bool FillStringArray( css::uno::Any& rAny, ScDocument& rDoc, const ScRange& rRange ); static bool FillStringArray( css::uno::Any& rAny, - const ScMatrix* pMatrix, ScInterpreterContext& rContext ); + const ScMatrix* pMatrix, const ScInterpreterContext& rContext ); static bool FillMixedArray( css::uno::Any& rAny, ScDocument& rDoc, const ScRange& rRange, bool bAllowNV = false ); diff --git a/sc/inc/refhint.hxx b/sc/inc/refhint.hxx index ad13287ede65..b453ae29761c 100644 --- a/sc/inc/refhint.hxx +++ b/sc/inc/refhint.hxx @@ -14,7 +14,6 @@ namespace sc { -struct RefUpdateContext; class ColRowReorderMapType; class RefHint : public SfxHint diff --git a/sc/inc/sc.hrc b/sc/inc/sc.hrc index a1a8be63f46a..1749b87de475 100644 --- a/sc/inc/sc.hrc +++ b/sc/inc/sc.hrc @@ -629,6 +629,7 @@ static_assert(SID_PREVIEW_END < SID_KEYFUNC_START, "calc slots ids trampling inf #define SID_UNGROUP_SPARKLINES (SID_NEW_SLOTS+115) #define SID_EDIT_SPARKLINE (SID_NEW_SLOTS+116) #define SID_SC_OPT_LINKS TypedWhichId<SfxBoolItem>(SID_NEW_SLOTS + 117) +#define SID_CLEAR_AUTO_FILTER (SID_NEW_SLOTS+118) // idl parameter diff --git a/sc/inc/scabstdlg.hxx b/sc/inc/scabstdlg.hxx index 245869363f2e..8d46f1b3a2dc 100644 --- a/sc/inc/scabstdlg.hxx +++ b/sc/inc/scabstdlg.hxx @@ -396,7 +396,6 @@ public: virtual LanguageType GetLanguageType() const = 0; virtual bool IsDateConversionSet() const = 0; virtual bool IsScientificConversionSet() const = 0; - virtual bool IsKeepAskingSet() const = 0; }; class AbstractScGoToTabDlg : public VclAbstractDialog diff --git a/sc/inc/scfuncs.hrc b/sc/inc/scfuncs.hrc index ca156da27fc3..e910534b39af 100644 --- a/sc/inc/scfuncs.hrc +++ b/sc/inc/scfuncs.hrc @@ -4251,16 +4251,24 @@ const TranslateId SC_OPCODE_RANDARRAY_ARY[] = NC_("SC_OPCODE_RANDARRAY", "Return integer (TRUE) or decimal (FALSE) values.") }; +// -=*# Resource for function CHOOSECOLS #*=- +const TranslateId SC_OPCODE_CHOOSECOLS_ARY[] = +{ + NC_("SC_OPCODE_CHOOSECOLS", "Returns the specified columns from an array."), + NC_("SC_OPCODE_CHOOSECOLS", "Array"), + NC_("SC_OPCODE_CHOOSECOLS", "The array containing the columns to be returned in the new array."), + NC_("SC_OPCODE_CHOOSECOLS", "Column "), + NC_("SC_OPCODE_CHOOSECOLS", "Column 1, Column 2,... The list of column numbers to be returned.") +}; + // -=*# Resource for function CHOOSEROWS #*=- const TranslateId SC_OPCODE_CHOOSEROWS_ARY[] = { NC_("SC_OPCODE_CHOOSEROWS", "Returns the specified rows from an array."), NC_("SC_OPCODE_CHOOSEROWS", "Array"), - NC_("SC_OPCODE_CHOOSEROWS", "The array containing the columns to be returned in the new array."), - NC_("SC_OPCODE_CHOOSEROWS", "Row 1"), - NC_("SC_OPCODE_CHOOSEROWS", "The first row number to be returned."), - NC_("SC_OPCODE_CHOOSEROWS", "Row 2"), - NC_("SC_OPCODE_CHOOSEROWS", "Row 2, Row 3,... The list of row numbers to be returned.") + NC_("SC_OPCODE_CHOOSEROWS", "The array containing the rows to be returned in the new array."), + NC_("SC_OPCODE_CHOOSEROWS", "Row "), + NC_("SC_OPCODE_CHOOSEROWS", "Row 1, Row 2,... The list of row numbers to be returned.") }; // -=*# Resource for function DROP #*=- @@ -4271,7 +4279,7 @@ const TranslateId SC_OPCODE_DROP_ARY[] = NC_("SC_OPCODE_DROP", "The array from which to drop rows or columns."), NC_("SC_OPCODE_DROP", "Rows"), NC_("SC_OPCODE_DROP", "The number of rows to drop. A negative value drops from the end of the array."), - NC_("SC_OPCODE_DROP", "Column"), + NC_("SC_OPCODE_DROP", "Columns"), NC_("SC_OPCODE_DROP", "The number of columns to drop. A negative value drops from the end of the array.") }; @@ -4283,12 +4291,32 @@ const TranslateId SC_OPCODE_EXPAND_ARY[] = NC_("SC_OPCODE_EXPAND", "The array to expand."), NC_("SC_OPCODE_EXPAND", "Rows"), NC_("SC_OPCODE_EXPAND", "The number of rows in the expanded array. If missing, rows will not be expanded."), - NC_("SC_OPCODE_EXPAND", "Column"), + NC_("SC_OPCODE_EXPAND", "Columns"), NC_("SC_OPCODE_EXPAND", "The number of columns in the expanded array. If missing, columns will not be expanded."), NC_("SC_OPCODE_EXPAND", "Pad with"), NC_("SC_OPCODE_EXPAND", "The value with which to pad. The default is #N/A.") }; +// -=*# Resource for function HSTACK #*=- +const TranslateId SC_OPCODE_HSTACK_ARY[] = +{ + NC_("SC_OPCODE_HSTACK", "Appends arrays horizontally to create a larger array."), + NC_("SC_OPCODE_HSTACK", "Array"), + NC_("SC_OPCODE_HSTACK", "The first array to append."), + NC_("SC_OPCODE_HSTACK", "Array"), + NC_("SC_OPCODE_HSTACK", "Array 1, Array 2,... The following arrays to append. If an array has fewer rows, #N/A error will be returned in the additional rows."), +}; + +// -=*# Resource for function VSTACK #*=- +const TranslateId SC_OPCODE_VSTACK_ARY[] = +{ + NC_("SC_OPCODE_VSTACK", "Appends arrays vertically to create a larger array."), + NC_("SC_OPCODE_VSTACK", "Array"), + NC_("SC_OPCODE_VSTACK", "The first array to append."), + NC_("SC_OPCODE_VSTACK", "Array"), + NC_("SC_OPCODE_VSTACK", "Array 1, Array 2,... The following arrays to append. If an array has fewer columns, #N/A error will be returned in the additional columns."), +}; + // -=*# Resource for function TAKE #*=- const TranslateId SC_OPCODE_TAKE_ARY[] = { @@ -4297,18 +4325,18 @@ const TranslateId SC_OPCODE_TAKE_ARY[] = NC_("SC_OPCODE_TAKE", "The array from which to take rows or columns."), NC_("SC_OPCODE_TAKE", "Rows"), NC_("SC_OPCODE_TAKE", "The number of rows to take. A negative value takes from the end of the array."), - NC_("SC_OPCODE_TAKE", "Column"), + NC_("SC_OPCODE_TAKE", "Columns"), NC_("SC_OPCODE_TAKE", "The number of columns to take. A negative value takes from the end of the array.") }; // -=*# Resource for function TOCOL #*=- const TranslateId SC_OPCODE_TOCOL_ARY[] = { - NC_("SC_OPCODE_TOCOL", "transforms an array into a single column."), + NC_("SC_OPCODE_TOCOL", "Transforms an array into a single column."), NC_("SC_OPCODE_TOCOL", "Array"), - NC_("SC_OPCODE_TOCOL", "The range or array to return as a column."), + NC_("SC_OPCODE_TOCOL", "The range or array to return as a single column."), NC_("SC_OPCODE_TOCOL", "Ignore"), - NC_("SC_OPCODE_TOCOL", "Whether to ignore certain types of values. 0 or omitted - keep all values (default). 1 - ignore blanks. 2 - ignore errors. 3 - ignore blanks and errors."), + NC_("SC_OPCODE_TOCOL", "Whether to ignore certain types of values. 0 or omitted - keep all values (default). 1 - ignore blank cells. 2 - ignore cells with error. 3 - ignore blanks cells and cells with error."), NC_("SC_OPCODE_TOCOL", "Scan by column"), NC_("SC_OPCODE_TOCOL", "Scan the array by column. FALSE or omitted (default) - the array is scanned by row. TRUE - the array is scanned by column.") }; @@ -4318,9 +4346,9 @@ const TranslateId SC_OPCODE_TOROW_ARY[] = { NC_("SC_OPCODE_TOROW", "transforms an array into a single row."), NC_("SC_OPCODE_TOROW", "Array"), - NC_("SC_OPCODE_TOROW", "The range or array to return as a row."), + NC_("SC_OPCODE_TOROW", "The range or array to return as a single row."), NC_("SC_OPCODE_TOROW", "Ignore"), - NC_("SC_OPCODE_TOROW", "Whether to ignore certain types of values. 0 or omitted - keep all values (default). 1 - ignore blanks. 2 - ignore errors. 3 - ignore blanks and errors."), + NC_("SC_OPCODE_TOROW", "Whether to ignore certain types of values. 0 or omitted - keep all values (default). 1 - ignore blank cells. 2 - ignore cells with error. 3 - ignore blanks cells and cells with error."), NC_("SC_OPCODE_TOROW", "Scan by column"), NC_("SC_OPCODE_TOROW", "Scan the array by column. FALSE or omitted (default) - the array is scanned by row. TRUE - the array is scanned by column.") }; diff --git a/sc/inc/scitems.hxx b/sc/inc/scitems.hxx index d8aaee3c0273..57493ddd8dcc 100644 --- a/sc/inc/scitems.hxx +++ b/sc/inc/scitems.hxx @@ -68,7 +68,6 @@ class ScMergeAttr; class ScMergeFlagAttr; class ScProtectionAttr; class SvxBoxInfoItem; -class ScPatternAttr; class SvxPageItem; class ScViewObjectModeItem; class SfxUInt16Item; diff --git a/sc/inc/scmatrix.hxx b/sc/inc/scmatrix.hxx index 2b0a6e64c32a..31428042a17f 100644 --- a/sc/inc/scmatrix.hxx +++ b/sc/inc/scmatrix.hxx @@ -37,6 +37,7 @@ class ScInterpreter; struct ScInterpreterContext; class ScMatrixImpl; enum class FormulaError : sal_uInt16; +class ScJumpMatrix; namespace sc { @@ -378,6 +379,7 @@ public: size_t Count(bool bCountStrings, bool bCountErrors, bool bIgnoreEmptyStrings = false) const ; size_t MatchDoubleInColumns(double fValue, size_t nCol1, size_t nCol2) const ; size_t MatchStringInColumns(const svl::SharedString& rStr, size_t nCol1, size_t nCol2) const ; + void IfJump( ScJumpMatrix& rJumpMatrix, const short* pJump, short nJumpCount ) const ; double GetMaxValue( bool bTextAsZero, bool bIgnoreErrorValues = false ) const ; double GetMinValue( bool bTextAsZero, bool bIgnoreErrorValues = false ) const ; diff --git a/sc/inc/scmod.hxx b/sc/inc/scmod.hxx index fd19d67df5d9..d51e742003c4 100644 --- a/sc/inc/scmod.hxx +++ b/sc/inc/scmod.hxx @@ -70,7 +70,6 @@ class ScAddInCfg; class ScTransferObj; class ScDrawTransferObj; class ScSelectionTransferObj; -class ScFormEditData; class ScMarkData; struct ScDragData; class SfxDialogController; @@ -187,6 +186,7 @@ public: svtools::ColorConfig& GetColorConfig(); static bool IsLOKViewInDarkMode(); SC_DLLPUBLIC SvtUserOptions& GetUserOptions(); + SC_DLLPUBLIC FieldUnit GetMetric(); void ModifyOptions( const SfxItemSet& rOptSet ); @@ -229,7 +229,7 @@ public: virtual std::optional<SfxItemSet> CreateItemSet( sal_uInt16 nId ) override; virtual void ApplyItemSet( sal_uInt16 nId, const SfxItemSet& rSet ) override; virtual std::unique_ptr<SfxTabPage> CreateTabPage( sal_uInt16 nId, weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rSet ) override; - virtual std::optional<SfxStyleFamilies> CreateStyleFamilies() override; + virtual SfxStyleFamilies CreateStyleFamilies() override; void SetInSharedDocLoading( bool bNew ) { m_bIsInSharedDocLoading = bNew; } bool IsInSharedDocLoading() const { return m_bIsInSharedDocLoading; } diff --git a/sc/inc/scopetools.hxx b/sc/inc/scopetools.hxx index a836f06ee90b..7c0f32e9fee2 100644 --- a/sc/inc/scopetools.hxx +++ b/sc/inc/scopetools.hxx @@ -13,10 +13,6 @@ class ScDocument; class ScColumn; -namespace vcl -{ -class Window; -} namespace sc { diff --git a/sc/inc/spellcheckcontext.hxx b/sc/inc/spellcheckcontext.hxx index f068d91f5181..dc5f09449039 100644 --- a/sc/inc/spellcheckcontext.hxx +++ b/sc/inc/spellcheckcontext.hxx @@ -21,6 +21,28 @@ class ScTabEditEngine; namespace sc { +typedef std::vector<editeng::MisspellRanges> MisspellRangesVec; + +struct MisspellRangeResult +{ + const MisspellRangesVec* mpRanges; + LanguageType meCellLang; + + MisspellRangeResult() + : mpRanges(nullptr) + , meCellLang(LANGUAGE_DONTKNOW) + { + } + + MisspellRangeResult(const MisspellRangesVec* pRanges, LanguageType eCellLang) + : mpRanges(pRanges) + , meCellLang(eCellLang) + { + } + + bool HasRanges() const { return mpRanges != nullptr; } +}; + /** * Class shared between grid windows to cache * spelling results. @@ -45,9 +67,8 @@ public: void dispose(); bool isMisspelled(SCCOL nCol, SCROW nRow) const; - const std::vector<editeng::MisspellRanges>* getMisspellRanges(SCCOL nCol, SCROW nRow) const; - void setMisspellRanges(SCCOL nCol, SCROW nRow, - const std::vector<editeng::MisspellRanges>* pRanges); + MisspellRangeResult getMisspellRanges(SCCOL nCol, SCROW nRow) const; + void setMisspellRanges(SCCOL nCol, SCROW nRow, const MisspellRangeResult& rRangeResult); void reset(); void resetForContentChange(); diff --git a/sc/inc/stlpool.hxx b/sc/inc/stlpool.hxx index 206ec79dc507..6d62affe7b71 100644 --- a/sc/inc/stlpool.hxx +++ b/sc/inc/stlpool.hxx @@ -56,6 +56,9 @@ public: // Finds Para style with given name case-insensitively, or STR_STYLENAME_STANDARD ScStyleSheet* FindAutoStyle(const OUString& rName); + // Rename rStyle to rNewName, and update CellAttribute holder + SC_DLLPUBLIC void Rename(SfxStyleSheetBase& rStyle, const OUString& rNewName, SfxStyleFamily eFam); + SC_DLLPUBLIC virtual SfxStyleSheetBase& Make( const OUString&, SfxStyleFamily eFam, SfxStyleSearchBits nMask = SfxStyleSearchBits::All, const OUString& rParentStyleSheetName = u""_ustr) override; diff --git a/sc/inc/styleuno.hxx b/sc/inc/styleuno.hxx index f524cf8bc615..db7c63c9b03c 100644 --- a/sc/inc/styleuno.hxx +++ b/sc/inc/styleuno.hxx @@ -33,7 +33,6 @@ #include <cppuhelper/implbase.hxx> namespace com::sun::star::container { class XIndexReplace; } -namespace com::sun::star::lang { class XComponent; } class ScDocShell; class SfxItemPropertySet; diff --git a/sc/inc/subtotal.hxx b/sc/inc/subtotal.hxx index a2a8459b1939..86d484402b5c 100644 --- a/sc/inc/subtotal.hxx +++ b/sc/inc/subtotal.hxx @@ -29,8 +29,6 @@ public: static bool SafeDiv( double& fVal1, double fVal2); }; -class ScFunctionData; - /** Implements the Welford Online one-pass algorithm. See https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_Online_algorithm and Donald E. Knuth, TAoCP vol.2, 3rd edn., p. 232 diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx index 74d4f978a523..daa255957744 100644 --- a/sc/inc/table.hxx +++ b/sc/inc/table.hxx @@ -70,7 +70,6 @@ class ColumnSpanSet; class RangeColumnSpanSet; class ColumnSet; struct ColumnBlockPosition; -class TableColumnBlockPositionSet; struct RefUpdateContext; struct RefUpdateInsertTabContext; struct RefUpdateDeleteTabContext; @@ -83,7 +82,6 @@ class RowHeightContext; class CompileFormulaContext; struct SetFormulaDirtyContext; class ColumnIterator; -class ScDrawObjData; } class SfxItemSet; @@ -100,7 +98,6 @@ class ScPrintSaverTab; class ScProgress; class ScRangeList; class ScSheetEvents; -class ScSortInfoArray; class ScConditionalFormat; class ScConditionalFormatList; class ScStyleSheet; @@ -116,7 +113,6 @@ struct ScSetStringParam; struct ScColWidthParam; class ScRangeName; class ScDBData; -class ScHint; class ScPostIt; struct ScInterpreterContext; @@ -155,6 +151,9 @@ private: const Iterator maEnd; }; +template <typename T> +concept ColumnDataApply = std::is_invocable_v<T, ScColumnData&, SCROW, SCROW>; + class ScTable { private: @@ -1330,9 +1329,19 @@ private: void SetLoadingMedium(bool bLoading); + struct FillMaxRotCacheMapHash + { + size_t operator()(const std::pair<const ScPatternAttr*, const SfxItemSet*>& rPair) const noexcept + { + return std::hash<const ScPatternAttr*>{}(rPair.first) ^ (std::hash<const SfxItemSet*>{}(rPair.second) << 1); + } + }; + typedef std::unordered_map<std::pair<const ScPatternAttr*, const SfxItemSet*>, ScRotateDir, FillMaxRotCacheMapHash> FillMaxRotCacheMap; + SCSIZE FillMaxRot( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCCOL nX2, SCCOL nCol, SCROW nAttrRow1, SCROW nAttrRow2, SCSIZE nArrY, - const ScPatternAttr* pPattern, const SfxItemSet* pCondSet ); + const ScPatternAttr* pPattern, const SfxItemSet* pCondSet, + FillMaxRotCacheMap* pCache); // idle calculation of OutputDevice text width for cell // also invalidates script type, broadcasts for "calc as shown" @@ -1448,11 +1457,14 @@ private: // as few columns as needed, and applies the rest to default column data. // The function looks like // ApplyDataFunc(ScColumnData& applyTo, SCROW nTop, SCROW nBottom) - template <typename ApplyDataFunc> + template <ColumnDataApply ApplyDataFunc> void ApplyWithAllocation(const ScMarkData&, ApplyDataFunc); + + // Applies a function to the selected ranges in a given column. + template <ColumnDataApply ApplyDataFunc> void Apply(const ScMarkData&, SCCOL, ApplyDataFunc); }; -template <typename ApplyDataFunc> +template <ColumnDataApply ApplyDataFunc> void ScTable::ApplyWithAllocation(const ScMarkData& rMark, ApplyDataFunc apply) { if (!rMark.GetTableSelect(nTab) || !(rMark.IsMultiMarked() || rMark.IsMarked())) @@ -1466,7 +1478,7 @@ void ScTable::ApplyWithAllocation(const ScMarkData& rMark, ApplyDataFunc apply) if (lastChangeCol >= 0) CreateColumnIfNotExists(lastChangeCol); - aDefaultColData.Apply(rMark, GetDoc().MaxCol(), apply); + Apply(rMark, GetDoc().MaxCol(), apply); } else // need to allocate all columns affected { @@ -1477,7 +1489,20 @@ void ScTable::ApplyWithAllocation(const ScMarkData& rMark, ApplyDataFunc apply) // The loop should go not to lastChangeCol, but over all columns, to apply to already allocated // in the "StartOfEqualColumns" range for (SCCOL i = 0; i < aCol.size(); i++) - aCol[i].Apply(rMark, i, apply); + Apply(rMark, i, apply); +} + +template <ColumnDataApply ApplyDataFunc> +void ScTable::Apply(const ScMarkData& rMark, SCCOL nCol, ApplyDataFunc apply) +{ + if (rMark.IsMultiMarked()) + { + ScColumnData& rCol = GetColumnData(nCol); + ScMultiSelIter aMultiIter(rMark.GetMultiSelData(), nCol); + SCROW nTop, nBottom; + while (aMultiIter.Next(nTop, nBottom)) + apply(rCol, nTop, nBottom); + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/inc/targuno.hxx b/sc/inc/targuno.hxx index b45c56f5752f..1a3ac2345a7b 100644 --- a/sc/inc/targuno.hxx +++ b/sc/inc/targuno.hxx @@ -26,10 +26,6 @@ #include <com/sun/star/container/XNameAccess.hpp> #include <cppuhelper/implbase.hxx> -namespace com::sun::star::beans { class XPropertyChangeListener; } -namespace com::sun::star::beans { class XPropertySetInfo; } -namespace com::sun::star::beans { class XVetoableChangeListener; } - class ScDocShell; #define SC_LINKTARGETTYPE_SHEET 0 diff --git a/sc/inc/validat.hxx b/sc/inc/validat.hxx index 365cc3aca074..8316ec64ae52 100644 --- a/sc/inc/validat.hxx +++ b/sc/inc/validat.hxx @@ -152,7 +152,7 @@ public: const OUString& rTest, const ScPatternAttr& rPattern, const ScAddress& rPos, const CustomValidationPrivateAccess& ) const; - SC_DLLPUBLIC bool IsDataValid( ScRefCellValue& rCell, const ScAddress& rPos ) const; + SC_DLLPUBLIC bool IsDataValid( const ScRefCellValue& rCell, const ScAddress& rPos ) const; /** Test, if formula is valid. */ bool isFormulaResultsValidatable(const OUString& rTest, const ScAddress& rPos, SvNumberFormatter* pFormatter, @@ -182,14 +182,14 @@ private: @param rMatch (out-param) the index of the first item that matched, -1 if nothing matched. @return true = Cell range found, rRange is valid, or an error entry stuffed into the list if pCell==NULL. */ bool GetSelectionFromFormula( - std::vector<ScTypedStrData>* pStrings, ScRefCellValue& rCell, const ScAddress& rPos, + std::vector<ScTypedStrData>* pStrings, const ScRefCellValue& rCell, const ScAddress& rPos, const ScTokenArray& rTokArr, int& rMatch) const; /** Tests, if pCell is equal to what the passed token array represents. */ - bool IsEqualToTokenArray( ScRefCellValue& rCell, const ScAddress& rPos, const ScTokenArray& rTokArr ) const; + bool IsEqualToTokenArray( const ScRefCellValue& rCell, const ScAddress& rPos, const ScTokenArray& rTokArr ) const; /** Tests, if contents of pCell occur in cell range referenced by own formula, or in a string list. */ - bool IsListValid( ScRefCellValue& rCell, const ScAddress& rPos ) const; + bool IsListValid( const ScRefCellValue& rCell, const ScAddress& rPos ) const; /** Tests, if string or numeric data has valid text length. @param pDataNumeric diff --git a/sc/inc/viewopti.hxx b/sc/inc/viewopti.hxx index 21c6b9f7f8fb..72553dcf81b9 100644 --- a/sc/inc/viewopti.hxx +++ b/sc/inc/viewopti.hxx @@ -163,9 +163,11 @@ class ScViewCfg : public ScViewOptions DECL_LINK( LayoutCommitHdl, ScLinkConfigItem&, void ); DECL_LINK( DisplayCommitHdl, ScLinkConfigItem&, void ); + DECL_LINK( DisplayNotifyHdl, ScLinkConfigItem&, void ); DECL_LINK( GridCommitHdl, ScLinkConfigItem&, void ); DECL_LINK( GridNotifyHdl, ScLinkConfigItem&, void ); + void ReadDisplayCfg(); void ReadGridCfg(); static css::uno::Sequence<OUString> GetLayoutPropertyNames(); diff --git a/sc/inc/xmlwrap.hxx b/sc/inc/xmlwrap.hxx index bfae5363cfbd..7e1dd8d77fcc 100644 --- a/sc/inc/xmlwrap.hxx +++ b/sc/inc/xmlwrap.hxx @@ -32,7 +32,7 @@ namespace com::sun::star { namespace uno { template <class E> class Sequence; } namespace embed { class XStorage; } namespace xml { - namespace sax { struct InputSource; class XParser; class XWriter; } + namespace sax { struct InputSource; class XWriter; } } } diff --git a/sc/qa/extras/scfunctionlistobj.cxx b/sc/qa/extras/scfunctionlistobj.cxx index 69f1dd671ae1..0f7d7cfefe07 100644 --- a/sc/qa/extras/scfunctionlistobj.cxx +++ b/sc/qa/extras/scfunctionlistobj.cxx @@ -77,7 +77,7 @@ public: ScFunctionListObj::ScFunctionListObj() : UnoApiTest(u"/sc/qa/extras/testdocuments"_ustr) , XElementAccess(cppu::UnoType<uno::Sequence<beans::PropertyValue>>::get()) - , XIndexAccess(412) + , XIndexAccess(415) , XNameAccess(u"IF"_ustr) , XServiceInfo(u"stardiv.StarCalc.ScFunctionListObj"_ustr, u"com.sun.star.sheet.FunctionDescriptions"_ustr) diff --git a/sc/qa/extras/scpdfexport.cxx b/sc/qa/extras/scpdfexport.cxx index bd0e8d21747b..6ef9267e4ee5 100644 --- a/sc/qa/extras/scpdfexport.cxx +++ b/sc/qa/extras/scpdfexport.cxx @@ -222,6 +222,12 @@ void ScPDFExportTest::testMediaShapeScreen_Tdf159094() void ScPDFExportTest::testPopupRectangleSize_Tdf162955() { + std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get(); + if (!pPDFium) + { + return; + } + loadFromFile(u"tdf162955_comment.ods"); uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY); diff --git a/sc/qa/uitest/autofilter2/tdf149907.py b/sc/qa/uitest/autofilter2/tdf149907.py new file mode 100644 index 000000000000..d4e84638e9ea --- /dev/null +++ b/sc/qa/uitest/autofilter2/tdf149907.py @@ -0,0 +1,37 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +from uitest.framework import UITestCase +from uitest.uihelper.common import get_url_for_data_file, get_state_as_dict, select_by_text +from libreoffice.calc.document import is_row_hidden + +class tdf149907(UITestCase): + + def test_tdf149907(self): + + with self.ui_test.load_file(get_url_for_data_file("tdf149907.ods")) as doc: + + with self.ui_test.execute_modeless_dialog_through_command(".uno:DataFilterStandardFilter") as xDialog: + xField1 = xDialog.getChild("field1") + xVal1 = xDialog.getChild("val1") + xCond1 = xDialog.getChild("cond1") + self.assertEqual('Test', get_state_as_dict(xField1)['SelectEntryText']) + self.assertEqual('=', get_state_as_dict(xCond1)['SelectEntryText']) + self.assertEqual('1', get_state_as_dict(xVal1)['Text']) + select_by_text(xCond1, ">") + + self.assertFalse(is_row_hidden(doc, 0)) + # Without the fix in place, it would have failed here with AssertionError: False is not true + self.assertTrue(is_row_hidden(doc, 1)) + self.assertFalse(is_row_hidden(doc, 2)) + self.assertFalse(is_row_hidden(doc, 3)) + self.assertFalse(is_row_hidden(doc, 4)) + self.assertFalse(is_row_hidden(doc, 5)) + self.assertFalse(is_row_hidden(doc, 6)) + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sc/qa/uitest/calc_tests6/tdf85976.py b/sc/qa/uitest/calc_tests6/tdf85976.py new file mode 100644 index 000000000000..7b8a997b1e89 --- /dev/null +++ b/sc/qa/uitest/calc_tests6/tdf85976.py @@ -0,0 +1,65 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from uitest.framework import UITestCase +from libreoffice.calc.document import get_cell_by_position +from uitest.uihelper.common import get_url_for_data_file +from uitest.uihelper.common import get_state_as_dict + +class tdf85976(UITestCase): + def test_tdf85976(self): + with self.ui_test.load_file(get_url_for_data_file("tdf85976.ods")) as calc_doc: + with self.ui_test.execute_dialog_through_command(".uno:HandleDuplicateRecords") as xDialog: + xColumn = xDialog.getChild("column") + xRow = xDialog.getChild("row") + xIncludesHeaders = xDialog.getChild("includesheaders") + xAllCheckBtn = xDialog.getChild("allcheckbtn") + xCheckList = xDialog.getChild("checklist") + xSelect = xDialog.getChild("select") + xRemove = xDialog.getChild("remove") + self.assertEqual("false", get_state_as_dict(xColumn)["Checked"]) + self.assertEqual("true", get_state_as_dict(xRow)["Checked"]) + self.assertEqual("false", get_state_as_dict(xIncludesHeaders)["Selected"]) + self.assertEqual("true", get_state_as_dict(xAllCheckBtn)["Selected"]) + self.assertEqual("6", get_state_as_dict(xCheckList)["Children"]) + self.assertEqual("false", get_state_as_dict(xSelect)["Checked"]) + self.assertEqual("true", get_state_as_dict(xRemove)["Checked"]) + + expectedText = ["A", "B", "C", "D", "E", "F"] + for i in range(6): + self.assertEqual(expectedText[i], get_state_as_dict(xCheckList.getChild(i))["Text"]) + self.assertEqual("true", get_state_as_dict(xCheckList.getChild(i))["IsChecked"]) + + xIncludesHeaders.executeAction("CLICK", tuple()) + + expectedText = ["Id", "SepalLengthCm", "SepalWidthCm", "PetalLengthCm", "PetalWidthCm", "Species"] + for i in range(6): + self.assertEqual(expectedText[i], get_state_as_dict(xCheckList.getChild(i))["Text"]) + self.assertEqual("true", get_state_as_dict(xCheckList.getChild(i))["IsChecked"]) + + xAllCheckBtn.executeAction("CLICK", tuple()) + for i in range(6): + self.assertEqual(expectedText[i], get_state_as_dict(xCheckList.getChild(i))["Text"]) + self.assertEqual("false", get_state_as_dict(xCheckList.getChild(i))["IsChecked"]) + + xCheckList.getChild(5).executeAction("CLICK", tuple()) + + for i in range(5): + self.assertEqual(expectedText[i], get_state_as_dict(xCheckList.getChild(i))["Text"]) + self.assertEqual("false", get_state_as_dict(xCheckList.getChild(i))["IsChecked"]) + + self.assertEqual("Species", get_state_as_dict(xCheckList.getChild(5))["Text"]) + self.assertEqual("true", get_state_as_dict(xCheckList.getChild(5))["IsChecked"]) + + self.assertEqual("Id", get_cell_by_position(calc_doc, 0, 0, 0).getString()) + self.assertEqual("1", get_cell_by_position(calc_doc, 0, 0, 1).getString()) + self.assertEqual("51", get_cell_by_position(calc_doc, 0, 0, 2).getString()) + self.assertEqual("101", get_cell_by_position(calc_doc, 0, 0, 3).getString()) + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sc/qa/uitest/conditional_format/colorScale.py b/sc/qa/uitest/conditional_format/colorScale.py new file mode 100644 index 000000000000..759a4794ba65 --- /dev/null +++ b/sc/qa/uitest/conditional_format/colorScale.py @@ -0,0 +1,93 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from uitest.framework import UITestCase +from uitest.uihelper.common import get_state_as_dict +from uitest.uihelper.calc import enter_text_to_cell +from uitest.uihelper.common import select_by_text, type_text + +class colorScale(UITestCase): + + def test_colorScale3Entries(self): + + with self.ui_test.create_doc_in_start_center("calc") as document: + xCalcDoc = self.xUITest.getTopFocusWindow() + gridwin = xCalcDoc.getChild("grid_window") + + cond_formats = document.Sheets[0].ConditionalFormats + self.assertEqual(0, cond_formats.Length) + + enter_text_to_cell(gridwin, "A1", "1") + enter_text_to_cell(gridwin, "A2", "2") + enter_text_to_cell(gridwin, "A3", "3") + + self.xUITest.executeCommand(".uno:SelectColumn") + + with self.ui_test.execute_dialog_through_command(".uno:ColorScaleFormatDialog") as xCondFormat: + self.assertEqual("Condition 1", get_state_as_dict(xCondFormat.getChild("number"))["Text"]) + self.assertEqual("All Cells", get_state_as_dict(xCondFormat.getChild("type"))["SelectEntryText"]) + self.assertEqual("Color Scale (3 Entries)", get_state_as_dict(xCondFormat.getChild("colorformat"))["SelectEntryText"]) + self.assertEqual("Min", get_state_as_dict(xCondFormat.getChild("colscalemin"))["SelectEntryText"]) + self.assertEqual("Percentile", get_state_as_dict(xCondFormat.getChild("colscalemiddle"))["SelectEntryText"]) + self.assertEqual("Max", get_state_as_dict(xCondFormat.getChild("colscalemax"))["SelectEntryText"]) + self.assertEqual("Red", get_state_as_dict(xCondFormat.getChild("lbcolmin"))["Text"]) + self.assertEqual("Yellow", get_state_as_dict(xCondFormat.getChild("lbcolmiddle"))["Text"]) + self.assertEqual("Green", get_state_as_dict(xCondFormat.getChild("lbcolmax"))["Text"]) + self.assertEqual("", get_state_as_dict(xCondFormat.getChild("edcolscalemin"))["Text"]) + self.assertEqual("50", get_state_as_dict(xCondFormat.getChild("edcolscalemiddle"))["Text"]) + self.assertEqual("", get_state_as_dict(xCondFormat.getChild("edcolscalemax"))["Text"]) + + self.assertEqual(1, cond_formats.Length) + self.assertEqual(3, len(cond_formats.ConditionalFormats[0].getByIndex(0).ColorScaleEntries)) + self.assertEqual(16711680, cond_formats.ConditionalFormats[0].getByIndex(0).ColorScaleEntries[0].Color) + self.assertEqual(16776960, cond_formats.ConditionalFormats[0].getByIndex(0).ColorScaleEntries[1].Color) + self.assertEqual(43315, cond_formats.ConditionalFormats[0].getByIndex(0).ColorScaleEntries[2].Color) + + def test_colorScale2Entries(self): + + with self.ui_test.create_doc_in_start_center("calc") as document: + xCalcDoc = self.xUITest.getTopFocusWindow() + gridwin = xCalcDoc.getChild("grid_window") + + cond_formats = document.Sheets[0].ConditionalFormats + self.assertEqual(0, cond_formats.Length) + + enter_text_to_cell(gridwin, "A1", "1") + enter_text_to_cell(gridwin, "A2", "2") + enter_text_to_cell(gridwin, "A3", "3") + + self.xUITest.executeCommand(".uno:SelectColumn") + + with self.ui_test.execute_dialog_through_command(".uno:ColorScaleFormatDialog", close_button="") as xCondFormat: + self.assertEqual("Condition 1", get_state_as_dict(xCondFormat.getChild("number"))["Text"]) + self.assertEqual("All Cells", get_state_as_dict(xCondFormat.getChild("type"))["SelectEntryText"]) + + select_by_text(xCondFormat.getChild("colorformat"), "Color Scale (2 Entries)") + + # we need to get a pointer again after changing the color format + xCondFormat = self.xUITest.getTopFocusWindow() + + self.assertEqual("Color Scale (2 Entries)", get_state_as_dict(xCondFormat.getChild("colorformat"))["SelectEntryText"]) + self.assertEqual("Min", get_state_as_dict(xCondFormat.getChild("colscalemin"))["SelectEntryText"]) + self.assertEqual("Max", get_state_as_dict(xCondFormat.getChild("colscalemax"))["SelectEntryText"]) + self.assertEqual("Light Yellow 2", get_state_as_dict(xCondFormat.getChild("lbcolmin"))["Text"]) + self.assertEqual("Light Green 2", get_state_as_dict(xCondFormat.getChild("lbcolmax"))["Text"]) + self.assertEqual("", get_state_as_dict(xCondFormat.getChild("edcolscalemin"))["Text"]) + self.assertEqual("", get_state_as_dict(xCondFormat.getChild("edcolscalemax"))["Text"]) + + # close the conditional format manager + xOKBtn = xCondFormat.getChild("ok") + self.ui_test.close_dialog_through_button(xOKBtn) + + self.assertEqual(1, cond_formats.Length) + self.assertEqual(2, len(cond_formats.ConditionalFormats[0].getByIndex(0).ColorScaleEntries)) + self.assertEqual(16777069, cond_formats.ConditionalFormats[0].getByIndex(0).ColorScaleEntries[0].Color) + self.assertEqual(7847013, cond_formats.ConditionalFormats[0].getByIndex(0).ColorScaleEntries[1].Color) + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sc/qa/uitest/conditional_format/iconSet.py b/sc/qa/uitest/conditional_format/iconSet.py new file mode 100644 index 000000000000..817f7d6cb43e --- /dev/null +++ b/sc/qa/uitest/conditional_format/iconSet.py @@ -0,0 +1,57 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from uitest.framework import UITestCase +from uitest.uihelper.common import get_state_as_dict +from uitest.uihelper.calc import enter_text_to_cell +from uitest.uihelper.common import select_by_text, type_text + +class IconSet(UITestCase): + + def test_IconSet(self): + + with self.ui_test.create_doc_in_start_center("calc") as document: + xCalcDoc = self.xUITest.getTopFocusWindow() + gridwin = xCalcDoc.getChild("grid_window") + + cond_formats = document.Sheets[0].ConditionalFormats + self.assertEqual(0, cond_formats.Length) + + enter_text_to_cell(gridwin, "A1", "1") + enter_text_to_cell(gridwin, "A2", "2") + enter_text_to_cell(gridwin, "A3", "3") + + self.xUITest.executeCommand(".uno:SelectColumn") + + with self.ui_test.execute_dialog_through_command(".uno:IconSetFormatDialog", close_button="") as xCondFormat: + self.assertEqual("Condition 1", get_state_as_dict(xCondFormat.getChild("number"))["Text"]) + self.assertEqual("All Cells", get_state_as_dict(xCondFormat.getChild("type"))["SelectEntryText"]) + self.assertEqual("Icon Set", get_state_as_dict(xCondFormat.getChild("colorformat"))["SelectEntryText"]) + self.assertEqual("3 Arrows", get_state_as_dict(xCondFormat.getChild("iconsettype"))["SelectEntryText"]) + select_by_text(xCondFormat.getChild("iconsettype"), "4 Gray Arrows") + + # we need to get a pointer again after changing the IconSet type + xCondFormat = self.xUITest.getTopFocusWindow() + + self.assertEqual("Percent", get_state_as_dict(xCondFormat.getChild("listbox1"))["SelectEntryText"]) + self.assertEqual("Percent", get_state_as_dict(xCondFormat.getChild("listbox2"))["SelectEntryText"]) + self.assertEqual("Percent", get_state_as_dict(xCondFormat.getChild("listbox3"))["SelectEntryText"]) + self.assertEqual("", get_state_as_dict(xCondFormat.getChild("entry1"))["Text"]) + self.assertEqual("", get_state_as_dict(xCondFormat.getChild("entry2"))["Text"]) + self.assertEqual("", get_state_as_dict(xCondFormat.getChild("entry3"))["Text"]) + + # close the conditional format manager + xOKBtn = xCondFormat.getChild("ok") + self.ui_test.close_dialog_through_button(xOKBtn) + + self.assertEqual(1, cond_formats.Length) + self.assertEqual(11, cond_formats.ConditionalFormats[0].getByIndex(0).Icons) # IconSet_4ArrowsGray + self.assertEqual(4, len(cond_formats.ConditionalFormats[0].getByIndex(0).IconSetEntries)) + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sc/qa/uitest/conditional_format/tdf160252.py b/sc/qa/uitest/conditional_format/tdf160252.py new file mode 100644 index 000000000000..4311b9144146 --- /dev/null +++ b/sc/qa/uitest/conditional_format/tdf160252.py @@ -0,0 +1,53 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from uitest.framework import UITestCase +from uitest.uihelper.common import get_state_as_dict, get_url_for_data_file + +class tdf160252(UITestCase): + def test_tdf160252(self): + + with self.ui_test.load_file(get_url_for_data_file("tdf160252.ods")) as calc_doc: + xCalcDoc = self.xUITest.getTopFocusWindow() + gridwin = xCalcDoc.getChild("grid_window") + + self.assertEqual("1", get_state_as_dict(gridwin)["CurrentColumn"]) + self.assertEqual("10", get_state_as_dict(gridwin)["CurrentRow"]) + + with self.ui_test.execute_dialog_through_command(".uno:ConditionalFormatManagerDialog", close_button="") as xCondFormatMgr: + + xContainer = xCondFormatMgr.getChild("CONTAINER") + self.assertEqual("2", get_state_as_dict(xContainer)["Children"]) + + xEditBtn = xCondFormatMgr.getChild("edit") + with self.ui_test.execute_dialog_through_action(xEditBtn, "CLICK", event_name = "ModelessDialogVisible", close_button="cancel") as xCondFormatDlg: + xEdassign = xCondFormatDlg.getChild("edassign") + self.assertEqual("A1:A3", get_state_as_dict(xEdassign)["Text"]) + + # we need to get a pointer again as the old window has been deleted + xCondFormatMgr = self.xUITest.getTopFocusWindow() + + xContainer = xCondFormatMgr.getChild("CONTAINER") + self.assertEqual("2", get_state_as_dict(xContainer)["Children"]) + + xEditBtn = xCondFormatMgr.getChild("edit") + with self.ui_test.execute_dialog_through_action(xEditBtn, "CLICK", event_name = "ModelessDialogVisible", close_button="cancel") as xCondFormatDlg: + xEdassign = xCondFormatDlg.getChild("edassign") + # Without the fix in place, this test would have failed with + # AssertionError: 'A1:A3' != 'B11' + self.assertEqual("A1:A3", get_state_as_dict(xEdassign)["Text"]) + + # we need to get a pointer again as the old window has been deleted + xCondFormatMgr = self.xUITest.getTopFocusWindow() + + # close the conditional format manager + xOKBtn = xCondFormatMgr.getChild("ok") + self.ui_test.close_dialog_through_button(xOKBtn) + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sc/qa/uitest/conditional_format/tdf162692.py b/sc/qa/uitest/conditional_format/tdf162692.py new file mode 100644 index 000000000000..4dd5bdaf81d7 --- /dev/null +++ b/sc/qa/uitest/conditional_format/tdf162692.py @@ -0,0 +1,58 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from uitest.framework import UITestCase +from uitest.uihelper.common import get_state_as_dict, get_url_for_data_file + +class tdf162692(UITestCase): + def test_tdf162692(self): + + with self.ui_test.load_file(get_url_for_data_file("tdf162692.ods")): + xCalcDoc = self.xUITest.getTopFocusWindow() + gridwin = xCalcDoc.getChild("grid_window") + + self.assertEqual("0", get_state_as_dict(gridwin)["SelectedTable"]) + + with self.ui_test.execute_dialog_through_command(".uno:ConditionalFormatManagerDialog", close_button="") as xCondFormatMgr: + + xContainer = xCondFormatMgr.getChild("CONTAINER") + self.assertEqual("2", get_state_as_dict(xContainer)['Children']) + + self.assertEqual("A1:A500\tCell value is unique ", get_state_as_dict(xContainer.getChild("0"))["Text"]) + self.assertEqual("B1:B500\tCell value contains \"я столб без рамки\"", get_state_as_dict(xContainer.getChild("1"))["Text"]) + + xEditBtn = xCondFormatMgr.getChild("edit") + with self.ui_test.execute_dialog_through_action(xEditBtn, "CLICK", event_name="ModelessDialogVisible", close_button="cancel"): + pass + + # we need to get a pointer again as the old window has been removed + xCondFormatMgr = self.xUITest.getTopFocusWindow() + + xContainer = xCondFormatMgr.getChild("CONTAINER") + + # close the conditional format manager + xOKBtn = xCondFormatMgr.getChild("ok") + self.ui_test.close_dialog_through_button(xOKBtn) + + with self.ui_test.execute_dialog_through_command(".uno:JumpToTable") as xDialogGoToSheet: + xtree_view = xDialogGoToSheet.getChild("treeview") + xtree_view.getChild('1').executeAction("SELECT", tuple()) + + self.assertEqual("1", get_state_as_dict(gridwin)["SelectedTable"]) + + with self.ui_test.execute_dialog_through_command(".uno:ConditionalFormatManagerDialog") as xCondFormatMgr: + xContainer = xCondFormatMgr.getChild("CONTAINER") + + # Without the fix in place, this test would have failed with + # AssertionError: '1' != '2' + self.assertEqual("1", get_state_as_dict(xContainer)['Children']) + + self.assertEqual("D1:D400\tCell value is unique ", get_state_as_dict(xContainer.getChild("0"))["Text"]) + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sc/qa/uitest/conditional_format/tdf163897.py b/sc/qa/uitest/conditional_format/tdf163897.py new file mode 100644 index 000000000000..8f3710f4f621 --- /dev/null +++ b/sc/qa/uitest/conditional_format/tdf163897.py @@ -0,0 +1,54 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from uitest.framework import UITestCase +from uitest.uihelper.common import get_state_as_dict, get_url_for_data_file + +class tdf163897(UITestCase): + def test_tdf163897(self): + + # Use an existing document + with self.ui_test.load_file(get_url_for_data_file("tdf105544.ods")): + xCalcDoc = self.xUITest.getTopFocusWindow() + gridwin = xCalcDoc.getChild("grid_window") + + with self.ui_test.execute_dialog_through_command(".uno:ConditionalFormatManagerDialog", close_button="") as xCondFormatMgr: + + xContainer = xCondFormatMgr.getChild("CONTAINER") + self.assertEqual("4", get_state_as_dict(xContainer)['Children']) + + xRemoveBtn = xCondFormatMgr.getChild("remove") + + xRemoveBtn.executeAction("CLICK", tuple()) + self.assertEqual("3", get_state_as_dict(xContainer)['Children']) + xRemoveBtn.executeAction("CLICK", tuple()) + self.assertEqual("2", get_state_as_dict(xContainer)['Children']) + xRemoveBtn.executeAction("CLICK", tuple()) + self.assertEqual("1", get_state_as_dict(xContainer)['Children']) + xRemoveBtn.executeAction("CLICK", tuple()) + self.assertEqual("0", get_state_as_dict(xContainer)['Children']) + + xAddBtn = xCondFormatMgr.getChild("add") + with self.ui_test.execute_dialog_through_action(xAddBtn, "CLICK", event_name="ModelessDialogVisible", close_button="cancel"): + pass + + # we need to get a pointer again as the old window has been removed + xCondFormatMgr = self.xUITest.getTopFocusWindow() + + xContainer = xCondFormatMgr.getChild("CONTAINER") + + # Without the fix in place, this test would have failed with + # AssertionError: '0' != '4' + self.assertEqual("0", get_state_as_dict(xContainer)['Children']) + + # close the conditional format manager + xOKBtn = xCondFormatMgr.getChild("ok") + self.ui_test.close_dialog_through_button(xOKBtn) + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sc/qa/uitest/conditional_format/tdf164722.py b/sc/qa/uitest/conditional_format/tdf164722.py new file mode 100644 index 000000000000..b6b1ed555d89 --- /dev/null +++ b/sc/qa/uitest/conditional_format/tdf164722.py @@ -0,0 +1,43 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +from uitest.framework import UITestCase +from uitest.uihelper.common import get_state_as_dict +from uitest.uihelper.calc import enter_text_to_cell + +class tdf164722(UITestCase): + def test_tdf164722(self): + + with self.ui_test.create_doc_in_start_center("calc") as document: + xCalcDoc = self.xUITest.getTopFocusWindow() + gridwin = xCalcDoc.getChild("grid_window") + + cond_formats = document.Sheets[0].ConditionalFormats + self.assertEqual(0, cond_formats.Length) + + enter_text_to_cell(gridwin, "A1", "1") + enter_text_to_cell(gridwin, "A2", "2") + enter_text_to_cell(gridwin, "A3", "3") + + self.xUITest.executeCommand(".uno:SelectColumn") + + with self.ui_test.execute_dialog_through_command(".uno:ColorScaleFormatDialog") as xCondFormat: + pass + + self.assertEqual(1, cond_formats.Length) + + self.xUITest.executeCommand(".uno:Undo") + + # Without the fix in place, it would have failed here + with self.ui_test.execute_dialog_through_command(".uno:ColorScaleFormatDialog") as xCondFormat: + pass + + self.assertEqual(1, cond_formats.Length) + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sc/qa/uitest/data/autofilter/tdf149907.ods b/sc/qa/uitest/data/autofilter/tdf149907.ods Binary files differnew file mode 100644 index 000000000000..716c4551ef1d --- /dev/null +++ b/sc/qa/uitest/data/autofilter/tdf149907.ods diff --git a/sc/qa/uitest/data/tdf160252.ods b/sc/qa/uitest/data/tdf160252.ods Binary files differnew file mode 100644 index 000000000000..2cb64c86482e --- /dev/null +++ b/sc/qa/uitest/data/tdf160252.ods diff --git a/sc/qa/uitest/data/tdf162692.ods b/sc/qa/uitest/data/tdf162692.ods Binary files differnew file mode 100644 index 000000000000..211ead17f4b6 --- /dev/null +++ b/sc/qa/uitest/data/tdf162692.ods diff --git a/sc/qa/uitest/data/tdf85976.ods b/sc/qa/uitest/data/tdf85976.ods Binary files differnew file mode 100644 index 000000000000..cc4feeadb8c2 --- /dev/null +++ b/sc/qa/uitest/data/tdf85976.ods diff --git a/sc/qa/unit/data/functions/date_time/fods/weekday.fods b/sc/qa/unit/data/functions/date_time/fods/weekday.fods index 16f35fdcfc21..7a8bf5343893 100644 --- a/sc/qa/unit/data/functions/date_time/fods/weekday.fods +++ b/sc/qa/unit/data/functions/date_time/fods/weekday.fods @@ -782,7 +782,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Err</text:p> </table:table-cell> - <table:table-cell table:style-name="ce14" table:formula="of:=ISERROR(a13ú)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce14" table:formula="of:=ISERROR(A13)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce15" table:formula="of:=FORMULA([.A13])" office:value-type="string" office:string-value="=WEEKDAY(K10;K1:K2)" calcext:value-type="string"> diff --git a/sc/qa/unit/data/functions/date_time/fods/weeknum.fods b/sc/qa/unit/data/functions/date_time/fods/weeknum.fods index a4e1c08ebbd6..4dadb429684f 100644 --- a/sc/qa/unit/data/functions/date_time/fods/weeknum.fods +++ b/sc/qa/unit/data/functions/date_time/fods/weeknum.fods @@ -769,13 +769,13 @@ <table:table-cell table:number-columns-repeated="3"/> </table:table-row> <table:table-row table:style-name="ro5"> - <table:table-cell table:style-name="ce20" table:formula="of:=WEEKNUM([.K9];)" office:value-type="string" office:string-value="" calcext:value-type="error"> - <text:p>Err:502</text:p> + <table:table-cell table:style-name="ce20" table:formula="of:=WEEKNUM([.K9];)" office:value-type="float" office:value="31" calcext:value-type="float"> + <text:p>31</text:p> </table:table-cell> - <table:table-cell office:value-type="string" calcext:value-type="string"> - <text:p>ERR</text:p> + <table:table-cell office:value-type="float" office:value="31" calcext:value-type="float"> + <text:p>31</text:p> </table:table-cell> - <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR([.A9])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce23" table:formula="of:=[.A9]=[.B9]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce24" table:formula="of:=FORMULA([.A9])" office:value-type="string" office:string-value="=WEEKNUM(K9;)" calcext:value-type="string"> @@ -825,7 +825,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Err</text:p> </table:table-cell> - <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR(a13ú)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR([.A12])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce24" table:formula="of:=FORMULA([.A12])" office:value-type="string" office:string-value="=WEEKNUM(K10;K1:K2)" calcext:value-type="string"> @@ -840,7 +840,7 @@ <table:table-cell office:value-type="float" office:value="30" calcext:value-type="float"> <text:p>30</text:p> </table:table-cell> - <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR(a13ú)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce23" table:formula="of:=[.A13]=[.B13]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce24" table:formula="of:=FORMULA([.A13])" office:value-type="string" office:string-value="=WEEKNUM($K$9;11)" calcext:value-type="string"> @@ -855,7 +855,7 @@ <table:table-cell office:value-type="float" office:value="30" calcext:value-type="float"> <text:p>30</text:p> </table:table-cell> - <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR(a13ú)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce23" table:formula="of:=[.A14]=[.B14]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce24" table:formula="of:=FORMULA([.A14])" office:value-type="string" office:string-value="=WEEKNUM($K$9;12)" calcext:value-type="string"> @@ -871,7 +871,7 @@ <table:table-cell office:value-type="float" office:value="30" calcext:value-type="float"> <text:p>30</text:p> </table:table-cell> - <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR(a13ú)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce23" table:formula="of:=[.A15]=[.B15]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce24" table:formula="of:=FORMULA([.A15])" office:value-type="string" office:string-value="=WEEKNUM($K$9;13)" calcext:value-type="string"> @@ -886,7 +886,7 @@ <table:table-cell office:value-type="float" office:value="30" calcext:value-type="float"> <text:p>30</text:p> </table:table-cell> - <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR(a13ú)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce23" table:formula="of:=[.A16]=[.B16]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce24" table:formula="of:=FORMULA([.A16])" office:value-type="string" office:string-value="=WEEKNUM($K$9;14)" calcext:value-type="string"> @@ -901,7 +901,7 @@ <table:table-cell office:value-type="float" office:value="30" calcext:value-type="float"> <text:p>30</text:p> </table:table-cell> - <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR(a13ú)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce23" table:formula="of:=[.A17]=[.B17]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce24" table:formula="of:=FORMULA([.A17])" office:value-type="string" office:string-value="=WEEKNUM($K$9;15)" calcext:value-type="string"> @@ -919,7 +919,7 @@ <table:table-cell office:value-type="float" office:value="31" calcext:value-type="float"> <text:p>31</text:p> </table:table-cell> - <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR(a13ú)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce23" table:formula="of:=[.A18]=[.B18]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce24" table:formula="of:=FORMULA([.A18])" office:value-type="string" office:string-value="=WEEKNUM($K$9;16)" calcext:value-type="string"> @@ -934,7 +934,7 @@ <table:table-cell office:value-type="float" office:value="31" calcext:value-type="float"> <text:p>31</text:p> </table:table-cell> - <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR(a13ú)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce23" table:formula="of:=[.A19]=[.B19]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce24" table:formula="of:=FORMULA([.A19])" office:value-type="string" office:string-value="=WEEKNUM($K$9;17)" calcext:value-type="string"> @@ -949,7 +949,7 @@ <table:table-cell office:value-type="float" office:value="29" calcext:value-type="float"> <text:p>29</text:p> </table:table-cell> - <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR(a13ú)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce23" table:formula="of:=[.A20]=[.B20]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce24" table:formula="of:=FORMULA([.A20])" office:value-type="string" office:string-value="=WEEKNUM($K$9;21)" calcext:value-type="string"> @@ -964,7 +964,7 @@ <table:table-cell office:value-type="float" office:value="29" calcext:value-type="float"> <text:p>29</text:p> </table:table-cell> - <table:table-cell table:style-name="ce23" table:formula="of:=ISERROR(a13ú)" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce23" table:formula="of:=[.A21]=[.B21]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>PRAVDA</text:p> </table:table-cell> <table:table-cell table:style-name="ce24" table:formula="of:=FORMULA([.A21])" office:value-type="string" office:string-value="=WEEKNUM($K$9;150)" calcext:value-type="string"> @@ -1008,4 +1008,4 @@ </table:named-expressions> </office:spreadsheet> </office:body> -</office:document>
\ No newline at end of file +</office:document> diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/choosecols.fods b/sc/qa/unit/data/functions/spreadsheet/fods/choosecols.fods new file mode 100644 index 000000000000..23a623125a38 --- /dev/null +++ b/sc/qa/unit/data/functions/spreadsheet/fods/choosecols.fods @@ -0,0 +1,6485 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> + <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT11H29M58S</meta:editing-duration><meta:editing-cycles>163</meta:editing-cycles><meta:generator>LibreOfficeDev/25.8.0.0.alpha0$Linux_X86_64 LibreOffice_project/e1d250ff2e146281a2cc3d2c72d3fd373b139627</meta:generator><dc:date>2025-01-31T16:10:06.580413412</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="733" meta:object-count="0"/></office:meta> + <office:scripts> + <office:script script:language="ooo:Basic"> + <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/> + </office:script> + </office:scripts> + <office:font-face-decls> + <style:font-face style:name="Calibri" svg:font-family="Calibri" style:font-family-generic="swiss"/> + <style:font-face style:name="FreeSans" svg:font-family="FreeSans" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Noto Sans" svg:font-family="'Noto Sans'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Noto Sans CJK SC" svg:font-family="'Noto Sans CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="'WenQuanYi Micro Hei'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="table-cell"> + <style:paragraph-properties style:tab-stop-distance="1.27cm"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-size="10pt" fo:language="en" fo:country="US" style:font-name-asian="WenQuanYi Micro Hei" style:font-size-asian="10pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="FreeSans" style:font-size-complex="10pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" style:writing-mode="page"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:punctuation-wrap="simple" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="page" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" loext:opacity="0%" fo:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-family-asian="'Segoe UI'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" style:font-family-complex="Tahoma" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:style style:name="Default" style:family="graphic"/> + <style:style style:name="Note" style:family="graphic" style:parent-style-name="Default"> + <style:graphic-properties draw:stroke="solid" draw:marker-start="Arrowheads_20_1" draw:marker-start-width="0.2cm" draw:marker-start-center="false" draw:fill="solid" draw:fill-color="#ffffc0" draw:auto-grow-height="true" draw:auto-grow-width="false" fo:padding-top="0.1cm" fo:padding-bottom="0.1cm" fo:padding-left="0.1cm" fo:padding-right="0.1cm" draw:shadow="visible" draw:shadow-offset-x="0.1cm" draw:shadow-offset-y="0.1cm"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="10pt" style:font-name-asian="WenQuanYi Micro Hei" style:font-family-asian="'WenQuanYi Micro Hei'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="10pt" style:font-name-complex="FreeSans" style:font-family-complex="FreeSans" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="10pt"/> + </style:style> + <number:number-style style:name="N0"> + <number:number number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N111P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="es" number:country="ES">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N111"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="es" number:country="ES">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N111P0"/> + </number:currency-style> + <number:currency-style style:name="N114P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N114"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N114P0"/> + </number:currency-style> + <number:number-style style:name="N116P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N116"> + <style:text-properties fo:color="#ff0000"/> + <number:text>\-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N116P0"/> + </number:number-style> + <number:percentage-style style:name="N117"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N121P0" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N121P1" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N121P2" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N121"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N121P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N121P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N121P2"/> + </number:text-style> + <number:currency-style style:name="N123P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N123"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N123P0"/> + </number:currency-style> + <number:number-style style:name="N124"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N128P0" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N128P1" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N128P2" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N128"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N128P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N128P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N128P2"/> + </number:text-style> + <number:date-style style:name="N129"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N130"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N131P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N131"> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N131P0"/> + </number:number-style> + <number:currency-style style:name="N133P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N133"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> -</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N133P0"/> + </number:currency-style> + <number:number-style style:name="N135P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N135"> + <number:text>($</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N135P0"/> + </number:number-style> + <number:number-style style:name="N136"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N139P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N139P1" style:volatile="true"> + <number:text> (</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N139P2" style:volatile="true"> + <number:text> - </number:text> + </number:number-style> + <number:text-style style:name="N139"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N139P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N139P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N139P2"/> + </number:text-style> + <number:date-style style:name="N140"> + <number:text>⌀ </number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N144P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N144P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N144P2" style:volatile="true"> + <number:text> - € </number:text> + </number:number-style> + <number:text-style style:name="N144"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N144P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N144P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N144P2"/> + </number:text-style> + <number:number-style style:name="N145"> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N146"> + <number:scientific-number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:currency-style style:name="N147P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N147"> + <style:text-properties fo:color="#ff0000"/> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>-</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N147P0"/> + </number:currency-style> + <number:date-style style:name="N148"> + <number:month number:style="long"/> + <number:text>-</number:text> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N150P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N150"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N150P0"/> + </number:currency-style> + <number:date-style style:name="N151"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:style="long"/> + </number:date-style> + <number:number-style style:name="N152"> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N153"> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N157P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N157P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N157P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N157"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N157P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N157P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N157P2"/> + </number:text-style> + <number:currency-style style:name="N159P0" style:volatile="true"> + <number:currency-symbol>€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N159"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol>€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N159P0"/> + </number:currency-style> + <number:number-style style:name="N160"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N161"> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N162"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N163P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N163"> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N163P0"/> + </number:number-style> + <number:currency-style style:name="N165P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N165"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N165P0"/> + </number:currency-style> + <number:currency-style style:name="N167P0" style:volatile="true"> + <number:currency-symbol number:language="es" number:country="MX">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N167"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="es" number:country="MX">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N167P0"/> + </number:currency-style> + <number:number-style style:name="N171P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N171P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N171P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N171"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N171P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N171P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N171P2"/> + </number:text-style> + <number:currency-style style:name="N173P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N173"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N173P0"/> + </number:currency-style> + <number:number-style style:name="N175P0" style:volatile="true"> + <number:text>Yes</number:text> + </number:number-style> + <number:number-style style:name="N175P1" style:volatile="true"> + <number:text>Yes</number:text> + </number:number-style> + <number:number-style style:name="N175"> + <number:text>No</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N175P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N175P1"/> + </number:number-style> + <number:number-style style:name="N176"> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N177"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N179P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N179"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N179P0"/> + </number:currency-style> + <number:number-style style:name="N181P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N181"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N181P0"/> + </number:number-style> + <number:number-style style:name="N183P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N183"> + <number:text>\-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N183P0"/> + </number:number-style> + <number:number-style style:name="N187P0" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N187P1" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N187P2" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N187"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N187P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N187P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N187P2"/> + </number:text-style> + <number:number-style style:name="N188"> + <number:number number:decimal-places="18" number:min-decimal-places="18" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N189"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N190"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="3" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N192P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N192P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N192P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N192"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N192P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N192P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N192P2"/> + </number:text-style> + <number:currency-style style:name="N193P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N193"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N193P0"/> + </number:currency-style> + <number:number-style style:name="N194"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="1" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N195"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/> + </number:number-style> + <number:currency-style style:name="N197P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N197"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N197P0"/> + </number:currency-style> + <number:number-style style:name="N198P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N198"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N198P0"/> + </number:number-style> + <number:date-style style:name="N199"> + <number:month number:style="long"/> + <number:text>-</number:text> + <number:day/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:number-style style:name="N203P0" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N203P1" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N203P2" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N203"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N203P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N203P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N203P2"/> + </number:text-style> + <number:number-style style:name="N207P0" style:volatile="true"> + <number:text> $</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N207P1" style:volatile="true"> + <number:text> $(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N207P2" style:volatile="true"> + <number:text> $- </number:text> + </number:number-style> + <number:text-style style:name="N207"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N207P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N207P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N207P2"/> + </number:text-style> + <number:date-style style:name="N208"> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N209"> + <number:number number:decimal-places="20" number:min-decimal-places="20" number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N211P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N211"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N211P0"/> + </number:currency-style> + <number:number-style style:name="N213P0" style:volatile="true"> + <number:text>On</number:text> + </number:number-style> + <number:number-style style:name="N213P1" style:volatile="true"> + <number:text>On</number:text> + </number:number-style> + <number:number-style style:name="N213"> + <number:text>Off</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N213P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N213P1"/> + </number:number-style> + <number:number-style style:name="N215P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N215"> + <style:text-properties fo:color="#ff0000"/> + <number:text>($</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N215P0"/> + </number:number-style> + <number:number-style style:name="N217P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N217"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N217P0"/> + </number:number-style> + <number:number-style style:name="N218"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N219P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N219"> + <number:text>($</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N219P0"/> + </number:number-style> + <number:number-style style:name="N220P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N220"> + <style:text-properties fo:color="#ff0000"/> + <number:text>($</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N220P0"/> + </number:number-style> + <number:number-style style:name="N221"> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N223P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N223P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N223P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N223"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N223P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N223P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N223P2"/> + </number:text-style> + <number:currency-style style:name="N224P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N224"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N224P0"/> + </number:currency-style> + <number:number-style style:name="N225"> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N227P0" style:volatile="true"> + <number:text>True</number:text> + </number:number-style> + <number:number-style style:name="N227P1" style:volatile="true"> + <number:text>True</number:text> + </number:number-style> + <number:number-style style:name="N227"> + <number:text>False</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N227P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N227P1"/> + </number:number-style> + <number:number-style style:name="N231P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N231P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N231P2" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> € </number:text> + </number:number-style> + <number:text-style style:name="N231"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N231P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N231P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N231P2"/> + </number:text-style> + <number:number-style style:name="N232"> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N236P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N236P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N236P2" style:volatile="true"> + <number:text> - </number:text> + </number:number-style> + <number:text-style style:name="N236"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N236P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N236P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N236P2"/> + </number:text-style> + <number:date-style style:name="N237"> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N238P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N238"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N238P0"/> + </number:currency-style> + <number:currency-style style:name="N240P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N240"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N240P0"/> + </number:currency-style> + <number:number-style style:name="N244P0" style:volatile="true"> + <number:text> $</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N244P1" style:volatile="true"> + <number:text> $(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N244P2" style:volatile="true"> + <number:text> $-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N244"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N244P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N244P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N244P2"/> + </number:text-style> + <number:number-style style:name="N248P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N248P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N248P2" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N248"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N248P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N248P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N248P2"/> + </number:text-style> + <number:number-style style:name="N250P0" style:volatile="true"> + <number:text>WAHR</number:text> + </number:number-style> + <number:number-style style:name="N250P1" style:volatile="true"> + <number:text>WAHR</number:text> + </number:number-style> + <number:number-style style:name="N250"> + <number:text>FALSCH</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N250P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N250P1"/> + </number:number-style> + <number:date-style style:name="N251"> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N253P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N253"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N253P0"/> + </number:currency-style> + <number:currency-style style:name="N255P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N255"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N255P0"/> + </number:currency-style> + <number:number-style style:name="N256"> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N259P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N259P1" style:volatile="true"> + <number:text> (</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N259P2" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N259"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N259P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N259P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N259P2"/> + </number:text-style> + <number:time-style style:name="N260"> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long" number:decimal-places="1"/> + </number:time-style> + <number:time-style style:name="N261"> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:currency-style style:name="N263P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N263"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N263P0"/> + </number:currency-style> + <number:number-style style:name="N264P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N264"> + <style:text-properties fo:color="#ff0000"/> + <number:text>\-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N264P0"/> + </number:number-style> + <number:currency-style style:name="N266P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N266"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> -</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N266P0"/> + </number:currency-style> + <number:currency-style style:name="N268P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N268"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N268P0"/> + </number:currency-style> + <number:number-style style:name="N269"> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N270"> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N271P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N271"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N271P0"/> + </number:number-style> + <number:currency-style style:name="N272P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N272"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N272P0"/> + </number:currency-style> + <number:time-style style:name="N273" number:truncate-on-overflow="false"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:number-style style:name="N274P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N274"> + <number:text>\-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N274P0"/> + </number:number-style> + <number:number-style style:name="N276P0" style:volatile="true"> + <number:text/> + </number:number-style> + <number:currency-style style:name="N276"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N276P0"/> + </number:currency-style> + <number:date-style style:name="N277"> + <number:day-of-week/> + <number:text> </number:text> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N278"> + <number:day-of-week number:style="long"/> + <number:text> </number:text> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:currency-style style:name="N280P0" style:volatile="true"> + <number:currency-symbol number:language="de" number:country="AT">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N280"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="de" number:country="AT">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N280P0"/> + </number:currency-style> + <number:number-style style:name="N282P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N282"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N282P0"/> + </number:number-style> + <number:number-style style:name="N283P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N283"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N283P0"/> + </number:number-style> + <number:number-style style:name="N285P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N285"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N285P0"/> + </number:number-style> + <number:number-style style:name="N286P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N286"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N286P0"/> + </number:number-style> + <number:number-style style:name="N287P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N287"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N287P0"/> + </number:number-style> + <number:number-style style:name="N288P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N288"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N288P0"/> + </number:number-style> + <number:number-style style:name="N289P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N289"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N289P0"/> + </number:number-style> + <number:number-style style:name="N290P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N290"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N290P0"/> + </number:number-style> + <number:number-style style:name="N294P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N294P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N294P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N294"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N294P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N294P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N294P2"/> + </number:text-style> + <number:number-style style:name="N298P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N298P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N298P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- Kč </number:text> + </number:number-style> + <number:text-style style:name="N298"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N298P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N298P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N298P2"/> + </number:text-style> + <number:number-style style:name="N302P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N302P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N302P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N302"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N302P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N302P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N302P2"/> + </number:text-style> + <number:number-style style:name="N306P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N306P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N306P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> Kč </number:text> + </number:number-style> + <number:text-style style:name="N306"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N306P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N306P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N306P2"/> + </number:text-style> + <number:currency-style style:name="N308P0" style:volatile="true"> + <number:currency-symbol number:language="cs" number:country="CZ">¥€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="3"> + <number:embedded-text number:position="5"> </number:embedded-text> + </number:number> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N308"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol number:language="cs" number:country="CZ">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="3"> + <number:embedded-text number:position="5"> </number:embedded-text> + </number:number> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N308P0"/> + </number:currency-style> + <number:number-style style:name="N310P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N310"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N310P0"/> + </number:number-style> + <number:number-style style:name="N311P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N311"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N311P0"/> + </number:number-style> + <number:number-style style:name="N313P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N313"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N313P0"/> + </number:number-style> + <number:number-style style:name="N314P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N314"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N314P0"/> + </number:number-style> + <number:percentage-style style:name="N315"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N316"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N317"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N318"> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N319"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N320"> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N321"> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N322"> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N323"> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:currency-style style:name="N325P0" style:volatile="true"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N325"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N325P0"/> + </number:currency-style> + <number:currency-style style:name="N327P0" style:volatile="true"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N327"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N327P0"/> + </number:currency-style> + <number:currency-style style:name="N329P0" style:volatile="true"> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N329"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N329P0"/> + </number:currency-style> + <number:currency-style style:name="N331P0" style:volatile="true"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N331"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N331P0"/> + </number:currency-style> + <number:currency-style style:name="N333P0" style:volatile="true"> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N333"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N333P0"/> + </number:currency-style> + <number:currency-style style:name="N335P0" style:volatile="true"> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N335"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N335P0"/> + </number:currency-style> + <number:currency-style style:name="N337P0" style:volatile="true"> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N337"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N337P0"/> + </number:currency-style> + <number:currency-style style:name="N339P0" style:volatile="true"> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N339"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N339P0"/> + </number:currency-style> + <number:currency-style style:name="N341P0" style:volatile="true"> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N341"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N341P0"/> + </number:currency-style> + <number:currency-style style:name="N343P0" style:volatile="true"> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N343"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N343P0"/> + </number:currency-style> + <number:currency-style style:name="N345P0" style:volatile="true"> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N345"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N345P0"/> + </number:currency-style> + <number:currency-style style:name="N347P0" style:volatile="true"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N347"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N347P0"/> + </number:currency-style> + <number:currency-style style:name="N349P0" style:volatile="true"> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N349"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N349P0"/> + </number:currency-style> + <number:currency-style style:name="N351P0" style:volatile="true"> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N351"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N351P0"/> + </number:currency-style> + <number:currency-style style:name="N353P0" style:volatile="true"> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N353"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N353P0"/> + </number:currency-style> + <number:percentage-style style:name="N354"> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N355"> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N356"> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N357"> + <number:number number:decimal-places="18" number:min-decimal-places="18" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N358"> + <number:number number:decimal-places="19" number:min-decimal-places="19" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N359"> + <number:number number:decimal-places="20" number:min-decimal-places="20" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N360"> + <number:number number:decimal-places="19" number:min-decimal-places="19" number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N362P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="US">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N362"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol number:language="en" number:country="US">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N362P0"/> + </number:currency-style> + <number:percentage-style style:name="N363" number:title="User-defined"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N365P0" style:volatile="true"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:grouping="true"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N365"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:grouping="true"/> + <number:text>%</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N365P0"/> + </number:percentage-style> + <number:number-style style:name="N366P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="0" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N366"> + <style:text-properties fo:color="#000000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="0" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N366P0"/> + </number:number-style> + <number:date-style style:name="N367"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:currency-style style:name="N369P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N369"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N369P0"/> + </number:currency-style> + <number:currency-style style:name="N371P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N371"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N371P0"/> + </number:currency-style> + <number:percentage-style style:name="N373P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N373"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + <number:text>%</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N373P0"/> + </number:percentage-style> + <number:number-style style:name="N375P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N375"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N375P0"/> + </number:number-style> + <number:number-style style:name="N376P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N376"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N376P0"/> + </number:number-style> + <number:number-style style:name="N378P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N378"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N378P0"/> + </number:number-style> + <number:number-style style:name="N379P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N379"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N379P0"/> + </number:number-style> + <number:number-style style:name="N383P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N383P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N383P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N383"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N383P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N383P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N383P2"/> + </number:text-style> + <number:number-style style:name="N387P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N387P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N387P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- DM </number:text> + </number:number-style> + <number:text-style style:name="N387"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N387P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N387P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N387P2"/> + </number:text-style> + <number:number-style style:name="N391P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N391P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N391P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N391"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N391P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N391P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N391P2"/> + </number:text-style> + <number:number-style style:name="N395P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N395P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N395P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> DM </number:text> + </number:number-style> + <number:text-style style:name="N395"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N395P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N395P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N395P2"/> + </number:text-style> + <number:text-style style:name="N396"> + <number:text>Ouch! - </number:text> + <number:text-content/> + <number:text> - Error detected!</number:text> + </number:text-style> + <number:text-style style:name="N397"> + <number:text-content/> + <number:text> - Result=0 - No Errordetection</number:text> + </number:text-style> + <number:date-style style:name="N398"> + <number:day/> + <number:text>/</number:text> + <number:month/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N399"> + <number:day/> + <number:text>. </number:text> + <number:month/> + <number:text>. </number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N403P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N403P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N403P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N403"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N403P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N403P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N403P2"/> + </number:text-style> + <number:number-style style:name="N407P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N407P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N407P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- € </number:text> + </number:number-style> + <number:text-style style:name="N407"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N407P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N407P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N407P2"/> + </number:text-style> + <number:number-style style:name="N411P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N411P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N411P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N411"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N411P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N411P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N411P2"/> + </number:text-style> + <number:number-style style:name="N415P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N415P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N415P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> € </number:text> + </number:number-style> + <number:text-style style:name="N415"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N415P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N415P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N415P2"/> + </number:text-style> + <number:currency-style style:name="N416"> + <number:currency-symbol number:language="en" number:country="AU">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N417P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="AU">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N417"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="AU">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N417P0"/> + </number:currency-style> + <number:date-style style:name="N418"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N419"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N420"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N421"> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N422"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N423"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:date-style style:name="N424"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year number:style="long"/> + <number:text> </number:text> + <number:hours number:style="long"/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N425P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N425"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N425P0"/> + </number:number-style> + <number:number-style style:name="N426P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N426"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N426P0"/> + </number:number-style> + <number:number-style style:name="N427P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N427"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N427P0"/> + </number:number-style> + <number:number-style style:name="N428P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N428"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N428P0"/> + </number:number-style> + <number:number-style style:name="N429"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N430P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N430"> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N430P0"/> + </number:number-style> + <number:number-style style:name="N431P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N431"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N431P0"/> + </number:number-style> + <number:number-style style:name="N432P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N432"> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N432P0"/> + </number:number-style> + <number:number-style style:name="N433P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N433"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N433P0"/> + </number:number-style> + <number:number-style style:name="N434"> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N435P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N435P1" style:volatile="true"> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N435"> + <number:text>$-</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N435P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N435P1"/> + </number:number-style> + <number:number-style style:name="N436"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N437P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N437P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N437"> + <number:text>-</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N437P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N437P1"/> + </number:number-style> + <number:number-style style:name="N438"> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N439P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N439P1" style:volatile="true"> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N439"> + <number:text>$-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <style:map style:condition="value()>0" style:apply-style-name="N439P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N439P1"/> + </number:number-style> + <number:number-style style:name="N440"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N441P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N441P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N441"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <style:map style:condition="value()>0" style:apply-style-name="N441P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N441P1"/> + </number:number-style> + <number:number-style style:name="N443P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N443"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N443P0"/> + </number:number-style> + <number:number-style style:name="N444P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N444"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N444P0"/> + </number:number-style> + <number:number-style style:name="N446P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N446"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N446P0"/> + </number:number-style> + <number:number-style style:name="N447P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N447"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N447P0"/> + </number:number-style> + <number:date-style style:name="N448"> + <number:year number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:day number:style="long"/> + </number:date-style> + <number:date-style style:name="N449"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:textual="true"/> + <number:text>.</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N450"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N451"> + <number:month number:textual="true"/> + <number:text>.</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N452"> + <number:year number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:day number:style="long"/> + <number:text> </number:text> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N454P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N454"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N454P0"/> + </number:number-style> + <number:number-style style:name="N455P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N455"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N455P0"/> + </number:number-style> + <number:number-style style:name="N457P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N457"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N457P0"/> + </number:number-style> + <number:number-style style:name="N458P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N458"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N458P0"/> + </number:number-style> + <number:number-style style:name="N462P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N462P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N462P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="F2_t4_-5">- </number:text> + </number:number-style> + <number:text-style style:name="N462"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N462P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N462P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N462P2"/> + </number:text-style> + <number:number-style style:name="N466P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N466P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N466P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="-4">- Ft </number:text> + </number:number-style> + <number:text-style style:name="N466"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N466P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N466P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N466P2"/> + </number:text-style> + <number:number-style style:name="N470P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N470P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N470P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:text-style style:name="N470"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N470P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N470P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N470P2"/> + </number:text-style> + <number:number-style style:name="N474P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N474P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N474P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:text-style style:name="N474"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N474P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N474P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N474P2"/> + </number:text-style> + <number:date-style style:name="N475"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N476"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N477"> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N478"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:time-style> + <number:time-style style:name="N479"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:date-style style:name="N480"> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year number:style="long"/> + <number:text> </number:text> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N482P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N482"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N482P0"/> + </number:number-style> + <number:number-style style:name="N483P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N483"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N483P0"/> + </number:number-style> + <number:number-style style:name="N485P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N485"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N485P0"/> + </number:number-style> + <number:number-style style:name="N486P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N486"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N486P0"/> + </number:number-style> + <number:number-style style:name="N490P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N490P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N490P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="€2_-4">- </number:text> + </number:number-style> + <number:text-style style:name="N490"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N490P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N490P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N490P2"/> + </number:text-style> + <number:number-style style:name="N494P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N494P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N494P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="-3">- € </number:text> + </number:number-style> + <number:text-style style:name="N494"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N494P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N494P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N494P2"/> + </number:text-style> + <number:number-style style:name="N498P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N498P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N498P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:text-style style:name="N498"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N498P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N498P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N498P2"/> + </number:text-style> + <number:number-style style:name="N502P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N502P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N502P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:text-style style:name="N502"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N502P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N502P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N502P2"/> + </number:text-style> + <number:date-style style:name="N10129" number:language="en" number:country="US"> + <number:month/> + <number:text>/</number:text> + <number:day/> + <number:text>/</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:date-style style:name="N10130" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N10131" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N10132" number:language="en" number:country="US"> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N10133" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N10134" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N10135" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:time-style> + <number:time-style style:name="N10136" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:date-style style:name="N10137" number:language="en" number:country="US"> + <number:month/> + <number:text>/</number:text> + <number:day/> + <number:text>/</number:text> + <number:year number:style="long"/> + <number:text> </number:text> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N10139P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10139" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10139P0"/> + </number:number-style> + <number:number-style style:name="N10141P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10141" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10141P0"/> + </number:number-style> + <number:currency-style style:name="N10143P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10143" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10143P0"/> + </number:currency-style> + <number:currency-style style:name="N10144P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10144" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10144P0"/> + </number:currency-style> + <number:currency-style style:name="N10146P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10146" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10146P0"/> + </number:currency-style> + <number:currency-style style:name="N10147P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10147" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10147P0"/> + </number:currency-style> + <number:number-style style:name="N10148P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10148" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10148P0"/> + </number:number-style> + <number:number-style style:name="N10149P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10149" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10149P0"/> + </number:number-style> + <number:number-style style:name="N10153P0" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10153P1" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N10153P2" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N10153" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10153P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10153P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10153P2"/> + </number:text-style> + <number:currency-style style:name="N10157P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10157P1" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:currency-style> + <number:currency-style style:name="N10157P2" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:currency-style> + <number:text-style style:name="N10157" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10157P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10157P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10157P2"/> + </number:text-style> + <number:number-style style:name="N10161P0" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10161P1" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N10161P2" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N10161" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10161P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10161P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10161P2"/> + </number:text-style> + <number:currency-style style:name="N10165P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10165P1" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:currency-style> + <number:currency-style style:name="N10165P2" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:currency-style> + <number:text-style style:name="N10165" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10165P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10165P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10165P2"/> + </number:text-style> + <number:number-style style:name="N10166" number:language="en" number:country="US"> + <number:scientific-number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N10167" number:language="en" number:country="US"> + <number:scientific-number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:date-style style:name="N10168" number:language="en" number:country="US"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:time-style style:name="N10169" number:language="en" number:country="US" number:truncate-on-overflow="false"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:time-style style:name="N10170" number:language="en" number:country="US"> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long" number:decimal-places="1"/> + </number:time-style> + <number:number-style style:name="N10171" number:language="en" number:country="US"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/> + </number:number-style> + <number:percentage-style style:name="N10172" number:language="en" number:country="US"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N10173" number:language="en" number:country="US"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:date-style style:name="N10174P0" style:volatile="true" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:text-style style:name="N10174" number:language="en" number:country="US"> + <number:text-content/> + <style:map style:condition="value()<=1.7976931348623157E+308" style:apply-style-name="N10174P0"/> + </number:text-style> + <number:date-style style:name="N10175P0" style:volatile="true" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:text-style style:name="N10175" number:language="en" number:country="US"> + <number:text-content/> + <style:map style:condition="value()<=1.7976931348623157E+308" style:apply-style-name="N10175P0"/> + </number:text-style> + <number:date-style style:name="N20114" number:language="de" number:country="DE"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N20115" number:language="de" number:country="DE"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N20116" number:language="de" number:country="DE"> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N20117" number:language="de" number:country="DE"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N20118" number:language="de" number:country="DE"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:number-style style:name="N20120P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20120" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20120P0"/> + </number:number-style> + <number:number-style style:name="N20121P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20121" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20121P0"/> + </number:number-style> + <number:number-style style:name="N20123P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20123" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20123P0"/> + </number:number-style> + <number:number-style style:name="N20124P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20124" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20124P0"/> + </number:number-style> + <number:number-style style:name="N20126P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20126" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20126P0"/> + </number:number-style> + <number:number-style style:name="N20127P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20127" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20127P0"/> + </number:number-style> + <number:number-style style:name="N20129P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20129" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20129P0"/> + </number:number-style> + <number:number-style style:name="N20130P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20130" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20130P0"/> + </number:number-style> + <style:style style:name="Default" style:family="table-cell"/> + <style:style style:name="Heading" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:color="#000000" fo:font-size="24pt" fo:font-style="normal" fo:font-weight="bold" style:font-size-asian="24pt" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-size-complex="24pt" style:font-style-complex="normal" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="table-cell" style:parent-style-name="Heading"> + <style:text-properties fo:font-size="18pt" style:font-size-asian="18pt" style:font-size-complex="18pt"/> + </style:style> + <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="table-cell" style:parent-style-name="Heading"> + <style:text-properties fo:font-size="12pt" style:font-size-asian="12pt" style:font-size-complex="12pt"/> + </style:style> + <style:style style:name="Text" style:family="table-cell" style:parent-style-name="Default"/> + <style:style style:name="Note" style:family="table-cell" style:parent-style-name="Text"> + <style:table-cell-properties fo:background-color="#ffffcc" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" fo:border="0.74pt solid #808080"/> + <style:text-properties fo:color="#333333"/> + </style:style> + <style:style style:name="Footnote" style:family="table-cell" style:parent-style-name="Text"> + <style:text-properties fo:color="#808080" fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/> + </style:style> + <style:style style:name="Hyperlink" style:family="table-cell" style:parent-style-name="Text"> + <style:text-properties fo:color="#0000ee" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="#0000ee"/> + </style:style> + <style:style style:name="Status" style:family="table-cell" style:parent-style-name="Default"/> + <style:style style:name="Good" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ccffcc"/> + <style:text-properties fo:color="#006600"/> + </style:style> + <style:style style:name="Neutral" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ffffcc"/> + <style:text-properties fo:color="#996600"/> + </style:style> + <style:style style:name="Bad" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ffcccc"/> + <style:text-properties fo:color="#cc0000"/> + </style:style> + <style:style style:name="Warning" style:family="table-cell" style:parent-style-name="Status"> + <style:text-properties fo:color="#cc0000"/> + </style:style> + <style:style style:name="Error" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#cc0000"/> + <style:text-properties fo:color="#ffffff" fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Accent" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Accent_20_1" style:display-name="Accent 1" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#000000"/> + <style:text-properties fo:color="#ffffff"/> + </style:style> + <style:style style:name="Accent_20_2" style:display-name="Accent 2" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#808080"/> + <style:text-properties fo:color="#ffffff"/> + </style:style> + <style:style style:name="Accent_20_3" style:display-name="Accent 3" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#dddddd"/> + </style:style> + <style:style style:name="Result" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:font-style="italic" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-style-complex="italic" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="false" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:background-color="#ff3333"/> + </style:style> + <style:style style:name="true" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:background-color="#99ff66"/> + </style:style> + <draw:marker draw:name="Arrowheads_20_1" draw:display-name="Arrowheads 1" svg:viewBox="0 0 20 30" svg:d="M10 0l-10 30h20z"/> + <loext:theme loext:name="Office"> + <loext:theme-colors loext:name="LibreOffice"> + <loext:color loext:name="dark1" loext:color="#000000"/> + <loext:color loext:name="light1" loext:color="#ffffff"/> + <loext:color loext:name="dark2" loext:color="#000000"/> + <loext:color loext:name="light2" loext:color="#ffffff"/> + <loext:color loext:name="accent1" loext:color="#18a303"/> + <loext:color loext:name="accent2" loext:color="#0369a3"/> + <loext:color loext:name="accent3" loext:color="#a33e03"/> + <loext:color loext:name="accent4" loext:color="#8e03a3"/> + <loext:color loext:name="accent5" loext:color="#c99c00"/> + <loext:color loext:name="accent6" loext:color="#c9211e"/> + <loext:color loext:name="hyperlink" loext:color="#0000ee"/> + <loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/> + </loext:theme-colors> + </loext:theme> + </office:styles> + <office:automatic-styles> + <style:style style:name="co1" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="3.884cm"/> + </style:style> + <style:style style:name="co2" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="1.794cm"/> + </style:style> + <style:style style:name="co3" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="10.633cm"/> + </style:style> + <style:style style:name="co4" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="2.258cm"/> + </style:style> + <style:style style:name="co5" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="6.736cm"/> + </style:style> + <style:style style:name="co6" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="2.713cm"/> + </style:style> + <style:style style:name="ro1" style:family="table-row"> + <style:table-row-properties style:row-height="2.422cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro2" style:family="table-row"> + <style:table-row-properties style:row-height="0.452cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro3" style:family="table-row"> + <style:table-row-properties style:row-height="0.612cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro4" style:family="table-row"> + <style:table-row-properties style:row-height="0.529cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro5" style:family="table-row"> + <style:table-row-properties style:row-height="0.487cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ta1" style:family="table" style:master-page-name="Default"> + <style:table-properties table:display="true" style:writing-mode="lr-tb"/> + </style:style> + <number:number-style style:name="N2"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + </number:number-style> + <number:boolean-style style:name="N99"> + <number:boolean/> + </number:boolean-style> + <style:style style:name="ce13" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:wrap-option="wrap"/> + <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce16" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce17" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-size="12pt" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce4" style:family="table-cell" style:parent-style-name="Default"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce27" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce32" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce33" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce34" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + </style:style> + <style:style style:name="ce12" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"/> + <style:style style:name="ce11" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:font-style="normal" style:font-style-asian="normal" style:font-style-complex="normal"/> + </style:style> + <style:style style:name="ce37" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #afabab" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-right-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce38" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #afabab" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + <loext:border-right-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce14" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #c5e0b4" style:direction="ltr" fo:border-right="0.74pt solid #c5e0b4" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-left-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-left-complex-color> + <loext:border-right-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce24" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"> + <style:table-cell-properties style:cell-protect="protected" style:print-content="true" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" style:direction="ltr" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" style:vertical-align="bottom" loext:vertical-justify="auto"/> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + <style:text-properties fo:color="#000000" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Calibri" fo:font-size="11pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:font-size-asian="11pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="11pt" style:font-style-complex="normal" style:font-weight-complex="normal"> + <loext:char-complex-color loext:theme-type="dark1" loext:color-type="theme"/> + </style:text-properties> + </style:style> + <style:style style:name="ce25" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #afabab" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-left-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-left-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce26" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" style:direction="ltr" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" style:vertical-align="bottom" loext:vertical-justify="auto"/> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce18" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce31" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"/> + <style:style style:name="ce41" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.G2"/> + </style:style> + <style:style style:name="ce42" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.G2"/> + </style:style> + <style:style style:name="ce43" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.G2"/> + </style:style> + <style:style style:name="ce45" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.G2"/> + </style:style> + <style:style style:name="ce46" style:family="table-cell" style:parent-style-name="Default"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.G2"/> + </style:style> + <style:style style:name="ce15" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #c5e0b4" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + <loext:border-left-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-left-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce23" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #c5e0b4" style:direction="ltr" fo:border-right="0.74pt solid #c5e0b4" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + <loext:border-left-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-left-complex-color> + <loext:border-right-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce30" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" fo:border-left="0.74pt solid #afabab" fo:border-right="none" style:rotation-align="none" fo:border-top="none"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + <loext:border-left-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-left-complex-color> + </style:table-cell-properties> + </style:style> + <style:style style:name="ce39" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N429"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce44" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce9" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"> + <style:table-cell-properties style:cell-protect="protected" style:print-content="true" style:text-align-source="value-type" style:repeat-content="false" fo:wrap-option="no-wrap" style:direction="ltr" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" style:vertical-align="bottom" loext:vertical-justify="auto"/> + <style:paragraph-properties css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + <style:text-properties fo:color="#000000" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Calibri" fo:font-size="11pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:font-size-asian="11pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="11pt" style:font-style-complex="normal" style:font-weight-complex="normal"> + <loext:char-complex-color loext:theme-type="dark1" loext:color-type="theme"/> + </style:text-properties> + </style:style> + <style:style style:name="ce54" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce36" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #afabab" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + <loext:border-right-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce48" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #c5e0b4" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + <loext:border-right-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:page-layout style:name="pm1"> + <style:page-layout-properties style:writing-mode="lr-tb"/> + <style:header-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm"/> + </style:header-style> + <style:footer-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm"/> + </style:footer-style> + </style:page-layout> + <style:page-layout style:name="pm2"> + <style:page-layout-properties style:writing-mode="lr-tb"/> + <style:header-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0"> + <style:background-image/> + </style:header-footer-properties> + </style:header-style> + <style:footer-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0"> + <style:background-image/> + </style:header-footer-properties> + </style:footer-style> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Default" style:page-layout-name="pm1"> + <style:header> + <text:p><text:sheet-name>???</text:sheet-name></text:p> + </style:header> + <style:header-left style:display="false"/> + <style:header-first style:display="false"/> + <style:footer> + <text:p>Page <text:page-number>1</text:page-number></text:p> + </style:footer> + <style:footer-left style:display="false"/> + <style:footer-first style:display="false"/> + </style:master-page> + <style:master-page style:name="Report" style:page-layout-name="pm2"> + <style:header> + <style:region-left> + <text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p> + </style:region-left> + <style:region-right> + <text:p><text:date style:data-style-name="N2" text:date-value="2025-01-31">00/00/0000</text:date>, <text:time style:data-style-name="N2" text:time-value="13:34:43.066130425">00:00:00</text:time></text:p> + </style:region-right> + </style:header> + <style:header-left style:display="false"/> + <style:header-first style:display="false"/> + <style:footer> + <text:p>Page <text:page-number>1</text:page-number><text:s/>/ <text:page-count>99</text:page-count></text:p> + </style:footer> + <style:footer-left style:display="false"/> + <style:footer-first style:display="false"/> + </style:master-page> + </office:master-styles> + <office:body> + <office:spreadsheet> + <table:calculation-settings table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/> + <table:table table:name="Sheet1" table:style-name="ta1"> + <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co2" table:default-cell-style-name="ce4"/> + <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/> + <table:table-row table:style-name="ro1"> + <table:table-cell table:style-name="ce13" office:value-type="string" calcext:value-type="string"> + <text:p>CHOOSECOLS Function</text:p> + </table:table-cell> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <table:table-row table:style-name="ro3"> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> + <text:p>Result</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" table:formula="of:=AND([.B8:.B95])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="3"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <table:table-row table:style-name="ro4"> + <table:table-cell table:style-name="ce17" office:value-type="string" calcext:value-type="string"> + <text:p>Sheet</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce32" office:value-type="string" calcext:value-type="string"> + <text:p>Result</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce17" office:value-type="string" calcext:value-type="string"> + <text:p>Description</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" table:formula="of:=AND([Sheet2.G2:.G249])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce34" office:value-type="string" calcext:value-type="string"> + <text:p>Simple CHOOSECOLS formulas with local references and values</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="20"> + <table:table-cell/> + <table:table-cell table:style-name="ce33"/> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="21"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <calcext:conditional-formats> + <calcext:conditional-format calcext:target-range-address="Sheet1.B2:Sheet1.B50"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet1.B2"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet1.B2"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet1.B2"/> + </calcext:conditional-format> + </calcext:conditional-formats> + </table:table> + <table:table table:name="Sheet2" table:style-name="ta1"> + <table:table-column table:style-name="co4" table:number-columns-repeated="3" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co4" table:default-cell-style-name="ce14"/> + <table:table-column table:style-name="co4" table:number-columns-repeated="2" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co4" table:default-cell-style-name="ce41"/> + <table:table-column table:style-name="co5" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co6" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co4" table:number-columns-repeated="14" table:default-cell-style-name="Default"/> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Function</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default" office:value-type="string" calcext:value-type="string"> + <text:p>Expected</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce31" office:value-type="string" calcext:value-type="string"> + <text:p>Correct</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>FunctionString</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Comment</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Data</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Rows</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Data</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default" office:value-type="string" calcext:value-type="string"> + <text:p>Data</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>one parameter</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce15"/> + <table:table-cell table:style-name="ce39"/> + <table:table-cell table:style-name="ce44" table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce44" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce54" office:value-type="float" office:value="-2" calcext:value-type="float"> + <text:p>-2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce44" office:value-type="float" office:value="-3" calcext:value-type="float"> + <text:p>-3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce44" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce36"/> + <table:table-cell table:style-name="ce39"/> + <table:table-cell table:style-name="ce44"/> + <table:table-cell table:style-name="ce48"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:style-name="ce12" table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; 3)" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A3]=[.D3])AND([.B3]=[.E3])AND([.C3]=[.F3])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A3])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="30" calcext:value-type="float"> + <text:p>30</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="-30" calcext:value-type="float"> + <text:p>-30</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="7"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A4]=[.D4])AND([.B4]=[.E4])AND([.C4]=[.F4])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A4])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14" office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce18" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA5:.AB10]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=ISERROR([.A5])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A5])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AG5:.AH10]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AH5:.AI10]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AI5:.AJ10]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AJ5:.AK10]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AK5:.AL10]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A6]=[.D6])AND([.B6]=[.E6])AND([.C6]=[.F6])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A6])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="6"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A7]=[.D7])AND([.B7]=[.E7])AND([.C7]=[.F7])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A7])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14" office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="20" calcext:value-type="float"> + <text:p>20</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A8]=[.D8])AND([.B8]=[.E8])AND([.C8]=[.F8])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A8])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14" office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="10" calcext:value-type="float"> + <text:p>10</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; -2)" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A9]=[.D9])AND([.B9]=[.E9])AND([.C9]=[.F9])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A9])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce37" table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A10]=[.D10])AND([.B10]=[.E10])AND([.C10]=[.F10])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A10])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce38" table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA11:.AB16]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=ISERROR([.A11])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A11])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce24" table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A12]=[.D12])AND([.B12]=[.E12])AND([.C12]=[.F12])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A12])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce37" table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A13]=[.D13])AND([.B13]=[.E13])AND([.C13]=[.F13])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A13])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce37" table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A14]=[.D14])AND([.B14]=[.E14])AND([.C14]=[.F14])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A14])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce37" table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; 3.9)" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A15]=[.D15])AND([.B15]=[.E15])AND([.C15]=[.F15])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A15])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce37" table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A16]=[.D16])AND([.B16]=[.E16])AND([.C16]=[.F16])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A16])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce37" table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA17:.AB22]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=ISERROR([.A17])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A17])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce38" table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A18]=[.D18])AND([.B18]=[.E18])AND([.C18]=[.F18])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A18])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A19]=[.D19])AND([.B19]=[.E19])AND([.C19]=[.F19])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A19])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A20]=[.D20])AND([.B20]=[.E20])AND([.C20]=[.F20])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A20])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; -2.9)" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A21]=[.D21])AND([.B21]=[.E21])AND([.C21]=[.F21])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A21])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A22]=[.D22])AND([.B22]=[.E22])AND([.C22]=[.F22])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A22])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA23:.AB28]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=ISERROR([.A23])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A23])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A24]=[.D24])AND([.B24]=[.E24])AND([.C24]=[.F24])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A24])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A25]=[.D25])AND([.B25]=[.E25])AND([.C25]=[.F25])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A25])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A26]=[.D26])AND([.B26]=[.E26])AND([.C26]=[.F26])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A26])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -2,9)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -2,9)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>two parameters</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; 3; 3)" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:formula="of:=([.A28]=[.D28])AND([.B28]=[.E28])AND([.C28]=[.F28])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A28])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; 3)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A29]=[.D29])AND([.B29]=[.E29])AND([.C29]=[.F29])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A29])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; 3)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA30:.AB35]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB30:.AC35]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=ISERROR([.A30])AND(ISERROR([.B30]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A30])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; 3)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A31]=[.D31])AND([.B31]=[.E31])AND([.C31]=[.F31])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A31])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; 3)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:style-name="ce12" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce12" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce12"/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A32]=[.D32])AND([.B32]=[.E32])AND([.C32]=[.F32])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A32])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; 3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A33]=[.D33])AND([.B33]=[.E33])AND([.C33]=[.F33])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A33])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; 3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; 3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:style-name="ce11" table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; -3; -3)" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:formula="of:=([.A34]=[.D34])AND([.B34]=[.E34])AND([.C34]=[.F34])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A34])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; -3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; -3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A35]=[.D35])AND([.B35]=[.E35])AND([.C35]=[.F35])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A35])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; -3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; -3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA36:.AB41]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB36:.AC41]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=ISERROR([.A36])AND(ISERROR([.B36]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A36])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; -3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; -3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A37]=[.D37])AND([.B37]=[.E37])AND([.C37]=[.F37])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A37])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; -3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; -3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A38]=[.D38])AND([.B38]=[.E38])AND([.C38]=[.F38])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A38])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; -3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; -3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A39]=[.D39])AND([.B39]=[.E39])AND([.C39]=[.F39])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A39])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; -3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; -3)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; 3; -2)" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:formula="of:=([.A40]=[.D40])AND([.B40]=[.E40])AND([.C40]=[.F40])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A40])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; -2)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A41]=[.D41])AND([.B41]=[.E41])AND([.C41]=[.F41])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A41])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; -2)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA42:.AB46]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB42:.AC46]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=ISERROR([.A42])AND(ISERROR([.B42]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A42])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; -2)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A43]=[.D43])AND([.B43]=[.E43])AND([.C43]=[.F43])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A43])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; -2)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A44]=[.D44])AND([.B44]=[.E44])AND([.C44]=[.F44])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A44])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; -2)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A45]=[.D45])AND([.B45]=[.E45])AND([.C45]=[.F45])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A45])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; 3; -2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; 3; -2)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Errors</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.L8]; 5; ;-5)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce24" table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=ISERROR([.A47])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A47])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:L8; 5; ;-5)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:L8; 5; ;-5)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce23"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.L8]; 5; 30)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=ISERROR([.A48])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A48])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:L8; 5; 30)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:L8; 5; 30)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.L8]; 5; -30)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=ISERROR([.A49])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A49])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:L8; 5; -30)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:L8; 5; -30)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.L8]; 5; 0)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=ISERROR([.A50])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A50])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:L8; 5; 0)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:L8; 5; 0)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.L8]; 5; "test")" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=ISERROR([.A51])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A51])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:L8; 5; "test")}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:L8; 5; "test")}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.L8]; {5|30})" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=ISERROR([.A52])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A52])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:L8; {5;30})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:L8; {5;30})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.L8]; {5|-30})" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=ISERROR([.A53])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A53])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:L8; {5;-30})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:L8; {5;-30})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.L8]; [.O3])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:formula="of:=ISERROR([.A54])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A54])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:L8; O3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:L8; O3)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.L8]; [.P3])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:formula="of:=ISERROR([.A55])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A55])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:L8; P3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:L8; P3)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.L8]; [.AD3])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:formula="of:=ISERROR([.A56])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A56])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:L8; AD3)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:L8; AD3)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>matrices</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; {3})" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A58]=[.D58])AND([.B58]=[.E58])AND([.C58]=[.F58])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A58])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A59]=[.D59])AND([.B59]=[.E59])AND([.C59]=[.F59])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A59])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA60:.AB65]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=ISERROR([.A60])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A60])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A61]=[.D61])AND([.B61]=[.E61])AND([.C61]=[.F61])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A61])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A62]=[.D62])AND([.B62]=[.E62])AND([.C62]=[.F62])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A62])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A63]=[.D63])AND([.B63]=[.E63])AND([.C63]=[.F63])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A63])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; {-2})" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A64]=[.D64])AND([.B64]=[.E64])AND([.C64]=[.F64])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A64])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A65]=[.D65])AND([.B65]=[.E65])AND([.C65]=[.F65])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A65])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA66:.AB71]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=ISERROR([.A66])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A66])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A67]=[.D67])AND([.B67]=[.E67])AND([.C67]=[.F67])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A67])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A68]=[.D68])AND([.B68]=[.E68])AND([.C68]=[.F68])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A68])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A69]=[.D69])AND([.B69]=[.E69])AND([.C69]=[.F69])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A69])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; {3|3})" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:formula="of:=([.A71]=[.D71])AND([.B71]=[.E71])AND([.C71]=[.F71])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A71])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A72]=[.D72])AND([.B72]=[.E72])AND([.C72]=[.F72])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A72])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA73:.AB78]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB73:.AC78]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=ISERROR([.A73])AND(ISERROR([.B73]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A73])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A74]=[.D74])AND([.B74]=[.E74])AND([.C74]=[.F74])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A74])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A75]=[.D75])AND([.B75]=[.E75])AND([.C75]=[.F75])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A75])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A76]=[.D76])AND([.B76]=[.E76])AND([.C76]=[.F76])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A76])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; {-3|-3})" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:formula="of:=([.A77]=[.D77])AND([.B77]=[.E77])AND([.C77]=[.F77])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A77])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3;-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3;-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A78]=[.D78])AND([.B78]=[.E78])AND([.C78]=[.F78])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A78])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3;-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3;-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA79:.AB84]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB79:.AC84]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=ISERROR([.A79])AND(ISERROR([.B79]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A79])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3;-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3;-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A80]=[.D80])AND([.B80]=[.E80])AND([.C80]=[.F80])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A80])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3;-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3;-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A81]=[.D81])AND([.B81]=[.E81])AND([.C81]=[.F81])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A81])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3;-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3;-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A82]=[.D82])AND([.B82]=[.E82])AND([.C82]=[.F82])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A82])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3;-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3;-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; {3|-2})" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:formula="of:=([.A83]=[.D83])AND([.B83]=[.E83])AND([.C83]=[.F83])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A83])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A84]=[.D84])AND([.B84]=[.E84])AND([.C84]=[.F84])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A84])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA85:.AB89]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB85:.AC89]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=ISERROR([.A85])AND(ISERROR([.B85]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A85])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A86]=[.D86])AND([.B86]=[.E86])AND([.C86]=[.F86])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A86])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A87]=[.D87])AND([.B87]=[.E87])AND([.C87]=[.F87])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A87])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A88]=[.D88])AND([.B88]=[.E88])AND([.C88]=[.F88])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A88])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3;-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3;-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; {3;3})" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:formula="of:=([.A89]=[.D89])AND([.B89]=[.E89])AND([.C89]=[.F89])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A89])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A90]=[.D90])AND([.B90]=[.E90])AND([.C90]=[.F90])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A90])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA91:.AB96]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB91:.AC96]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=ISERROR([.A91])AND(ISERROR([.B91]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A91])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A92]=[.D92])AND([.B92]=[.E92])AND([.C92]=[.F92])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A92])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A93]=[.D93])AND([.B93]=[.E93])AND([.C93]=[.F93])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A93])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A94]=[.D94])AND([.B94]=[.E94])AND([.C94]=[.F94])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A94])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; {-3;-3})" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:formula="of:=([.A95]=[.D95])AND([.B95]=[.E95])AND([.C95]=[.F95])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A95])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3.-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3.-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A96]=[.D96])AND([.B96]=[.E96])AND([.C96]=[.F96])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A96])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3.-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3.-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA97:.AB102]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB97:.AC102]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=ISERROR([.A97])AND(ISERROR([.B97]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A97])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3.-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3.-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A98]=[.D98])AND([.B98]=[.E98])AND([.C98]=[.F98])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A98])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3.-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3.-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A99]=[.D99])AND([.B99]=[.E99])AND([.C99]=[.F99])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A99])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3.-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3.-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A100]=[.D100])AND([.B100]=[.E100])AND([.C100]=[.F100])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A100])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {-3.-3})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {-3.-3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; {3;-2})" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:formula="of:=([.A101]=[.D101])AND([.B101]=[.E101])AND([.C101]=[.F101])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A101])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A102]=[.D102])AND([.B102]=[.E102])AND([.C102]=[.F102])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A102])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce12" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA103:.AB107]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB103:.AC107]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=ISERROR([.A103])AND(ISERROR([.B103]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A103])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce12" office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A104]=[.D104])AND([.B104]=[.E104])AND([.C104]=[.F104])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A104])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A105]=[.D105])AND([.B105]=[.E105])AND([.C105]=[.F105])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A105])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce12" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A106]=[.D106])AND([.B106]=[.E106])AND([.C106]=[.F106])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A106])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; {3.-2})}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; {3.-2})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce12" table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>references</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; [.O2])" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce12"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A108]=[.D108])AND([.B108]=[.E108])AND([.C108]=[.F108])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A108])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce12" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A109]=[.D109])AND([.B109]=[.E109])AND([.C109]=[.F109])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A109])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce12" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce12" table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA110:.AB121]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=ISERROR([.A110])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A110])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A111]=[.D111])AND([.B111]=[.E111])AND([.C111]=[.F111])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A111])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A112]=[.D112])AND([.B112]=[.E112])AND([.C112]=[.F112])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A112])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A113]=[.D113])AND([.B113]=[.E113])AND([.C113]=[.F113])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A113])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce42"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; [.Q2])" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce43" table:formula="of:=([.A115]=[.D115])AND([.B115]=[.E115])AND([.C115]=[.F115])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A115])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; Q2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; Q2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce43" table:formula="of:=([.A116]=[.D116])AND([.B116]=[.E116])AND([.C116]=[.F116])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A116])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; Q2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; Q2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA117:.AB135]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce43" table:formula="of:=ISERROR([.A117])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A117])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; Q2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; Q2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce43" table:formula="of:=([.A118]=[.D118])AND([.B118]=[.E118])AND([.C118]=[.F118])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A118])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; Q2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; Q2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce43" table:formula="of:=([.A119]=[.D119])AND([.B119]=[.E119])AND([.C119]=[.F119])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A119])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; Q2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; Q2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce43" table:formula="of:=([.A120]=[.D120])AND([.B120]=[.E120])AND([.C120]=[.F120])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A120])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; Q2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; Q2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; [.O2:.P2])" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:formula="of:=([.A122]=[.D122])AND([.B122]=[.E122])AND([.C122]=[.F122])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A122])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2:P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2:P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A123]=[.D123])AND([.B123]=[.E123])AND([.C123]=[.F123])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A123])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2:P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2:P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA124:.AB128]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB124:.AC128]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=ISERROR([.A124])AND(ISERROR([.B124]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A124])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2:P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2:P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A125]=[.D125])AND([.B125]=[.E125])AND([.C125]=[.F125])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A125])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2:P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2:P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A126]=[.D126])AND([.B126]=[.E126])AND([.C126]=[.F126])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A126])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2:P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2:P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A127]=[.D127])AND([.B127]=[.E127])AND([.C127]=[.F127])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A127])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; O2:P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; O2:P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>odd columns</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="3" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; COM.MICROSOFT.SEQUENCE(ROUNDUP(COLUMNS([.J3:.N8])/2; 0);1; 1; 2))" office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A129]=[.D129])AND([.B129]=[.E129])AND([.C129]=[.F129])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A129])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A130]=[.D130])AND([.B130]=[.E130])AND([.C130]=[.F130])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A130])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA131:.AB136]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB131:.AC136]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AC131:.AD136]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=ISERROR([.A131])AND(ISERROR([.B131]))AND(ISERROR([.C131]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A131])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A132]=[.D132])AND([.B132]=[.E132])AND([.C132]=[.F132])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A132])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="20" calcext:value-type="float"> + <text:p>20</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="20" calcext:value-type="float"> + <text:p>20</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A133]=[.D133])AND([.B133]=[.E133])AND([.C133]=[.F133])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A133])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="10" calcext:value-type="float"> + <text:p>10</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="10" calcext:value-type="float"> + <text:p>10</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A134]=[.D134])AND([.B134]=[.E134])AND([.C134]=[.F134])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A134])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDUP(COLUMNS(J3:N8)/2; 0);1; 1; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>even columns</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; COM.MICROSOFT.SEQUENCE(ROUNDDOWN(COLUMNS([.J3:.N8])/2; 0);1; 2; 2))" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:formula="of:=([.A136]=[.D136])AND([.B136]=[.E136])AND([.C136]=[.F136])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A136])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce18" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A137]=[.D137])AND([.B137]=[.E137])AND([.C137]=[.F137])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A137])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA138:.AB143]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB138:.AC143]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=ISERROR([.A138])AND(ISERROR([.B138]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A138])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A139]=[.D139])AND([.B139]=[.E139])AND([.C139]=[.F139])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A139])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A140]=[.D140])AND([.B140]=[.E140])AND([.C140]=[.F140])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A140])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A141]=[.D141])AND([.B141]=[.E141])AND([.C141]=[.F141])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A141])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; SEQUENCE(ROUNDDOWN(COLUMNS(J3:N8)/2; 0);1; 2; 2))}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce24" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="3" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.CHOOSECOLS([.J3:.N8]; -3; {-3};[.P2])" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A143]=[.D143])AND([.B143]=[.E143])AND([.C143]=[.F143])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A143])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; {-3};P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; {-3};P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A144]=[.D144])AND([.B144]=[.E144])AND([.C144]=[.F144])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A144])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; {-3};P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; {-3};P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA145:.AB150]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AB145:.AC150]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce14" table:formula="of:=VLOOKUP(1; [.AC145:.AD150]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=ISERROR([.A145])AND(ISERROR([.B145]))AND(ISERROR([.C145]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A145])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; {-3};P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; {-3};P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A146]=[.D146])AND([.B146]=[.E146])AND([.C146]=[.F146])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A146])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; {-3};P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; {-3};P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce24" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A147]=[.D147])AND([.B147]=[.E147])AND([.C147]=[.F147])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A147])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; {-3};P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; {-3};P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2" table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A148]=[.D148])AND([.B148]=[.E148])AND([.C148]=[.F148])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A148])" office:value-type="string" office:string-value="{=CHOOSECOLS(J3:N8; -3; {-3};P2)}" calcext:value-type="string"> + <text:p>{=CHOOSECOLS(J3:N8; -3; {-3};P2)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:style-name="ce45"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:style-name="ce31"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="4"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce14" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce24" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce46"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce18"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce14" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <calcext:conditional-formats> + <calcext:conditional-format calcext:target-range-address="Sheet2.G2:Sheet2.G26 Sheet2.G153:Sheet2.G165 Sheet2.G28:Sheet2.G69 Sheet2.G71:Sheet2.G113 Sheet2.G151:Sheet2.G151 Sheet2.G116:Sheet2.G148"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.G2"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.G2"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.G2"/> + </calcext:conditional-format> + <calcext:conditional-format calcext:target-range-address="Sheet2.G108:Sheet2.G114"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.G108"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.G108"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.G108"/> + </calcext:conditional-format> + <calcext:conditional-format calcext:target-range-address="Sheet2.G115:Sheet2.G120"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.G115"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.G115"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.G115"/> + </calcext:conditional-format> + <calcext:conditional-format calcext:target-range-address="Sheet2.G115:Sheet2.G120"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.G115"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.G115"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.G115"/> + </calcext:conditional-format> + <calcext:conditional-format calcext:target-range-address="Sheet2.G144:Sheet2.G150"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.G144"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.G144"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.G144"/> + </calcext:conditional-format> + </calcext:conditional-formats> + </table:table> + <table:named-expressions/> + </office:spreadsheet> + </office:body> +</office:document> diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/hstack.fods b/sc/qa/unit/data/functions/spreadsheet/fods/hstack.fods new file mode 100644 index 000000000000..b96f5b12f498 --- /dev/null +++ b/sc/qa/unit/data/functions/spreadsheet/fods/hstack.fods @@ -0,0 +1,5034 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> + <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT6H47M34S</meta:editing-duration><meta:editing-cycles>135</meta:editing-cycles><meta:generator>LibreOfficeDev/25.8.0.0.alpha0$Linux_X86_64 LibreOffice_project/0ef05087b54621caec96e72fc8aaf13f86a90bf9</meta:generator><dc:date>2025-02-04T12:52:14.123003064</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="361" meta:object-count="0"/></office:meta> + <office:scripts> + <office:script script:language="ooo:Basic"> + <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"> + <ooo:library-embedded ooo:name="Standard"/> + </ooo:libraries> + </office:script> + </office:scripts> + <office:font-face-decls> + <style:font-face style:name="Calibri" svg:font-family="Calibri" style:font-family-generic="swiss"/> + <style:font-face style:name="FreeSans" svg:font-family="FreeSans" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Noto Sans" svg:font-family="'Noto Sans'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Noto Sans CJK SC" svg:font-family="'Noto Sans CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="'WenQuanYi Micro Hei'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="table-cell"> + <style:paragraph-properties style:tab-stop-distance="1.27cm"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-size="10pt" fo:language="en" fo:country="US" style:font-name-asian="WenQuanYi Micro Hei" style:font-size-asian="10pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="FreeSans" style:font-size-complex="10pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" style:writing-mode="page"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:punctuation-wrap="simple" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="page" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" loext:opacity="0%" fo:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-family-asian="'Segoe UI'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" style:font-family-complex="Tahoma" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:style style:name="Default" style:family="graphic"/> + <style:style style:name="Note" style:family="graphic" style:parent-style-name="Default"> + <style:graphic-properties draw:stroke="solid" draw:marker-start="Arrowheads_20_1" draw:marker-start-width="0.2cm" draw:marker-start-center="false" draw:fill="solid" draw:fill-color="#ffffc0" draw:auto-grow-height="true" draw:auto-grow-width="false" fo:padding-top="0.1cm" fo:padding-bottom="0.1cm" fo:padding-left="0.1cm" fo:padding-right="0.1cm" draw:shadow="visible" draw:shadow-offset-x="0.1cm" draw:shadow-offset-y="0.1cm"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="10pt" style:font-name-asian="WenQuanYi Micro Hei" style:font-family-asian="'WenQuanYi Micro Hei'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="10pt" style:font-name-complex="FreeSans" style:font-family-complex="FreeSans" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="10pt"/> + </style:style> + <number:number-style style:name="N0"> + <number:number number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N111P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="es" number:country="ES">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N111"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="es" number:country="ES">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N111P0"/> + </number:currency-style> + <number:currency-style style:name="N114P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N114"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N114P0"/> + </number:currency-style> + <number:number-style style:name="N116P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N116"> + <style:text-properties fo:color="#ff0000"/> + <number:text>\-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N116P0"/> + </number:number-style> + <number:percentage-style style:name="N117"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N121P0" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N121P1" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N121P2" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N121"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N121P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N121P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N121P2"/> + </number:text-style> + <number:currency-style style:name="N123P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N123"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N123P0"/> + </number:currency-style> + <number:number-style style:name="N124"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N128P0" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N128P1" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N128P2" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N128"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N128P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N128P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N128P2"/> + </number:text-style> + <number:date-style style:name="N129"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N130"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N131P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N131"> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N131P0"/> + </number:number-style> + <number:currency-style style:name="N133P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N133"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> -</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N133P0"/> + </number:currency-style> + <number:number-style style:name="N135P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N135"> + <number:text>($</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N135P0"/> + </number:number-style> + <number:number-style style:name="N136"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N139P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N139P1" style:volatile="true"> + <number:text> (</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N139P2" style:volatile="true"> + <number:text> - </number:text> + </number:number-style> + <number:text-style style:name="N139"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N139P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N139P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N139P2"/> + </number:text-style> + <number:date-style style:name="N140"> + <number:text>⌀ </number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N144P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N144P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N144P2" style:volatile="true"> + <number:text> - € </number:text> + </number:number-style> + <number:text-style style:name="N144"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N144P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N144P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N144P2"/> + </number:text-style> + <number:number-style style:name="N145"> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N146"> + <number:scientific-number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:currency-style style:name="N147P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N147"> + <style:text-properties fo:color="#ff0000"/> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>-</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N147P0"/> + </number:currency-style> + <number:date-style style:name="N148"> + <number:month number:style="long"/> + <number:text>-</number:text> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N150P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N150"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N150P0"/> + </number:currency-style> + <number:date-style style:name="N151"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:style="long"/> + </number:date-style> + <number:number-style style:name="N152"> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N153"> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N157P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N157P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N157P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N157"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N157P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N157P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N157P2"/> + </number:text-style> + <number:currency-style style:name="N159P0" style:volatile="true"> + <number:currency-symbol>€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N159"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol>€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N159P0"/> + </number:currency-style> + <number:number-style style:name="N160"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N161"> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N162"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N163P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N163"> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N163P0"/> + </number:number-style> + <number:currency-style style:name="N165P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N165"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N165P0"/> + </number:currency-style> + <number:currency-style style:name="N167P0" style:volatile="true"> + <number:currency-symbol number:language="es" number:country="MX">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N167"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="es" number:country="MX">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N167P0"/> + </number:currency-style> + <number:number-style style:name="N171P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N171P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N171P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N171"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N171P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N171P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N171P2"/> + </number:text-style> + <number:currency-style style:name="N173P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N173"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N173P0"/> + </number:currency-style> + <number:number-style style:name="N175P0" style:volatile="true"> + <number:text>Yes</number:text> + </number:number-style> + <number:number-style style:name="N175P1" style:volatile="true"> + <number:text>Yes</number:text> + </number:number-style> + <number:number-style style:name="N175"> + <number:text>No</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N175P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N175P1"/> + </number:number-style> + <number:number-style style:name="N176"> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N177"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N179P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N179"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N179P0"/> + </number:currency-style> + <number:number-style style:name="N181P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N181"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N181P0"/> + </number:number-style> + <number:number-style style:name="N183P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N183"> + <number:text>\-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N183P0"/> + </number:number-style> + <number:number-style style:name="N187P0" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N187P1" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N187P2" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N187"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N187P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N187P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N187P2"/> + </number:text-style> + <number:number-style style:name="N188"> + <number:number number:decimal-places="18" number:min-decimal-places="18" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N189"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N190"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="3" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N192P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N192P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N192P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N192"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N192P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N192P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N192P2"/> + </number:text-style> + <number:currency-style style:name="N193P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N193"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N193P0"/> + </number:currency-style> + <number:number-style style:name="N194"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="1" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N195"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/> + </number:number-style> + <number:currency-style style:name="N197P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N197"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N197P0"/> + </number:currency-style> + <number:number-style style:name="N198P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N198"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N198P0"/> + </number:number-style> + <number:date-style style:name="N199"> + <number:month number:style="long"/> + <number:text>-</number:text> + <number:day/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:number-style style:name="N203P0" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N203P1" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N203P2" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N203"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N203P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N203P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N203P2"/> + </number:text-style> + <number:number-style style:name="N207P0" style:volatile="true"> + <number:text> $</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N207P1" style:volatile="true"> + <number:text> $(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N207P2" style:volatile="true"> + <number:text> $- </number:text> + </number:number-style> + <number:text-style style:name="N207"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N207P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N207P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N207P2"/> + </number:text-style> + <number:date-style style:name="N208"> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N209"> + <number:number number:decimal-places="20" number:min-decimal-places="20" number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N211P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N211"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N211P0"/> + </number:currency-style> + <number:number-style style:name="N213P0" style:volatile="true"> + <number:text>On</number:text> + </number:number-style> + <number:number-style style:name="N213P1" style:volatile="true"> + <number:text>On</number:text> + </number:number-style> + <number:number-style style:name="N213"> + <number:text>Off</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N213P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N213P1"/> + </number:number-style> + <number:number-style style:name="N215P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N215"> + <style:text-properties fo:color="#ff0000"/> + <number:text>($</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N215P0"/> + </number:number-style> + <number:number-style style:name="N217P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N217"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N217P0"/> + </number:number-style> + <number:number-style style:name="N218"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N219P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N219"> + <number:text>($</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N219P0"/> + </number:number-style> + <number:number-style style:name="N220P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N220"> + <style:text-properties fo:color="#ff0000"/> + <number:text>($</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N220P0"/> + </number:number-style> + <number:number-style style:name="N221"> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N223P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N223P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N223P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N223"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N223P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N223P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N223P2"/> + </number:text-style> + <number:currency-style style:name="N224P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N224"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N224P0"/> + </number:currency-style> + <number:number-style style:name="N225"> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N227P0" style:volatile="true"> + <number:text>True</number:text> + </number:number-style> + <number:number-style style:name="N227P1" style:volatile="true"> + <number:text>True</number:text> + </number:number-style> + <number:number-style style:name="N227"> + <number:text>False</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N227P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N227P1"/> + </number:number-style> + <number:number-style style:name="N231P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N231P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N231P2" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> € </number:text> + </number:number-style> + <number:text-style style:name="N231"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N231P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N231P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N231P2"/> + </number:text-style> + <number:number-style style:name="N232"> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N236P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N236P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N236P2" style:volatile="true"> + <number:text> - </number:text> + </number:number-style> + <number:text-style style:name="N236"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N236P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N236P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N236P2"/> + </number:text-style> + <number:date-style style:name="N237"> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N238P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N238"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N238P0"/> + </number:currency-style> + <number:currency-style style:name="N240P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N240"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N240P0"/> + </number:currency-style> + <number:number-style style:name="N244P0" style:volatile="true"> + <number:text> $</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N244P1" style:volatile="true"> + <number:text> $(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N244P2" style:volatile="true"> + <number:text> $-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N244"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N244P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N244P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N244P2"/> + </number:text-style> + <number:number-style style:name="N248P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N248P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N248P2" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N248"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N248P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N248P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N248P2"/> + </number:text-style> + <number:number-style style:name="N250P0" style:volatile="true"> + <number:text>WAHR</number:text> + </number:number-style> + <number:number-style style:name="N250P1" style:volatile="true"> + <number:text>WAHR</number:text> + </number:number-style> + <number:number-style style:name="N250"> + <number:text>FALSCH</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N250P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N250P1"/> + </number:number-style> + <number:date-style style:name="N251"> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N253P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N253"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N253P0"/> + </number:currency-style> + <number:currency-style style:name="N255P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N255"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N255P0"/> + </number:currency-style> + <number:number-style style:name="N256"> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N259P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N259P1" style:volatile="true"> + <number:text> (</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N259P2" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N259"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N259P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N259P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N259P2"/> + </number:text-style> + <number:time-style style:name="N260"> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long" number:decimal-places="1"/> + </number:time-style> + <number:time-style style:name="N261"> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:currency-style style:name="N263P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N263"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N263P0"/> + </number:currency-style> + <number:number-style style:name="N264P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N264"> + <style:text-properties fo:color="#ff0000"/> + <number:text>\-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N264P0"/> + </number:number-style> + <number:currency-style style:name="N266P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N266"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> -</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N266P0"/> + </number:currency-style> + <number:currency-style style:name="N268P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N268"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N268P0"/> + </number:currency-style> + <number:number-style style:name="N269"> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N270"> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N271P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N271"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N271P0"/> + </number:number-style> + <number:currency-style style:name="N272P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N272"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N272P0"/> + </number:currency-style> + <number:time-style style:name="N273" number:truncate-on-overflow="false"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:number-style style:name="N274P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N274"> + <number:text>\-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N274P0"/> + </number:number-style> + <number:number-style style:name="N276P0" style:volatile="true"> + <number:text/> + </number:number-style> + <number:currency-style style:name="N276"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N276P0"/> + </number:currency-style> + <number:date-style style:name="N277"> + <number:day-of-week/> + <number:text> </number:text> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N278"> + <number:day-of-week number:style="long"/> + <number:text> </number:text> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:currency-style style:name="N280P0" style:volatile="true"> + <number:currency-symbol number:language="de" number:country="AT">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N280"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="de" number:country="AT">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N280P0"/> + </number:currency-style> + <number:number-style style:name="N282P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N282"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N282P0"/> + </number:number-style> + <number:number-style style:name="N283P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N283"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N283P0"/> + </number:number-style> + <number:number-style style:name="N285P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N285"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N285P0"/> + </number:number-style> + <number:number-style style:name="N286P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N286"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N286P0"/> + </number:number-style> + <number:number-style style:name="N287P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N287"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N287P0"/> + </number:number-style> + <number:number-style style:name="N288P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N288"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N288P0"/> + </number:number-style> + <number:number-style style:name="N289P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N289"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N289P0"/> + </number:number-style> + <number:number-style style:name="N290P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N290"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N290P0"/> + </number:number-style> + <number:number-style style:name="N294P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N294P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N294P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N294"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N294P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N294P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N294P2"/> + </number:text-style> + <number:number-style style:name="N298P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N298P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N298P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- Kč </number:text> + </number:number-style> + <number:text-style style:name="N298"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N298P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N298P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N298P2"/> + </number:text-style> + <number:number-style style:name="N302P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N302P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N302P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N302"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N302P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N302P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N302P2"/> + </number:text-style> + <number:number-style style:name="N306P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N306P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N306P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> Kč </number:text> + </number:number-style> + <number:text-style style:name="N306"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N306P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N306P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N306P2"/> + </number:text-style> + <number:currency-style style:name="N308P0" style:volatile="true"> + <number:currency-symbol number:language="cs" number:country="CZ">¥€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="3"> + <number:embedded-text number:position="5"> </number:embedded-text> + </number:number> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N308"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol number:language="cs" number:country="CZ">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="3"> + <number:embedded-text number:position="5"> </number:embedded-text> + </number:number> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N308P0"/> + </number:currency-style> + <number:number-style style:name="N310P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N310"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N310P0"/> + </number:number-style> + <number:number-style style:name="N311P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N311"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N311P0"/> + </number:number-style> + <number:number-style style:name="N313P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N313"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N313P0"/> + </number:number-style> + <number:number-style style:name="N314P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N314"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N314P0"/> + </number:number-style> + <number:percentage-style style:name="N315"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N316"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N317"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N318"> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N319"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N320"> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N321"> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N322"> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N323"> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:currency-style style:name="N325P0" style:volatile="true"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N325"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N325P0"/> + </number:currency-style> + <number:currency-style style:name="N327P0" style:volatile="true"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N327"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N327P0"/> + </number:currency-style> + <number:currency-style style:name="N329P0" style:volatile="true"> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N329"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N329P0"/> + </number:currency-style> + <number:currency-style style:name="N331P0" style:volatile="true"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N331"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N331P0"/> + </number:currency-style> + <number:currency-style style:name="N333P0" style:volatile="true"> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N333"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N333P0"/> + </number:currency-style> + <number:currency-style style:name="N335P0" style:volatile="true"> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N335"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N335P0"/> + </number:currency-style> + <number:currency-style style:name="N337P0" style:volatile="true"> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N337"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N337P0"/> + </number:currency-style> + <number:currency-style style:name="N339P0" style:volatile="true"> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N339"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N339P0"/> + </number:currency-style> + <number:currency-style style:name="N341P0" style:volatile="true"> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N341"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N341P0"/> + </number:currency-style> + <number:currency-style style:name="N343P0" style:volatile="true"> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N343"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N343P0"/> + </number:currency-style> + <number:currency-style style:name="N345P0" style:volatile="true"> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N345"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N345P0"/> + </number:currency-style> + <number:currency-style style:name="N347P0" style:volatile="true"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N347"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N347P0"/> + </number:currency-style> + <number:currency-style style:name="N349P0" style:volatile="true"> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N349"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N349P0"/> + </number:currency-style> + <number:currency-style style:name="N351P0" style:volatile="true"> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N351"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N351P0"/> + </number:currency-style> + <number:currency-style style:name="N353P0" style:volatile="true"> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N353"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N353P0"/> + </number:currency-style> + <number:percentage-style style:name="N354"> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N355"> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N356"> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N357"> + <number:number number:decimal-places="18" number:min-decimal-places="18" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N358"> + <number:number number:decimal-places="19" number:min-decimal-places="19" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N359"> + <number:number number:decimal-places="20" number:min-decimal-places="20" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N360"> + <number:number number:decimal-places="19" number:min-decimal-places="19" number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N362P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="US">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N362"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol number:language="en" number:country="US">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N362P0"/> + </number:currency-style> + <number:percentage-style style:name="N363" number:title="User-defined"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N365P0" style:volatile="true"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:grouping="true"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N365"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:grouping="true"/> + <number:text>%</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N365P0"/> + </number:percentage-style> + <number:number-style style:name="N366P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="0" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N366"> + <style:text-properties fo:color="#000000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="0" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N366P0"/> + </number:number-style> + <number:date-style style:name="N367"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:currency-style style:name="N369P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N369"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N369P0"/> + </number:currency-style> + <number:currency-style style:name="N371P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N371"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N371P0"/> + </number:currency-style> + <number:percentage-style style:name="N373P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N373"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + <number:text>%</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N373P0"/> + </number:percentage-style> + <number:number-style style:name="N375P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N375"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N375P0"/> + </number:number-style> + <number:number-style style:name="N376P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N376"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N376P0"/> + </number:number-style> + <number:number-style style:name="N378P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N378"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N378P0"/> + </number:number-style> + <number:number-style style:name="N379P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N379"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N379P0"/> + </number:number-style> + <number:number-style style:name="N383P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N383P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N383P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N383"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N383P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N383P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N383P2"/> + </number:text-style> + <number:number-style style:name="N387P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N387P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N387P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- DM </number:text> + </number:number-style> + <number:text-style style:name="N387"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N387P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N387P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N387P2"/> + </number:text-style> + <number:number-style style:name="N391P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N391P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N391P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N391"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N391P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N391P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N391P2"/> + </number:text-style> + <number:number-style style:name="N395P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N395P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N395P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> DM </number:text> + </number:number-style> + <number:text-style style:name="N395"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N395P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N395P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N395P2"/> + </number:text-style> + <number:text-style style:name="N396"> + <number:text>Ouch! - </number:text> + <number:text-content/> + <number:text> - Error detected!</number:text> + </number:text-style> + <number:text-style style:name="N397"> + <number:text-content/> + <number:text> - Result=0 - No Errordetection</number:text> + </number:text-style> + <number:date-style style:name="N398"> + <number:day/> + <number:text>/</number:text> + <number:month/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N399"> + <number:day/> + <number:text>. </number:text> + <number:month/> + <number:text>. </number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N403P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N403P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N403P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N403"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N403P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N403P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N403P2"/> + </number:text-style> + <number:number-style style:name="N407P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N407P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N407P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- € </number:text> + </number:number-style> + <number:text-style style:name="N407"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N407P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N407P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N407P2"/> + </number:text-style> + <number:number-style style:name="N411P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N411P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N411P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N411"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N411P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N411P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N411P2"/> + </number:text-style> + <number:number-style style:name="N415P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N415P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N415P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> € </number:text> + </number:number-style> + <number:text-style style:name="N415"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N415P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N415P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N415P2"/> + </number:text-style> + <number:currency-style style:name="N416"> + <number:currency-symbol number:language="en" number:country="AU">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N417P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="AU">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N417"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="AU">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N417P0"/> + </number:currency-style> + <number:date-style style:name="N418"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N419"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N420"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N421"> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N422"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N423"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:date-style style:name="N424"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year number:style="long"/> + <number:text> </number:text> + <number:hours number:style="long"/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N425P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N425"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N425P0"/> + </number:number-style> + <number:number-style style:name="N426P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N426"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N426P0"/> + </number:number-style> + <number:number-style style:name="N427P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N427"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N427P0"/> + </number:number-style> + <number:number-style style:name="N428P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N428"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N428P0"/> + </number:number-style> + <number:number-style style:name="N429"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N430P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N430"> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N430P0"/> + </number:number-style> + <number:number-style style:name="N431P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N431"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N431P0"/> + </number:number-style> + <number:number-style style:name="N432P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N432"> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N432P0"/> + </number:number-style> + <number:number-style style:name="N433P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N433"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N433P0"/> + </number:number-style> + <number:number-style style:name="N434"> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N435P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N435P1" style:volatile="true"> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N435"> + <number:text>$-</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N435P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N435P1"/> + </number:number-style> + <number:number-style style:name="N436"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N437P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N437P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N437"> + <number:text>-</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N437P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N437P1"/> + </number:number-style> + <number:number-style style:name="N438"> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N439P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N439P1" style:volatile="true"> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N439"> + <number:text>$-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <style:map style:condition="value()>0" style:apply-style-name="N439P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N439P1"/> + </number:number-style> + <number:number-style style:name="N440"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N441P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N441P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N441"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <style:map style:condition="value()>0" style:apply-style-name="N441P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N441P1"/> + </number:number-style> + <number:number-style style:name="N443P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N443"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N443P0"/> + </number:number-style> + <number:number-style style:name="N444P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N444"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N444P0"/> + </number:number-style> + <number:number-style style:name="N446P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N446"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N446P0"/> + </number:number-style> + <number:number-style style:name="N447P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N447"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N447P0"/> + </number:number-style> + <number:date-style style:name="N448"> + <number:year number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:day number:style="long"/> + </number:date-style> + <number:date-style style:name="N449"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:textual="true"/> + <number:text>.</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N450"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N451"> + <number:month number:textual="true"/> + <number:text>.</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N452"> + <number:year number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:day number:style="long"/> + <number:text> </number:text> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N454P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N454"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N454P0"/> + </number:number-style> + <number:number-style style:name="N455P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N455"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N455P0"/> + </number:number-style> + <number:number-style style:name="N457P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N457"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N457P0"/> + </number:number-style> + <number:number-style style:name="N458P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N458"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N458P0"/> + </number:number-style> + <number:number-style style:name="N462P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N462P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N462P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="F2_t4_-5">- </number:text> + </number:number-style> + <number:text-style style:name="N462"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N462P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N462P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N462P2"/> + </number:text-style> + <number:number-style style:name="N466P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N466P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N466P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="-4">- Ft </number:text> + </number:number-style> + <number:text-style style:name="N466"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N466P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N466P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N466P2"/> + </number:text-style> + <number:number-style style:name="N470P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N470P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N470P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:text-style style:name="N470"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N470P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N470P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N470P2"/> + </number:text-style> + <number:number-style style:name="N474P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N474P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N474P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:text-style style:name="N474"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N474P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N474P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N474P2"/> + </number:text-style> + <number:date-style style:name="N475"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N476"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N477"> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N478"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:time-style> + <number:time-style style:name="N479"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:date-style style:name="N480"> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year number:style="long"/> + <number:text> </number:text> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N482P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N482"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N482P0"/> + </number:number-style> + <number:number-style style:name="N483P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N483"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N483P0"/> + </number:number-style> + <number:number-style style:name="N485P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N485"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N485P0"/> + </number:number-style> + <number:number-style style:name="N486P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N486"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N486P0"/> + </number:number-style> + <number:number-style style:name="N490P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N490P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N490P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="€2_-4">- </number:text> + </number:number-style> + <number:text-style style:name="N490"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N490P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N490P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N490P2"/> + </number:text-style> + <number:number-style style:name="N494P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N494P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N494P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="-3">- € </number:text> + </number:number-style> + <number:text-style style:name="N494"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N494P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N494P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N494P2"/> + </number:text-style> + <number:number-style style:name="N498P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N498P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N498P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:text-style style:name="N498"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N498P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N498P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N498P2"/> + </number:text-style> + <number:number-style style:name="N502P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N502P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N502P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:text-style style:name="N502"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N502P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N502P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N502P2"/> + </number:text-style> + <number:date-style style:name="N10129" number:language="en" number:country="US"> + <number:month/> + <number:text>/</number:text> + <number:day/> + <number:text>/</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:date-style style:name="N10130" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N10131" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N10132" number:language="en" number:country="US"> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N10133" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N10134" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N10135" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:time-style> + <number:time-style style:name="N10136" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:date-style style:name="N10137" number:language="en" number:country="US"> + <number:month/> + <number:text>/</number:text> + <number:day/> + <number:text>/</number:text> + <number:year number:style="long"/> + <number:text> </number:text> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N10139P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10139" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10139P0"/> + </number:number-style> + <number:number-style style:name="N10141P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10141" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10141P0"/> + </number:number-style> + <number:currency-style style:name="N10143P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10143" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10143P0"/> + </number:currency-style> + <number:currency-style style:name="N10144P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10144" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10144P0"/> + </number:currency-style> + <number:currency-style style:name="N10146P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10146" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10146P0"/> + </number:currency-style> + <number:currency-style style:name="N10147P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10147" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10147P0"/> + </number:currency-style> + <number:number-style style:name="N10148P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10148" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10148P0"/> + </number:number-style> + <number:number-style style:name="N10149P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10149" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10149P0"/> + </number:number-style> + <number:number-style style:name="N10153P0" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10153P1" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N10153P2" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N10153" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10153P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10153P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10153P2"/> + </number:text-style> + <number:currency-style style:name="N10157P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10157P1" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:currency-style> + <number:currency-style style:name="N10157P2" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:currency-style> + <number:text-style style:name="N10157" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10157P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10157P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10157P2"/> + </number:text-style> + <number:number-style style:name="N10161P0" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10161P1" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N10161P2" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N10161" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10161P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10161P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10161P2"/> + </number:text-style> + <number:currency-style style:name="N10165P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10165P1" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:currency-style> + <number:currency-style style:name="N10165P2" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:currency-style> + <number:text-style style:name="N10165" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10165P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10165P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10165P2"/> + </number:text-style> + <number:number-style style:name="N10166" number:language="en" number:country="US"> + <number:scientific-number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N10167" number:language="en" number:country="US"> + <number:scientific-number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:date-style style:name="N10168" number:language="en" number:country="US"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:time-style style:name="N10169" number:language="en" number:country="US" number:truncate-on-overflow="false"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:time-style style:name="N10170" number:language="en" number:country="US"> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long" number:decimal-places="1"/> + </number:time-style> + <number:number-style style:name="N10171" number:language="en" number:country="US"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/> + </number:number-style> + <number:percentage-style style:name="N10172" number:language="en" number:country="US"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N10173" number:language="en" number:country="US"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:date-style style:name="N10174P0" style:volatile="true" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:text-style style:name="N10174" number:language="en" number:country="US"> + <number:text-content/> + <style:map style:condition="value()<=1.7976931348623157E+308" style:apply-style-name="N10174P0"/> + </number:text-style> + <number:date-style style:name="N10175P0" style:volatile="true" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:text-style style:name="N10175" number:language="en" number:country="US"> + <number:text-content/> + <style:map style:condition="value()<=1.7976931348623157E+308" style:apply-style-name="N10175P0"/> + </number:text-style> + <number:date-style style:name="N20114" number:language="de" number:country="DE"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N20115" number:language="de" number:country="DE"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N20116" number:language="de" number:country="DE"> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N20117" number:language="de" number:country="DE"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N20118" number:language="de" number:country="DE"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:number-style style:name="N20120P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20120" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20120P0"/> + </number:number-style> + <number:number-style style:name="N20121P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20121" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20121P0"/> + </number:number-style> + <number:number-style style:name="N20123P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20123" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20123P0"/> + </number:number-style> + <number:number-style style:name="N20124P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20124" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20124P0"/> + </number:number-style> + <number:number-style style:name="N20126P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20126" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20126P0"/> + </number:number-style> + <number:number-style style:name="N20127P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20127" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20127P0"/> + </number:number-style> + <number:number-style style:name="N20129P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20129" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20129P0"/> + </number:number-style> + <number:number-style style:name="N20130P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20130" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20130P0"/> + </number:number-style> + <style:style style:name="Default" style:family="table-cell"/> + <style:style style:name="Heading" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:color="#000000" fo:font-size="24pt" fo:font-style="normal" fo:font-weight="bold" style:font-size-asian="24pt" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-size-complex="24pt" style:font-style-complex="normal" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="table-cell" style:parent-style-name="Heading"> + <style:text-properties fo:font-size="18pt" style:font-size-asian="18pt" style:font-size-complex="18pt"/> + </style:style> + <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="table-cell" style:parent-style-name="Heading"> + <style:text-properties fo:font-size="12pt" style:font-size-asian="12pt" style:font-size-complex="12pt"/> + </style:style> + <style:style style:name="Text" style:family="table-cell" style:parent-style-name="Default"/> + <style:style style:name="Note" style:family="table-cell" style:parent-style-name="Text"> + <style:table-cell-properties fo:background-color="#ffffcc" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" fo:border="0.74pt solid #808080"/> + <style:text-properties fo:color="#333333"/> + </style:style> + <style:style style:name="Footnote" style:family="table-cell" style:parent-style-name="Text"> + <style:text-properties fo:color="#808080" fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/> + </style:style> + <style:style style:name="Hyperlink" style:family="table-cell" style:parent-style-name="Text"> + <style:text-properties fo:color="#0000ee" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="#0000ee"/> + </style:style> + <style:style style:name="Status" style:family="table-cell" style:parent-style-name="Default"/> + <style:style style:name="Good" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ccffcc"/> + <style:text-properties fo:color="#006600"/> + </style:style> + <style:style style:name="Neutral" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ffffcc"/> + <style:text-properties fo:color="#996600"/> + </style:style> + <style:style style:name="Bad" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ffcccc"/> + <style:text-properties fo:color="#cc0000"/> + </style:style> + <style:style style:name="Warning" style:family="table-cell" style:parent-style-name="Status"> + <style:text-properties fo:color="#cc0000"/> + </style:style> + <style:style style:name="Error" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#cc0000"/> + <style:text-properties fo:color="#ffffff" fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Accent" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Accent_20_1" style:display-name="Accent 1" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#000000"/> + <style:text-properties fo:color="#ffffff"/> + </style:style> + <style:style style:name="Accent_20_2" style:display-name="Accent 2" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#808080"/> + <style:text-properties fo:color="#ffffff"/> + </style:style> + <style:style style:name="Accent_20_3" style:display-name="Accent 3" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#dddddd"/> + </style:style> + <style:style style:name="Result" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:font-style="italic" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-style-complex="italic" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="false" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:background-color="#ff3333"/> + </style:style> + <style:style style:name="true" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:background-color="#99ff66"/> + </style:style> + <draw:marker draw:name="Arrowheads_20_1" draw:display-name="Arrowheads 1" svg:viewBox="0 0 20 30" svg:d="M10 0l-10 30h20z"/> + <loext:theme loext:name="Office"> + <loext:theme-colors loext:name="LibreOffice"> + <loext:color loext:name="dark1" loext:color="#000000"/> + <loext:color loext:name="light1" loext:color="#ffffff"/> + <loext:color loext:name="dark2" loext:color="#000000"/> + <loext:color loext:name="light2" loext:color="#ffffff"/> + <loext:color loext:name="accent1" loext:color="#18a303"/> + <loext:color loext:name="accent2" loext:color="#0369a3"/> + <loext:color loext:name="accent3" loext:color="#a33e03"/> + <loext:color loext:name="accent4" loext:color="#8e03a3"/> + <loext:color loext:name="accent5" loext:color="#c99c00"/> + <loext:color loext:name="accent6" loext:color="#c9211e"/> + <loext:color loext:name="hyperlink" loext:color="#0000ee"/> + <loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/> + </loext:theme-colors> + </loext:theme> + </office:styles> + <office:automatic-styles> + <style:style style:name="co1" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="3.884cm"/> + </style:style> + <style:style style:name="co2" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="1.794cm"/> + </style:style> + <style:style style:name="co3" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="10.633cm"/> + </style:style> + <style:style style:name="co4" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="2.258cm"/> + </style:style> + <style:style style:name="co5" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="6.736cm"/> + </style:style> + <style:style style:name="co6" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="2.713cm"/> + </style:style> + <style:style style:name="ro1" style:family="table-row"> + <style:table-row-properties style:row-height="1.614cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro2" style:family="table-row"> + <style:table-row-properties style:row-height="0.452cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro3" style:family="table-row"> + <style:table-row-properties style:row-height="0.612cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro4" style:family="table-row"> + <style:table-row-properties style:row-height="0.529cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro5" style:family="table-row"> + <style:table-row-properties style:row-height="0.487cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ta1" style:family="table" style:master-page-name="Default"> + <style:table-properties table:display="true" style:writing-mode="lr-tb"/> + </style:style> + <number:number-style style:name="N2"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + </number:number-style> + <number:boolean-style style:name="N99"> + <number:boolean/> + </number:boolean-style> + <style:style style:name="ce19" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:wrap-option="wrap"/> + <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce20" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce22" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-size="12pt" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce4" style:family="table-cell" style:parent-style-name="Default"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce5" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce7" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce28" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce29" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + </style:style> + <style:style style:name="ce12" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"/> + <style:style style:name="ce25" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #afabab" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-left-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-left-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce16" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #c5e0b4" style:direction="ltr" fo:border-right="0.74pt solid #c5e0b4" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-left-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-left-complex-color> + <loext:border-right-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce9" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"> + <style:table-cell-properties style:cell-protect="protected" style:print-content="true" style:text-align-source="value-type" style:repeat-content="false" fo:wrap-option="no-wrap" style:direction="ltr" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" style:vertical-align="bottom" loext:vertical-justify="auto"/> + <style:paragraph-properties css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + <style:text-properties fo:color="#000000" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Calibri" fo:font-size="11pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:font-size-asian="11pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="11pt" style:font-style-complex="normal" style:font-weight-complex="normal"> + <loext:char-complex-color loext:theme-type="dark1" loext:color-type="theme"/> + </style:text-properties> + </style:style> + <style:style style:name="ce26" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" style:direction="ltr" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" style:vertical-align="bottom" loext:vertical-justify="auto"/> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce24" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce27" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"> + <style:table-cell-properties style:cell-protect="protected" style:print-content="true" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" style:direction="ltr" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" style:vertical-align="bottom" loext:vertical-justify="auto"/> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + <style:text-properties fo:color="#000000" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Calibri" fo:font-size="11pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:font-size-asian="11pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="11pt" style:font-style-complex="normal" style:font-weight-complex="normal"> + <loext:char-complex-color loext:theme-type="dark1" loext:color-type="theme"/> + </style:text-properties> + </style:style> + <style:style style:name="ce37" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #afabab" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-right-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce38" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #afabab" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + <loext:border-right-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce31" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"/> + <style:style style:name="ce46" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.I2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.I2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.I2"/> + </style:style> + <style:style style:name="ce15" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #c5e0b4" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + <loext:border-left-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-left-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce17" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #c5e0b4" style:direction="ltr" fo:border-right="0.74pt solid #c5e0b4" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-left-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-left-complex-color> + <loext:border-right-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce36" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #afabab" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + <loext:border-right-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce23" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #c5e0b4" style:direction="ltr" fo:border-right="0.74pt solid #c5e0b4" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + <loext:border-left-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-left-complex-color> + <loext:border-right-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce30" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" fo:border-left="0.74pt solid #afabab" fo:border-right="none" style:rotation-align="none" fo:border-top="none"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + <loext:border-left-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-left-complex-color> + </style:table-cell-properties> + </style:style> + <style:style style:name="ce39" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N429"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce32" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" style:direction="ltr" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" style:vertical-align="bottom" loext:vertical-justify="auto"/> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce34" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce44" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce35" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #afabab" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-right-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce48" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #c5e0b4" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + <loext:border-right-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:page-layout style:name="pm1"> + <style:page-layout-properties style:writing-mode="lr-tb"/> + <style:header-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm"/> + </style:header-style> + <style:footer-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm"/> + </style:footer-style> + </style:page-layout> + <style:page-layout style:name="pm2"> + <style:page-layout-properties style:writing-mode="lr-tb"/> + <style:header-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0"> + <style:background-image/> + </style:header-footer-properties> + </style:header-style> + <style:footer-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0"> + <style:background-image/> + </style:header-footer-properties> + </style:footer-style> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Default" style:page-layout-name="pm1"> + <style:header> + <text:p><text:sheet-name>???</text:sheet-name></text:p> + </style:header> + <style:header-left style:display="false"/> + <style:header-first style:display="false"/> + <style:footer> + <text:p>Page <text:page-number>1</text:page-number></text:p> + </style:footer> + <style:footer-left style:display="false"/> + <style:footer-first style:display="false"/> + </style:master-page> + <style:master-page style:name="Report" style:page-layout-name="pm2"> + <style:header> + <style:region-left> + <text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p> + </style:region-left> + <style:region-right> + <text:p><text:date style:data-style-name="N2" text:date-value="2025-02-04">00/00/0000</text:date>, <text:time style:data-style-name="N2" text:time-value="12:31:16.321796850">00:00:00</text:time></text:p> + </style:region-right> + </style:header> + <style:header-left style:display="false"/> + <style:header-first style:display="false"/> + <style:footer> + <text:p>Page <text:page-number>1</text:page-number><text:s/>/ <text:page-count>99</text:page-count></text:p> + </style:footer> + <style:footer-left style:display="false"/> + <style:footer-first style:display="false"/> + </style:master-page> + </office:master-styles> + <office:body> + <office:spreadsheet> + <table:calculation-settings table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/> + <table:table table:name="Sheet1" table:style-name="ta1"> + <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co2" table:default-cell-style-name="ce4"/> + <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/> + <table:table-row table:style-name="ro1"> + <table:table-cell table:style-name="ce19" office:value-type="string" calcext:value-type="string"> + <text:p>HSTACK Function</text:p> + </table:table-cell> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <table:table-row table:style-name="ro3"> + <table:table-cell table:style-name="ce20" office:value-type="string" calcext:value-type="string"> + <text:p>Result</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce5" table:formula="of:=AND([.B8:.B95])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="3"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <table:table-row table:style-name="ro4"> + <table:table-cell table:style-name="ce22" office:value-type="string" calcext:value-type="string"> + <text:p>Sheet</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce7" office:value-type="string" calcext:value-type="string"> + <text:p>Result</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce22" office:value-type="string" calcext:value-type="string"> + <text:p>Description</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce5" table:formula="of:=AND([Sheet2.I2:.I211])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce29" office:value-type="string" calcext:value-type="string"> + <text:p>Simple HSTACK formulas with local references and values</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="20"> + <table:table-cell/> + <table:table-cell table:style-name="ce28"/> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="21"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <calcext:conditional-formats> + <calcext:conditional-format calcext:target-range-address="Sheet1.B2:Sheet1.B50"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet1.B2"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet1.B2"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet1.B2"/> + </calcext:conditional-format> + </calcext:conditional-formats> + </table:table> + <table:table table:name="Sheet2" table:style-name="ta1"> + <table:table-column table:style-name="co4" table:number-columns-repeated="4" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co4" table:default-cell-style-name="ce16"/> + <table:table-column table:style-name="co4" table:number-columns-repeated="3" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co4" table:default-cell-style-name="ce46"/> + <table:table-column table:style-name="co5" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co6" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co4" table:number-columns-repeated="13" table:default-cell-style-name="Default"/> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Function</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default" office:value-type="string" calcext:value-type="string"> + <text:p>Expected</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce31" office:value-type="string" calcext:value-type="string"> + <text:p>Correct</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>FunctionString</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Comment</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Data</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Data</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default" office:value-type="string" calcext:value-type="string"> + <text:p>Data</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>one parameter</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce15"/> + <table:table-cell table:style-name="ce39" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce44" table:number-columns-repeated="6"/> + <table:table-cell table:style-name="ce36"/> + <table:table-cell table:style-name="ce39"/> + <table:table-cell table:style-name="ce44"/> + <table:table-cell table:style-name="ce48"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.HSTACK([.L3:.M8])" office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce12" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A3]=[.E3])AND([.B3]=[.F3])AND([.C3]=[.G3])AND([.D3]=[.H3])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A3])" office:value-type="string" office:string-value="{=HSTACK(L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38"/> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A4]=[.E4])AND([.B4]=[.F4])AND([.C4]=[.G4])AND([.D4]=[.H4])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A4])" office:value-type="string" office:string-value="{=HSTACK(L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA5:.AB12]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB5:.AC12]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16"/> + <table:table-cell/> + <table:table-cell table:formula="of:=(ISERROR([.A5]))AND(ISERROR([.B5]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A5])" office:value-type="string" office:string-value="{=HSTACK(L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AH5:.AI12]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AI5:.AJ12]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AJ5:.AK12]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:formula="of:=([.A6]=[.E6])AND([.B6]=[.F6])AND([.C6]=[.G6])AND([.D6]=[.H6])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A6])" office:value-type="string" office:string-value="{=HSTACK(L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27"/> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A7]=[.E7])AND([.B7]=[.F7])AND([.C7]=[.G7])AND([.D7]=[.H7])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A7])" office:value-type="string" office:string-value="{=HSTACK(L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27"/> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A8]=[.E8])AND([.B8]=[.F8])AND([.C8]=[.G8])AND([.D8]=[.H8])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A8])" office:value-type="string" office:string-value="{=HSTACK(L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>two parameters</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="4" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.HSTACK([.L3:.M8];[.O3:.P8])" office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A10]=[.E10])AND([.B10]=[.F10])AND([.C10]=[.G10])AND([.D10]=[.H10])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A10])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A11]=[.E11])AND([.B11]=[.F11])AND([.C11]=[.G11])AND([.D11]=[.H11])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A10])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce17"/> + <table:table-cell table:style-name="ce32" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce35"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA12:.AB19]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB12:.AC19]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB12:.AC19]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=(ISERROR([.A12]))AND(ISERROR([.B12]))AND(ISERROR([.G12])AND([.D12]=[.H12]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A11])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce17"/> + <table:table-cell table:style-name="ce34" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce36"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="Test" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A13]=[.E13])AND([.B13]=[.F13])AND([.C13]=[.G13])AND([.D13]=[.H13])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A12])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce17"/> + <table:table-cell table:style-name="ce9" table:number-columns-repeated="4"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce12" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A14]=[.E14])AND([.B14]=[.F14])AND([.C14]=[.G14])AND([.D14]=[.H14])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A13])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce36"/> + <table:table-cell table:style-name="ce26" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A15]=[.E15])AND([.B15]=[.F15])AND([.C15]=[.G15])AND([.D15]=[.H15])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A14])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce17"/> + <table:table-cell table:style-name="ce26" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>two parameters with different sizes</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce17"/> + <table:table-cell table:style-name="ce25" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="4" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.HSTACK([.L3:.M7];[.O3:.P8])" office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A17]=[.E17])AND([.B17]=[.F17])AND([.C17]=[.G17])AND([.D17]=[.H17])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A17])" office:value-type="string" office:string-value="{=HSTACK(L3:M7;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M7;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce23"/> + <table:table-cell table:style-name="ce25" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A18]=[.E18])AND([.B18]=[.F18])AND([.C18]=[.G18])AND([.D18]=[.H18])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A18])" office:value-type="string" office:string-value="{=HSTACK(L3:M7;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M7;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce25" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA19:.AB26]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB19:.AC26]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB19:.AC26]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=(ISERROR([.A19]))AND(ISERROR([.B19]))AND(ISERROR([.G19])AND([.D19]=[.H19]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A19])" office:value-type="string" office:string-value="{=HSTACK(L3:M7;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M7;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce25" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="Test" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A20]=[.E20])AND([.B20]=[.F20])AND([.C20]=[.G20])AND([.D20]=[.H20])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A20])" office:value-type="string" office:string-value="{=HSTACK(L3:M7;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M7;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A21]=[.E21])AND([.B21]=[.F21])AND([.C21]=[.G21])AND([.D21]=[.H21])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A21])" office:value-type="string" office:string-value="{=HSTACK(L3:M7;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M7;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA22:.AB29]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB22:.AC29]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=(ISERROR([.A22]))AND(ISERROR([.B22]))AND(([.C22]=[.G22])AND([.D22]=[.H22]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A22])" office:value-type="string" office:string-value="{=HSTACK(L3:M7;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M7;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="4" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.HSTACK([.L3:.M8];[.O3:.P7])" office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A24]=[.E24])AND([.B24]=[.F24])AND([.C24]=[.G24])AND([.D24]=[.H24])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A24])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P7)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P7)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A25]=[.E25])AND([.B25]=[.F25])AND([.C25]=[.G25])AND([.D25]=[.H25])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A25])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P7)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P7)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA26:.AB34]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB26:.AC34]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB26:.AC34]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=(ISERROR([.A26]))AND(ISERROR([.B26]))AND(ISERROR([.G26])AND([.D26]=[.H26]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A26])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P7)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P7)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="Test" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A27]=[.E27])AND([.B27]=[.F27])AND([.C27]=[.G27])AND([.D27]=[.H27])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A27])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P7)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P7)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A28]=[.E28])AND([.B28]=[.F28])AND([.C28]=[.G28])AND([.D28]=[.H28])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A28])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P7)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P7)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AA29:.AB37]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB29:.AC37]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A29]=[.E29])AND([.B29]=[.F29])AND(ISERROR([.G29]))AND(ISERROR([.D29]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A29])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;O3:P7)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;O3:P7)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>arrays</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="13"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="4" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.HSTACK({2;3};{4;5})" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=([.A31]=[.E31])AND([.B31]=[.F31])AND([.C31]=[.G31])AND([.D31]=[.H31])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A31])" office:value-type="string" office:string-value="{=HSTACK({2.3};{4.5})}" calcext:value-type="string"> + <text:p>{=HSTACK({2.3};{4.5})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.HSTACK({2;3})" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16"/> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A32]=[.E32])AND([.B32]=[.F32])AND([.C32]=[.G32])AND([.D32]=[.H32])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A32])" office:value-type="string" office:string-value="{=HSTACK({2.3})}" calcext:value-type="string"> + <text:p>{=HSTACK({2.3})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>reference and array</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="13"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="3" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.HSTACK([.L3:.M8];{2|3|""})" office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A34]=[.E34])AND([.B34]=[.F34])AND([.C34]=[.G34])AND([.D34]=[.H34])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A34])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A35]=[.E35])AND([.B35]=[.F35])AND([.C35]=[.G35])AND([.D35]=[.H35])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A35])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA36:.AB43]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB36:.AC43]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9"/> + <table:table-cell/> + <table:table-cell table:formula="of:=(ISERROR([.A36]))AND(ISERROR([.B36]))AND([.C36]=[.G36])AND([.D36]=[.H36])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A36])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AC37:.AD44]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A37]=[.E37])AND([.B37]=[.F37])AND(ISERROR([.C37]))AND([.D37]=[.H37])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A37])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AC38:.AD45]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A38]=[.E38])AND([.B38]=[.F38])AND(ISERROR([.C38]))AND([.D38]=[.H38])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A38])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB39:.AC46]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A39]=[.E39])AND([.B39]=[.F39])AND(ISERROR([.C39]))AND([.D39]=[.H39])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A39])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="3" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.HSTACK({2|3|""};[.L3:.M8])" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A41]=[.E41])AND([.B41]=[.F41])AND([.C41]=[.G41])AND([.D41]=[.H41])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A41])" office:value-type="string" office:string-value="{=HSTACK({2;3;""};L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK({2;3;""};L3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A42]=[.E42])AND([.B42]=[.F42])AND([.C42]=[.G42])AND([.D42]=[.H42])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A42])" office:value-type="string" office:string-value="{=HSTACK({2;3;""};L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK({2;3;""};L3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AB43:.AC50]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AC43:.AD50]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A43]=[.E43])AND(ISERROR([.B43]))AND(ISERROR([.C43]))AND([.D43]=[.H43])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A43])" office:value-type="string" office:string-value="{=HSTACK({2;3;""};L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK({2;3;""};L3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA44:.AB51]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:formula="of:=(ISERROR([.A44]))AND([.B44]=[.F44])AND([.C44]=[.G44])AND([.D44]=[.H44])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A44])" office:value-type="string" office:string-value="{=HSTACK({2;3;""};L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK({2;3;""};L3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.AA45:.AB52]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=(ISERROR([.A45]))AND([.B45]=[.F45])AND([.C45]=[.G45])AND([.D45]=[.H45])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A45])" office:value-type="string" office:string-value="{=HSTACK({2;3;""};L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK({2;3;""};L3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.Z46:.AA53]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=(ISERROR([.A46]))AND([.B46]=[.F46])AND([.C46]=[.G46])AND([.D46]=[.H46])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A46])" office:value-type="string" office:string-value="{=HSTACK({2;3;""};L3:M8)}" calcext:value-type="string"> + <text:p>{=HSTACK({2;3;""};L3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>errors</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="13"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.HSTACK([.L3:.M8];;[.O3:.P8])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell/> + <table:table-cell table:formula="of:=(ISERROR([.A48]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A48])" office:value-type="string" office:string-value="{=HSTACK(L3:M8;;O3:P8)}" calcext:value-type="string"> + <text:p>{=HSTACK(L3:M8;;O3:P8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.HSTACK()" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:511</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:formula="of:=(ISERROR([.A49]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A49])" office:value-type="string" office:string-value="{=HSTACK()}" calcext:value-type="string"> + <text:p>{=HSTACK()}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="3"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="3"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="3"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="3"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="19"/> + </table:table-row> + <calcext:conditional-formats> + <calcext:conditional-format calcext:target-range-address="Sheet2.I2:Sheet2.I94"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.I2"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.I2"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.I2"/> + </calcext:conditional-format> + </calcext:conditional-formats> + </table:table> + <table:named-expressions/> + </office:spreadsheet> + </office:body> +</office:document> diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/let.fods b/sc/qa/unit/data/functions/spreadsheet/fods/let.fods index 9e13c4556ed3..06a390722a77 100644 --- a/sc/qa/unit/data/functions/spreadsheet/fods/let.fods +++ b/sc/qa/unit/data/functions/spreadsheet/fods/let.fods @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> -<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> - <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT7H29M10S</meta:editing-duration><meta:editing-cycles>111</meta:editing-cycles><meta:generator>LibreOfficeDev/24.8.0.0.alpha1$Windows_X86_64 LibreOffice_project/38dff367d75365eb75c80c73385ec818f9a5aabd</meta:generator><dc:date>2024-06-11T09:22:21.072000000</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="351" meta:object-count="0"/></office:meta> +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> + <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT7H32M50S</meta:editing-duration><meta:editing-cycles>112</meta:editing-cycles><meta:generator>LibreOfficeDev/25.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/b0d4b4664a295631ce4d8dee2ceb5cd94ae12edb</meta:generator><dc:date>2025-02-14T10:53:13.361868000</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="367" meta:object-count="0"/></office:meta> <office:settings> <config:config-item-set config:name="ooo:view-settings"> <config:config-item config:name="VisibleAreaTop" config:type="int">0</config:config-item> @@ -30,13 +30,13 @@ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item> </config:config-item-map-entry> <config:config-item-map-entry config:name="Sheet2"> - <config:config-item config:name="CursorPositionX" config:type="int">7</config:config-item> - <config:config-item config:name="CursorPositionY" config:type="int">47</config:config-item> + <config:config-item config:name="CursorPositionX" config:type="int">9</config:config-item> + <config:config-item config:name="CursorPositionY" config:type="int">51</config:config-item> <config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item> <config:config-item config:name="PositionLeft" config:type="int">0</config:config-item> <config:config-item config:name="PositionRight" config:type="int">0</config:config-item> <config:config-item config:name="PositionTop" config:type="int">0</config:config-item> - <config:config-item config:name="PositionBottom" config:type="int">0</config:config-item> + <config:config-item config:name="PositionBottom" config:type="int">12</config:config-item> <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> <config:config-item config:name="ZoomValue" config:type="int">75</config:config-item> <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item> @@ -48,7 +48,7 @@ </config:config-item-map-entry> </config:config-item-map-named> <config:config-item config:name="ActiveTable" config:type="string">Sheet1</config:config-item> - <config:config-item config:name="HorizontalScrollbarWidth" config:type="int">2495</config:config-item> + <config:config-item config:name="HorizontalScrollbarWidth" config:type="int">1851</config:config-item> <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> <config:config-item config:name="ZoomValue" config:type="int">75</config:config-item> <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item> @@ -59,7 +59,7 @@ <config:config-item config:name="ShowFormulasMarks" config:type="boolean">false</config:config-item> <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item> <config:config-item config:name="GridColor" config:type="int">12632256</config:config-item> - <config:config-item config:name="FormulaBarHeight" config:type="short">1</config:config-item> + <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item> <config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item> <config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item> <config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item> @@ -71,6 +71,7 @@ <config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item> <config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item> <config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item> + <config:config-item config:name="FormulaBarHeight" config:type="short">1</config:config-item> <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item> <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item> <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item> @@ -110,7 +111,7 @@ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> <config:config-item config:name="PrinterName" config:type="string">Microsoft Print to PDF</config:config-item> <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrinterSetup" config:type="base64Binary">ZBb+/01pY3Jvc29mdCBQcmludCB0byBQREYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFByaW50IFRvIFBERgAAAAAAAAAAAAAWAAEANhUAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAE0AaQBjAHIAbwBzAG8AZgB0ACAAUAByAGkAbgB0ACAAdABvACAAUABEAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAMG3ABQFAMvAQABAAkAmgs0CGQAAQAPAFgCAgABAFgCAwABAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAABAAAA/////0dJUzQAAAAAAAAAAAAAAABESU5VIgDIACQDLBE/XXt+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAFNNVEoAAAAAEAC4AHsAMAA4ADQARgAwADEARgBBAC0ARQA2ADMANAAtADQARAA3ADcALQA4ADMARQBFAC0AMAA3ADQAOAAxADcAQwAwADMANQA4ADEAfQAAAFJFU0RMTABVbmlyZXNETEwAUGFwZXJTaXplAEE0AE9yaWVudGF0aW9uAFBPUlRSQUlUAFJlc29sdXRpb24AUmVzT3B0aW9uMQBDb2xvck1vZGUAQ29sb3IAAAAAAAAAAAAAAAAAAAAAAAAsEQAAVjRETQEAAAAAAAAAnApwIhwAAADsAAAAAwAAAPoBTwg05ndNg+4HSBfANYHQAAAATAAAAAMAAAAACAAAAAAAAAAAAAADAAAAAAgAACoAAAAACAAAAwAAAEAAAABWAAAAABAAAEQAbwBjAHUAbQBlAG4AdABVAHMAZQByAFAAYQBzAHMAdwBvAHIAZAAAAEQAbwBjAHUAbQBlAG4AdABPAHcAbgBlAHIAUABhAHMAcwB3AG8AcgBkAAAARABvAGMAdQBtAGUAbgB0AEMAcgB5AHAAdABTAGUAYwB1AHIAaQB0AHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgBDT01QQVRfRFVQTEVYX01PREUTAER1cGxleE1vZGU6OlVua25vd24MAFBSSU5URVJfTkFNRRYATWljcm9zb2Z0IFByaW50IHRvIFBERgsARFJJVkVSX05BTUUWAE1pY3Jvc29mdCBQcmludCBUbyBQREY=</config:config-item> + <config:config-item config:name="PrinterSetup" config:type="base64Binary">bBb+/01pY3Jvc29mdCBQcmludCB0byBQREYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFByaW50IFRvIFBERgAAAAAAAAAAAAAWAAEAPhUAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAE0AaQBjAHIAbwBzAG8AZgB0ACAAUAByAGkAbgB0ACAAdABvACAAUABEAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAMG3ABYFAMtAQABAAkAmgs0CGQAAQAPAFgCAgABAFgCAwABAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAABAAAA/////0dJUzQAAAAAAAAAAAAAAABESU5VIgDQACwDLBHiXo1TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABkAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAFNNVEoAAAAAEADAAHsAMAA4ADQARgAwADEARgBBAC0ARQA2ADMANAAtADQARAA3ADcALQA4ADMARQBFAC0AMAA3ADQAOAAxADcAQwAwADMANQA4ADEAfQAAAFJFU0RMTABVbmlyZXNETEwAUGFwZXJTaXplAEE0AE9yaWVudGF0aW9uAFBPUlRSQUlUAFJlc29sdXRpb24AUmVzT3B0aW9uMQBDb2xvck1vZGUAQ29sb3IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwRAABWNERNAQAAAAAAAACcCnAiHAAAAOwAAAADAAAA+gFPCDTmd02D7gdIF8A1gdAAAABMAAAAAwAAAAAIAAAAAAAAAAAAAAMAAAAACAAAKgAAAAAIAAADAAAAQAAAAFYAAAAAEAAARABvAGMAdQBtAGUAbgB0AFUAcwBlAHIAUABhAHMAcwB3AG8AcgBkAAAARABvAGMAdQBtAGUAbgB0AE8AdwBuAGUAcgBQAGEAcwBzAHcAbwByAGQAAABEAG8AYwB1AG0AZQBuAHQAQwByAHkAcAB0AFMAZQBjAHUAcgBpAHQAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAENPTVBBVF9EVVBMRVhfTU9ERRMARHVwbGV4TW9kZTo6VW5rbm93bgwAUFJJTlRFUl9OQU1FFgBNaWNyb3NvZnQgUHJpbnQgdG8gUERGCwBEUklWRVJfTkFNRRYATWljcm9zb2Z0IFByaW50IFRvIFBERg==</config:config-item> <config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item> <config:config-item config:name="RasterResolutionX" config:type="int">1270</config:config-item> <config:config-item config:name="RasterResolutionY" config:type="int">1270</config:config-item> @@ -3039,33 +3040,33 @@ <number:boolean-style style:name="N99"> <number:boolean/> </number:boolean-style> - <style:style style:name="ce13" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce10" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties fo:wrap-option="no-wrap"/> <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/> </style:style> - <style:style style:name="ce16" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce11" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/> </style:style> - <style:style style:name="ce20" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce12" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-size="12pt" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/> </style:style> - <style:style style:name="ce22" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:style style:name="ce14" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce23" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce21" style:family="table-cell" style:parent-style-name="Default"> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce24" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce25" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> @@ -3073,42 +3074,42 @@ <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce27" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:style style:name="ce26" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce28" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce29" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> </style:style> - <style:style style:name="ce10" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce13" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties fo:wrap-option="no-wrap"/> <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/> </style:style> - <style:style style:name="ce11" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce16" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/> </style:style> - <style:style style:name="ce12" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce20" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-size="12pt" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/> </style:style> - <style:style style:name="ce14" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:style style:name="ce22" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce21" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce23" style:family="table-cell" style:parent-style-name="Default"> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce25" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce24" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> @@ -3116,12 +3117,12 @@ <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce26" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:style style:name="ce27" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce29" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce28" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> </style:style> @@ -3204,7 +3205,7 @@ <text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p> </style:region-left> <style:region-right> - <text:p><text:date style:data-style-name="N2" text:date-value="2024-06-11">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="09:19:41.184000000">00:00:00</text:time></text:p> + <text:p><text:date style:data-style-name="N2" text:date-value="2025-02-14">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="10:49:33.518964500">00:00:00</text:time></text:p> </style:region-right> </style:header> <style:header-left style:display="false"/> @@ -3221,10 +3222,10 @@ <table:calculation-settings table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/> <table:table table:name="Sheet1" table:style-name="ta1"> <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/> - <table:table-column table:style-name="co2" table:default-cell-style-name="ce21"/> + <table:table-column table:style-name="co2" table:default-cell-style-name="ce23"/> <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/> <table:table-row table:style-name="ro1"> - <table:table-cell table:style-name="ce10" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce13" office:value-type="string" calcext:value-type="string"> <text:p>LET Function</text:p> </table:table-cell> <table:table-cell table:style-name="Default"/> @@ -3236,10 +3237,10 @@ <table:table-cell/> </table:table-row> <table:table-row table:style-name="ro3"> - <table:table-cell table:style-name="ce11" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> <text:p>Result</text:p> </table:table-cell> - <table:table-cell table:style-name="ce14" table:formula="of:=AND([.B8:.B95])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce22" table:formula="of:=AND([.B8:.B95])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell/> @@ -3248,13 +3249,13 @@ <table:table-cell table:number-columns-repeated="3"/> </table:table-row> <table:table-row table:style-name="ro4"> - <table:table-cell table:style-name="ce12" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce20" office:value-type="string" calcext:value-type="string"> <text:p>Sheet</text:p> </table:table-cell> - <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce24" office:value-type="string" calcext:value-type="string"> <text:p>Result</text:p> </table:table-cell> - <table:table-cell table:style-name="ce12" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce20" office:value-type="string" calcext:value-type="string"> <text:p>Description</text:p> </table:table-cell> </table:table-row> @@ -3262,16 +3263,16 @@ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> <text:p>2</text:p> </table:table-cell> - <table:table-cell table:style-name="ce14" table:formula="of:=AND([Sheet2.I2:.I211])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce22" table:formula="of:=AND([Sheet2.I2:.I211])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> - <table:table-cell table:style-name="ce29" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce28" office:value-type="string" calcext:value-type="string"> <text:p>Simple LET formulas with local references and values</text:p> </table:table-cell> </table:table-row> <table:table-row table:style-name="ro2" table:number-rows-repeated="20"> <table:table-cell/> - <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce27"/> <table:table-cell/> </table:table-row> <table:table-row table:style-name="ro2" table:number-rows-repeated="21"> @@ -4672,15 +4673,75 @@ <table:table-cell table:style-name="ce37"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> - <table:table-row table:style-name="ro2" table:number-rows-repeated="2"> - <table:table-cell table:style-name="ce17"/> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce17" table:formula="of:=IFERROR(COM.MICROSOFT.LET(_xlpm.a_1;1;_xlpm.a_1);"ERROR")" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce17"/> + <table:table-cell table:style-name="ce17" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce37"/> - <table:table-cell table:number-columns-repeated="27"/> + <table:table-cell table:style-name="ce37" table:formula="of:=([.A49]=[.E49])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A49])" office:value-type="string" office:string-value="=IFERROR(LET(a_1;1;a_1);"ERROR")" calcext:value-type="string"> + <text:p>=IFERROR(LET(a_1;1;a_1);"ERROR")</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="26"/> </table:table-row> - <table:table-row table:style-name="ro2" table:number-rows-repeated="3"> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce17" table:formula="of:=SUM(COM.MICROSOFT.LET(_xlpm.a_1;SUM(5;4);_xlpm.a_1);2)" office:value-type="float" office:value="11" calcext:value-type="float"> + <text:p>11</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce17" office:value-type="float" office:value="11" calcext:value-type="float"> + <text:p>11</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce37" table:formula="of:=([.A50]=[.E50])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A50])" office:value-type="string" office:string-value="=SUM(LET(a_1;SUM(5;4);a_1);2)" calcext:value-type="string"> + <text:p>=SUM(LET(a_1;SUM(5;4);a_1);2)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="26"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.LET(_xlpm.a_1;1;_xlpm.a_1)" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce37" table:formula="of:=([.A51]=[.E51])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A51])" office:value-type="string" office:string-value="=LET(a_1;1;a_1)" calcext:value-type="string"> + <text:p>=LET(a_1;1;a_1)</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="26"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:formula="of:=COM.MICROSOFT.LET(_xlpm.avg; AVERAGE([.O2:.R2]); IF(_xlpm.avg>249; "Excellent"; "No good"))" office:value-type="string" office:string-value="No good" calcext:value-type="string"> + <text:p>No good</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>No good</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce37" table:formula="of:=([.A52]=[.E52])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A52])" office:value-type="string" office:string-value="=LET(avg; AVERAGE(O2:R2); IF(avg>249; "Excellent"; "No good"))" calcext:value-type="string"> + <text:p>=LET(avg; AVERAGE(O2:R2); IF(avg>249; "Excellent"; "No good"))</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="26"/> + </table:table-row> + <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> <table:table-cell table:style-name="ce37"/> <table:table-cell table:number-columns-repeated="27"/> diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/sort.fods b/sc/qa/unit/data/functions/spreadsheet/fods/sort.fods index e24de0a1892f..71ee0fdf82aa 100644 --- a/sc/qa/unit/data/functions/spreadsheet/fods/sort.fods +++ b/sc/qa/unit/data/functions/spreadsheet/fods/sort.fods @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> -<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> - <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT4H58M22S</meta:editing-duration><meta:editing-cycles>93</meta:editing-cycles><meta:generator>LibreOfficeDev/24.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/3c10a1a4ce65496877d8fc78359f9b7e59d2703c</meta:generator><dc:date>2024-04-05T12:10:35.332000000</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="748" meta:object-count="0"/></office:meta> +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> + <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT5H6M11S</meta:editing-duration><meta:editing-cycles>94</meta:editing-cycles><meta:generator>LibreOfficeDev/25.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/6daa6b730b479121c8e2d8a70d3622c464d2701c</meta:generator><dc:date>2025-02-24T13:46:31.366441600</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="755" meta:object-count="0"/></office:meta> <office:settings> <config:config-item-set config:name="ooo:view-settings"> <config:config-item config:name="VisibleAreaTop" config:type="int">0</config:config-item> @@ -30,13 +30,13 @@ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item> </config:config-item-map-entry> <config:config-item-map-entry config:name="Sheet2"> - <config:config-item config:name="CursorPositionX" config:type="int">8</config:config-item> - <config:config-item config:name="CursorPositionY" config:type="int">98</config:config-item> + <config:config-item config:name="CursorPositionX" config:type="int">10</config:config-item> + <config:config-item config:name="CursorPositionY" config:type="int">105</config:config-item> <config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item> - <config:config-item config:name="PositionLeft" config:type="int">4</config:config-item> + <config:config-item config:name="PositionLeft" config:type="int">0</config:config-item> <config:config-item config:name="PositionRight" config:type="int">0</config:config-item> <config:config-item config:name="PositionTop" config:type="int">0</config:config-item> - <config:config-item config:name="PositionBottom" config:type="int">96</config:config-item> + <config:config-item config:name="PositionBottom" config:type="int">57</config:config-item> <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> <config:config-item config:name="ZoomValue" config:type="int">110</config:config-item> <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item> @@ -48,18 +48,19 @@ </config:config-item-map-entry> </config:config-item-map-named> <config:config-item config:name="ActiveTable" config:type="string">Sheet1</config:config-item> - <config:config-item config:name="HorizontalScrollbarWidth" config:type="int">1353</config:config-item> + <config:config-item config:name="HorizontalScrollbarWidth" config:type="int">2495</config:config-item> <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> <config:config-item config:name="ZoomValue" config:type="int">110</config:config-item> <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item> <config:config-item config:name="ShowPageBreakPreview" config:type="boolean">false</config:config-item> <config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item> <config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item> + <config:config-item config:name="ShowNoteAuthor" config:type="boolean">true</config:config-item> <config:config-item config:name="ShowFormulasMarks" config:type="boolean">false</config:config-item> <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item> <config:config-item config:name="GridColor" config:type="int">12632256</config:config-item> <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item> - <config:config-item config:name="FormulaBarHeight" config:type="short">1</config:config-item> + <config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item> <config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item> <config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item> <config:config-item config:name="IsValueHighlightingEnabled" config:type="boolean">false</config:config-item> @@ -70,6 +71,7 @@ <config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item> <config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item> <config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item> + <config:config-item config:name="FormulaBarHeight" config:type="short">1</config:config-item> <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item> <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item> <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item> @@ -109,7 +111,7 @@ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> <config:config-item config:name="PrinterName" config:type="string">Microsoft Print to PDF</config:config-item> <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrinterSetup" config:type="base64Binary">ZBb+/01pY3Jvc29mdCBQcmludCB0byBQREYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFByaW50IFRvIFBERgAAAAAAAAAAAAAWAAEANhUAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAE0AaQBjAHIAbwBzAG8AZgB0ACAAUAByAGkAbgB0ACAAdABvACAAUABEAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAMG3ABQFAMvAQABAAkAmgs0CGQAAQAPAFgCAgABAFgCAwABAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAABAAAA/////0dJUzQAAAAAAAAAAAAAAABESU5VIgDIACQDLBE/XXt+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAFNNVEoAAAAAEAC4AHsAMAA4ADQARgAwADEARgBBAC0ARQA2ADMANAAtADQARAA3ADcALQA4ADMARQBFAC0AMAA3ADQAOAAxADcAQwAwADMANQA4ADEAfQAAAFJFU0RMTABVbmlyZXNETEwAUGFwZXJTaXplAEE0AE9yaWVudGF0aW9uAFBPUlRSQUlUAFJlc29sdXRpb24AUmVzT3B0aW9uMQBDb2xvck1vZGUAQ29sb3IAAAAAAAAAAAAAAAAAAAAAAAAsEQAAVjRETQEAAAAAAAAAnApwIhwAAADsAAAAAwAAAPoBTwg05ndNg+4HSBfANYHQAAAATAAAAAMAAAAACAAAAAAAAAAAAAADAAAAAAgAACoAAAAACAAAAwAAAEAAAABWAAAAABAAAEQAbwBjAHUAbQBlAG4AdABVAHMAZQByAFAAYQBzAHMAdwBvAHIAZAAAAEQAbwBjAHUAbQBlAG4AdABPAHcAbgBlAHIAUABhAHMAcwB3AG8AcgBkAAAARABvAGMAdQBtAGUAbgB0AEMAcgB5AHAAdABTAGUAYwB1AHIAaQB0AHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgBDT01QQVRfRFVQTEVYX01PREUTAER1cGxleE1vZGU6OlVua25vd24MAFBSSU5URVJfTkFNRRYATWljcm9zb2Z0IFByaW50IHRvIFBERgsARFJJVkVSX05BTUUWAE1pY3Jvc29mdCBQcmludCBUbyBQREY=</config:config-item> + <config:config-item config:name="PrinterSetup" config:type="base64Binary">bBb+/01pY3Jvc29mdCBQcmludCB0byBQREYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFByaW50IFRvIFBERgAAAAAAAAAAAAAWAAEAPhUAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAE0AaQBjAHIAbwBzAG8AZgB0ACAAUAByAGkAbgB0ACAAdABvACAAUABEAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAMG3ABYFAMtAQABAAkAmgs0CGQAAQAPAFgCAgABAFgCAwABAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAABAAAA/////0dJUzQAAAAAAAAAAAAAAABESU5VIgDQACwDLBHiXo1TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABkAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAFNNVEoAAAAAEADAAHsAMAA4ADQARgAwADEARgBBAC0ARQA2ADMANAAtADQARAA3ADcALQA4ADMARQBFAC0AMAA3ADQAOAAxADcAQwAwADMANQA4ADEAfQAAAFJFU0RMTABVbmlyZXNETEwAUGFwZXJTaXplAEE0AE9yaWVudGF0aW9uAFBPUlRSQUlUAFJlc29sdXRpb24AUmVzT3B0aW9uMQBDb2xvck1vZGUAQ29sb3IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwRAABWNERNAQAAAAAAAACcCnAiHAAAAOwAAAADAAAA+gFPCDTmd02D7gdIF8A1gdAAAABMAAAAAwAAAAAIAAAAAAAAAAAAAAMAAAAACAAAKgAAAAAIAAADAAAAQAAAAFYAAAAAEAAARABvAGMAdQBtAGUAbgB0AFUAcwBlAHIAUABhAHMAcwB3AG8AcgBkAAAARABvAGMAdQBtAGUAbgB0AE8AdwBuAGUAcgBQAGEAcwBzAHcAbwByAGQAAABEAG8AYwB1AG0AZQBuAHQAQwByAHkAcAB0AFMAZQBjAHUAcgBpAHQAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAENPTVBBVF9EVVBMRVhfTU9ERRMARHVwbGV4TW9kZTo6VW5rbm93bgwAUFJJTlRFUl9OQU1FFgBNaWNyb3NvZnQgUHJpbnQgdG8gUERGCwBEUklWRVJfTkFNRRYATWljcm9zb2Z0IFByaW50IFRvIFBERg==</config:config-item> <config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item> <config:config-item config:name="RasterResolutionX" config:type="int">1270</config:config-item> <config:config-item config:name="RasterResolutionY" config:type="int">1270</config:config-item> @@ -119,6 +121,7 @@ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item> <config:config-item config:name="ShowFormulasMarks" config:type="boolean">false</config:config-item> <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item> + <config:config-item config:name="ShowNoteAuthor" config:type="boolean">true</config:config-item> <config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item> <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item> <config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item> @@ -142,10 +145,10 @@ </office:script> </office:scripts> <office:font-face-decls> + <style:font-face style:name="Albany" svg:font-family="Albany" style:font-family-generic="system" style:font-pitch="variable"/> <style:font-face style:name="Calibri" svg:font-family="Calibri" style:font-family-generic="swiss"/> <style:font-face style:name="FreeSans" svg:font-family="FreeSans" style:font-family-generic="system" style:font-pitch="variable"/> <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> - <style:font-face style:name="Lucida Sans" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/> <style:font-face style:name="Microsoft YaHei" svg:font-family="'Microsoft YaHei'" style:font-family-generic="system" style:font-pitch="variable"/> <style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="'WenQuanYi Micro Hei'" style:font-family-generic="system" style:font-pitch="variable"/> </office:font-face-decls> @@ -3019,49 +3022,6 @@ <number:boolean-style style:name="N99"> <number:boolean/> </number:boolean-style> - <style:style style:name="ce13" style:family="table-cell" style:parent-style-name="Default"> - <style:table-cell-properties fo:wrap-option="wrap"/> - <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/> - </style:style> - <style:style style:name="ce16" style:family="table-cell" style:parent-style-name="Default"> - <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> - <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> - <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/> - </style:style> - <style:style style:name="ce18" style:family="table-cell" style:parent-style-name="Default"> - <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> - <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> - <style:text-properties fo:font-size="12pt" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/> - </style:style> - <style:style style:name="ce19" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> - <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> - <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> - <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> - <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> - <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> - </style:style> - <style:style style:name="ce20" style:family="table-cell" style:parent-style-name="Default"> - <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> - <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> - <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> - </style:style> - <style:style style:name="ce22" style:family="table-cell" style:parent-style-name="Default"> - <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> - <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> - <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> - <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> - <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> - <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> - </style:style> - <style:style style:name="ce23" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> - <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> - <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> - <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> - </style:style> - <style:style style:name="ce24" style:family="table-cell" style:parent-style-name="Default"> - <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> - <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> - </style:style> <style:style style:name="ce10" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties fo:wrap-option="wrap"/> <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/> @@ -3083,7 +3043,7 @@ <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce21" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce5" style:family="table-cell" style:parent-style-name="Default"> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> @@ -3114,7 +3074,7 @@ </style:style> <style:style style:name="ce17" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"/> <style:style style:name="ce31" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"/> - <style:style style:name="ce32" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:style style:name="ce19" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.I2"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.I2"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.I2"/> @@ -3168,7 +3128,7 @@ <text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p> </style:region-left> <style:region-right> - <text:p><text:date style:data-style-name="N2" text:date-value="2024-04-05">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="12:11:04.635000000">00:00:00</text:time></text:p> + <text:p><text:date style:data-style-name="N2" text:date-value="2025-02-24">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="13:38:42.162424100">00:00:00</text:time></text:p> </style:region-right> </style:header> <style:header-left style:display="false"/> @@ -3185,7 +3145,7 @@ <table:calculation-settings table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/> <table:table table:name="Sheet1" table:style-name="ta1"> <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/> - <table:table-column table:style-name="co2" table:default-cell-style-name="ce21"/> + <table:table-column table:style-name="co2" table:default-cell-style-name="ce5"/> <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/> <table:table-row table:style-name="ro1"> <table:table-cell table:style-name="ce10" office:value-type="string" calcext:value-type="string"> @@ -3298,7 +3258,7 @@ <table:table-row table:style-name="ro5"> <table:table-cell table:style-name="ce9" table:number-columns-repeated="4"/> <table:table-cell table:number-columns-repeated="4"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Range Sort</text:p> @@ -3332,7 +3292,7 @@ <text:p>Age</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Region</text:p> @@ -3371,7 +3331,7 @@ <text:p>22</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A4]=[.E4])AND([.B4]=[.F4])AND([.C4]=[.G4])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A4]=[.E4])AND([.B4]=[.F4])AND([.C4]=[.G4])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A4])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;2;1;0)}" calcext:value-type="string"> @@ -3415,7 +3375,7 @@ <text:p>65</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A5]=[.E5])AND([.B5]=[.F5])AND([.C5]=[.G5])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A5]=[.E5])AND([.B5]=[.F5])AND([.C5]=[.G5])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A5])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;2;1;0)}" calcext:value-type="string"> @@ -3458,7 +3418,7 @@ <text:p>19</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A6]=[.E6])AND([.B6]=[.F6])AND([.C6]=[.G6])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A6]=[.E6])AND([.B6]=[.F6])AND([.C6]=[.G6])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A6])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;2;1;0)}" calcext:value-type="string"> @@ -3501,7 +3461,7 @@ <text:p>66</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A7]=[.E7])AND([.B7]=[.F7])AND([.C7]=[.G7])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A7]=[.E7])AND([.B7]=[.F7])AND([.C7]=[.G7])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A7])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;2;1;0)}" calcext:value-type="string"> @@ -3545,7 +3505,7 @@ <text:p>73</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A8]=[.E8])AND([.B8]=[.F8])AND([.C8]=[.G8])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A8]=[.E8])AND([.B8]=[.F8])AND([.C8]=[.G8])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A8])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;2;1;0)}" calcext:value-type="string"> @@ -3589,7 +3549,7 @@ <text:p>39</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A9]=[.E9])AND([.B9]=[.F9])AND([.C9]=[.G9])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A9]=[.E9])AND([.B9]=[.F9])AND([.C9]=[.G9])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A9])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;2;1;0)}" calcext:value-type="string"> @@ -3633,7 +3593,7 @@ <text:p>52</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A10]=[.E10])AND([.B10]=[.F10])AND([.C10]=[.G10])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A10]=[.E10])AND([.B10]=[.F10])AND([.C10]=[.G10])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A10])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;2;1;0)}" calcext:value-type="string"> @@ -3677,7 +3637,7 @@ <text:p>19</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A11]=[.E11])AND([.B11]=[.F11])AND([.C11]=[.G11])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A11]=[.E11])AND([.B11]=[.F11])AND([.C11]=[.G11])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A11])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;2;1;0)}" calcext:value-type="string"> @@ -3698,7 +3658,7 @@ </table:table-row> <table:table-row table:style-name="ro5"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell table:style-name="ce9" table:number-columns-repeated="4"/> <table:table-cell/> @@ -3732,7 +3692,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>North</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A13]=[.E13])AND([.B13]=[.F13])AND([.C13]=[.G13])AND([.D13]=[.H13])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A13]=[.E13])AND([.B13]=[.F13])AND([.C13]=[.G13])AND([.D13]=[.H13])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A13])" office:value-type="string" office:string-value="{=SORT($N$13:$Q$15;3;-1;1)}" calcext:value-type="string"> @@ -3785,7 +3745,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Amy</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A14]=[.E14])AND([.B14]=[.F14])AND([.C14]=[.G14])AND([.D14]=[.H14])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A14]=[.E14])AND([.B14]=[.F14])AND([.C14]=[.G14])AND([.D14]=[.H14])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A14])" office:value-type="string" office:string-value="{=SORT($N$13:$Q$15;3;-1;1)}" calcext:value-type="string"> @@ -3834,7 +3794,7 @@ <table:table-cell office:value-type="float" office:value="22" calcext:value-type="float"> <text:p>22</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A15]=[.E15])AND([.B15]=[.F15])AND([.C15]=[.G15])AND([.D15]=[.H15])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A15]=[.E15])AND([.B15]=[.F15])AND([.C15]=[.G15])AND([.D15]=[.H15])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A15])" office:value-type="string" office:string-value="{=SORT($N$13:$Q$15;3;-1;1)}" calcext:value-type="string"> @@ -3860,7 +3820,7 @@ </table:table-row> <table:table-row table:style-name="ro5"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="6"/> <table:table-cell table:style-name="ce9" table:number-columns-repeated="2"/> <table:table-cell table:number-columns-repeated="19"/> @@ -3886,7 +3846,7 @@ <text:p>Age</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro5"> @@ -3910,7 +3870,7 @@ <text:p>65</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A18]=[.E18])AND([.B18]=[.F18])AND([.C18]=[.G18])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A18]=[.E18])AND([.B18]=[.F18])AND([.C18]=[.G18])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A18])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11; ;-1)}" calcext:value-type="string"> @@ -3947,7 +3907,7 @@ <text:p>39</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A19]=[.E19])AND([.B19]=[.F19])AND([.C19]=[.G19])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A19]=[.E19])AND([.B19]=[.F19])AND([.C19]=[.G19])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A19])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11; ;-1)}" calcext:value-type="string"> @@ -3983,7 +3943,7 @@ <text:p>73</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A20]=[.E20])AND([.B20]=[.F20])AND([.C20]=[.G20])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A20]=[.E20])AND([.B20]=[.F20])AND([.C20]=[.G20])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A20])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11; ;-1)}" calcext:value-type="string"> @@ -4012,7 +3972,7 @@ <text:p>66</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A21]=[.E21])AND([.B21]=[.F21])AND([.C21]=[.G21])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A21]=[.E21])AND([.B21]=[.F21])AND([.C21]=[.G21])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A21])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11; ;-1)}" calcext:value-type="string"> @@ -4041,7 +4001,7 @@ <text:p>22</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A22]=[.E22])AND([.B22]=[.F22])AND([.C22]=[.G22])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A22]=[.E22])AND([.B22]=[.F22])AND([.C22]=[.G22])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A22])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11; ;-1)}" calcext:value-type="string"> @@ -4083,7 +4043,7 @@ <text:p>19</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A23]=[.E23])AND([.B23]=[.F23])AND([.C23]=[.G23])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A23]=[.E23])AND([.B23]=[.F23])AND([.C23]=[.G23])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A23])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11; ;-1)}" calcext:value-type="string"> @@ -4125,7 +4085,7 @@ <text:p>52</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A24]=[.E24])AND([.B24]=[.F24])AND([.C24]=[.G24])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A24]=[.E24])AND([.B24]=[.F24])AND([.C24]=[.G24])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A24])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11; ;-1)}" calcext:value-type="string"> @@ -4167,7 +4127,7 @@ <text:p>19</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A25]=[.E25])AND([.B25]=[.F25])AND([.C25]=[.G25])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A25]=[.E25])AND([.B25]=[.F25])AND([.C25]=[.G25])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A25])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11; ;-1)}" calcext:value-type="string"> @@ -4191,7 +4151,7 @@ <table:table-row table:style-name="ro5"> <table:table-cell table:style-name="ce9" table:number-columns-repeated="4"/> <table:table-cell table:number-columns-repeated="4"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> <text:p>South</text:p> @@ -4219,7 +4179,7 @@ </table:table-cell> <table:table-cell table:style-name="ce9"/> <table:table-cell table:number-columns-repeated="4"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> <text:p>East</text:p> @@ -4241,7 +4201,7 @@ </table:table-cell> <table:table-cell table:style-name="ce9" table:number-columns-repeated="3"/> <table:table-cell table:number-columns-repeated="4"/> - <table:table-cell table:style-name="ce32" table:formula="of:=ISERROR([.A28])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=ISERROR([.A28])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A28])" office:value-type="string" office:string-value="{=SORT($N$13:$Q$15;4; ;1)}" calcext:value-type="string"> @@ -4265,7 +4225,7 @@ <table:table-row table:style-name="ro5"> <table:table-cell table:style-name="ce9" table:number-columns-repeated="4"/> <table:table-cell table:number-columns-repeated="4"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> <text:p>North</text:p> @@ -4292,7 +4252,7 @@ <text:p>Age</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="5"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> <text:p>South</text:p> @@ -4314,7 +4274,7 @@ </table:table-cell> <table:table-cell table:style-name="ce9" table:number-columns-repeated="2"/> <table:table-cell table:number-columns-repeated="5"/> - <table:table-cell table:style-name="ce32" table:formula="of:=ISERROR([.A31])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=ISERROR([.A31])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A31])" office:value-type="string" office:string-value="{=SORT($N$13:$Q$15; ;0;1)}" calcext:value-type="string"> @@ -4338,7 +4298,7 @@ <table:table-row table:style-name="ro5"> <table:table-cell table:style-name="ce9" table:number-columns-repeated="4"/> <table:table-cell table:number-columns-repeated="4"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> <text:p>West</text:p> @@ -4366,7 +4326,7 @@ </table:table-cell> <table:table-cell table:style-name="ce9"/> <table:table-cell table:number-columns-repeated="4"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> <text:p>North</text:p> @@ -4384,7 +4344,7 @@ </table:table-row> <table:table-row table:style-name="ro5"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> <text:p>South</text:p> @@ -4409,7 +4369,7 @@ <text:p>Sort</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> <text:p>East</text:p> @@ -4434,7 +4394,7 @@ <text:p>-1</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A36]=[.E36])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A36]=[.E36])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A36])" office:value-type="string" office:string-value="{=SORT(S$3:S$13)}" calcext:value-type="string"> @@ -4465,7 +4425,7 @@ <text:p>2</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A37]=[.E37])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A37]=[.E37])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A37])" office:value-type="string" office:string-value="{=SORT(S$3:S$13)}" calcext:value-type="string"> @@ -4496,7 +4456,7 @@ <text:p>7</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A38]=[.E38])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A38]=[.E38])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A38])" office:value-type="string" office:string-value="{=SORT(S$3:S$13)}" calcext:value-type="string"> @@ -4527,7 +4487,7 @@ <text:p>b</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A39]=[.E39])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A39]=[.E39])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A39])" office:value-type="string" office:string-value="{=SORT(S$3:S$13)}" calcext:value-type="string"> @@ -4545,7 +4505,7 @@ <text:p>d</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A40]=[.E40])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A40]=[.E40])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A40])" office:value-type="string" office:string-value="{=SORT(S$3:S$13)}" calcext:value-type="string"> @@ -4562,7 +4522,7 @@ <text:p>k</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A41]=[.E41])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A41]=[.E41])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A41])" office:value-type="string" office:string-value="{=SORT(S$3:S$13)}" calcext:value-type="string"> @@ -4579,7 +4539,7 @@ <text:p>o</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A42]=[.E42])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A42]=[.E42])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A42])" office:value-type="string" office:string-value="{=SORT(S$3:S$13)}" calcext:value-type="string"> @@ -4603,7 +4563,7 @@ <text:p>Q</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A43]=[.E43])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A43]=[.E43])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A43])" office:value-type="string" office:string-value="{=SORT(S$3:S$13)}" calcext:value-type="string"> @@ -4629,7 +4589,7 @@ </table:table-cell> <table:table-cell table:style-name="ce9"/> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A44]=[.E44])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A44]=[.E44])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A44])" office:value-type="string" office:string-value="{=SORT(S$3:S$13)}" calcext:value-type="string"> @@ -4653,7 +4613,7 @@ <text:p>Z</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="3"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A45]=[.E45])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A45]=[.E45])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A45])" office:value-type="string" office:string-value="{=SORT(S$3:S$13)}" calcext:value-type="string"> @@ -4673,7 +4633,7 @@ <text:p/> </table:table-cell> <table:table-cell table:number-columns-repeated="7"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A46]=[.E46])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A46]=[.E46])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A46])" office:value-type="string" office:string-value="{=SORT(S$3:S$13)}" calcext:value-type="string"> @@ -4690,7 +4650,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>I</text:p> @@ -4702,7 +4662,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Matrix Sort</text:p> @@ -4730,7 +4690,7 @@ <text:p>u</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A49]=[.E49])AND([.B49]=[.F49])AND([.C49]=[.G49])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A49]=[.E49])AND([.B49]=[.F49])AND([.C49]=[.G49])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A49])" office:value-type="string" office:string-value="{=SORT({111."g"."z";3."c"."o";12."a"."u";6."b"."e"};2)}" calcext:value-type="string"> @@ -4759,7 +4719,7 @@ <text:p>e</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A50]=[.E50])AND([.B50]=[.F50])AND([.C50]=[.G50])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A50]=[.E50])AND([.B50]=[.F50])AND([.C50]=[.G50])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A50])" office:value-type="string" office:string-value="{=SORT({111."g"."z";3."c"."o";12."a"."u";6."b"."e"};2)}" calcext:value-type="string"> @@ -4789,7 +4749,7 @@ <text:p>o</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A51]=[.E51])AND([.B51]=[.F51])AND([.C51]=[.G51])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A51]=[.E51])AND([.B51]=[.F51])AND([.C51]=[.G51])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A51])" office:value-type="string" office:string-value="{=SORT({111."g"."z";3."c"."o";12."a"."u";6."b"."e"};2)}" calcext:value-type="string"> @@ -4818,7 +4778,7 @@ <text:p>z</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A52]=[.E52])AND([.B52]=[.F52])AND([.C52]=[.G52])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A52]=[.E52])AND([.B52]=[.F52])AND([.C52]=[.G52])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A52])" office:value-type="string" office:string-value="{=SORT({111."g"."z";3."c"."o";12."a"."u";6."b"."e"};2)}" calcext:value-type="string"> @@ -4835,7 +4795,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> <text:p>2</text:p> @@ -4866,7 +4826,7 @@ <text:p>y</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A54]=[.E54])AND([.B54]=[.F54])AND([.C54]=[.G54])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A54]=[.E54])AND([.B54]=[.F54])AND([.C54]=[.G54])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A54])" office:value-type="string" office:string-value="{=SORT({"y"."n"."x";"p"."c"."o";"i"."a"."u";"h"."b"."e"};;;TRUE())}" calcext:value-type="string"> @@ -4902,7 +4862,7 @@ <text:p>p</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A55]=[.E55])AND([.B55]=[.F55])AND([.C55]=[.G55])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A55]=[.E55])AND([.B55]=[.F55])AND([.C55]=[.G55])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A55])" office:value-type="string" office:string-value="{=SORT({"y"."n"."x";"p"."c"."o";"i"."a"."u";"h"."b"."e"};;;TRUE())}" calcext:value-type="string"> @@ -4938,7 +4898,7 @@ <text:p>i</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A56]=[.E56])AND([.B56]=[.F56])AND([.C56]=[.G56])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A56]=[.E56])AND([.B56]=[.F56])AND([.C56]=[.G56])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A56])" office:value-type="string" office:string-value="{=SORT({"y"."n"."x";"p"."c"."o";"i"."a"."u";"h"."b"."e"};;;TRUE())}" calcext:value-type="string"> @@ -4974,7 +4934,7 @@ <text:p>h</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A57]=[.E57])AND([.B57]=[.F57])AND([.C57]=[.G57])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A57]=[.E57])AND([.B57]=[.F57])AND([.C57]=[.G57])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A57])" office:value-type="string" office:string-value="{=SORT({"y"."n"."x";"p"."c"."o";"i"."a"."u";"h"."b"."e"};;;TRUE())}" calcext:value-type="string"> @@ -4991,7 +4951,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell table:formula="of:=[.M48]&[.N48]"> <text:p/> @@ -5000,7 +4960,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Filter and Sort</text:p> @@ -5032,7 +4992,7 @@ <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> <text:p>Units</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5060,7 +5020,7 @@ <table:table-cell office:value-type="float" office:value="6380" calcext:value-type="float"> <text:p>6380</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A61]=[.E61])AND([.B61]=[.F61])AND([.C61]=[.G61])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A61]=[.E61])AND([.B61]=[.F61])AND([.C61]=[.G61])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A61])" office:value-type="string" office:string-value="{=SORT(FILTER(M23:P38;(O23:O38=N18)*(M23:M38=N19);"");4;-1)}" calcext:value-type="string"> @@ -5093,7 +5053,7 @@ <table:table-cell office:value-type="float" office:value="4394" calcext:value-type="float"> <text:p>4394</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A62]=[.E62])AND([.B62]=[.F62])AND([.C62]=[.G62])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A62]=[.E62])AND([.B62]=[.F62])AND([.C62]=[.G62])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A62])" office:value-type="string" office:string-value="{=SORT(FILTER(M23:P38;(O23:O38=N18)*(M23:M38=N19);"");4;-1)}" calcext:value-type="string"> @@ -5103,7 +5063,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro5"> @@ -5131,7 +5091,7 @@ <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> <text:p>Units</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5159,7 +5119,7 @@ <table:table-cell office:value-type="float" office:value="9814" calcext:value-type="float"> <text:p>9814</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A65]=[.E65])AND([.B65]=[.F65])AND([.C65]=[.G65])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A65]=[.E65])AND([.B65]=[.F65])AND([.C65]=[.G65])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A65])" office:value-type="string" office:string-value="{=SORT(FILTER(M23:P38;(O23:O38=N18)+(M23:M38=N19);"");4;-1)}" calcext:value-type="string"> @@ -5192,7 +5152,7 @@ <table:table-cell office:value-type="float" office:value="6380" calcext:value-type="float"> <text:p>6380</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A66]=[.E66])AND([.B66]=[.F66])AND([.C66]=[.G66])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A66]=[.E66])AND([.B66]=[.F66])AND([.C66]=[.G66])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A66])" office:value-type="string" office:string-value="{=SORT(FILTER(M23:P38;(O23:O38=N18)+(M23:M38=N19);"");4;-1)}" calcext:value-type="string"> @@ -5225,7 +5185,7 @@ <table:table-cell office:value-type="float" office:value="6274" calcext:value-type="float"> <text:p>6274</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A67]=[.E67])AND([.B67]=[.F67])AND([.C67]=[.G67])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A67]=[.E67])AND([.B67]=[.F67])AND([.C67]=[.G67])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A67])" office:value-type="string" office:string-value="{=SORT(FILTER(M23:P38;(O23:O38=N18)+(M23:M38=N19);"");4;-1)}" calcext:value-type="string"> @@ -5258,7 +5218,7 @@ <table:table-cell office:value-type="float" office:value="4394" calcext:value-type="float"> <text:p>4394</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A68]=[.E68])AND([.B68]=[.F68])AND([.C68]=[.G68])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A68]=[.E68])AND([.B68]=[.F68])AND([.C68]=[.G68])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A68])" office:value-type="string" office:string-value="{=SORT(FILTER(M23:P38;(O23:O38=N18)+(M23:M38=N19);"");4;-1)}" calcext:value-type="string"> @@ -5291,7 +5251,7 @@ <table:table-cell office:value-type="float" office:value="4213" calcext:value-type="float"> <text:p>4213</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A69]=[.E69])AND([.B69]=[.F69])AND([.C69]=[.G69])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A69]=[.E69])AND([.B69]=[.F69])AND([.C69]=[.G69])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A69])" office:value-type="string" office:string-value="{=SORT(FILTER(M23:P38;(O23:O38=N18)+(M23:M38=N19);"");4;-1)}" calcext:value-type="string"> @@ -5324,7 +5284,7 @@ <table:table-cell office:value-type="float" office:value="1310" calcext:value-type="float"> <text:p>1310</text:p> </table:table-cell> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A70]=[.E70])AND([.B70]=[.F70])AND([.C70]=[.G70])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A70]=[.E70])AND([.B70]=[.F70])AND([.C70]=[.G70])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A70])" office:value-type="string" office:string-value="{=SORT(FILTER(M23:P38;(O23:O38=N18)+(M23:M38=N19);"");4;-1)}" calcext:value-type="string"> @@ -5334,7 +5294,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5358,7 +5318,7 @@ <text:p>Age</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Multi level sort</text:p> @@ -5386,7 +5346,7 @@ <text:p>52</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A73]=[.E73])AND([.B73]=[.F73])AND([.C73]=[.G73])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A73]=[.E73])AND([.B73]=[.F73])AND([.C73]=[.G73])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A73])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};{1.-1})}" calcext:value-type="string"> @@ -5415,7 +5375,7 @@ <text:p>19</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A74]=[.E74])AND([.B74]=[.F74])AND([.C74]=[.G74])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A74]=[.E74])AND([.B74]=[.F74])AND([.C74]=[.G74])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A74])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};{1.-1})}" calcext:value-type="string"> @@ -5444,7 +5404,7 @@ <text:p>22</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A75]=[.E75])AND([.B75]=[.F75])AND([.C75]=[.G75])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A75]=[.E75])AND([.B75]=[.F75])AND([.C75]=[.G75])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A75])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};{1.-1})}" calcext:value-type="string"> @@ -5473,7 +5433,7 @@ <text:p>19</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A76]=[.E76])AND([.B76]=[.F76])AND([.C76]=[.G76])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A76]=[.E76])AND([.B76]=[.F76])AND([.C76]=[.G76])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A76])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};{1.-1})}" calcext:value-type="string"> @@ -5502,7 +5462,7 @@ <text:p>73</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A77]=[.E77])AND([.B77]=[.F77])AND([.C77]=[.G77])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A77]=[.E77])AND([.B77]=[.F77])AND([.C77]=[.G77])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A77])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};{1.-1})}" calcext:value-type="string"> @@ -5531,7 +5491,7 @@ <text:p>66</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A78]=[.E78])AND([.B78]=[.F78])AND([.C78]=[.G78])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A78]=[.E78])AND([.B78]=[.F78])AND([.C78]=[.G78])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A78])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};{1.-1})}" calcext:value-type="string"> @@ -5560,7 +5520,7 @@ <text:p>65</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A79]=[.E79])AND([.B79]=[.F79])AND([.C79]=[.G79])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A79]=[.E79])AND([.B79]=[.F79])AND([.C79]=[.G79])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A79])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};{1.-1})}" calcext:value-type="string"> @@ -5589,7 +5549,7 @@ <text:p>39</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A80]=[.E80])AND([.B80]=[.F80])AND([.C80]=[.G80])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A80]=[.E80])AND([.B80]=[.F80])AND([.C80]=[.G80])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A80])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};{1.-1})}" calcext:value-type="string"> @@ -5599,7 +5559,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5623,7 +5583,7 @@ <text:p>Age</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5647,7 +5607,7 @@ <text:p>65</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A83]=[.E83])AND([.B83]=[.F83])AND([.C83]=[.G83])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A83]=[.E83])AND([.B83]=[.F83])AND([.C83]=[.G83])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A83])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};-1)}" calcext:value-type="string"> @@ -5676,7 +5636,7 @@ <text:p>39</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A84]=[.E84])AND([.B84]=[.F84])AND([.C84]=[.G84])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A84]=[.E84])AND([.B84]=[.F84])AND([.C84]=[.G84])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A84])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};-1)}" calcext:value-type="string"> @@ -5705,7 +5665,7 @@ <text:p>73</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A85]=[.E85])AND([.B85]=[.F85])AND([.C85]=[.G85])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A85]=[.E85])AND([.B85]=[.F85])AND([.C85]=[.G85])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A85])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};-1)}" calcext:value-type="string"> @@ -5734,7 +5694,7 @@ <text:p>66</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A86]=[.E86])AND([.B86]=[.F86])AND([.C86]=[.G86])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A86]=[.E86])AND([.B86]=[.F86])AND([.C86]=[.G86])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A86])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};-1)}" calcext:value-type="string"> @@ -5763,7 +5723,7 @@ <text:p>22</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A87]=[.E87])AND([.B87]=[.F87])AND([.C87]=[.G87])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A87]=[.E87])AND([.B87]=[.F87])AND([.C87]=[.G87])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A87])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};-1)}" calcext:value-type="string"> @@ -5792,7 +5752,7 @@ <text:p>19</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A88]=[.E88])AND([.B88]=[.F88])AND([.C88]=[.G88])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A88]=[.E88])AND([.B88]=[.F88])AND([.C88]=[.G88])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A88])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};-1)}" calcext:value-type="string"> @@ -5821,7 +5781,7 @@ <text:p>52</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A89]=[.E89])AND([.B89]=[.F89])AND([.C89]=[.G89])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A89]=[.E89])AND([.B89]=[.F89])AND([.C89]=[.G89])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A89])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};-1)}" calcext:value-type="string"> @@ -5850,7 +5810,7 @@ <text:p>19</text:p> </table:table-cell> <table:table-cell/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A90]=[.E90])AND([.B90]=[.F90])AND([.C90]=[.G90])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A90]=[.E90])AND([.B90]=[.F90])AND([.C90]=[.G90])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A90])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};-1)}" calcext:value-type="string"> @@ -5860,7 +5820,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5874,7 +5834,7 @@ <text:p>Age</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="5"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5882,7 +5842,7 @@ <text:p>Err:504</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="7"/> - <table:table-cell table:style-name="ce32" table:formula="of:=ISERROR([.A93])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=ISERROR([.A93])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A93])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.2.3};{1.-1})}" calcext:value-type="string"> @@ -5892,7 +5852,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5906,7 +5866,7 @@ <text:p>Age</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="5"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5914,7 +5874,7 @@ <text:p>Err:504</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="7"/> - <table:table-cell table:style-name="ce32" table:formula="of:=ISERROR([.A96])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=ISERROR([.A96])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A96])" office:value-type="string" office:string-value="{=SORT($N$4:$P$11;{1.3};{1.0})}" calcext:value-type="string"> @@ -5924,7 +5884,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5942,7 +5902,7 @@ <text:p>ab</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A98]=[.E98])AND([.B98]=[.F98])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A98]=[.E98])AND([.B98]=[.F98])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A98])" office:value-type="string" office:string-value="{=SORT($M$52:$N$57;2)}" calcext:value-type="string"> @@ -5968,7 +5928,7 @@ <text:p>cd</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A99]=[.E99])AND([.B99]=[.F99])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A99]=[.E99])AND([.B99]=[.F99])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A99])" office:value-type="string" office:string-value="{=SORT($M$52:$N$57;2)}" calcext:value-type="string"> @@ -5991,7 +5951,7 @@ <text:p>ef</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A100]=[.E100])AND([.B100]=[.F100])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A100]=[.E100])AND([.B100]=[.F100])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A100])" office:value-type="string" office:string-value="{=SORT($M$52:$N$57;2)}" calcext:value-type="string"> @@ -6014,7 +5974,7 @@ <text:p>gh</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A101]=[.E101])AND([.B101]=[.F101])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A101]=[.E101])AND([.B101]=[.F101])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A101])" office:value-type="string" office:string-value="{=SORT($M$52:$N$57;2)}" calcext:value-type="string"> @@ -6037,7 +5997,7 @@ <text:p>Ij</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A102]=[.E102])AND([.B102]=[.F102])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A102]=[.E102])AND([.B102]=[.F102])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A102])" office:value-type="string" office:string-value="{=SORT($M$52:$N$57;2)}" calcext:value-type="string"> @@ -6060,7 +6020,7 @@ <text:p>km</text:p> </table:table-cell> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce32" table:formula="of:=([.A103]=[.E103])AND([.B103]=[.F103])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A103]=[.E103])AND([.B103]=[.F103])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A103])" office:value-type="string" office:string-value="{=SORT($M$52:$N$57;2)}" calcext:value-type="string"> @@ -6068,9 +6028,40 @@ </table:table-cell> <table:table-cell table:number-columns-repeated="26"/> </table:table-row> - <table:table-row table:style-name="ro2" table:number-rows-repeated="97"> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="8"/> + <table:table-cell table:style-name="ce19"/> + <table:table-cell table:number-columns-repeated="27"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.SORT([.E105:.F105];1;-1;0)" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="B" calcext:value-type="string"> + <text:p>B</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>B</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A105]=[.E105])AND([.B105]=[.F105])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce17" table:formula="of:=FORMULA([.$A105])" office:value-type="string" office:string-value="{=SORT(E105:F105;1;-1;0)}" calcext:value-type="string"> + <text:p>{=SORT(E105:F105;1;-1;0)}</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>No need to sort</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="25"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="95"> <table:table-cell table:number-columns-repeated="8"/> - <table:table-cell table:style-name="ce32"/> + <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> <table:table-row table:style-name="ro2" table:number-rows-repeated="1048375"> diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/sortby.fods b/sc/qa/unit/data/functions/spreadsheet/fods/sortby.fods index 1b9d8a013881..1a7309d8628c 100644 --- a/sc/qa/unit/data/functions/spreadsheet/fods/sortby.fods +++ b/sc/qa/unit/data/functions/spreadsheet/fods/sortby.fods @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> -<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> - <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT5H32M16S</meta:editing-duration><meta:editing-cycles>109</meta:editing-cycles><meta:generator>LibreOfficeDev/24.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/6a201e13b12259100fe92d4925d2ea9cc9abf6e7</meta:generator><dc:date>2024-03-21T12:50:29.932000000</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="663" meta:object-count="0"/></office:meta> +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> + <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT5H42M26S</meta:editing-duration><meta:editing-cycles>110</meta:editing-cycles><meta:generator>LibreOfficeDev/25.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/6daa6b730b479121c8e2d8a70d3622c464d2701c</meta:generator><dc:date>2025-02-24T13:48:53.065375000</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="670" meta:object-count="0"/></office:meta> <office:settings> <config:config-item-set config:name="ooo:view-settings"> <config:config-item config:name="VisibleAreaTop" config:type="int">0</config:config-item> <config:config-item config:name="VisibleAreaLeft" config:type="int">0</config:config-item> - <config:config-item config:name="VisibleAreaWidth" config:type="int">59461</config:config-item> - <config:config-item config:name="VisibleAreaHeight" config:type="int">40947</config:config-item> + <config:config-item config:name="VisibleAreaWidth" config:type="int">16311</config:config-item> + <config:config-item config:name="VisibleAreaHeight" config:type="int">5013</config:config-item> <config:config-item-map-indexed config:name="Views"> <config:config-item-map-entry> <config:config-item config:name="ViewId" config:type="string">view1</config:config-item> @@ -30,13 +30,13 @@ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item> </config:config-item-map-entry> <config:config-item-map-entry config:name="Sheet2"> - <config:config-item config:name="CursorPositionX" config:type="int">16</config:config-item> - <config:config-item config:name="CursorPositionY" config:type="int">29</config:config-item> + <config:config-item config:name="CursorPositionX" config:type="int">10</config:config-item> + <config:config-item config:name="CursorPositionY" config:type="int">90</config:config-item> <config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item> <config:config-item config:name="PositionLeft" config:type="int">0</config:config-item> <config:config-item config:name="PositionRight" config:type="int">0</config:config-item> <config:config-item config:name="PositionTop" config:type="int">0</config:config-item> - <config:config-item config:name="PositionBottom" config:type="int">0</config:config-item> + <config:config-item config:name="PositionBottom" config:type="int">30</config:config-item> <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> <config:config-item config:name="ZoomValue" config:type="int">85</config:config-item> <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item> @@ -48,18 +48,19 @@ </config:config-item-map-entry> </config:config-item-map-named> <config:config-item config:name="ActiveTable" config:type="string">Sheet1</config:config-item> - <config:config-item config:name="HorizontalScrollbarWidth" config:type="int">2070</config:config-item> + <config:config-item config:name="HorizontalScrollbarWidth" config:type="int">2479</config:config-item> <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> <config:config-item config:name="ZoomValue" config:type="int">85</config:config-item> <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item> <config:config-item config:name="ShowPageBreakPreview" config:type="boolean">false</config:config-item> <config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item> <config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item> + <config:config-item config:name="ShowNoteAuthor" config:type="boolean">true</config:config-item> <config:config-item config:name="ShowFormulasMarks" config:type="boolean">false</config:config-item> <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item> <config:config-item config:name="GridColor" config:type="int">12632256</config:config-item> <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item> - <config:config-item config:name="FormulaBarHeight" config:type="short">1</config:config-item> + <config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item> <config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item> <config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item> <config:config-item config:name="IsValueHighlightingEnabled" config:type="boolean">false</config:config-item> @@ -70,6 +71,7 @@ <config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item> <config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item> <config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item> + <config:config-item config:name="FormulaBarHeight" config:type="short">1</config:config-item> <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item> <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item> <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item> @@ -109,7 +111,7 @@ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> <config:config-item config:name="PrinterName" config:type="string">Microsoft Print to PDF</config:config-item> <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrinterSetup" config:type="base64Binary">ZBb+/01pY3Jvc29mdCBQcmludCB0byBQREYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFByaW50IFRvIFBERgAAAAAAAAAAAAAWAAEANhUAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAE0AaQBjAHIAbwBzAG8AZgB0ACAAUAByAGkAbgB0ACAAdABvACAAUABEAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAMG3ABQFAMvAQABAAkAmgs0CGQAAQAPAFgCAgABAFgCAwABAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAABAAAA/////0dJUzQAAAAAAAAAAAAAAABESU5VIgDIACQDLBE/XXt+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAFNNVEoAAAAAEAC4AHsAMAA4ADQARgAwADEARgBBAC0ARQA2ADMANAAtADQARAA3ADcALQA4ADMARQBFAC0AMAA3ADQAOAAxADcAQwAwADMANQA4ADEAfQAAAFJFU0RMTABVbmlyZXNETEwAUGFwZXJTaXplAEE0AE9yaWVudGF0aW9uAFBPUlRSQUlUAFJlc29sdXRpb24AUmVzT3B0aW9uMQBDb2xvck1vZGUAQ29sb3IAAAAAAAAAAAAAAAAAAAAAAAAsEQAAVjRETQEAAAAAAAAAnApwIhwAAADsAAAAAwAAAPoBTwg05ndNg+4HSBfANYHQAAAATAAAAAMAAAAACAAAAAAAAAAAAAADAAAAAAgAACoAAAAACAAAAwAAAEAAAABWAAAAABAAAEQAbwBjAHUAbQBlAG4AdABVAHMAZQByAFAAYQBzAHMAdwBvAHIAZAAAAEQAbwBjAHUAbQBlAG4AdABPAHcAbgBlAHIAUABhAHMAcwB3AG8AcgBkAAAARABvAGMAdQBtAGUAbgB0AEMAcgB5AHAAdABTAGUAYwB1AHIAaQB0AHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgBDT01QQVRfRFVQTEVYX01PREUTAER1cGxleE1vZGU6OlVua25vd24MAFBSSU5URVJfTkFNRRYATWljcm9zb2Z0IFByaW50IHRvIFBERgsARFJJVkVSX05BTUUWAE1pY3Jvc29mdCBQcmludCBUbyBQREY=</config:config-item> + <config:config-item config:name="PrinterSetup" config:type="base64Binary">bBb+/01pY3Jvc29mdCBQcmludCB0byBQREYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFByaW50IFRvIFBERgAAAAAAAAAAAAAWAAEAPhUAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAE0AaQBjAHIAbwBzAG8AZgB0ACAAUAByAGkAbgB0ACAAdABvACAAUABEAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAMG3ABYFAMtAQABAAkAmgs0CGQAAQAPAFgCAgABAFgCAwABAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAABAAAA/////0dJUzQAAAAAAAAAAAAAAABESU5VIgDQACwDLBHiXo1TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABkAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAFNNVEoAAAAAEADAAHsAMAA4ADQARgAwADEARgBBAC0ARQA2ADMANAAtADQARAA3ADcALQA4ADMARQBFAC0AMAA3ADQAOAAxADcAQwAwADMANQA4ADEAfQAAAFJFU0RMTABVbmlyZXNETEwAUGFwZXJTaXplAEE0AE9yaWVudGF0aW9uAFBPUlRSQUlUAFJlc29sdXRpb24AUmVzT3B0aW9uMQBDb2xvck1vZGUAQ29sb3IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwRAABWNERNAQAAAAAAAACcCnAiHAAAAOwAAAADAAAA+gFPCDTmd02D7gdIF8A1gdAAAABMAAAAAwAAAAAIAAAAAAAAAAAAAAMAAAAACAAAKgAAAAAIAAADAAAAQAAAAFYAAAAAEAAARABvAGMAdQBtAGUAbgB0AFUAcwBlAHIAUABhAHMAcwB3AG8AcgBkAAAARABvAGMAdQBtAGUAbgB0AE8AdwBuAGUAcgBQAGEAcwBzAHcAbwByAGQAAABEAG8AYwB1AG0AZQBuAHQAQwByAHkAcAB0AFMAZQBjAHUAcgBpAHQAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAENPTVBBVF9EVVBMRVhfTU9ERRMARHVwbGV4TW9kZTo6VW5rbm93bgwAUFJJTlRFUl9OQU1FFgBNaWNyb3NvZnQgUHJpbnQgdG8gUERGCwBEUklWRVJfTkFNRRYATWljcm9zb2Z0IFByaW50IFRvIFBERg==</config:config-item> <config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item> <config:config-item config:name="RasterResolutionX" config:type="int">1270</config:config-item> <config:config-item config:name="RasterResolutionY" config:type="int">1270</config:config-item> @@ -119,6 +121,7 @@ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item> <config:config-item config:name="ShowFormulasMarks" config:type="boolean">false</config:config-item> <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item> + <config:config-item config:name="ShowNoteAuthor" config:type="boolean">true</config:config-item> <config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item> <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item> <config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item> @@ -145,8 +148,6 @@ <style:font-face style:name="Calibri" svg:font-family="Calibri" style:font-family-generic="swiss"/> <style:font-face style:name="FreeSans" svg:font-family="FreeSans" style:font-family-generic="system" style:font-pitch="variable"/> <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> - <style:font-face style:name="Lucida Sans" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/> - <style:font-face style:name="Microsoft YaHei" svg:font-family="'Microsoft YaHei'" style:font-family-generic="system" style:font-pitch="variable"/> <style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="'WenQuanYi Micro Hei'" style:font-family-generic="system" style:font-pitch="variable"/> </office:font-face-decls> <office:styles> @@ -2464,6 +2465,169 @@ <style:map style:condition="value()<0" style:apply-style-name="N511P1"/> <style:map style:condition="value()=0" style:apply-style-name="N511P2"/> </number:text-style> + <number:number-style style:name="N512"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + </number:number-style> + <number:date-style style:name="N513"> + <number:month/> + <number:text>-</number:text> + <number:day/> + <number:text>-</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N514"> + <number:scientific-number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N515"> + <number:scientific-number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N516"> + <number:scientific-number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N517"> + <number:scientific-number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N518"> + <number:scientific-number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N519"> + <number:scientific-number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N520"> + <number:scientific-number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N521"> + <number:scientific-number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N522"> + <number:scientific-number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N523"> + <number:scientific-number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N524"> + <number:scientific-number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N525"> + <number:scientific-number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N526"> + <number:scientific-number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N527"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N528"> + <number:scientific-number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:currency-style style:name="N529P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="BF">F</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N529"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="BF">F</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N529P0"/> + </number:currency-style> + <number:currency-style style:name="N530P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="BF">F</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N530"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="BF">F</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N530P0"/> + </number:currency-style> + <number:currency-style style:name="N531P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="BF">F</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N531"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="BF">F</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N531P0"/> + </number:currency-style> + <number:currency-style style:name="N532P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="BF">F</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N532"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="BF">F</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N532P0"/> + </number:currency-style> + <number:currency-style style:name="N533P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="BF">F</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N533"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="BF">F</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N533P0"/> + </number:currency-style> + <number:number-style style:name="N534"> + <number:text>highestPower</number:text> + <number:number number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N535"> + <number:text>highest Power</number:text> + <number:number number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N536"> + <number:text>mP</number:text> + <number:number number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N537"> + <number:text>mP=</number:text> + <number:number number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N538"> + <number:text>maxExpo= </number:text> + </number:number-style> + <number:number-style style:name="N539"> + <number:text>maxExpo= </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N540"> + <number:text>maxExponent= </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N541"> + <number:scientific-number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1" number:min-exponent-digits="2" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N542P0" style:volatile="true"> + <number:text/> + </number:number-style> + <number:number-style style:name="N542P1" style:volatile="true"> + <number:text/> + </number:number-style> + <number:number-style style:name="N542P2" style:volatile="true"> + <number:text/> + </number:number-style> + <number:text-style style:name="N542"> + <number:text/> + <style:map style:condition="value()>0" style:apply-style-name="N542P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N542P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N542P2"/> + </number:text-style> <number:date-style style:name="N10129" number:language="en" number:country="US"> <number:month/> <number:text>/</number:text> @@ -2750,6 +2914,114 @@ <number:number-style style:name="N10173" number:language="en" number:country="US"> <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> </number:number-style> + <number:number-style style:name="N10174P0" style:volatile="true" number:language="en" number:country="US"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10174P1" style:volatile="true" number:language="en" number:country="US"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N10174P2" style:volatile="true" number:language="en" number:country="US"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N10174" number:language="en" number:country="US"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10174P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10174P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10174P2"/> + </number:text-style> + <number:currency-style style:name="N10175P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10175P1" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:currency-style> + <number:currency-style style:name="N10175P2" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:currency-style> + <number:text-style style:name="N10175" number:language="en" number:country="US"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10175P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10175P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10175P2"/> + </number:text-style> + <number:number-style style:name="N10176P0" style:volatile="true" number:language="en" number:country="US"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10176P1" style:volatile="true" number:language="en" number:country="US"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N10176P2" style:volatile="true" number:language="en" number:country="US"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N10176" number:language="en" number:country="US"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10176P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10176P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10176P2"/> + </number:text-style> + <number:currency-style style:name="N10177P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10177P1" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:currency-style> + <number:currency-style style:name="N10177P2" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:currency-style> + <number:text-style style:name="N10177" number:language="en" number:country="US"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10177P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10177P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10177P2"/> + </number:text-style> <number:date-style style:name="N20114" number:language="de" number:country="DE"> <number:day number:style="long"/> <number:text>. </number:text> @@ -2867,6 +3139,181 @@ <number:text> €</number:text> <style:map style:condition="value()>=0" style:apply-style-name="N20130P0"/> </number:number-style> + <number:date-style style:name="N30119" number:language="en" number:country="GB"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N30120" number:language="en" number:country="GB"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N30121" number:language="en" number:country="GB"> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N30122" number:language="en" number:country="GB"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N30123" number:language="en" number:country="GB"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:number-style style:name="N30124P0" style:volatile="true" number:language="en" number:country="GB"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N30124" number:language="en" number:country="GB"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N30124P0"/> + </number:number-style> + <number:number-style style:name="N30125P0" style:volatile="true" number:language="en" number:country="GB"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N30125" number:language="en" number:country="GB"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N30125P0"/> + </number:number-style> + <number:number-style style:name="N30126P0" style:volatile="true" number:language="en" number:country="GB"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N30126" number:language="en" number:country="GB"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N30126P0"/> + </number:number-style> + <number:number-style style:name="N30127P0" style:volatile="true" number:language="en" number:country="GB"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N30127" number:language="en" number:country="GB"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N30127P0"/> + </number:number-style> + <number:number-style style:name="N30128P0" style:volatile="true" number:language="en" number:country="GB"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N30128P1" style:volatile="true" number:language="en" number:country="GB"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N30128P2" style:volatile="true" number:language="en" number:country="GB"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N30128" number:language="en" number:country="GB"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N30128P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N30128P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N30128P2"/> + </number:text-style> + <number:number-style style:name="N30129P0" style:volatile="true" number:language="en" number:country="GB"> + <number:text> £</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N30129P1" style:volatile="true" number:language="en" number:country="GB"> + <number:text>-£</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N30129P2" style:volatile="true" number:language="en" number:country="GB"> + <number:text> £</number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N30129" number:language="en" number:country="GB"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N30129P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N30129P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N30129P2"/> + </number:text-style> + <number:number-style style:name="N30130P0" style:volatile="true" number:language="en" number:country="GB"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N30130P1" style:volatile="true" number:language="en" number:country="GB"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N30130P2" style:volatile="true" number:language="en" number:country="GB"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N30130" number:language="en" number:country="GB"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N30130P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N30130P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N30130P2"/> + </number:text-style> + <number:number-style style:name="N30131P0" style:volatile="true" number:language="en" number:country="GB"> + <number:text> £</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N30131P1" style:volatile="true" number:language="en" number:country="GB"> + <number:text>-£</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N30131P2" style:volatile="true" number:language="en" number:country="GB"> + <number:text> £</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N30131" number:language="en" number:country="GB"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N30131P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N30131P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N30131P2"/> + </number:text-style> + <number:number-style style:name="N40117" number:language="en" number:country="CA" loext:transliteration-spellout="XOF" number:transliteration-language="en" number:transliteration-country="CA"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N40118" number:language="en" number:country="CA" loext:transliteration-spellout="XOF" number:transliteration-language="en" number:transliteration-country="CA"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N40119" number:language="en" number:country="CA" loext:transliteration-spellout="upper XOF" number:transliteration-language="en" number:transliteration-country="CA"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N40120" number:language="en" number:country="CA" loext:transliteration-spellout="upper XOF" number:transliteration-language="en" number:transliteration-country="CA"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + </number:number-style> <style:style style:name="Default" style:family="table-cell"/> <style:style style:name="Heading" style:family="table-cell" style:parent-style-name="Default"> <style:text-properties fo:color="#000000" fo:font-size="24pt" fo:font-style="normal" fo:font-weight="bold" style:font-size-asian="24pt" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-size-complex="24pt" style:font-style-complex="normal" style:font-weight-complex="bold"/> @@ -3131,7 +3578,7 @@ <text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p> </style:region-left> <style:region-right> - <text:p><text:date style:data-style-name="N2" text:date-value="2024-03-21">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="12:32:31.881000000">00:00:00</text:time></text:p> + <text:p><text:date style:data-style-name="N2" text:date-value="2025-02-24">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="13:38:43.044819500">00:00:00</text:time></text:p> </style:region-right> </style:header> <style:header-left style:display="false"/> @@ -3189,7 +3636,7 @@ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> <text:p>2</text:p> </table:table-cell> - <table:table-cell table:style-name="ce14" table:formula="of:=AND([Sheet2.I2:.I208])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce14" table:formula="of:=AND([Sheet2.I2:.I207])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:style-name="ce26" office:value-type="string" calcext:value-type="string"> @@ -5718,19 +6165,50 @@ </table:table-cell> <table:table-cell table:number-columns-repeated="25"/> </table:table-row> - <table:table-row table:style-name="ro2" table:number-rows-repeated="120"> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="8"/> + <table:table-cell table:style-name="ce19"/> + <table:table-cell table:number-columns-repeated="27"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.SORTBY([.E90:.F90];[.F90];-1)" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="B" calcext:value-type="string"> + <text:p>B</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>B</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce19" table:formula="of:=([.A90]=[.E90])AND([.B90]=[.F90])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A90])" office:value-type="string" office:string-value="{=SORTBY(E90:F90;F90;-1)}" calcext:value-type="string"> + <text:p>{=SORTBY(E90:F90;F90;-1)}</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>No need to sort</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="25"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="117"> <table:table-cell table:number-columns-repeated="8"/> <table:table-cell table:style-name="ce19"/> <table:table-cell table:number-columns-repeated="27"/> </table:table-row> - <table:table-row table:style-name="ro2" table:number-rows-repeated="1048367"> + <table:table-row table:style-name="ro2" table:number-rows-repeated="1048368"> <table:table-cell table:number-columns-repeated="36"/> </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="36"/> </table:table-row> <calcext:conditional-formats> - <calcext:conditional-format calcext:target-range-address="Sheet2.I2:Sheet2.I208"> + <calcext:conditional-format calcext:target-range-address="Sheet2.I2:Sheet2.I207"> <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.I2"/> <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.I2"/> <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.I2"/> diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/unique.fods b/sc/qa/unit/data/functions/spreadsheet/fods/unique.fods index 5fce49310229..ac9674441351 100644 --- a/sc/qa/unit/data/functions/spreadsheet/fods/unique.fods +++ b/sc/qa/unit/data/functions/spreadsheet/fods/unique.fods @@ -5044,6 +5044,117 @@ </table:table-cell> <table:table-cell table:number-columns-repeated="25"/> </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="8"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>case insensitive</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="24"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.UNIQUE({"A"|"a"|"b"|"B"})" office:value-type="string" office:string-value="A" calcext:value-type="string"> + <text:p>A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>A</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce38" table:formula="of:=([.A71]=[.E71])AND([.B71]=[.F71])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A71])" office:value-type="string" office:string-value="{=UNIQUE({"A";"a";"b";"B"})}" calcext:value-type="string"> + <text:p>{=UNIQUE({"A";"a";"b";"B"})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="25"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="b" calcext:value-type="string"> + <text:p>b</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>b</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce38" table:formula="of:=([.A72]=[.E72])AND([.B72]=[.F72])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A72])" office:value-type="string" office:string-value="{=UNIQUE({"A";"a";"b";"B"})}" calcext:value-type="string"> + <text:p>{=UNIQUE({"A";"a";"b";"B"})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="25"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.UNIQUE({"A"|"a"|"b"|"B"|"c"}; ; 1)" office:value-type="string" office:string-value="c" calcext:value-type="string"> + <text:p>c</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce38" table:formula="of:=([.A73]=[.E73])AND([.B73]=[.F73])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A73])" office:value-type="string" office:string-value="{=UNIQUE({"A";"a";"b";"B";"c"}; ; 1)}" calcext:value-type="string"> + <text:p>{=UNIQUE({"A";"a";"b";"B";"c"}; ; 1)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="25"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.UNIQUE({"Á"|"á"|"é"|"É"})" office:value-type="string" office:string-value="Á" calcext:value-type="string"> + <text:p>Á</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Á</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce38" table:formula="of:=([.A74]=[.E74])AND([.B74]=[.F74])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A74])" office:value-type="string" office:string-value="{=UNIQUE({"Á";"á";"é";"É"})}" calcext:value-type="string"> + <text:p>{=UNIQUE({"Á";"á";"é";"É"})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="25"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="é" calcext:value-type="string"> + <text:p>é</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>é</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce38" table:formula="of:=([.A75]=[.E75])AND([.B75]=[.F75])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A75])" office:value-type="string" office:string-value="{=UNIQUE({"Á";"á";"é";"É"})}" calcext:value-type="string"> + <text:p>{=UNIQUE({"Á";"á";"é";"É"})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="25"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.UNIQUE({"Á"|"á"|"é"|"É"|"c"}; ; 1)" office:value-type="string" office:string-value="c" calcext:value-type="string"> + <text:p>c</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>c</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce38" table:formula="of:=([.A76]=[.E76])AND([.B76]=[.F76])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A76])" office:value-type="string" office:string-value="{=UNIQUE({"Á";"á";"é";"É";"c"}; ; 1)}" calcext:value-type="string"> + <text:p>{=UNIQUE({"Á";"á";"é";"É";"c"}; ; 1)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="25"/> + </table:table-row> <table:table-row table:style-name="ro2" table:number-rows-repeated="140"> <table:table-cell table:number-columns-repeated="8"/> <table:table-cell table:style-name="ce37"/> diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/vstack.fods b/sc/qa/unit/data/functions/spreadsheet/fods/vstack.fods new file mode 100644 index 000000000000..558ef6b3de3c --- /dev/null +++ b/sc/qa/unit/data/functions/spreadsheet/fods/vstack.fods @@ -0,0 +1,5343 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<office:document xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> + <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT7H2M15S</meta:editing-duration><meta:editing-cycles>141</meta:editing-cycles><meta:generator>LibreOfficeDev/25.8.0.0.alpha0$Linux_X86_64 LibreOffice_project/67acf1674610e3944b2777f9a6d0e407d6ff211a</meta:generator><dc:date>2025-02-04T14:36:41.484856279</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="405" meta:object-count="0"/></office:meta> + <office:scripts> + <office:script script:language="ooo:Basic"> + <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"> + <ooo:library-embedded ooo:name="Standard"/> + </ooo:libraries> + </office:script> + </office:scripts> + <office:font-face-decls> + <style:font-face style:name="Calibri" svg:font-family="Calibri" style:font-family-generic="swiss"/> + <style:font-face style:name="FreeSans" svg:font-family="FreeSans" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + <style:font-face style:name="Noto Sans" svg:font-family="'Noto Sans'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="Noto Sans CJK SC" svg:font-family="'Noto Sans CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/> + <style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="'WenQuanYi Micro Hei'" style:font-family-generic="system" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="table-cell"> + <style:paragraph-properties style:tab-stop-distance="1.27cm"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-size="10pt" fo:language="en" fo:country="US" style:font-name-asian="WenQuanYi Micro Hei" style:font-size-asian="10pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="FreeSans" style:font-size-complex="10pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:default-style style:family="graphic"> + <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" style:writing-mode="page"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:punctuation-wrap="simple" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="page" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" loext:opacity="0%" fo:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-family-asian="'Segoe UI'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" style:font-family-complex="Tahoma" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/> + </style:default-style> + <style:style style:name="Default" style:family="graphic"/> + <style:style style:name="Note" style:family="graphic" style:parent-style-name="Default"> + <style:graphic-properties draw:stroke="solid" draw:marker-start="Arrowheads_20_1" draw:marker-start-width="0.2cm" draw:marker-start-center="false" draw:fill="solid" draw:fill-color="#ffffc0" draw:auto-grow-height="true" draw:auto-grow-width="false" fo:padding-top="0.1cm" fo:padding-bottom="0.1cm" fo:padding-left="0.1cm" fo:padding-right="0.1cm" draw:shadow="visible" draw:shadow-offset-x="0.1cm" draw:shadow-offset-y="0.1cm"/> + <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="10pt" style:font-name-asian="WenQuanYi Micro Hei" style:font-family-asian="'WenQuanYi Micro Hei'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="10pt" style:font-name-complex="FreeSans" style:font-family-complex="FreeSans" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="10pt"/> + </style:style> + <number:number-style style:name="N0"> + <number:number number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N111P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="es" number:country="ES">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N111"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="es" number:country="ES">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N111P0"/> + </number:currency-style> + <number:currency-style style:name="N114P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N114"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N114P0"/> + </number:currency-style> + <number:number-style style:name="N116P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N116"> + <style:text-properties fo:color="#ff0000"/> + <number:text>\-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N116P0"/> + </number:number-style> + <number:percentage-style style:name="N117"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N121P0" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N121P1" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N121P2" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N121"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N121P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N121P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N121P2"/> + </number:text-style> + <number:currency-style style:name="N123P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N123"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N123P0"/> + </number:currency-style> + <number:number-style style:name="N124"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N128P0" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N128P1" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N128P2" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N128"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N128P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N128P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N128P2"/> + </number:text-style> + <number:date-style style:name="N129"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N130"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N131P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N131"> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N131P0"/> + </number:number-style> + <number:currency-style style:name="N133P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N133"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> -</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N133P0"/> + </number:currency-style> + <number:number-style style:name="N135P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N135"> + <number:text>($</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N135P0"/> + </number:number-style> + <number:number-style style:name="N136"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N139P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N139P1" style:volatile="true"> + <number:text> (</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N139P2" style:volatile="true"> + <number:text> - </number:text> + </number:number-style> + <number:text-style style:name="N139"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N139P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N139P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N139P2"/> + </number:text-style> + <number:date-style style:name="N140"> + <number:text>⌀ </number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N144P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N144P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N144P2" style:volatile="true"> + <number:text> - € </number:text> + </number:number-style> + <number:text-style style:name="N144"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N144P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N144P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N144P2"/> + </number:text-style> + <number:number-style style:name="N145"> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N146"> + <number:scientific-number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:currency-style style:name="N147P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N147"> + <style:text-properties fo:color="#ff0000"/> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>-</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N147P0"/> + </number:currency-style> + <number:date-style style:name="N148"> + <number:month number:style="long"/> + <number:text>-</number:text> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N150P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N150"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N150P0"/> + </number:currency-style> + <number:date-style style:name="N151"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:style="long"/> + </number:date-style> + <number:number-style style:name="N152"> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N153"> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N157P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N157P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N157P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N157"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N157P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N157P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N157P2"/> + </number:text-style> + <number:currency-style style:name="N159P0" style:volatile="true"> + <number:currency-symbol>€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N159"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol>€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N159P0"/> + </number:currency-style> + <number:number-style style:name="N160"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N161"> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N162"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N163P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N163"> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N163P0"/> + </number:number-style> + <number:currency-style style:name="N165P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N165"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N165P0"/> + </number:currency-style> + <number:currency-style style:name="N167P0" style:volatile="true"> + <number:currency-symbol number:language="es" number:country="MX">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N167"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="es" number:country="MX">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N167P0"/> + </number:currency-style> + <number:number-style style:name="N171P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N171P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N171P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N171"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N171P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N171P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N171P2"/> + </number:text-style> + <number:currency-style style:name="N173P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N173"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N173P0"/> + </number:currency-style> + <number:number-style style:name="N175P0" style:volatile="true"> + <number:text>Yes</number:text> + </number:number-style> + <number:number-style style:name="N175P1" style:volatile="true"> + <number:text>Yes</number:text> + </number:number-style> + <number:number-style style:name="N175"> + <number:text>No</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N175P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N175P1"/> + </number:number-style> + <number:number-style style:name="N176"> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N177"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N179P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N179"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N179P0"/> + </number:currency-style> + <number:number-style style:name="N181P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N181"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N181P0"/> + </number:number-style> + <number:number-style style:name="N183P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N183"> + <number:text>\-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N183P0"/> + </number:number-style> + <number:number-style style:name="N187P0" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N187P1" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N187P2" style:volatile="true"> + <number:text> \</number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N187"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N187P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N187P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N187P2"/> + </number:text-style> + <number:number-style style:name="N188"> + <number:number number:decimal-places="18" number:min-decimal-places="18" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N189"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N190"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="3" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N192P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N192P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N192P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N192"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N192P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N192P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N192P2"/> + </number:text-style> + <number:currency-style style:name="N193P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N193"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N193P0"/> + </number:currency-style> + <number:number-style style:name="N194"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="1" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N195"> + <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/> + </number:number-style> + <number:currency-style style:name="N197P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N197"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol>EUR</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N197P0"/> + </number:currency-style> + <number:number-style style:name="N198P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N198"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N198P0"/> + </number:number-style> + <number:date-style style:name="N199"> + <number:month number:style="long"/> + <number:text>-</number:text> + <number:day/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:number-style style:name="N203P0" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N203P1" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N203P2" style:volatile="true"> + <number:text> $</number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N203"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N203P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N203P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N203P2"/> + </number:text-style> + <number:number-style style:name="N207P0" style:volatile="true"> + <number:text> $</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N207P1" style:volatile="true"> + <number:text> $(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N207P2" style:volatile="true"> + <number:text> $- </number:text> + </number:number-style> + <number:text-style style:name="N207"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N207P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N207P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N207P2"/> + </number:text-style> + <number:date-style style:name="N208"> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N209"> + <number:number number:decimal-places="20" number:min-decimal-places="20" number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N211P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N211"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N211P0"/> + </number:currency-style> + <number:number-style style:name="N213P0" style:volatile="true"> + <number:text>On</number:text> + </number:number-style> + <number:number-style style:name="N213P1" style:volatile="true"> + <number:text>On</number:text> + </number:number-style> + <number:number-style style:name="N213"> + <number:text>Off</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N213P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N213P1"/> + </number:number-style> + <number:number-style style:name="N215P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N215"> + <style:text-properties fo:color="#ff0000"/> + <number:text>($</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N215P0"/> + </number:number-style> + <number:number-style style:name="N217P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N217"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N217P0"/> + </number:number-style> + <number:number-style style:name="N218"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N219P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N219"> + <number:text>($</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N219P0"/> + </number:number-style> + <number:number-style style:name="N220P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N220"> + <style:text-properties fo:color="#ff0000"/> + <number:text>($</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N220P0"/> + </number:number-style> + <number:number-style style:name="N221"> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N223P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N223P1" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N223P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N223"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N223P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N223P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N223P2"/> + </number:text-style> + <number:currency-style style:name="N224P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N224"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N224P0"/> + </number:currency-style> + <number:number-style style:name="N225"> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N227P0" style:volatile="true"> + <number:text>True</number:text> + </number:number-style> + <number:number-style style:name="N227P1" style:volatile="true"> + <number:text>True</number:text> + </number:number-style> + <number:number-style style:name="N227"> + <number:text>False</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N227P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N227P1"/> + </number:number-style> + <number:number-style style:name="N231P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N231P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N231P2" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> € </number:text> + </number:number-style> + <number:text-style style:name="N231"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N231P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N231P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N231P2"/> + </number:text-style> + <number:number-style style:name="N232"> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N236P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N236P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N236P2" style:volatile="true"> + <number:text> - </number:text> + </number:number-style> + <number:text-style style:name="N236"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N236P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N236P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N236P2"/> + </number:text-style> + <number:date-style style:name="N237"> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N238P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N238"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N238P0"/> + </number:currency-style> + <number:currency-style style:name="N240P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N240"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N240P0"/> + </number:currency-style> + <number:number-style style:name="N244P0" style:volatile="true"> + <number:text> $</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N244P1" style:volatile="true"> + <number:text> $(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N244P2" style:volatile="true"> + <number:text> $-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N244"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N244P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N244P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N244P2"/> + </number:text-style> + <number:number-style style:name="N248P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N248P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N248P2" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N248"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N248P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N248P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N248P2"/> + </number:text-style> + <number:number-style style:name="N250P0" style:volatile="true"> + <number:text>WAHR</number:text> + </number:number-style> + <number:number-style style:name="N250P1" style:volatile="true"> + <number:text>WAHR</number:text> + </number:number-style> + <number:number-style style:name="N250"> + <number:text>FALSCH</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N250P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N250P1"/> + </number:number-style> + <number:date-style style:name="N251"> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:currency-style style:name="N253P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N253"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N253P0"/> + </number:currency-style> + <number:currency-style style:name="N255P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N255"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N255P0"/> + </number:currency-style> + <number:number-style style:name="N256"> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N259P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N259P1" style:volatile="true"> + <number:text> (</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N259P2" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N259"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N259P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N259P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N259P2"/> + </number:text-style> + <number:time-style style:name="N260"> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long" number:decimal-places="1"/> + </number:time-style> + <number:time-style style:name="N261"> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:currency-style style:name="N263P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N263"> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N263P0"/> + </number:currency-style> + <number:number-style style:name="N264P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N264"> + <style:text-properties fo:color="#ff0000"/> + <number:text>\-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N264P0"/> + </number:number-style> + <number:currency-style style:name="N266P0" style:volatile="true"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N266"> + <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol> + <number:text> -</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N266P0"/> + </number:currency-style> + <number:currency-style style:name="N268P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N268"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N268P0"/> + </number:currency-style> + <number:number-style style:name="N269"> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N270"> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1"/> + </number:number-style> + <number:number-style style:name="N271P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N271"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N271P0"/> + </number:number-style> + <number:currency-style style:name="N272P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N272"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N272P0"/> + </number:currency-style> + <number:time-style style:name="N273" number:truncate-on-overflow="false"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:number-style style:name="N274P0" style:volatile="true"> + <number:text>\</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N274"> + <number:text>\-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N274P0"/> + </number:number-style> + <number:number-style style:name="N276P0" style:volatile="true"> + <number:text/> + </number:number-style> + <number:currency-style style:name="N276"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N276P0"/> + </number:currency-style> + <number:date-style style:name="N277"> + <number:day-of-week/> + <number:text> </number:text> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N278"> + <number:day-of-week number:style="long"/> + <number:text> </number:text> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:currency-style style:name="N280P0" style:volatile="true"> + <number:currency-symbol number:language="de" number:country="AT">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N280"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="de" number:country="AT">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N280P0"/> + </number:currency-style> + <number:number-style style:name="N282P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N282"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N282P0"/> + </number:number-style> + <number:number-style style:name="N283P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N283"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N283P0"/> + </number:number-style> + <number:number-style style:name="N285P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N285"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N285P0"/> + </number:number-style> + <number:number-style style:name="N286P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + </number:number-style> + <number:number-style style:name="N286"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N286P0"/> + </number:number-style> + <number:number-style style:name="N287P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N287"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N287P0"/> + </number:number-style> + <number:number-style style:name="N288P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N288"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N288P0"/> + </number:number-style> + <number:number-style style:name="N289P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N289"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N289P0"/> + </number:number-style> + <number:number-style style:name="N290P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N290"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N290P0"/> + </number:number-style> + <number:number-style style:name="N294P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N294P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N294P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N294"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N294P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N294P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N294P2"/> + </number:text-style> + <number:number-style style:name="N298P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N298P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N298P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>- Kč </number:text> + </number:number-style> + <number:text-style style:name="N298"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N298P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N298P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N298P2"/> + </number:text-style> + <number:number-style style:name="N302P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N302P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N302P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N302"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N302P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N302P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N302P2"/> + </number:text-style> + <number:number-style style:name="N306P0" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N306P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Kč </number:text> + </number:number-style> + <number:number-style style:name="N306P2" style:volatile="true"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> Kč </number:text> + </number:number-style> + <number:text-style style:name="N306"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N306P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N306P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N306P2"/> + </number:text-style> + <number:currency-style style:name="N308P0" style:volatile="true"> + <number:currency-symbol number:language="cs" number:country="CZ">¥€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="3"> + <number:embedded-text number:position="5"> </number:embedded-text> + </number:number> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N308"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol number:language="cs" number:country="CZ">€</number:currency-symbol> + <number:text> </number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="3"> + <number:embedded-text number:position="5"> </number:embedded-text> + </number:number> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N308P0"/> + </number:currency-style> + <number:number-style style:name="N310P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N310"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N310P0"/> + </number:number-style> + <number:number-style style:name="N311P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N311"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N311P0"/> + </number:number-style> + <number:number-style style:name="N313P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N313"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N313P0"/> + </number:number-style> + <number:number-style style:name="N314P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N314"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N314P0"/> + </number:number-style> + <number:percentage-style style:name="N315"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N316"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N317"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N318"> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N319"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N320"> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N321"> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N322"> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N323"> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:currency-style style:name="N325P0" style:volatile="true"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N325"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N325P0"/> + </number:currency-style> + <number:currency-style style:name="N327P0" style:volatile="true"> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N327"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N327P0"/> + </number:currency-style> + <number:currency-style style:name="N329P0" style:volatile="true"> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N329"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N329P0"/> + </number:currency-style> + <number:currency-style style:name="N331P0" style:volatile="true"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N331"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N331P0"/> + </number:currency-style> + <number:currency-style style:name="N333P0" style:volatile="true"> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N333"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N333P0"/> + </number:currency-style> + <number:currency-style style:name="N335P0" style:volatile="true"> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N335"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N335P0"/> + </number:currency-style> + <number:currency-style style:name="N337P0" style:volatile="true"> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N337"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N337P0"/> + </number:currency-style> + <number:currency-style style:name="N339P0" style:volatile="true"> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N339"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N339P0"/> + </number:currency-style> + <number:currency-style style:name="N341P0" style:volatile="true"> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N341"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N341P0"/> + </number:currency-style> + <number:currency-style style:name="N343P0" style:volatile="true"> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N343"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N343P0"/> + </number:currency-style> + <number:currency-style style:name="N345P0" style:volatile="true"> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N345"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N345P0"/> + </number:currency-style> + <number:currency-style style:name="N347P0" style:volatile="true"> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N347"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N347P0"/> + </number:currency-style> + <number:currency-style style:name="N349P0" style:volatile="true"> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N349"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N349P0"/> + </number:currency-style> + <number:currency-style style:name="N351P0" style:volatile="true"> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N351"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N351P0"/> + </number:currency-style> + <number:currency-style style:name="N353P0" style:volatile="true"> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + </number:currency-style> + <number:currency-style style:name="N353"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol> + <style:map style:condition="value()>=0" style:apply-style-name="N353P0"/> + </number:currency-style> + <number:percentage-style style:name="N354"> + <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N355"> + <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N356"> + <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N357"> + <number:number number:decimal-places="18" number:min-decimal-places="18" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N358"> + <number:number number:decimal-places="19" number:min-decimal-places="19" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N359"> + <number:number number:decimal-places="20" number:min-decimal-places="20" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N360"> + <number:number number:decimal-places="19" number:min-decimal-places="19" number:min-integer-digits="1"/> + </number:number-style> + <number:currency-style style:name="N362P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="US">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N362"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol number:language="en" number:country="US">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N362P0"/> + </number:currency-style> + <number:percentage-style style:name="N363" number:title="User-defined"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N365P0" style:volatile="true"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:grouping="true"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N365"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:grouping="true"/> + <number:text>%</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N365P0"/> + </number:percentage-style> + <number:number-style style:name="N366P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="0" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N366"> + <style:text-properties fo:color="#000000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="0" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N366P0"/> + </number:number-style> + <number:date-style style:name="N367"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:currency-style style:name="N369P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N369"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N369P0"/> + </number:currency-style> + <number:currency-style style:name="N371P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N371"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol> + <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N371P0"/> + </number:currency-style> + <number:percentage-style style:name="N373P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:percentage-style style:name="N373"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + <number:text>%</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N373P0"/> + </number:percentage-style> + <number:number-style style:name="N375P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N375"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N375P0"/> + </number:number-style> + <number:number-style style:name="N376P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N376"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N376P0"/> + </number:number-style> + <number:number-style style:name="N378P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N378"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N378P0"/> + </number:number-style> + <number:number-style style:name="N379P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + </number:number-style> + <number:number-style style:name="N379"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N379P0"/> + </number:number-style> + <number:number-style style:name="N383P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N383P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N383P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N383"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N383P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N383P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N383P2"/> + </number:text-style> + <number:number-style style:name="N387P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N387P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N387P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- DM </number:text> + </number:number-style> + <number:text-style style:name="N387"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N387P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N387P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N387P2"/> + </number:text-style> + <number:number-style style:name="N391P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N391P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N391P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N391"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N391P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N391P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N391P2"/> + </number:text-style> + <number:number-style style:name="N395P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N395P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> DM </number:text> + </number:number-style> + <number:number-style style:name="N395P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> DM </number:text> + </number:number-style> + <number:text-style style:name="N395"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N395P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N395P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N395P2"/> + </number:text-style> + <number:text-style style:name="N396"> + <number:text>Ouch! - </number:text> + <number:text-content/> + <number:text> - Error detected!</number:text> + </number:text-style> + <number:text-style style:name="N397"> + <number:text-content/> + <number:text> - Result=0 - No Errordetection</number:text> + </number:text-style> + <number:date-style style:name="N398"> + <number:day/> + <number:text>/</number:text> + <number:month/> + <number:text>/</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N399"> + <number:day/> + <number:text>. </number:text> + <number:month/> + <number:text>. </number:text> + <number:year number:style="long"/> + </number:date-style> + <number:number-style style:name="N403P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N403P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N403P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N403"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N403P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N403P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N403P2"/> + </number:text-style> + <number:number-style style:name="N407P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N407P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N407P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>- € </number:text> + </number:number-style> + <number:text-style style:name="N407"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N407P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N407P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N407P2"/> + </number:text-style> + <number:number-style style:name="N411P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N411P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N411P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N411"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N411P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N411P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N411P2"/> + </number:text-style> + <number:number-style style:name="N415P0" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N415P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> € </number:text> + </number:number-style> + <number:number-style style:name="N415P2" style:volatile="true"> + <number:text> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> € </number:text> + </number:number-style> + <number:text-style style:name="N415"> + <number:text> </number:text> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N415P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N415P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N415P2"/> + </number:text-style> + <number:currency-style style:name="N416"> + <number:currency-symbol number:language="en" number:country="AU">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N417P0" style:volatile="true"> + <number:currency-symbol number:language="en" number:country="AU">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:currency-style> + <number:currency-style style:name="N417"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:currency-symbol number:language="en" number:country="AU">$</number:currency-symbol> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N417P0"/> + </number:currency-style> + <number:date-style style:name="N418"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N419"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N420"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N421"> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N422"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N423"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:date-style style:name="N424"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:year number:style="long"/> + <number:text> </number:text> + <number:hours number:style="long"/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N425P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N425"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N425P0"/> + </number:number-style> + <number:number-style style:name="N426P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N426"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N426P0"/> + </number:number-style> + <number:number-style style:name="N427P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N427"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N427P0"/> + </number:number-style> + <number:number-style style:name="N428P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N428"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N428P0"/> + </number:number-style> + <number:number-style style:name="N429"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N430P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N430"> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N430P0"/> + </number:number-style> + <number:number-style style:name="N431P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N431"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N431P0"/> + </number:number-style> + <number:number-style style:name="N432P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N432"> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N432P0"/> + </number:number-style> + <number:number-style style:name="N433P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N433"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <style:map style:condition="value()>=0" style:apply-style-name="N433P0"/> + </number:number-style> + <number:number-style style:name="N434"> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N435P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N435P1" style:volatile="true"> + <number:text>-$</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N435"> + <number:text>$-</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N435P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N435P1"/> + </number:number-style> + <number:number-style style:name="N436"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N437P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N437P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N437"> + <number:text>-</number:text> + <style:map style:condition="value()>0" style:apply-style-name="N437P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N437P1"/> + </number:number-style> + <number:number-style style:name="N438"> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N439P0" style:volatile="true"> + <number:text>$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N439P1" style:volatile="true"> + <number:text>-$</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N439"> + <number:text>$-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <style:map style:condition="value()>0" style:apply-style-name="N439P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N439P1"/> + </number:number-style> + <number:number-style style:name="N440"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N441P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N441P1" style:volatile="true"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:number-style style:name="N441"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <style:map style:condition="value()>0" style:apply-style-name="N441P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N441P1"/> + </number:number-style> + <number:number-style style:name="N443P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N443"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N443P0"/> + </number:number-style> + <number:number-style style:name="N444P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N444"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N444P0"/> + </number:number-style> + <number:number-style style:name="N446P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N446"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N446P0"/> + </number:number-style> + <number:number-style style:name="N447P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + </number:number-style> + <number:number-style style:name="N447"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> Ft</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N447P0"/> + </number:number-style> + <number:date-style style:name="N448"> + <number:year number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:day number:style="long"/> + </number:date-style> + <number:date-style style:name="N449"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:textual="true"/> + <number:text>.</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N450"> + <number:day number:style="long"/> + <number:text>.</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N451"> + <number:month number:textual="true"/> + <number:text>.</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N452"> + <number:year number:style="long"/> + <number:text>.</number:text> + <number:month number:style="long"/> + <number:text>.</number:text> + <number:day number:style="long"/> + <number:text> </number:text> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N454P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N454"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N454P0"/> + </number:number-style> + <number:number-style style:name="N455P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N455"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N455P0"/> + </number:number-style> + <number:number-style style:name="N457P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N457"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N457P0"/> + </number:number-style> + <number:number-style style:name="N458P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + </number:number-style> + <number:number-style style:name="N458"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N458P0"/> + </number:number-style> + <number:number-style style:name="N462P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N462P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N462P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="F2_t4_-5">- </number:text> + </number:number-style> + <number:text-style style:name="N462"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N462P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N462P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N462P2"/> + </number:text-style> + <number:number-style style:name="N466P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N466P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N466P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="-4">- Ft </number:text> + </number:number-style> + <number:text-style style:name="N466"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N466P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N466P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N466P2"/> + </number:text-style> + <number:number-style style:name="N470P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N470P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:number-style style:name="N470P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="F1_t3_-4"> </number:text> + </number:number-style> + <number:text-style style:name="N470"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N470P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N470P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N470P2"/> + </number:text-style> + <number:number-style style:name="N474P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N474P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:number-style style:name="N474P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="-3"> Ft </number:text> + </number:number-style> + <number:text-style style:name="N474"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N474P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N474P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N474P2"/> + </number:text-style> + <number:date-style style:name="N475"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N476"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N477"> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N478"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:time-style> + <number:time-style style:name="N479"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:date-style style:name="N480"> + <number:day number:style="long"/> + <number:text>/</number:text> + <number:month number:style="long"/> + <number:text>/</number:text> + <number:year number:style="long"/> + <number:text> </number:text> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N482P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N482"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N482P0"/> + </number:number-style> + <number:number-style style:name="N483P0" style:volatile="true"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N483"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N483P0"/> + </number:number-style> + <number:number-style style:name="N485P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N485"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N485P0"/> + </number:number-style> + <number:number-style style:name="N486P0" style:volatile="true"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + </number:number-style> + <number:number-style style:name="N486"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1"> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N486P0"/> + </number:number-style> + <number:number-style style:name="N490P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N490P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N490P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="€2_-4">- </number:text> + </number:number-style> + <number:text-style style:name="N490"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N490P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N490P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N490P2"/> + </number:text-style> + <number:number-style style:name="N494P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N494P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N494P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text loext:blank-width-char="-3">- € </number:text> + </number:number-style> + <number:text-style style:name="N494"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N494P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N494P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N494P2"/> + </number:text-style> + <number:number-style style:name="N498P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N498P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:number-style style:name="N498P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="€1_-3"> </number:text> + </number:number-style> + <number:text-style style:name="N498"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N498P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N498P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N498P2"/> + </number:text-style> + <number:number-style style:name="N502P0" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N502P1" style:volatile="true"> + <number:text>-</number:text> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:number-style style:name="N502P2" style:volatile="true"> + <number:text loext:blank-width-char="-"> </number:text> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="2" loext:max-blank-integer-digits="2"/> + <number:text loext:blank-width-char="-2"> € </number:text> + </number:number-style> + <number:text-style style:name="N502"> + <number:text loext:blank-width-char="-"> </number:text> + <number:text-content/> + <number:text loext:blank-width-char="-"> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N502P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N502P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N502P2"/> + </number:text-style> + <number:date-style style:name="N10129" number:language="en" number:country="US"> + <number:month/> + <number:text>/</number:text> + <number:day/> + <number:text>/</number:text> + <number:year number:style="long"/> + </number:date-style> + <number:date-style style:name="N10130" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N10131" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N10132" number:language="en" number:country="US"> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N10133" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N10134" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N10135" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:time-style> + <number:time-style style:name="N10136" number:language="en" number:country="US"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:date-style style:name="N10137" number:language="en" number:country="US"> + <number:month/> + <number:text>/</number:text> + <number:day/> + <number:text>/</number:text> + <number:year number:style="long"/> + <number:text> </number:text> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + </number:date-style> + <number:number-style style:name="N10139P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10139" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10139P0"/> + </number:number-style> + <number:number-style style:name="N10141P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10141" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10141P0"/> + </number:number-style> + <number:currency-style style:name="N10143P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10143" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10143P0"/> + </number:currency-style> + <number:currency-style style:name="N10144P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10144" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10144P0"/> + </number:currency-style> + <number:currency-style style:name="N10146P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10146" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10146P0"/> + </number:currency-style> + <number:currency-style style:name="N10147P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10147" number:language="en" number:country="US"> + <style:text-properties fo:color="#ff0000"/> + <number:text>(</number:text> + <number:currency-symbol/> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10147P0"/> + </number:currency-style> + <number:number-style style:name="N10148P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10148" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10148P0"/> + </number:number-style> + <number:number-style style:name="N10149P0" style:volatile="true" number:language="en" number:country="US"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10149" number:language="en" number:country="US"> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N10149P0"/> + </number:number-style> + <number:number-style style:name="N10153P0" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10153P1" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N10153P2" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:number-style> + <number:text-style style:name="N10153" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10153P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10153P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10153P2"/> + </number:text-style> + <number:currency-style style:name="N10157P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10157P1" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:currency-style> + <number:currency-style style:name="N10157P2" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>- </number:text> + </number:currency-style> + <number:text-style style:name="N10157" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10157P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10157P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10157P2"/> + </number:text-style> + <number:number-style style:name="N10161P0" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N10161P1" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:number-style> + <number:number-style style:name="N10161P2" style:volatile="true" number:language="en" number:country="US"> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:number-style> + <number:text-style style:name="N10161" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10161P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10161P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10161P2"/> + </number:text-style> + <number:currency-style style:name="N10165P0" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:currency-style> + <number:currency-style style:name="N10165P1" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>(</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text>)</number:text> + </number:currency-style> + <number:currency-style style:name="N10165P2" style:volatile="true" number:language="en" number:country="US"> + <number:currency-symbol/> + <number:fill-character> </number:fill-character> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/> + <number:text> </number:text> + </number:currency-style> + <number:text-style style:name="N10165" number:language="en" number:country="US"> + <number:text-content/> + <number:text> </number:text> + <style:map style:condition="value()>0" style:apply-style-name="N10165P0"/> + <style:map style:condition="value()<0" style:apply-style-name="N10165P1"/> + <style:map style:condition="value()=0" style:apply-style-name="N10165P2"/> + </number:text-style> + <number:number-style style:name="N10166" number:language="en" number:country="US"> + <number:scientific-number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:number-style style:name="N10167" number:language="en" number:country="US"> + <number:scientific-number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/> + </number:number-style> + <number:date-style style:name="N10168" number:language="en" number:country="US"> + <number:day number:style="long"/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:time-style style:name="N10169" number:language="en" number:country="US" number:truncate-on-overflow="false"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + </number:time-style> + <number:time-style style:name="N10170" number:language="en" number:country="US"> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long" number:decimal-places="1"/> + </number:time-style> + <number:number-style style:name="N10171" number:language="en" number:country="US"> + <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/> + </number:number-style> + <number:percentage-style style:name="N10172" number:language="en" number:country="US"> + <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/> + <number:text>%</number:text> + </number:percentage-style> + <number:number-style style:name="N10173" number:language="en" number:country="US"> + <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1" number:grouping="true"/> + </number:number-style> + <number:date-style style:name="N10174P0" style:volatile="true" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + <number:text>-</number:text> + <number:year/> + </number:date-style> + <number:text-style style:name="N10174" number:language="en" number:country="US"> + <number:text-content/> + <style:map style:condition="value()<=1.7976931348623157E+308" style:apply-style-name="N10174P0"/> + </number:text-style> + <number:date-style style:name="N10175P0" style:volatile="true" number:language="en" number:country="US"> + <number:day/> + <number:text>-</number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:text-style style:name="N10175" number:language="en" number:country="US"> + <number:text-content/> + <style:map style:condition="value()<=1.7976931348623157E+308" style:apply-style-name="N10175P0"/> + </number:text-style> + <number:date-style style:name="N20114" number:language="de" number:country="DE"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:date-style style:name="N20115" number:language="de" number:country="DE"> + <number:day number:style="long"/> + <number:text>. </number:text> + <number:month number:textual="true"/> + </number:date-style> + <number:date-style style:name="N20116" number:language="de" number:country="DE"> + <number:month number:textual="true"/> + <number:text> </number:text> + <number:year/> + </number:date-style> + <number:time-style style:name="N20117" number:language="de" number:country="DE"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:time-style style:name="N20118" number:language="de" number:country="DE"> + <number:hours/> + <number:text>:</number:text> + <number:minutes number:style="long"/> + <number:text>:</number:text> + <number:seconds number:style="long"/> + <number:text> </number:text> + <number:am-pm/> + </number:time-style> + <number:number-style style:name="N20120P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20120" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20120P0"/> + </number:number-style> + <number:number-style style:name="N20121P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20121" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20121P0"/> + </number:number-style> + <number:number-style style:name="N20123P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20123" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20123P0"/> + </number:number-style> + <number:number-style style:name="N20124P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + </number:number-style> + <number:number-style style:name="N20124" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> </number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20124P0"/> + </number:number-style> + <number:number-style style:name="N20126P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20126" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20126P0"/> + </number:number-style> + <number:number-style style:name="N20127P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20127" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20127P0"/> + </number:number-style> + <number:number-style style:name="N20129P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20129" number:language="de" number:country="DE"> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20129P0"/> + </number:number-style> + <number:number-style style:name="N20130P0" style:volatile="true" number:language="de" number:country="DE"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + </number:number-style> + <number:number-style style:name="N20130" number:language="de" number:country="DE"> + <style:text-properties fo:color="#ff0000"/> + <number:text>-</number:text> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/> + <number:text> €</number:text> + <style:map style:condition="value()>=0" style:apply-style-name="N20130P0"/> + </number:number-style> + <style:style style:name="Default" style:family="table-cell"/> + <style:style style:name="Heading" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:color="#000000" fo:font-size="24pt" fo:font-style="normal" fo:font-weight="bold" style:font-size-asian="24pt" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-size-complex="24pt" style:font-style-complex="normal" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="table-cell" style:parent-style-name="Heading"> + <style:text-properties fo:font-size="18pt" style:font-size-asian="18pt" style:font-size-complex="18pt"/> + </style:style> + <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="table-cell" style:parent-style-name="Heading"> + <style:text-properties fo:font-size="12pt" style:font-size-asian="12pt" style:font-size-complex="12pt"/> + </style:style> + <style:style style:name="Text" style:family="table-cell" style:parent-style-name="Default"/> + <style:style style:name="Note" style:family="table-cell" style:parent-style-name="Text"> + <style:table-cell-properties fo:background-color="#ffffcc" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" fo:border="0.74pt solid #808080"/> + <style:text-properties fo:color="#333333"/> + </style:style> + <style:style style:name="Footnote" style:family="table-cell" style:parent-style-name="Text"> + <style:text-properties fo:color="#808080" fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/> + </style:style> + <style:style style:name="Hyperlink" style:family="table-cell" style:parent-style-name="Text"> + <style:text-properties fo:color="#0000ee" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="#0000ee"/> + </style:style> + <style:style style:name="Status" style:family="table-cell" style:parent-style-name="Default"/> + <style:style style:name="Good" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ccffcc"/> + <style:text-properties fo:color="#006600"/> + </style:style> + <style:style style:name="Neutral" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ffffcc"/> + <style:text-properties fo:color="#996600"/> + </style:style> + <style:style style:name="Bad" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#ffcccc"/> + <style:text-properties fo:color="#cc0000"/> + </style:style> + <style:style style:name="Warning" style:family="table-cell" style:parent-style-name="Status"> + <style:text-properties fo:color="#cc0000"/> + </style:style> + <style:style style:name="Error" style:family="table-cell" style:parent-style-name="Status"> + <style:table-cell-properties fo:background-color="#cc0000"/> + <style:text-properties fo:color="#ffffff" fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Accent" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="Accent_20_1" style:display-name="Accent 1" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#000000"/> + <style:text-properties fo:color="#ffffff"/> + </style:style> + <style:style style:name="Accent_20_2" style:display-name="Accent 2" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#808080"/> + <style:text-properties fo:color="#ffffff"/> + </style:style> + <style:style style:name="Accent_20_3" style:display-name="Accent 3" style:family="table-cell" style:parent-style-name="Accent"> + <style:table-cell-properties fo:background-color="#dddddd"/> + </style:style> + <style:style style:name="Result" style:family="table-cell" style:parent-style-name="Default"> + <style:text-properties fo:font-style="italic" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-style-complex="italic" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="false" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:background-color="#ff3333"/> + </style:style> + <style:style style:name="true" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:background-color="#99ff66"/> + </style:style> + <draw:marker draw:name="Arrowheads_20_1" draw:display-name="Arrowheads 1" svg:viewBox="0 0 20 30" svg:d="M10 0l-10 30h20z"/> + <loext:theme loext:name="Office"> + <loext:theme-colors loext:name="LibreOffice"> + <loext:color loext:name="dark1" loext:color="#000000"/> + <loext:color loext:name="light1" loext:color="#ffffff"/> + <loext:color loext:name="dark2" loext:color="#000000"/> + <loext:color loext:name="light2" loext:color="#ffffff"/> + <loext:color loext:name="accent1" loext:color="#18a303"/> + <loext:color loext:name="accent2" loext:color="#0369a3"/> + <loext:color loext:name="accent3" loext:color="#a33e03"/> + <loext:color loext:name="accent4" loext:color="#8e03a3"/> + <loext:color loext:name="accent5" loext:color="#c99c00"/> + <loext:color loext:name="accent6" loext:color="#c9211e"/> + <loext:color loext:name="hyperlink" loext:color="#0000ee"/> + <loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/> + </loext:theme-colors> + </loext:theme> + </office:styles> + <office:automatic-styles> + <style:style style:name="co1" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="3.884cm"/> + </style:style> + <style:style style:name="co2" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="1.794cm"/> + </style:style> + <style:style style:name="co3" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="10.633cm"/> + </style:style> + <style:style style:name="co4" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="2.258cm"/> + </style:style> + <style:style style:name="co5" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="6.736cm"/> + </style:style> + <style:style style:name="co6" style:family="table-column"> + <style:table-column-properties fo:break-before="auto" style:column-width="2.713cm"/> + </style:style> + <style:style style:name="ro1" style:family="table-row"> + <style:table-row-properties style:row-height="1.614cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro2" style:family="table-row"> + <style:table-row-properties style:row-height="0.452cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro3" style:family="table-row"> + <style:table-row-properties style:row-height="0.612cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro4" style:family="table-row"> + <style:table-row-properties style:row-height="0.529cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ro5" style:family="table-row"> + <style:table-row-properties style:row-height="0.487cm" fo:break-before="auto" style:use-optimal-row-height="true"/> + </style:style> + <style:style style:name="ta1" style:family="table" style:master-page-name="Default"> + <style:table-properties table:display="true" style:writing-mode="lr-tb"/> + </style:style> + <number:number-style style:name="N2"> + <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/> + </number:number-style> + <number:boolean-style style:name="N99"> + <number:boolean/> + </number:boolean-style> + <style:style style:name="ce19" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:wrap-option="wrap"/> + <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce20" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce22" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-size="12pt" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce4" style:family="table-cell" style:parent-style-name="Default"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce5" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce7" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce28" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B2"/> + </style:style> + <style:style style:name="ce29" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> + <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> + </style:style> + <style:style style:name="ce12" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"/> + <style:style style:name="ce25" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #afabab" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-left-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-left-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce16" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #c5e0b4" style:direction="ltr" fo:border-right="0.74pt solid #c5e0b4" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-left-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-left-complex-color> + <loext:border-right-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce37" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #afabab" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-right-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce38" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #afabab" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + <loext:border-right-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce27" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"> + <style:table-cell-properties style:cell-protect="protected" style:print-content="true" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" style:direction="ltr" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" style:vertical-align="bottom" loext:vertical-justify="auto"/> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + <style:text-properties fo:color="#000000" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Calibri" fo:font-size="11pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:font-size-asian="11pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="11pt" style:font-style-complex="normal" style:font-weight-complex="normal"> + <loext:char-complex-color loext:theme-type="dark1" loext:color-type="theme"/> + </style:text-properties> + </style:style> + <style:style style:name="ce9" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N0"> + <style:table-cell-properties style:cell-protect="protected" style:print-content="true" style:text-align-source="value-type" style:repeat-content="false" fo:wrap-option="no-wrap" style:direction="ltr" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" style:vertical-align="bottom" loext:vertical-justify="auto"/> + <style:paragraph-properties css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + <style:text-properties fo:color="#000000" style:text-outline="false" style:text-line-through-style="none" style:text-line-through-type="none" style:font-name="Calibri" fo:font-size="11pt" fo:font-style="normal" fo:text-shadow="none" style:text-underline-style="none" fo:font-weight="normal" style:font-size-asian="11pt" style:font-style-asian="normal" style:font-weight-asian="normal" style:font-name-complex="Calibri" style:font-size-complex="11pt" style:font-style-complex="normal" style:font-weight-complex="normal"> + <loext:char-complex-color loext:theme-type="dark1" loext:color-type="theme"/> + </style:text-properties> + </style:style> + <style:style style:name="ce26" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" style:direction="ltr" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" style:vertical-align="bottom" loext:vertical-justify="auto"/> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce24" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="start" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce31" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"/> + <style:style style:name="ce46" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.G2"/> + </style:style> + <style:style style:name="ce47" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.G2"/> + </style:style> + <style:style style:name="ce49" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.G2"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.G2"/> + </style:style> + <style:style style:name="ce15" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #c5e0b4" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + <loext:border-left-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-left-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce17" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #c5e0b4" style:direction="ltr" fo:border-right="0.74pt solid #c5e0b4" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-left-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-left-complex-color> + <loext:border-right-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce36" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #afabab" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + <loext:border-right-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce23" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="0.74pt solid #c5e0b4" style:direction="ltr" fo:border-right="0.74pt solid #c5e0b4" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + <loext:border-left-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-left-complex-color> + <loext:border-right-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce30" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" fo:border-left="0.74pt solid #afabab" fo:border-right="none" style:rotation-align="none" fo:border-top="none"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + <loext:border-left-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-left-complex-color> + </style:table-cell-properties> + </style:style> + <style:style style:name="ce39" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N429"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce32" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" style:direction="ltr" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" style:vertical-align="bottom" loext:vertical-justify="auto"/> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce34" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #afabab" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce44" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="none" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce35" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="none" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #afabab" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-right-complex-color loext:theme-type="light2" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="7500"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:style style:name="ce48" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:border-bottom="0.74pt solid #c5e0b4" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" style:text-align-source="fix" style:repeat-content="false" fo:wrap-option="no-wrap" fo:border-left="none" style:direction="ltr" fo:border-right="0.74pt solid #c5e0b4" style:rotation-angle="0" style:rotation-align="none" style:shrink-to-fit="false" fo:border-top="none" style:vertical-align="bottom" loext:vertical-justify="auto"> + <loext:border-bottom-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-bottom-complex-color> + <loext:border-right-complex-color loext:theme-type="accent6" loext:color-type="theme"> + <loext:transformation loext:type="lummod" loext:value="4000"/> + <loext:transformation loext:type="lumoff" loext:value="5999"/> + </loext:border-right-complex-color> + </style:table-cell-properties> + <style:paragraph-properties fo:text-align="center" css3t:text-justify="auto" fo:margin-left="0cm" style:writing-mode="page"/> + </style:style> + <style:page-layout style:name="pm1"> + <style:page-layout-properties style:writing-mode="lr-tb"/> + <style:header-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm"/> + </style:header-style> + <style:footer-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm"/> + </style:footer-style> + </style:page-layout> + <style:page-layout style:name="pm2"> + <style:page-layout-properties style:writing-mode="lr-tb"/> + <style:header-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0"> + <style:background-image/> + </style:header-footer-properties> + </style:header-style> + <style:footer-style> + <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0"> + <style:background-image/> + </style:header-footer-properties> + </style:footer-style> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Default" style:page-layout-name="pm1"> + <style:header> + <text:p><text:sheet-name>???</text:sheet-name></text:p> + </style:header> + <style:header-left style:display="false"/> + <style:header-first style:display="false"/> + <style:footer> + <text:p>Page <text:page-number>1</text:page-number></text:p> + </style:footer> + <style:footer-left style:display="false"/> + <style:footer-first style:display="false"/> + </style:master-page> + <style:master-page style:name="Report" style:page-layout-name="pm2"> + <style:header> + <style:region-left> + <text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p> + </style:region-left> + <style:region-right> + <text:p><text:date style:data-style-name="N2" text:date-value="2025-02-04">00/00/0000</text:date>, <text:time style:data-style-name="N2" text:time-value="14:21:58.698789344">00:00:00</text:time></text:p> + </style:region-right> + </style:header> + <style:header-left style:display="false"/> + <style:header-first style:display="false"/> + <style:footer> + <text:p>Page <text:page-number>1</text:page-number><text:s/>/ <text:page-count>99</text:page-count></text:p> + </style:footer> + <style:footer-left style:display="false"/> + <style:footer-first style:display="false"/> + </style:master-page> + </office:master-styles> + <office:body> + <office:spreadsheet> + <table:calculation-settings table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/> + <table:table table:name="Sheet1" table:style-name="ta1"> + <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co2" table:default-cell-style-name="ce4"/> + <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/> + <table:table-row table:style-name="ro1"> + <table:table-cell table:style-name="ce19" office:value-type="string" calcext:value-type="string"> + <text:p>VSTACK Function</text:p> + </table:table-cell> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <table:table-row table:style-name="ro3"> + <table:table-cell table:style-name="ce20" office:value-type="string" calcext:value-type="string"> + <text:p>Result</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce5" table:formula="of:=AND([.B8:.B95])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="3"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <table:table-row table:style-name="ro4"> + <table:table-cell table:style-name="ce22" office:value-type="string" calcext:value-type="string"> + <text:p>Sheet</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce7" office:value-type="string" calcext:value-type="string"> + <text:p>Result</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce22" office:value-type="string" calcext:value-type="string"> + <text:p>Description</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce5" table:formula="of:=AND([Sheet2.G2:.G238])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce29" office:value-type="string" calcext:value-type="string"> + <text:p>Simple VSTACK formulas with local references and values</text:p> + </table:table-cell> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="20"> + <table:table-cell/> + <table:table-cell table:style-name="ce28"/> + <table:table-cell/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="21"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + </table:table-row> + <calcext:conditional-formats> + <calcext:conditional-format calcext:target-range-address="Sheet1.B2:Sheet1.B50"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet1.B2"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet1.B2"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet1.B2"/> + </calcext:conditional-format> + </calcext:conditional-formats> + </table:table> + <table:table table:name="Sheet2" table:style-name="ta1"> + <table:table-column table:style-name="co4" table:number-columns-repeated="3" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co4" table:default-cell-style-name="ce16"/> + <table:table-column table:style-name="co4" table:number-columns-repeated="2" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co4" table:default-cell-style-name="ce46"/> + <table:table-column table:style-name="co5" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co6" table:default-cell-style-name="Default"/> + <table:table-column table:style-name="co4" table:number-columns-repeated="13" table:default-cell-style-name="Default"/> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Function</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default" office:value-type="string" calcext:value-type="string"> + <text:p>Expected</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce31" office:value-type="string" calcext:value-type="string"> + <text:p>Correct</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>FunctionString</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Comment</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Data</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Data</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default" office:value-type="string" calcext:value-type="string"> + <text:p>Data</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>one parameter</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce15"/> + <table:table-cell table:style-name="ce39" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce44" table:number-columns-repeated="6"/> + <table:table-cell table:style-name="ce36"/> + <table:table-cell table:style-name="ce39"/> + <table:table-cell table:style-name="ce44"/> + <table:table-cell table:style-name="ce48"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="6" table:formula="of:=COM.MICROSOFT.VSTACK([.J3:.K8])" office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce12" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=([.A3]=[.D3])AND([.B3]=[.E3])AND([.C3]=[.F3])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A3])" office:value-type="string" office:string-value="{=VSTACK(J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:formula="of:=([.A4]=[.D4])AND([.B4]=[.E4])AND([.C4]=[.F4])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A4])" office:value-type="string" office:string-value="{=VSTACK(J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.Y5:.Z12]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z5:.AA12]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:formula="of:=(ISERROR([.A5]))AND(ISERROR([.B5]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A5])" office:value-type="string" office:string-value="{=VSTACK(J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AF5:.AG12]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AG5:.AH12]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.AH5:.AI12]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A6]=[.D6])AND([.B6]=[.E6])AND([.C6]=[.F6])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A6])" office:value-type="string" office:string-value="{=VSTACK(J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27"/> + <table:table-cell table:formula="of:=([.A7]=[.D7])AND([.B7]=[.E7])AND([.C7]=[.F7])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A7])" office:value-type="string" office:string-value="{=VSTACK(J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27"/> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=([.A8]=[.D8])AND([.B8]=[.E8])AND([.C8]=[.F8])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A8])" office:value-type="string" office:string-value="{=VSTACK(J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>two parameters</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="12" table:formula="of:=COM.MICROSOFT.VSTACK([.J3:.K8];[.M3:.N8])" office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=([.A10]=[.D10])AND([.B10]=[.E10])AND([.C10]=[.F10])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A10])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="5"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:formula="of:=([.A11]=[.D11])AND([.B11]=[.E11])AND([.C11]=[.F11])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A10])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce17"/> + <table:table-cell table:style-name="ce32" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce35"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.Y12:.Z19]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z12:.AA19]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:formula="of:=(ISERROR([.A12]))AND(ISERROR([.B12]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A11])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce17"/> + <table:table-cell table:style-name="ce34" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce36"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A13]=[.D13])AND([.B13]=[.E13])AND([.C13]=[.F13])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A12])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce17"/> + <table:table-cell table:style-name="ce9" table:number-columns-repeated="4"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce12" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27"/> + <table:table-cell table:formula="of:=([.A14]=[.D14])AND([.B14]=[.E14])AND([.C14]=[.F14])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A13])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce36"/> + <table:table-cell table:style-name="ce26" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=([.A15]=[.D15])AND([.B15]=[.E15])AND([.C15]=[.F15])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A14])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce17"/> + <table:table-cell table:style-name="ce26" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A16]=[.D16])AND([.B16]=[.E16])AND([.C16]=[.F16])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A16])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce25" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A17]=[.D17])AND([.B17]=[.E17])AND([.C17]=[.F17])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A16])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce25" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.X18:.Y52]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=(ISERROR([.A18]))AND([.B18]=[.E18])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A17])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce25" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="Test" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A19]=[.D19])AND([.B19]=[.E19])AND([.C19]=[.F19])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A18])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce25" table:number-columns-repeated="2"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="8"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A20]=[.D20])AND([.B20]=[.E20])AND([.C20]=[.F20])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A19])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A21]=[.D21])AND([.B21]=[.E21])AND([.C21]=[.F21])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A20])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>two parameters with different sizes</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="13"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="12" table:formula="of:=COM.MICROSOFT.VSTACK([.J3:.J8];[.M3:.N8])" office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z23:.AA30]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=([.A23]=[.D23])AND(ISERROR([.B23]))AND([.C23]=[.F23])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A23])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z24:.AA31]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:formula="of:=([.A24]=[.D24])AND(ISERROR([.B24]))AND([.C24]=[.F24])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A23])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.Y25:.Z32]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z25:.AA32]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:style-name="ce47" table:formula="of:=(ISERROR([.A25]))AND(ISERROR([.B25]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A24])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z26:.AA33]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A26]=[.D26])AND(ISERROR([.B26]))AND([.C26]=[.F26])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A25])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z27:.AA34]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27"/> + <table:table-cell table:formula="of:=([.A27]=[.D27])AND(ISERROR([.B27]))AND([.C27]=[.F27])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A26])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z28:.AA35]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=([.A28]=[.D28])AND(ISERROR([.B28]))AND([.C28]=[.F28])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A27])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A29]=[.D29])AND([.B29]=[.E29])AND([.C29]=[.F29])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A29])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A30]=[.D30])AND([.B30]=[.E30])AND([.C30]=[.F30])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A29])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.X31:.Y65]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=(ISERROR([.A31]))AND([.B31]=[.E31])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A30])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="Test" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> + <text:p>Test</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A32]=[.D32])AND([.B32]=[.E32])AND([.C32]=[.F32])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A31])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="6" calcext:value-type="float"> + <text:p>6</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A33]=[.D33])AND([.B33]=[.E33])AND([.C33]=[.F33])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A32])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce9" office:value-type="float" office:value="7" calcext:value-type="float"> + <text:p>7</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A34]=[.D34])AND([.B34]=[.E34])AND([.C34]=[.F34])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A33])" office:value-type="string" office:string-value="{=VSTACK(J3:J8;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:J8;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="17"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="12" table:formula="of:=COM.MICROSOFT.VSTACK([.J3:.K8];[.M3:.M8])" office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=([.A36]=[.D36])AND([.B36]=[.E36])AND([.C36]=[.F36])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A36])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:formula="of:=([.A37]=[.D37])AND([.B37]=[.E37])AND([.C37]=[.F37])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A36])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.Y38:.Z45]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z38:.AA45]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:formula="of:=(ISERROR([.A38]))AND(ISERROR([.B38]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A37])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A39]=[.D39])AND([.B39]=[.E39])AND([.C39]=[.F39])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A38])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27"/> + <table:table-cell table:formula="of:=([.A40]=[.D40])AND([.B40]=[.E40])AND([.C40]=[.F40])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A39])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=([.A41]=[.D41])AND([.B41]=[.E41])AND([.C41]=[.F41])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A40])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce37" office:value-type="float" office:value="1" calcext:value-type="float"> + <text:p>1</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z38:.AA45]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A42]=[.D42])AND(ISERROR([.B42]))AND([.C42]=[.F42])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A42])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce38" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z43:.AA50]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A43]=[.D43])AND(ISERROR([.B43]))AND([.C43]=[.F43])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A42])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.X44:.Y77]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z44:.AA51]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce49" table:formula="of:=(ISERROR([.A44]))AND(ISERROR([.B44]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A43])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z45:.AA52]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A45]=[.D45])AND(ISERROR([.B45]))AND([.C45]=[.F45])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A44])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z46:.AA53]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A46]=[.D46])AND(ISERROR([.B46]))AND([.C46]=[.F46])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A45])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z47:.AA54]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A47]=[.D47])AND(ISERROR([.B47]))AND([.C47]=[.F47])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A46])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;M3:M8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;M3:M8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>arrays</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="13"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.VSTACK({2;3};{4;5})" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A49]=[.D49])AND([.B49]=[.E49])AND([.C49]=[.F49])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A49])" office:value-type="string" office:string-value="{=VSTACK({2.3};{4.5})}" calcext:value-type="string"> + <text:p>{=VSTACK({2.3};{4.5})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float"> + <text:p>5</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A50]=[.D50])AND([.B50]=[.E50])AND([.C50]=[.F50])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A50])" office:value-type="string" office:string-value="{=VSTACK({2.3};{4.5})}" calcext:value-type="string"> + <text:p>{=VSTACK({2.3};{4.5})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>reference and array</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="13"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="9" table:formula="of:=COM.MICROSOFT.VSTACK([.J3:.K8];{2|3|""})" office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A52]=[.D52])AND([.B52]=[.E52])AND([.C52]=[.F52])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A52])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A53]=[.D53])AND([.B53]=[.E53])AND([.C53]=[.F53])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A53])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.Y54:.Z61]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z54:.AA61]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=(ISERROR([.A54]))AND(ISERROR([.B54]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A54])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A55]=[.D55])AND([.B55]=[.E55])AND([.C55]=[.F55])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A55])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A56]=[.D56])AND([.B56]=[.E56])AND([.C56]=[.F56])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A56])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A57]=[.D57])AND([.B57]=[.E57])AND([.C57]=[.F57])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A57])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z58:.AA65]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A58]=[.D58])AND(ISERROR([.B58]))AND([.C58]=[.F58])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A58])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z59:.AA66]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A59]=[.D59])AND(ISERROR([.B59]))AND([.C59]=[.F59])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A59])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=([.A60]=[.D60])AND(ISERROR([.B60]))AND([.C60]=[.F60])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A60])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;{2;3;""})}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;{2;3;""})}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="2" table:number-matrix-rows-spanned="9" table:formula="of:=COM.MICROSOFT.VSTACK({2|3|""};[.J3:.K8])" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z62:.AA69]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A62]=[.D62])AND(ISERROR([.B62]))AND([.C62]=[.F62])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A62])" office:value-type="string" office:string-value="{=VSTACK({2;3;""};J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK({2;3;""};J3:K8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z63:.AA70]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A63]=[.D63])AND(ISERROR([.B63]))AND([.C63]=[.F63])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A63])" office:value-type="string" office:string-value="{=VSTACK({2;3;""};J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK({2;3;""};J3:K8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce17"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z64:.AA71]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=([.A64]=[.D64])AND(ISERROR([.B64]))AND([.C64]=[.F64])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A64])" office:value-type="string" office:string-value="{=VSTACK({2;3;""};J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK({2;3;""};J3:K8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce23"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="January" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce25" office:value-type="string" calcext:value-type="string"> + <text:p>January</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="100" calcext:value-type="float"> + <text:p>100</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:formula="of:=([.A65]=[.D65])AND([.B65]=[.E65])AND([.C65]=[.F65])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A65])" office:value-type="string" office:string-value="{=VSTACK({2;3;""};J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK({2;3;""};J3:K8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="February" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>February</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" office:value-type="float" office:value="150" calcext:value-type="float"> + <text:p>150</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:formula="of:=([.A66]=[.D66])AND([.B66]=[.E66])AND([.C66]=[.F66])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A66])" office:value-type="string" office:string-value="{=VSTACK({2;3;""};J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK({2;3;""};J3:K8)}</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="ce30"/> + <table:table-cell table:number-columns-repeated="12"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=VLOOKUP(1; [.Y67:.Z74]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce16" table:formula="of:=VLOOKUP(1; [.Z67:.AA74]; 2)" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#N/A</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=(ISERROR([.A67]))AND(ISERROR([.B67]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A67])" office:value-type="string" office:string-value="{=VSTACK({2;3;""};J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK({2;3;""};J3:K8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float"> + <text:p/> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + <table:table-cell table:style-name="ce27"/> + <table:table-cell table:formula="of:=([.A68]=[.D68])AND([.B68]=[.E68])AND([.C68]=[.F68])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A68])" office:value-type="string" office:string-value="{=VSTACK({2;3;""};J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK({2;3;""};J3:K8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell office:value-type="string" office:string-value="April" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>April</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce27" office:value-type="float" office:value="250" calcext:value-type="float"> + <text:p>250</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=([.A69]=[.D69])AND([.B69]=[.E69])AND([.C69]=[.F69])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A69])" office:value-type="string" office:string-value="{=VSTACK({2;3;""};J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK({2;3;""};J3:K8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell office:value-type="string" office:string-value="May" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>May</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce26" office:value-type="float" office:value="300" calcext:value-type="float"> + <text:p>300</text:p> + </table:table-cell> + <table:table-cell/> + <table:table-cell table:formula="of:=([.A70]=[.D70])AND([.B70]=[.E70])AND([.C70]=[.F70])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A70])" office:value-type="string" office:string-value="{=VSTACK({2;3;""};J3:K8)}" calcext:value-type="string"> + <text:p>{=VSTACK({2;3;""};J3:K8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>errors</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="13"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.VSTACK([.J3:.K8];;[.M3:.N8])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:504</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:formula="of:=(ISERROR([.A72]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A72])" office:value-type="string" office:string-value="{=VSTACK(J3:K8;;M3:N8)}" calcext:value-type="string"> + <text:p>{=VSTACK(J3:K8;;M3:N8)}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="1" table:formula="of:=COM.MICROSOFT.VSTACK()" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>Err:511</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:formula="of:=(ISERROR([.A73]))" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>VERDADERO</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A73])" office:value-type="string" office:string-value="{=VSTACK()}" calcext:value-type="string"> + <text:p>{=VSTACK()}</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="14"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="18"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="18"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce27"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce9"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="22"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:style-name="ce27"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce16"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="3"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="2"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="15"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="3"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="18"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="18"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="18"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="18"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="18"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce24"/> + <table:table-cell table:style-name="ce38"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce16" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="18"/> + </table:table-row> + <table:table-row table:style-name="ro5"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce27" table:number-columns-repeated="2"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="4"/> + <table:table-cell table:style-name="ce26"/> + <table:table-cell table:style-name="ce37"/> + <table:table-cell table:number-columns-repeated="16"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="Default"/> + <table:table-cell table:number-columns-repeated="18"/> + </table:table-row> + <calcext:conditional-formats> + <calcext:conditional-format calcext:target-range-address="Sheet2.G23:Sheet2.G24 Sheet2.G49:Sheet2.G50 Sheet2.G97:Sheet2.G121 Sheet2.G2:Sheet2.G21 Sheet2.G45:Sheet2.G47 Sheet2.G26:Sheet2.G43 Sheet2.G52:Sheet2.G60 Sheet2.G62:Sheet2.G93"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.G2"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.G2"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.G2"/> + </calcext:conditional-format> + <calcext:conditional-format calcext:target-range-address="Sheet2.G25:Sheet2.G25"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.G25"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.G25"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.G25"/> + </calcext:conditional-format> + <calcext:conditional-format calcext:target-range-address="Sheet2.G44:Sheet2.G44"> + <calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.G44"/> + <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.G44"/> + <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.G44"/> + </calcext:conditional-format> + </calcext:conditional-formats> + </table:table> + <table:named-expressions/> + </office:spreadsheet> + </office:body> +</office:document> diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods index 593054bf4682..65948536b4cd 100644 --- a/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods +++ b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> -<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> - <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT1H56M5S</meta:editing-duration><meta:editing-cycles>34</meta:editing-cycles><meta:generator>LibreOfficeDev/25.2.0.0.alpha0$Windows_X86_64 LibreOffice_project/449050477173ff56b3f3d94406913b261f541b0f</meta:generator><dc:date>2024-06-26T18:39:33.496000000</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="962" meta:object-count="0"/></office:meta> +<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.spreadsheet"> + <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT1H57M40S</meta:editing-duration><meta:editing-cycles>35</meta:editing-cycles><meta:generator>LibreOfficeDev/25.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/302a636cb5e3e78cf1e268b22ebf8c6eecff2440</meta:generator><dc:date>2025-04-10T13:50:15.395322300</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="967" meta:object-count="0"/></office:meta> <office:settings> <config:config-item-set config:name="ooo:view-settings"> <config:config-item config:name="VisibleAreaTop" config:type="int">0</config:config-item> @@ -30,13 +30,13 @@ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item> </config:config-item-map-entry> <config:config-item-map-entry config:name="Sheet2"> - <config:config-item config:name="CursorPositionX" config:type="int">2</config:config-item> - <config:config-item config:name="CursorPositionY" config:type="int">32</config:config-item> + <config:config-item config:name="CursorPositionX" config:type="int">4</config:config-item> + <config:config-item config:name="CursorPositionY" config:type="int">134</config:config-item> <config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item> <config:config-item config:name="PositionLeft" config:type="int">0</config:config-item> <config:config-item config:name="PositionRight" config:type="int">0</config:config-item> <config:config-item config:name="PositionTop" config:type="int">0</config:config-item> - <config:config-item config:name="PositionBottom" config:type="int">99</config:config-item> + <config:config-item config:name="PositionBottom" config:type="int">119</config:config-item> <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> <config:config-item config:name="ZoomValue" config:type="int">100</config:config-item> <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item> @@ -48,7 +48,7 @@ </config:config-item-map-entry> </config:config-item-map-named> <config:config-item config:name="ActiveTable" config:type="string">Sheet1</config:config-item> - <config:config-item config:name="HorizontalScrollbarWidth" config:type="int">1539</config:config-item> + <config:config-item config:name="HorizontalScrollbarWidth" config:type="int">1851</config:config-item> <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> <config:config-item config:name="ZoomValue" config:type="int">100</config:config-item> <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item> @@ -59,7 +59,7 @@ <config:config-item config:name="ShowFormulasMarks" config:type="boolean">false</config:config-item> <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item> <config:config-item config:name="GridColor" config:type="int">12632256</config:config-item> - <config:config-item config:name="FormulaBarHeight" config:type="short">1</config:config-item> + <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item> <config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item> <config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item> <config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item> @@ -71,6 +71,7 @@ <config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item> <config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item> <config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item> + <config:config-item config:name="FormulaBarHeight" config:type="short">1</config:config-item> <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item> <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item> <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item> @@ -117,7 +118,7 @@ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> <config:config-item config:name="PrinterName" config:type="string">Microsoft Print to PDF</config:config-item> <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrinterSetup" config:type="base64Binary">ZBb+/01pY3Jvc29mdCBQcmludCB0byBQREYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFByaW50IFRvIFBERgAAAAAAAAAAAAAWAAEANhUAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAE0AaQBjAHIAbwBzAG8AZgB0ACAAUAByAGkAbgB0ACAAdABvACAAUABEAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAMG3ABQFAMvAQABAAkAmgs0CGQAAQAPAFgCAgABAFgCAwABAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAABAAAA/////0dJUzQAAAAAAAAAAAAAAABESU5VIgDIACQDLBE/XXt+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAFNNVEoAAAAAEAC4AHsAMAA4ADQARgAwADEARgBBAC0ARQA2ADMANAAtADQARAA3ADcALQA4ADMARQBFAC0AMAA3ADQAOAAxADcAQwAwADMANQA4ADEAfQAAAFJFU0RMTABVbmlyZXNETEwAUGFwZXJTaXplAEE0AE9yaWVudGF0aW9uAFBPUlRSQUlUAFJlc29sdXRpb24AUmVzT3B0aW9uMQBDb2xvck1vZGUAQ29sb3IAAAAAAAAAAAAAAAAAAAAAAAAsEQAAVjRETQEAAAAAAAAAnApwIhwAAADsAAAAAwAAAPoBTwg05ndNg+4HSBfANYHQAAAATAAAAAMAAAAACAAAAAAAAAAAAAADAAAAAAgAACoAAAAACAAAAwAAAEAAAABWAAAAABAAAEQAbwBjAHUAbQBlAG4AdABVAHMAZQByAFAAYQBzAHMAdwBvAHIAZAAAAEQAbwBjAHUAbQBlAG4AdABPAHcAbgBlAHIAUABhAHMAcwB3AG8AcgBkAAAARABvAGMAdQBtAGUAbgB0AEMAcgB5AHAAdABTAGUAYwB1AHIAaQB0AHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgBDT01QQVRfRFVQTEVYX01PREUTAER1cGxleE1vZGU6OlVua25vd24MAFBSSU5URVJfTkFNRRYATWljcm9zb2Z0IFByaW50IHRvIFBERgsARFJJVkVSX05BTUUWAE1pY3Jvc29mdCBQcmludCBUbyBQREY=</config:config-item> + <config:config-item config:name="PrinterSetup" config:type="base64Binary">bBb+/01pY3Jvc29mdCBQcmludCB0byBQREYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFByaW50IFRvIFBERgAAAAAAAAAAAAAWAAEAPhUAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAE0AaQBjAHIAbwBzAG8AZgB0ACAAUAByAGkAbgB0ACAAdABvACAAUABEAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAMG3ABYFAMtAQABAAkAmgs0CGQAAQAPAFgCAgABAFgCAwABAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAABAAAA/////0dJUzQAAAAAAAAAAAAAAABESU5VIgDQACwDLBHiXo1TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAABkAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAFNNVEoAAAAAEADAAHsAMAA4ADQARgAwADEARgBBAC0ARQA2ADMANAAtADQARAA3ADcALQA4ADMARQBFAC0AMAA3ADQAOAAxADcAQwAwADMANQA4ADEAfQAAAFJFU0RMTABVbmlyZXNETEwAUGFwZXJTaXplAEE0AE9yaWVudGF0aW9uAFBPUlRSQUlUAFJlc29sdXRpb24AUmVzT3B0aW9uMQBDb2xvck1vZGUAQ29sb3IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwRAABWNERNAQAAAAAAAACcCnAiHAAAAOwAAAADAAAA+gFPCDTmd02D7gdIF8A1gdAAAABMAAAAAwAAAAAIAAAAAAAAAAAAAAMAAAAACAAAKgAAAAAIAAADAAAAQAAAAFYAAAAAEAAARABvAGMAdQBtAGUAbgB0AFUAcwBlAHIAUABhAHMAcwB3AG8AcgBkAAAARABvAGMAdQBtAGUAbgB0AE8AdwBuAGUAcgBQAGEAcwBzAHcAbwByAGQAAABEAG8AYwB1AG0AZQBuAHQAQwByAHkAcAB0AFMAZQBjAHUAcgBpAHQAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAENPTVBBVF9EVVBMRVhfTU9ERRMARHVwbGV4TW9kZTo6VW5rbm93bgwAUFJJTlRFUl9OQU1FFgBNaWNyb3NvZnQgUHJpbnQgdG8gUERGCwBEUklWRVJfTkFNRRYATWljcm9zb2Z0IFByaW50IFRvIFBERg==</config:config-item> <config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item> <config:config-item config:name="RasterResolutionX" config:type="int">1270</config:config-item> <config:config-item config:name="RasterResolutionY" config:type="int">1270</config:config-item> @@ -2036,24 +2037,33 @@ <number:text-style style:name="N100"> <number:text-content/> </number:text-style> - <style:style style:name="ce11" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce15" style:family="table-cell" style:parent-style-name="Default"> + <style:table-cell-properties fo:wrap-option="wrap"/> + <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/> + </style:style> + <style:style style:name="ce18" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/> </style:style> - <style:style style:name="ce13" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce19" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-size="12pt" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/> </style:style> - <style:style style:name="ce17" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:style style:name="ce21" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce23" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce22" style:family="table-cell" style:parent-style-name="Default"> + <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> + <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> + <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> + </style:style> + <style:style style:name="ce24" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> @@ -2061,51 +2071,42 @@ <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce27" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:style style:name="ce25" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce28" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce26" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> </style:style> - <style:style style:name="ce5" style:family="table-cell" style:parent-style-name="Default"> - <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> - <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> - <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> - </style:style> <style:style style:name="ce9" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties fo:wrap-option="wrap"/> <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/> </style:style> - <style:style style:name="ce15" style:family="table-cell" style:parent-style-name="Default"> - <style:table-cell-properties fo:wrap-option="wrap"/> - <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/> - </style:style> - <style:style style:name="ce18" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce11" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/> </style:style> - <style:style style:name="ce19" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce13" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-size="12pt" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/> </style:style> - <style:style style:name="ce21" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:style style:name="ce17" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce22" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce23" style:family="table-cell" style:parent-style-name="Default"> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce24" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce27" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/> @@ -2113,17 +2114,17 @@ <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce25" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:style style:name="ce28" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/> </style:style> - <style:style style:name="ce26" style:family="table-cell" style:parent-style-name="Default"> + <style:style style:name="ce29" style:family="table-cell" style:parent-style-name="Default"> <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/> <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/> </style:style> <style:style style:name="ce10" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"/> - <style:style style:name="ce30" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> + <style:style style:name="ce31" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"> <style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.C2"/> <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.C2"/> <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.C2"/> @@ -2184,7 +2185,7 @@ <text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p> </style:region-left> <style:region-right> - <text:p><text:date style:data-style-name="N2" text:date-value="2024-06-26">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="18:35:00.500000000">00:00:00</text:time></text:p> + <text:p><text:date style:data-style-name="N2" text:date-value="2025-04-10">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="13:48:40.825033500">00:00:00</text:time></text:p> </style:region-right> </style:header> <style:header-left style:display="false"/> @@ -2201,10 +2202,10 @@ <table:calculation-settings table:search-criteria-must-apply-to-whole-cell="false" table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/> <table:table table:name="Sheet1" table:style-name="ta1"> <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/> - <table:table-column table:style-name="co2" table:default-cell-style-name="ce22"/> + <table:table-column table:style-name="co2" table:default-cell-style-name="ce23"/> <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/> <table:table-row table:style-name="ro1"> - <table:table-cell table:style-name="ce15" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string"> <text:p>XLOOKUP Function</text:p> </table:table-cell> <table:table-cell table:style-name="Default"/> @@ -2216,10 +2217,10 @@ <table:table-cell/> </table:table-row> <table:table-row table:style-name="ro3"> - <table:table-cell table:style-name="ce18" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce11" office:value-type="string" calcext:value-type="string"> <text:p>Result</text:p> </table:table-cell> - <table:table-cell table:style-name="ce21" table:formula="of:=AND([.B8:.B95])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce17" table:formula="of:=AND([.B8:.B95])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell/> @@ -2228,13 +2229,13 @@ <table:table-cell table:number-columns-repeated="3"/> </table:table-row> <table:table-row table:style-name="ro4"> - <table:table-cell table:style-name="ce19" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce13" office:value-type="string" calcext:value-type="string"> <text:p>Sheet</text:p> </table:table-cell> - <table:table-cell table:style-name="ce24" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce27" office:value-type="string" calcext:value-type="string"> <text:p>Result</text:p> </table:table-cell> - <table:table-cell table:style-name="ce19" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce13" office:value-type="string" calcext:value-type="string"> <text:p>Description</text:p> </table:table-cell> </table:table-row> @@ -2242,16 +2243,16 @@ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> <text:p>2</text:p> </table:table-cell> - <table:table-cell table:style-name="ce21" table:formula="of:=AND([Sheet2.C2:.C202])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce17" table:formula="of:=AND([Sheet2.C2:.C202])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> - <table:table-cell table:style-name="ce26" office:value-type="string" calcext:value-type="string"> + <table:table-cell table:style-name="ce29" office:value-type="string" calcext:value-type="string"> <text:p>Simple XLOOKUP formulas with local references and values</text:p> </table:table-cell> </table:table-row> <table:table-row table:style-name="ro2" table:number-rows-repeated="20"> <table:table-cell/> - <table:table-cell table:style-name="ce25"/> + <table:table-cell table:style-name="ce28"/> <table:table-cell/> </table:table-row> <table:table-row table:style-name="ro2" table:number-rows-repeated="21"> @@ -2342,7 +2343,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>+55</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A2]=[.B2]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A2]=[.B2]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A2])" office:value-type="string" office:string-value="=XLOOKUP(G2;H2:H11;J2:J11)" calcext:value-type="string"> @@ -2385,7 +2386,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>+91</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A3]=[.B3]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A3]=[.B3]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A3])" office:value-type="string" office:string-value="=XLOOKUP("India";H2:H11;J2:J11)" calcext:value-type="string"> @@ -2425,7 +2426,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>+91</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A4]=[.B4]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A4]=[.B4]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A4])" office:value-type="string" office:string-value="=XLOOKUP("INDIA";H2:H11;J2:J11)" calcext:value-type="string"> @@ -2468,7 +2469,7 @@ <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error"> <text:p>#N/A</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISNA([.A5])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISNA([.A5])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A5])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11)" calcext:value-type="string"> @@ -2511,7 +2512,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p/> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A6]=[.B6]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A6]=[.B6]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A6])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11;"")" calcext:value-type="string"> @@ -2551,7 +2552,7 @@ <table:table-cell office:value-type="float" office:value="-99" calcext:value-type="float"> <text:p>-99</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A7]=[.B7]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A7]=[.B7]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A7])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11;-99)" calcext:value-type="string"> @@ -2588,7 +2589,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Not here</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A8]=[.B8]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A8]=[.B8]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A8])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11;"Not here")" calcext:value-type="string"> @@ -2631,7 +2632,7 @@ <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error"> <text:p>#N/A</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISNA([.A9])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISNA([.A9])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A9])" office:value-type="string" office:string-value="=XLOOKUP("";H2:H11;J2:J11)" calcext:value-type="string"> @@ -2674,7 +2675,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>00234</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A10]=[.B10]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A10]=[.B10]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A10])" office:value-type="string" office:string-value="=XLOOKUP("Nigeria";H2:H11;J2:J11;;;1)" calcext:value-type="string"> @@ -2714,7 +2715,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>+234</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A11]=[.B11]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A11]=[.B11]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A11])" office:value-type="string" office:string-value="=XLOOKUP("Nigeria";H2:H11;J2:J11;;;-1)" calcext:value-type="string"> @@ -2749,7 +2750,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Mexico</text:p> @@ -2770,7 +2771,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -2780,7 +2781,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Ned Lanning</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A14]=[.B14]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A14]=[.B14]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A14])" office:value-type="string" office:string-value="{=XLOOKUP(4390;I14:R14;I15:R16)}" calcext:value-type="string"> @@ -2832,7 +2833,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Marketing</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A15]=[.B15]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A15]=[.B15]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A15])" office:value-type="string" office:string-value="{=XLOOKUP(4390;I14:R14;I15:R16)}" calcext:value-type="string"> @@ -2881,7 +2882,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Mia Arnold</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A16]=[.B16]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A16]=[.B16]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A16])" office:value-type="string" office:string-value="{=XLOOKUP(G14;I14:R14;I15:R16)}" calcext:value-type="string"> @@ -2930,7 +2931,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Operations</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A17]=[.B17]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A17]=[.B17]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A17])" office:value-type="string" office:string-value="{=XLOOKUP(G14;I14:R14;I15:R16)}" calcext:value-type="string"> @@ -2945,7 +2946,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>ID not found</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A18]=[.B18]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A18]=[.B18]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A18])" office:value-type="string" office:string-value="{=XLOOKUP(G18;I14:R14;I15:R16;"ID not found")}" calcext:value-type="string"> @@ -2964,7 +2965,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>ID not found</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A19]=[.B19]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A19]=[.B19]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A19])" office:value-type="string" office:string-value="{=XLOOKUP(G18;I14:R14;I15:R16;"ID not found")}" calcext:value-type="string"> @@ -2979,7 +2980,7 @@ <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error"> <text:p>#N/A</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISNA([.A20])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISNA([.A20])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A20])" office:value-type="string" office:string-value="{=XLOOKUP("";I14:R14;I15:R16)}" calcext:value-type="string"> @@ -2994,7 +2995,7 @@ <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error"> <text:p>#N/A</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISNA([.A21])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISNA([.A21])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A21])" office:value-type="string" office:string-value="{=XLOOKUP("";I14:R14;I15:R16)}" calcext:value-type="string"> @@ -3009,7 +3010,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Earlene McCartney</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A22]=[.B22]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A22]=[.B22]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A22])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;1)}" calcext:value-type="string"> @@ -3041,7 +3042,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Accounting</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A23]=[.B23]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A23]=[.B23]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A23])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;1)}" calcext:value-type="string"> @@ -3073,7 +3074,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Earlene McCartney</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A24]=[.B24]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A24]=[.B24]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A24])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}" calcext:value-type="string"> @@ -3102,7 +3103,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Accounting</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A25]=[.B25]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A25]=[.B25]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A25])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}" calcext:value-type="string"> @@ -3135,7 +3136,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Earlene McCartney</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A26]=[.B26]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A26]=[.B26]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A26])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16)}" calcext:value-type="string"> @@ -3168,7 +3169,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Accounting</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A27]=[.B27]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A27]=[.B27]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A27])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16)}" calcext:value-type="string"> @@ -3178,7 +3179,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -3188,7 +3189,7 @@ <table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float"> <text:p>0,24</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A29]=[.B29]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A29]=[.B29]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A29])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;1;1)" calcext:value-type="string"> @@ -3213,7 +3214,7 @@ <table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float"> <text:p>0,24</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A30]=[.B30]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A30]=[.B30]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A30])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;1;2)" calcext:value-type="string"> @@ -3235,7 +3236,7 @@ <table:table-cell office:value-type="float" office:value="0.22" calcext:value-type="float"> <text:p>0,22</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A31]=[.B31]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A31]=[.B31]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A31])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;-1;2)" calcext:value-type="string"> @@ -3260,7 +3261,7 @@ <table:table-cell table:formula="of:=ORG.OPENOFFICE.ERRORTYPE([.A32])" office:value-type="float" office:value="519" calcext:value-type="float"> <text:p>519</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.B32]=519" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.B32]=519" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A32])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;2;2)" calcext:value-type="string"> @@ -3277,7 +3278,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell office:value-type="float" office:value="0.32" calcext:value-type="float"> <text:p>0,32</text:p> @@ -3289,7 +3290,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell office:value-type="float" office:value="0.35" calcext:value-type="float"> <text:p>0,35</text:p> @@ -3301,7 +3302,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell office:value-type="float" office:value="0.37" calcext:value-type="float"> <text:p>0,37</text:p> @@ -3313,7 +3314,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -3323,7 +3324,7 @@ <table:table-cell office:value-type="float" office:value="25000" calcext:value-type="float"> <text:p>25000</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A37]=[.B37]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A37]=[.B37]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A37])" office:value-type="string" office:string-value="=XLOOKUP(K37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string"> @@ -3374,7 +3375,7 @@ <table:table-cell office:value-type="float" office:value="19342" calcext:value-type="float"> <text:p>19342</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A38]=[.B38]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A38]=[.B38]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A38])" office:value-type="string" office:string-value="=XLOOKUP(S37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string"> @@ -3422,7 +3423,7 @@ <table:table-cell office:value-type="float" office:value="0.293" calcext:value-type="float"> <text:p>0,293</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A39]=[.B39]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A39]=[.B39]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A39])" office:value-type="string" office:string-value="=XLOOKUP(T37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string"> @@ -3465,7 +3466,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Q3</text:p> @@ -3508,7 +3509,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Mia Arnold</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A41]=[.B41]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A41]=[.B41]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A41])" office:value-type="string" office:string-value="{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}" calcext:value-type="string"> @@ -3556,7 +3557,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Operations</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A42]=[.B42]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A42]=[.B42]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A42])" office:value-type="string" office:string-value="{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}" calcext:value-type="string"> @@ -3599,7 +3600,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -3609,7 +3610,7 @@ <table:table-cell office:value-type="float" office:value="110.56" calcext:value-type="float"> <text:p>110,56</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A44]=[.B44]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A44]=[.B44]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A44])" office:value-type="string" office:string-value="=SUM(XLOOKUP(G44;H45:H49;K45:K49):XLOOKUP(G45;H45:H49;K45:K49))" calcext:value-type="string"> @@ -3636,7 +3637,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Banana</text:p> @@ -3657,7 +3658,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Grape</text:p> @@ -3675,7 +3676,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Pear</text:p> @@ -3693,7 +3694,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Banana</text:p> @@ -3711,7 +3712,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Cherry</text:p> @@ -3729,7 +3730,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -3739,7 +3740,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>err:504</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISERROR([.A51])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISERROR([.A51])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A51])" office:value-type="string" office:string-value="=XLOOKUP("B";H51:H53;K51:K52)" calcext:value-type="string"> @@ -3772,7 +3773,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>err:504</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISERROR([.A52])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISERROR([.A52])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A52])" office:value-type="string" office:string-value="=XLOOKUP("C";H51:H53;K51:K52)" calcext:value-type="string"> @@ -3805,7 +3806,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>err:504</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISERROR([.A53])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISERROR([.A53])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A53])" office:value-type="string" office:string-value="=XLOOKUP("E";H51:I53;K51:L53)" calcext:value-type="string"> @@ -3838,7 +3839,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>err:504</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISERROR([.A54])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISERROR([.A54])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A54])" office:value-type="string" office:string-value="=XLOOKUP("E";H51:I53;K51:K53)" calcext:value-type="string"> @@ -3857,7 +3858,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>err:504</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISERROR([.A55])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISERROR([.A55])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A55])" office:value-type="string" office:string-value="=XLOOKUP("C";H51:I53;K51:K53)" calcext:value-type="string"> @@ -3871,7 +3872,7 @@ </table:table-row> <table:table-row table:style-name="ro2" table:number-rows-repeated="2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -3881,7 +3882,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>b3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A58]=[.B58]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A58]=[.B58]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A58])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;1)" calcext:value-type="string"> @@ -3919,7 +3920,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>b3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A59]=[.B59]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A59]=[.B59]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A59])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;1)" calcext:value-type="string"> @@ -3957,7 +3958,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>a5</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A60]=[.B60]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A60]=[.B60]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A60])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;1)" calcext:value-type="string"> @@ -3995,7 +3996,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>b3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A61]=[.B61]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A61]=[.B61]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A61])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;1)" calcext:value-type="string"> @@ -4029,7 +4030,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>b3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A62]=[.B62]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A62]=[.B62]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A62])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;-1)" calcext:value-type="string"> @@ -4067,7 +4068,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>b3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A63]=[.B63]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A63]=[.B63]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A63])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;-1)" calcext:value-type="string"> @@ -4086,7 +4087,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>a5</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A64]=[.B64]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A64]=[.B64]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A64])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;-1)" calcext:value-type="string"> @@ -4105,7 +4106,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>b3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A65]=[.B65]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A65]=[.B65]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A65])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;-1)" calcext:value-type="string"> @@ -4120,7 +4121,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>c3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A66]=[.B66]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A66]=[.B66]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A66])" office:value-type="string" office:string-value="=XLOOKUP(3;H$58:H$62;K$58:K$62;;0;2)" calcext:value-type="string"> @@ -4139,7 +4140,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>c3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A67]=[.B67]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A67]=[.B67]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A67])" office:value-type="string" office:string-value="=XLOOKUP(4;H$58:H$62;K$58:K$62;;-1;2)" calcext:value-type="string"> @@ -4158,7 +4159,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>D5.2</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A68]=[.B68]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A68]=[.B68]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A68])" office:value-type="string" office:string-value="=XLOOKUP(4;H$58:H$62;K$58:K$62;;1;2)" calcext:value-type="string"> @@ -4177,7 +4178,7 @@ <table:table-cell table:formula="of:=ORG.OPENOFFICE.ERRORTYPE([.A69])" office:value-type="float" office:value="519" calcext:value-type="float"> <text:p>519</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.B69]=519" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.B69]=519" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A69])" office:value-type="string" office:string-value="=XLOOKUP(3;H$58:H$62;K$58:K$62;;2;2)" calcext:value-type="string"> @@ -4195,7 +4196,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>c3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A70]=[.B70]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A70]=[.B70]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A70])" office:value-type="string" office:string-value="=XLOOKUP(3;J$58:J$62;M$58:M$62;;0;-2)" calcext:value-type="string"> @@ -4214,7 +4215,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>c3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A71]=[.B71]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A71]=[.B71]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A71])" office:value-type="string" office:string-value="=XLOOKUP(4;J$58:J$62;M$58:M$62;;-1;-2)" calcext:value-type="string"> @@ -4233,7 +4234,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>b5</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A72]=[.B72]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A72]=[.B72]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A72])" office:value-type="string" office:string-value="=XLOOKUP(4;J$58:J$62;M$58:M$62;;1;-2)" calcext:value-type="string"> @@ -4252,7 +4253,7 @@ <table:table-cell table:formula="of:=ORG.OPENOFFICE.ERRORTYPE([.A73])" office:value-type="float" office:value="519" calcext:value-type="float"> <text:p>519</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.B73]=519" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.B73]=519" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A73])" office:value-type="string" office:string-value="=XLOOKUP(3;J$58:J$62;M$58:M$62;;2;-2)" calcext:value-type="string"> @@ -4270,7 +4271,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>b3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A74]=[.B74]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A74]=[.B74]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A74])" office:value-type="string" office:string-value="=XLOOKUP(3;H$74:L$74;H$75:L$75;;0;1)" calcext:value-type="string"> @@ -4305,7 +4306,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>b3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A75]=[.B75]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A75]=[.B75]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A75])" office:value-type="string" office:string-value="=XLOOKUP(4;H$74:L$74;H$75:L$75;;-1;1)" calcext:value-type="string"> @@ -4340,7 +4341,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>a5</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A76]=[.B76]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A76]=[.B76]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A76])" office:value-type="string" office:string-value="=XLOOKUP(4;H$74:L$74;H$75:L$75;;1;1)" calcext:value-type="string"> @@ -4359,7 +4360,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>b3</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A77]=[.B77]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A77]=[.B77]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A77])" office:value-type="string" office:string-value="=XLOOKUP(3;H$74:L$74;H$75:L$75;;2;1)" calcext:value-type="string"> @@ -4373,7 +4374,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -4383,7 +4384,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>bC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A79]=[.B79]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A79]=[.B79]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A79])" office:value-type="string" office:string-value="=XLOOKUP("C";I$79:I$83;L$79:L$83;;0;1)" calcext:value-type="string"> @@ -4421,7 +4422,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>bC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A80]=[.B80]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A80]=[.B80]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A80])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;-1;1)" calcext:value-type="string"> @@ -4459,7 +4460,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>aE</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A81]=[.B81]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A81]=[.B81]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A81])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;1;1)" calcext:value-type="string"> @@ -4497,7 +4498,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>eB</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A82]=[.B82]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A82]=[.B82]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A82])" office:value-type="string" office:string-value="=XLOOKUP("b?b";I$84:I$88;L$79:L$83;;2;1)" calcext:value-type="string"> @@ -4531,7 +4532,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>bC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A83]=[.B83]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A83]=[.B83]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A83])" office:value-type="string" office:string-value="=XLOOKUP("C";I$79:I$83;L$79:L$83;;0;-1)" calcext:value-type="string"> @@ -4569,7 +4570,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>bC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A84]=[.B84]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A84]=[.B84]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A84])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;-1;-1)" calcext:value-type="string"> @@ -4592,7 +4593,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>aE</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A85]=[.B85]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A85]=[.B85]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A85])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;1;-1)" calcext:value-type="string"> @@ -4615,7 +4616,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>bC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A86]=[.B86]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A86]=[.B86]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A86])" office:value-type="string" office:string-value="=XLOOKUP("C";I$79:I$83;L$79:L$83;;2;-1)" calcext:value-type="string"> @@ -4634,7 +4635,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>cC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A87]=[.B87]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A87]=[.B87]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A87])" office:value-type="string" office:string-value="=XLOOKUP("C";H$79:H$83;K$79:K$83;;0;2)" calcext:value-type="string"> @@ -4657,7 +4658,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>cC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A88]=[.B88]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A88]=[.B88]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A88])" office:value-type="string" office:string-value="=XLOOKUP("D";H$79:H$83;K$79:K$83;;-1;2)" calcext:value-type="string"> @@ -4680,7 +4681,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>eE</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A89]=[.B89]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A89]=[.B89]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A89])" office:value-type="string" office:string-value="=XLOOKUP("D";H$79:H$83;K$79:K$83;;1;2)" calcext:value-type="string"> @@ -4694,7 +4695,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -4704,7 +4705,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>cC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A91]=[.B91]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A91]=[.B91]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A91])" office:value-type="string" office:string-value="=XLOOKUP("C";J$79:J$83;M$79:M$83;;0;-2)" calcext:value-type="string"> @@ -4723,7 +4724,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>cC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A92]=[.B92]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A92]=[.B92]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A92])" office:value-type="string" office:string-value="=XLOOKUP("D";J$79:J$83;M$79:M$83;;-1;-2)" calcext:value-type="string"> @@ -4742,7 +4743,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>eE</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A93]=[.B93]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A93]=[.B93]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A93])" office:value-type="string" office:string-value="=XLOOKUP("D";J$79:J$83;M$79:M$83;;1;-2)" calcext:value-type="string"> @@ -4756,7 +4757,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -4766,7 +4767,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>bC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A95]=[.B95]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A95]=[.B95]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A95])" office:value-type="string" office:string-value="=XLOOKUP("C";H$95:L$95;H$96:L$96;;0;1)" calcext:value-type="string"> @@ -4801,7 +4802,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>bC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A96]=[.B96]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A96]=[.B96]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A96])" office:value-type="string" office:string-value="=XLOOKUP("D";H$95:L$95;H$96:L$96;;-1;1)" calcext:value-type="string"> @@ -4836,7 +4837,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>aE</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A97]=[.B97]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A97]=[.B97]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A97])" office:value-type="string" office:string-value="=XLOOKUP("D";H$95:L$95;H$96:L$96;;1;1)" calcext:value-type="string"> @@ -4855,7 +4856,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>#N/A</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISERROR([.A98])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISERROR([.A98])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A98])" office:value-type="string" office:string-value="=XLOOKUP("C?";H$95:L$95;H$96:L$96;;2;1)" calcext:value-type="string"> @@ -4865,7 +4866,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="4"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>LookCol</text:p> @@ -4907,7 +4908,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>bC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A100]=[.B100]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A100]=[.B100]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A100])" office:value-type="string" office:string-value="=XLOOKUP("c";I$79:I$83;L$79:L$83;;0;1)" calcext:value-type="string"> @@ -4952,7 +4953,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>bC</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A101]=[.B101]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A101]=[.B101]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A101])" office:value-type="string" office:string-value="=XLOOKUP("d";I$79:I$83;L$79:L$83;;-1;1)" calcext:value-type="string"> @@ -4978,7 +4979,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>aE</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A102]=[.B102]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A102]=[.B102]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A102])" office:value-type="string" office:string-value="=XLOOKUP("d";I$79:I$83;L$79:L$83;;1;1)" calcext:value-type="string"> @@ -5004,7 +5005,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>#N/A</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISERROR([.A103])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISERROR([.A103])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A103])" office:value-type="string" office:string-value="=XLOOKUP("f?";I$79:I$83;L$79:L$83;;2;1)" calcext:value-type="string"> @@ -5026,7 +5027,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>g</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A104]=[.B104]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A104]=[.B104]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A104])" office:value-type="string" office:string-value="=XLOOKUP(K99;H$99:H$109;I$99:I$109;;-1;-1)" calcext:value-type="string"> @@ -5048,7 +5049,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>a</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A105]=[.B105]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A105]=[.B105]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A105])" office:value-type="string" office:string-value="=XLOOKUP(K99;N$99:R$99;N$100:R$100;;-1;-1)" calcext:value-type="string"> @@ -5070,7 +5071,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>BR</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A106]=[.B106]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A106]=[.B106]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A106])" office:value-type="string" office:string-value="=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;1;2)" calcext:value-type="string"> @@ -5092,7 +5093,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>BR</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A107]=[.B107]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A107]=[.B107]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A107])" office:value-type="string" office:string-value="=XLOOKUP($M$1;L$1:L$12;I$1:I$12;0;1;-2)" calcext:value-type="string"> @@ -5114,7 +5115,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>ID</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A108]=[.B108]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A108]=[.B108]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A108])" office:value-type="string" office:string-value="=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;-1;2)" calcext:value-type="string"> @@ -5136,7 +5137,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>PK</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A109]=[.B109]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A109]=[.B109]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A109])" office:value-type="string" office:string-value="=XLOOKUP(M1;L$1:L$12;I$1:I$12;0;-1;-2)" calcext:value-type="string"> @@ -5158,7 +5159,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>PK</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A110]=[.B110]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A110]=[.B110]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A110])" office:value-type="string" office:string-value="=XLOOKUP(N1;L$1:L$12;I$1:I$12;0;0;-2)" calcext:value-type="string"> @@ -5173,7 +5174,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>#N/A</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISERROR([.A111])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISERROR([.A111])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A111])" office:value-type="string" office:string-value="=XLOOKUP(M1;K$1:K$12;I$1:I$12;;0;2)" calcext:value-type="string"> @@ -5183,7 +5184,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5193,7 +5194,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>#N/A</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISERROR([.A113])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISERROR([.A113])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A113])" office:value-type="string" office:string-value="=XLOOKUP($O$1;P$1:P$11;T$1:T$11;;0;2)" calcext:value-type="string"> @@ -5208,7 +5209,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>c</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A114]=[.B114]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A114]=[.B114]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A114])" office:value-type="string" office:string-value="=XLOOKUP($O$1;P$1:P$11;T$1:T$11;;-1;2)" calcext:value-type="string"> @@ -5223,7 +5224,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>d</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A115]=[.B115]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A115]=[.B115]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A115])" office:value-type="string" office:string-value="=XLOOKUP($O$1;P$1:P$11;T$1:T$11;;1;2)" calcext:value-type="string"> @@ -5238,7 +5239,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>c</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A116]=[.B116]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A116]=[.B116]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A116])" office:value-type="string" office:string-value="=XLOOKUP($O$1;Q$1:Q$11;T$1:T$11;;0;2)" calcext:value-type="string"> @@ -5253,7 +5254,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>c</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A117]=[.B117]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A117]=[.B117]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A117])" office:value-type="string" office:string-value="=XLOOKUP($O$1;Q$1:Q$11;T$1:T$11;;-1;2)" calcext:value-type="string"> @@ -5268,7 +5269,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>c</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A118]=[.B118]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A118]=[.B118]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A118])" office:value-type="string" office:string-value="=XLOOKUP($O$1;Q$1:Q$11;T$1:T$11;;1;2)" calcext:value-type="string"> @@ -5278,7 +5279,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5288,7 +5289,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>#N/A</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=ISERROR([.A120])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=ISERROR([.A120])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A120])" office:value-type="string" office:string-value="=XLOOKUP($O$1;R$1:R$11;T$1:T$11;;0;-2)" calcext:value-type="string"> @@ -5303,7 +5304,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>h</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A121]=[.B121]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A121]=[.B121]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A121])" office:value-type="string" office:string-value="=XLOOKUP($O$1;R$1:R$11;T$1:T$11;;-1;-2)" calcext:value-type="string"> @@ -5325,7 +5326,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>g</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A122]=[.B122]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A122]=[.B122]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A122])" office:value-type="string" office:string-value="=XLOOKUP($O$1;R$1:R$11;T$1:T$11;;1;-2)" calcext:value-type="string"> @@ -5347,7 +5348,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>h</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A123]=[.B123]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A123]=[.B123]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A123])" office:value-type="string" office:string-value="=XLOOKUP($O$1;S$1:S$11;T$1:T$11;;0;-2)" calcext:value-type="string"> @@ -5369,7 +5370,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>h</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A124]=[.B124]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A124]=[.B124]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A124])" office:value-type="string" office:string-value="=XLOOKUP($O$1;S$1:S$11;T$1:T$11;;-1;-2)" calcext:value-type="string"> @@ -5391,7 +5392,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>h</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A125]=[.B125]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A125]=[.B125]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A125])" office:value-type="string" office:string-value="=XLOOKUP($O$1;S$1:S$11;T$1:T$11;;1;-2)" calcext:value-type="string"> @@ -5408,7 +5409,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string"> <text:p>Klein</text:p> @@ -5425,7 +5426,7 @@ <table:table-cell office:value-type="float" office:value="16" calcext:value-type="float"> <text:p>16</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A127]=[.B127]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A127]=[.B127]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A127])" office:value-type="string" office:string-value="=XLOOKUP(N25;K22:K26;L22:L26;XLOOKUP(N25;P22:P26;Q22:Q26))" calcext:value-type="string"> @@ -5447,7 +5448,7 @@ <table:table-cell office:value-type="float" office:value="86" calcext:value-type="float"> <text:p>86</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A128]=[.B128]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A128]=[.B128]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A128])" office:value-type="string" office:string-value="=XLOOKUP(N26;K22:K26;L22:L26;XLOOKUP(N26;P22:P26;Q22:Q26))" calcext:value-type="string"> @@ -5464,7 +5465,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> @@ -5474,7 +5475,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Susanne</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A130]=[.B130]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A130]=[.B130]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A130])" office:value-type="string" office:string-value="=XLOOKUP("Luchs";G$121:G$128;H$121:H$128; ;-1;-2)" calcext:value-type="string"> @@ -5484,7 +5485,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Country Asc1</text:p> @@ -5514,7 +5515,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Country Asc2</text:p> @@ -5552,7 +5553,7 @@ <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>c</text:p> </table:table-cell> - <table:table-cell table:style-name="ce30" table:formula="of:=[.A133]=[.B133]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A133]=[.B133]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> <text:p>IGAZ</text:p> </table:table-cell> <table:table-cell table:formula="of:=FORMULA([.A133])" office:value-type="string" office:string-value="=XLOOKUP(G137;G132:Q132;G135:Q135;;1;2)" calcext:value-type="string"> @@ -5577,9 +5578,22 @@ <table:table-cell table:number-columns-repeated="3"/> </table:table-row> <table:table-row table:style-name="ro2"> - <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> - <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("B";{"A"|"B"};{1|2};"")" office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> + <text:p>2</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce31" table:formula="of:=[.A134]=[.B134]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>IGAZ</text:p> + </table:table-cell> + <table:table-cell table:formula="of:=FORMULA([.A134])" office:value-type="string" office:string-value="=XLOOKUP("B";{"A";"B"};{1;2};"")" calcext:value-type="string"> + <text:p>=XLOOKUP("B";{"A";"B"};{1;2};"")</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Return result from array</text:p> + </table:table-cell> + <table:table-cell/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Country Desc2</text:p> </table:table-cell> @@ -5611,7 +5625,7 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell office:value-type="string" calcext:value-type="string"> <text:p>Prefix</text:p> @@ -5650,12 +5664,12 @@ </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="3"/> <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float"> <text:p>2</text:p> @@ -5664,7 +5678,7 @@ </table:table-row> <table:table-row table:style-name="ro2" table:number-rows-repeated="65"> <table:table-cell table:number-columns-repeated="2"/> - <table:table-cell table:style-name="ce30"/> + <table:table-cell table:style-name="ce31"/> <table:table-cell table:number-columns-repeated="17"/> </table:table-row> <table:table-row table:style-name="ro2" table:number-rows-repeated="1048373"> diff --git a/sc/qa/unit/data/ods/RowHeightTdf165003.ods b/sc/qa/unit/data/ods/RowHeightTdf165003.ods Binary files differnew file mode 100644 index 000000000000..b3672f929f82 --- /dev/null +++ b/sc/qa/unit/data/ods/RowHeightTdf165003.ods diff --git a/sc/qa/unit/data/ods/tdf123225_pivotTable_empty_row_col_items.ods b/sc/qa/unit/data/ods/tdf123225_pivotTable_empty_row_col_items.ods Binary files differnew file mode 100644 index 000000000000..fba4bc00d3ab --- /dev/null +++ b/sc/qa/unit/data/ods/tdf123225_pivotTable_empty_row_col_items.ods diff --git a/sc/qa/unit/data/ods/tdf123225_pivotTable_no_col_items.ods b/sc/qa/unit/data/ods/tdf123225_pivotTable_no_col_items.ods Binary files differnew file mode 100644 index 000000000000..0e2b601efa44 --- /dev/null +++ b/sc/qa/unit/data/ods/tdf123225_pivotTable_no_col_items.ods diff --git a/sc/qa/unit/data/ods/tdf123225_pivotTable_row_col_items.ods b/sc/qa/unit/data/ods/tdf123225_pivotTable_row_col_items.ods Binary files differnew file mode 100644 index 000000000000..c47e083311e5 --- /dev/null +++ b/sc/qa/unit/data/ods/tdf123225_pivotTable_row_col_items.ods diff --git a/sc/qa/unit/data/ods/tdf165383.ods b/sc/qa/unit/data/ods/tdf165383.ods Binary files differnew file mode 100644 index 000000000000..f49ac2d27187 --- /dev/null +++ b/sc/qa/unit/data/ods/tdf165383.ods diff --git a/sc/qa/unit/data/xls/tdf165080.xls b/sc/qa/unit/data/xls/tdf165080.xls Binary files differnew file mode 100644 index 000000000000..01323774499c --- /dev/null +++ b/sc/qa/unit/data/xls/tdf165080.xls diff --git a/sc/qa/unit/data/xlsx/freezePaneStartCell.xlsx b/sc/qa/unit/data/xlsx/freezePaneStartCell.xlsx Binary files differnew file mode 100644 index 000000000000..9bce2671009c --- /dev/null +++ b/sc/qa/unit/data/xlsx/freezePaneStartCell.xlsx diff --git a/sc/qa/unit/data/xlsx/sortconditionref2.xlsx b/sc/qa/unit/data/xlsx/sortconditionref2.xlsx Binary files differnew file mode 100644 index 000000000000..748e894ac0a7 --- /dev/null +++ b/sc/qa/unit/data/xlsx/sortconditionref2.xlsx diff --git a/sc/qa/unit/data/xlsx/tdf164895.xlsx b/sc/qa/unit/data/xlsx/tdf164895.xlsx Binary files differnew file mode 100644 index 000000000000..7df4516e2dcf --- /dev/null +++ b/sc/qa/unit/data/xlsx/tdf164895.xlsx diff --git a/sc/qa/unit/data/xlsx/tdf165503.xlsx b/sc/qa/unit/data/xlsx/tdf165503.xlsx Binary files differnew file mode 100644 index 000000000000..a581c93cd9c4 --- /dev/null +++ b/sc/qa/unit/data/xlsx/tdf165503.xlsx diff --git a/sc/qa/unit/data/xlsx/tdf165655.xlsx b/sc/qa/unit/data/xlsx/tdf165655.xlsx Binary files differnew file mode 100644 index 000000000000..620b68a4b956 --- /dev/null +++ b/sc/qa/unit/data/xlsx/tdf165655.xlsx diff --git a/sc/qa/unit/data/xlsx/tdf165886.xlsx b/sc/qa/unit/data/xlsx/tdf165886.xlsx Binary files differnew file mode 100644 index 000000000000..146d08823181 --- /dev/null +++ b/sc/qa/unit/data/xlsx/tdf165886.xlsx diff --git a/sc/qa/unit/data/xml/autofilter-text.xml b/sc/qa/unit/data/xml/autofilter-text.xml new file mode 100644 index 000000000000..672fefea89fb --- /dev/null +++ b/sc/qa/unit/data/xml/autofilter-text.xml @@ -0,0 +1,3333 @@ +<?xml version="1.0"?> +<?mso-application progid="Excel.Sheet"?> +<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" + xmlns:o="urn:schemas-microsoft-com:office:office" + xmlns:x="urn:schemas-microsoft-com:office:excel" + xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" + xmlns:html="http://www.w3.org/TR/REC-html40"> + <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> + <Author>Kohei Yoshida</Author> + <LastAuthor>Kohei Yoshida</LastAuthor> + <Created>2024-08-02T02:47:24Z</Created> + <Version>16.00</Version> + </DocumentProperties> + <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"> + <AllowPNG/> + </OfficeDocumentSettings> + <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> + <WindowHeight>12135</WindowHeight> + <WindowWidth>28800</WindowWidth> + <WindowTopX>32767</WindowTopX> + <WindowTopY>32767</WindowTopY> + <ProtectStructure>False</ProtectStructure> + <ProtectWindows>False</ProtectWindows> + </ExcelWorkbook> + <Styles> + <Style ss:ID="Default" ss:Name="Normal"> + <Alignment ss:Vertical="Bottom"/> + <Borders/> + <Font ss:FontName="Aptos Narrow" x:Family="Swiss" ss:Size="11" + ss:Color="#000000"/> + <Interior/> + <NumberFormat/> + <Protection/> + </Style> + <Style ss:ID="s62"> + <NumberFormat ss:Format="#,##0"/> + </Style> + </Styles> + <Worksheet ss:Name="Equals"> + <Names> + <NamedRange ss:Name="_FilterDatabase" ss:RefersTo="=Equals!R3C2:R96C7" + ss:Hidden="1"/> + </Names> + <Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="96" x:FullColumns="1" + x:FullRows="1" ss:DefaultRowHeight="15"> + <Column ss:Index="3" ss:Width="102.75"/> + <Row ss:AutoFitHeight="0"/> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">NOC equals Japan or China.</Data></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Rank</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NOC</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Gold</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Silver</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bronze</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Total</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">1</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">United States</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">39</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">41</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">33</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">113</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="Number">2</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">China</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">38</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">32</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">19</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">89</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="Number">3</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Japan</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">27</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">14</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">17</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">58</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">4</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Great Britain</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">22</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">22</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">64</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">5</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">ROC</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">28</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">23</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">71</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">6</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Australia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">17</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">22</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">46</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">7</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Netherlands</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">14</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">36</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">8</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">France</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">33</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">9</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Germany</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">16</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">37</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">10</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Italy</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">40</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">11</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Canada</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">24</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">12</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Brazil</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">21</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">13</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">New Zealand</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">14</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Cuba</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">15</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">15</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Hungary</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">16</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">South Korea</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">17</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Poland</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">14</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">18</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Czech Republic</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">19</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kenya</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">20</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Norway</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">21</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Jamaica</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">22</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Spain</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">17</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">23</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Sweden</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">24</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Switzerland</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">13</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">25</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Denmark</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">26</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Croatia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">27</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Iran</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">28</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Serbia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">29</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Belgium</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">30</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bulgaria</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">31</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Slovenia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">32</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Uzbekistan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">33</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Georgia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">34</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Chinese Taipei</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">35</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Turkey</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">13</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">36</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Greece</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">36</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Uganda</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">38</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ecuador</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">39</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ireland</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">39</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Israel</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">41</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Qatar</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">42</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bahamas</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">42</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kosovo</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">44</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ukraine</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">19</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">45</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Belarus</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">46</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Romania</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">46</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Venezuela</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">48</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">India</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">49</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Hong Kong</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">50</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Philippines</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">50</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Slovakia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">52</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">South Africa</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">53</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Austria</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">54</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Egypt</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">55</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Indonesia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">56</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ethiopia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">56</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Portugal</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">58</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Tunisia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Estonia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Fiji</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Latvia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Thailand</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">63</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bermuda</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">63</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Morocco</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">63</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Puerto Rico</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">66</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Colombia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">67</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Azerbaijan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">68</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Dominican Republic</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">69</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Armenia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">70</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kyrgyzstan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">71</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Mongolia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">72</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Argentina</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">72</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">San Marino</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">74</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Jordan</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">74</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Malaysia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">74</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Nigeria</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bahrain</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Lithuania</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Namibia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">North Macedonia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Saudi Arabia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Turkmenistan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">83</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kazakhstan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">84</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Mexico</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">85</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Finland</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Botswana</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Burkina Faso</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ghana</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Grenada</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ivory Coast</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kuwait</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Moldova</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Syria</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + </Table> + <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> + <PageSetup> + <Header x:Margin="0.3"/> + <Footer x:Margin="0.3"/> + <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/> + </PageSetup> + <Unsynced/> + <Selected/> + <FilterOn/> + <ProtectObjects>False</ProtectObjects> + <ProtectScenarios>False</ProtectScenarios> + </WorksheetOptions> + <AutoFilter x:Range="R3C2:R96C7" + xmlns="urn:schemas-microsoft-com:office:excel"> + <AutoFilterColumn x:Index="2" x:Type="Custom"> + <AutoFilterOr> + <AutoFilterCondition x:Operator="Equals" x:Value="Japan"/> + <AutoFilterCondition x:Operator="Equals" x:Value="China"/> + </AutoFilterOr> + </AutoFilterColumn> + </AutoFilter> + </Worksheet> + <Worksheet ss:Name="Does Not Equal"> + <Names> + <NamedRange ss:Name="_FilterDatabase" ss:RefersTo="='Does Not Equal'!R4C2:R18C5" + ss:Hidden="1"/> + </Names> + <Table ss:ExpandedColumnCount="5" ss:ExpandedRowCount="18" x:FullColumns="1" + x:FullRows="1" ss:DefaultRowHeight="15"> + <Column ss:Index="2" ss:AutoFitWidth="0" ss:Width="98.25"/> + <Column ss:AutoFitWidth="0" ss:Width="42.75"/> + <Column ss:AutoFitWidth="0" ss:Width="71.25"/> + <Column ss:AutoFitWidth="0" ss:Width="78.75"/> + <Row ss:AutoFitHeight="0"/> + <Row ss:Index="3" ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">ST does not equal NV and does not equal FL.</Data></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">CDPs</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">ST</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">2020 Census</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">2010 Census</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Arlington</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">VA</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">238643</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">207627</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Enterprise</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">221831</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">108481</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Spring Valley</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">215597</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">178395</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Sunrise Manor</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">205618</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">189372</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Paradise</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">191238</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">223167</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Metairie</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">LA</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">143507</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">138481</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">East Los Angeles</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">CA</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">118786</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">126496</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Brandon</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">114626</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">103483</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">The Woodlands</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">TX</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">114436</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">93847</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Lehigh Acres</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">114287</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">86784</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Spring Hill</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">113568</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">98621</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Riverview</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">107396</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">71050</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Columbia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">MD</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">104681</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">99615</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Highlands Ranch</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">CO</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">103444</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">96713</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + </Table> + <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> + <PageSetup> + <Header x:Margin="0.3"/> + <Footer x:Margin="0.3"/> + <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/> + </PageSetup> + <Unsynced/> + <FilterOn/> + <Panes> + <Pane> + <Number>3</Number> + <ActiveRow>12</ActiveRow> + <ActiveCol>2</ActiveCol> + </Pane> + </Panes> + <ProtectObjects>False</ProtectObjects> + <ProtectScenarios>False</ProtectScenarios> + </WorksheetOptions> + <AutoFilter x:Range="R4C2:R18C5" + xmlns="urn:schemas-microsoft-com:office:excel"> + <AutoFilterColumn x:Index="2" x:Type="Custom"> + <AutoFilterAnd> + <AutoFilterCondition x:Operator="DoesNotEqual" x:Value="NV"/> + <AutoFilterCondition x:Operator="DoesNotEqual" x:Value="FL"/> + </AutoFilterAnd> + </AutoFilterColumn> + </AutoFilter> + </Worksheet> + <Worksheet ss:Name="Begins With"> + <Names> + <NamedRange ss:Name="_FilterDatabase" ss:RefersTo="='Begins With'!R3C2:R96C7" + ss:Hidden="1"/> + </Names> + <Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="96" x:FullColumns="1" + x:FullRows="1" ss:DefaultRowHeight="15"> + <Column ss:Index="3" ss:Width="102.75"/> + <Row ss:AutoFitHeight="0"/> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">NOC begins with 'Be'.</Data></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Rank</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NOC</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Gold</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Silver</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bronze</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Total</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">1</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">United States</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">39</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">41</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">33</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">113</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">2</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">China</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">38</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">32</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">19</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">89</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">3</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Japan</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">27</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">14</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">17</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">58</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">4</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Great Britain</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">22</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">22</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">64</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">5</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">ROC</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">28</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">23</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">71</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">6</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Australia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">17</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">22</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">46</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">7</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Netherlands</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">14</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">36</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">8</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">France</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">33</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">9</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Germany</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">16</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">37</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">10</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Italy</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">40</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">11</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Canada</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">24</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">12</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Brazil</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">21</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">13</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">New Zealand</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">14</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Cuba</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">15</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">15</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Hungary</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">16</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">South Korea</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">17</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Poland</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">14</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">18</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Czech Republic</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">19</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kenya</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">20</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Norway</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">21</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Jamaica</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">22</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Spain</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">17</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">23</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Sweden</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">24</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Switzerland</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">13</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">25</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Denmark</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">26</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Croatia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">27</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Iran</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">28</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Serbia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="Number">29</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Belgium</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">30</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bulgaria</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">31</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Slovenia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">32</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Uzbekistan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">33</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Georgia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">34</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Chinese Taipei</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">35</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Turkey</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">13</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">36</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Greece</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">36</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Uganda</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">38</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ecuador</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">39</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ireland</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">39</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Israel</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">41</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Qatar</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">42</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bahamas</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">42</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kosovo</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">44</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ukraine</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">19</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="Number">45</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Belarus</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">46</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Romania</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">46</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Venezuela</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">48</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">India</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">49</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Hong Kong</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">50</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Philippines</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">50</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Slovakia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">52</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">South Africa</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">53</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Austria</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">54</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Egypt</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">55</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Indonesia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">56</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ethiopia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">56</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Portugal</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">58</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Tunisia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Estonia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Fiji</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Latvia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Thailand</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="Number">63</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bermuda</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">63</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Morocco</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">63</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Puerto Rico</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">66</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Colombia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">67</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Azerbaijan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">68</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Dominican Republic</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">69</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Armenia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">70</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kyrgyzstan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">71</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Mongolia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">72</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Argentina</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">72</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">San Marino</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">74</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Jordan</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">74</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Malaysia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">74</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Nigeria</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bahrain</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Lithuania</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Namibia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">North Macedonia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Saudi Arabia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Turkmenistan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">83</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kazakhstan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">84</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Mexico</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">85</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Finland</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Botswana</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Burkina Faso</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ghana</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Grenada</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ivory Coast</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kuwait</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Moldova</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Syria</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + </Table> + <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> + <PageSetup> + <Header x:Margin="0.3"/> + <Footer x:Margin="0.3"/> + <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/> + </PageSetup> + <Unsynced/> + <FilterOn/> + <Panes> + <Pane> + <Number>3</Number> + <ActiveRow>97</ActiveRow> + <ActiveCol>10</ActiveCol> + </Pane> + </Panes> + <ProtectObjects>False</ProtectObjects> + <ProtectScenarios>False</ProtectScenarios> + </WorksheetOptions> + <AutoFilter x:Range="R3C2:R96C7" + xmlns="urn:schemas-microsoft-com:office:excel"> + <AutoFilterColumn x:Index="2" x:Type="Custom"> + <AutoFilterCondition x:Operator="Equals" x:Value="Be*"/> + </AutoFilterColumn> + </AutoFilter> + </Worksheet> + <Worksheet ss:Name="Ends With"> + <Names> + <NamedRange ss:Name="_FilterDatabase" ss:RefersTo="='Ends With'!R3C2:R96C7" + ss:Hidden="1"/> + </Names> + <Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="96" x:FullColumns="1" + x:FullRows="1" ss:DefaultRowHeight="15"> + <Column ss:Index="3" ss:Width="102.75"/> + <Row ss:AutoFitHeight="0"/> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">NOC ends with 'lic'.</Data></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Rank</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NOC</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Gold</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Silver</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bronze</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Total</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">1</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">United States</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">39</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">41</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">33</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">113</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">2</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">China</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">38</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">32</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">19</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">89</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">3</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Japan</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">27</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">14</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">17</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">58</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">4</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Great Britain</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">22</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">22</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">64</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">5</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">ROC</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">28</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">23</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">71</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">6</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Australia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">17</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">22</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">46</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">7</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Netherlands</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">14</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">36</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">8</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">France</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">33</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">9</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Germany</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">16</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">37</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">10</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Italy</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">40</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">11</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Canada</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">24</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">12</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Brazil</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">21</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">13</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">New Zealand</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">14</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Cuba</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">15</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">15</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Hungary</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">16</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">South Korea</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">20</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">17</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Poland</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">14</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="Number">18</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Czech Republic</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">19</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kenya</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">10</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">20</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Norway</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">21</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Jamaica</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">22</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Spain</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">17</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">23</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Sweden</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">24</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Switzerland</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">13</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">25</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Denmark</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">11</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">26</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Croatia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">27</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Iran</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">28</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Serbia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">29</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Belgium</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">30</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bulgaria</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">31</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Slovenia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">32</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Uzbekistan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">33</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Georgia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">34</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Chinese Taipei</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">35</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Turkey</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">9</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">13</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">36</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Greece</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">36</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Uganda</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">38</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ecuador</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">39</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ireland</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">39</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Israel</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">41</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Qatar</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">42</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bahamas</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">42</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kosovo</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">44</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ukraine</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">12</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">19</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">45</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Belarus</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">46</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Romania</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">46</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Venezuela</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">48</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">India</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">49</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Hong Kong</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">50</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Philippines</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">50</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Slovakia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">52</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">South Africa</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">53</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Austria</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">54</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Egypt</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">6</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">55</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Indonesia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">56</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ethiopia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">56</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Portugal</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">58</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Tunisia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Estonia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Fiji</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Latvia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">59</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Thailand</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">63</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bermuda</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">63</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Morocco</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">63</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Puerto Rico</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">66</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Colombia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">67</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Azerbaijan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">7</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="Number">68</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Dominican Republic</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">5</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">69</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Armenia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">70</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kyrgyzstan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">71</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Mongolia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">72</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Argentina</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">72</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">San Marino</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">3</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">74</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Jordan</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">74</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Malaysia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">74</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Nigeria</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Bahrain</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Lithuania</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Namibia</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">North Macedonia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Saudi Arabia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">77</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Turkmenistan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">83</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kazakhstan</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">8</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">84</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Mexico</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">4</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">85</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Finland</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">2</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Botswana</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Burkina Faso</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ghana</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Grenada</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Ivory Coast</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Kuwait</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Moldova</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="Number">86</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">Syria</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">0</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="Number">1</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + </Row> + </Table> + <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> + <PageSetup> + <Header x:Margin="0.3"/> + <Footer x:Margin="0.3"/> + <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/> + </PageSetup> + <Unsynced/> + <FilterOn/> + <Panes> + <Pane> + <Number>3</Number> + <ActiveRow>106</ActiveRow> + <ActiveCol>6</ActiveCol> + </Pane> + </Panes> + <ProtectObjects>False</ProtectObjects> + <ProtectScenarios>False</ProtectScenarios> + </WorksheetOptions> + <AutoFilter x:Range="R3C2:R96C7" + xmlns="urn:schemas-microsoft-com:office:excel"> + <AutoFilterColumn x:Index="2" x:Type="Custom"> + <AutoFilterCondition x:Operator="Equals" x:Value="*lic"/> + </AutoFilterColumn> + </AutoFilter> + </Worksheet> + <Worksheet ss:Name="Contains"> + <Names> + <NamedRange ss:Name="_FilterDatabase" ss:RefersTo="=Contains!R4C2:R18C5" + ss:Hidden="1"/> + </Names> + <Table ss:ExpandedColumnCount="5" ss:ExpandedRowCount="18" x:FullColumns="1" + x:FullRows="1" ss:DefaultRowHeight="15"> + <Column ss:Index="2" ss:AutoFitWidth="0" ss:Width="98.25"/> + <Column ss:AutoFitWidth="0" ss:Width="42.75"/> + <Column ss:AutoFitWidth="0" ss:Width="71.25"/> + <Column ss:AutoFitWidth="0" ss:Width="78.75"/> + <Row ss:AutoFitHeight="0"/> + <Row ss:Index="3" ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">CDP containing 'ing'.</Data></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">CDPs</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">ST</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">2020 Census</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">2010 Census</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Arlington</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">VA</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">238643</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">207627</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Enterprise</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">221831</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">108481</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Spring Valley</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">215597</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">178395</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Sunrise Manor</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">205618</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">189372</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Paradise</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">191238</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">223167</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Metairie</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">LA</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">143507</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">138481</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">East Los Angeles</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">CA</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">118786</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">126496</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Brandon</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">114626</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">103483</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">The Woodlands</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">TX</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">114436</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">93847</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Lehigh Acres</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">114287</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">86784</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Spring Hill</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">113568</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">98621</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Riverview</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">107396</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">71050</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Columbia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">MD</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">104681</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">99615</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Highlands Ranch</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">CO</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">103444</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">96713</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + </Table> + <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> + <PageSetup> + <Header x:Margin="0.3"/> + <Footer x:Margin="0.3"/> + <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/> + </PageSetup> + <Unsynced/> + <FilterOn/> + <Panes> + <Pane> + <Number>3</Number> + <ActiveRow>2</ActiveRow> + <ActiveCol>1</ActiveCol> + </Pane> + </Panes> + <ProtectObjects>False</ProtectObjects> + <ProtectScenarios>False</ProtectScenarios> + </WorksheetOptions> + <AutoFilter x:Range="R4C2:R18C5" + xmlns="urn:schemas-microsoft-com:office:excel"> + <AutoFilterColumn x:Type="Custom"> + <AutoFilterCondition x:Operator="Equals" x:Value="*ing*"/> + </AutoFilterColumn> + </AutoFilter> + </Worksheet> + <Worksheet ss:Name="Does Not Contain"> + <Names> + <NamedRange ss:Name="_FilterDatabase" + ss:RefersTo="='Does Not Contain'!R4C2:R18C5" ss:Hidden="1"/> + </Names> + <Table ss:ExpandedColumnCount="5" ss:ExpandedRowCount="18" x:FullColumns="1" + x:FullRows="1" ss:DefaultRowHeight="15"> + <Column ss:Index="2" ss:AutoFitWidth="0" ss:Width="98.25"/> + <Column ss:AutoFitWidth="0" ss:Width="42.75"/> + <Column ss:AutoFitWidth="0" ss:Width="71.25"/> + <Column ss:AutoFitWidth="0" ss:Width="78.75"/> + <Row ss:AutoFitHeight="0"/> + <Row ss:Index="3" ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">CDPs not containing 'an'.</Data></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">CDPs</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">ST</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">2020 Census</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">2010 Census</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Arlington</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">VA</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">238643</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">207627</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Enterprise</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">221831</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">108481</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Spring Valley</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">215597</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">178395</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Sunrise Manor</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">205618</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">189372</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Paradise</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">NV</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">191238</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">223167</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Metairie</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">LA</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">143507</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">138481</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">East Los Angeles</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">CA</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">118786</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">126496</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Brandon</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">114626</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">103483</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">The Woodlands</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">TX</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">114436</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">93847</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Lehigh Acres</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">114287</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">86784</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Spring Hill</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">113568</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">98621</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Riverview</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">FL</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">107396</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">71050</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0"> + <Cell ss:Index="2"><Data ss:Type="String">Columbia</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">MD</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">104681</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">99615</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + <Row ss:AutoFitHeight="0" ss:Hidden="1"> + <Cell ss:Index="2"><Data ss:Type="String">Highlands Ranch</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell><Data ss:Type="String">CO</Data><NamedCell ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">103444</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + <Cell ss:StyleID="s62"><Data ss:Type="Number">96713</Data><NamedCell + ss:Name="_FilterDatabase"/></Cell> + </Row> + </Table> + <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> + <PageSetup> + <Header x:Margin="0.3"/> + <Footer x:Margin="0.3"/> + <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/> + </PageSetup> + <Unsynced/> + <FilterOn/> + <Panes> + <Pane> + <Number>3</Number> + <ActiveRow>25</ActiveRow> + <ActiveCol>4</ActiveCol> + </Pane> + </Panes> + <ProtectObjects>False</ProtectObjects> + <ProtectScenarios>False</ProtectScenarios> + </WorksheetOptions> + <AutoFilter x:Range="R4C2:R18C5" + xmlns="urn:schemas-microsoft-com:office:excel"> + <AutoFilterColumn x:Type="Custom"> + <AutoFilterCondition x:Operator="DoesNotEqual" x:Value="*an*"/> + </AutoFilterColumn> + </AutoFilter> + </Worksheet> +</Workbook> diff --git a/sc/qa/unit/data/xml/tdf154311.xml b/sc/qa/unit/data/xml/tdf154311.xml new file mode 100644 index 000000000000..7c044e12010a --- /dev/null +++ b/sc/qa/unit/data/xml/tdf154311.xml @@ -0,0 +1,252 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?mso-application progid="Excel.Sheet"?> +<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> + <Styles> + <Style ss:ID="Default" ss:Name="Normal"> + <Alignment ss:Vertical="Bottom"/> + <Borders/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + <Interior/> + <NumberFormat/> + <Protection/> + </Style> + <Style ss:ID="sDateTime"> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + <NumberFormat ss:Format="m/d/yy\ h:mm;@"/> + </Style> + <Style ss:ID="sHeader1"> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="14" ss:Bold="1"/> + </Style> + <Style ss:ID="sHeader2"> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8" ss:Bold="1"/> + </Style> + <Style ss:ID="sHeader3"> + <Alignment ss:Vertical="Center"/> + <Borders> + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/> + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/> + <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/> + </Borders> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8" ss:Color="#FFFFFF" ss:Bold="1"/> + <Interior ss:Color="#333399" ss:Pattern="Solid"/> + <NumberFormat ss:Format="@"/> + </Style> + <Style ss:ID="sIndent0"> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent1"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="1"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent2"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="2"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent3"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="3"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent4"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="4"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent5"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="5"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent6"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="6"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent7"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="7"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent8"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="8"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent9"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="9"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent10"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="10"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent11"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="11"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent12"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="12"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent13"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="13"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent14"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="14"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + <Style ss:ID="sIndent15"> + <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:Indent="15"/> + <Font ss:FontName="Tahoma" x:CharSet="204" x:Family="Swiss" ss:Size="8"/> + </Style> + </Styles> + <Worksheet ss:Name="MLO"> + <Table x:FullColumns="1" x:FullRows="1"> + <Column ss:Width="18.75"/> + <Column ss:Width="72.75"/> + <Column ss:Width="311.25"/> + <Column ss:Width="60.75" ss:StyleID="sDateTime"/> + <Column ss:Width="55.5" ss:StyleID="sDateTime"/> + <Column ss:Width="66"/> + <Column ss:Width="50"/> + <Column ss:Width="63"/> + <Column ss:Width="75"/> + <Column ss:Width="53.25"/> + <Column ss:Width="52.5" ss:StyleID="sDateTime"/> + <Column ss:Width="53.25" ss:StyleID="sDateTime"/> + <Column ss:Width="63" ss:StyleID="sDateTime"/> + <Column ss:Width="48.75"/> + <Column ss:Width="52.5"/> + <Column ss:Width="36"/> + <Column ss:Width="58.5"/> + <Column ss:Width="81"/> + <Column ss:Width="78"/> + <Column ss:Width="63"/> + <Column ss:Width="93.75"/> + <Column ss:Width="96.75"/> + <Column ss:Width="69.75"/> + <Column ss:Width="136.5"/> + <Column ss:Width="74.25"/> + <Column ss:Width="134.25"/> + <Row ss:AutoFitHeight="0" ss:Height="24.75"> + <Cell ss:Index="2" ss:StyleID="sHeader1"><Data ss:Type="String">MyLife Organized Excel Export File</Data></Cell> + </Row> + <Row ss:Index="3"> + <Cell ss:Index="3" ss:StyleID="sHeader2"><Data ss:Type="String">File name:</Data></Cell> + <Cell><Data ss:Type="String">D:\Donnees\x2002063\Mes documents\MyLifeOrganized\MyLifeOrganizedDemo.ml</Data></Cell> + </Row> + <Row> + <Cell ss:Index="3" ss:StyleID="sHeader2"><Data ss:Type="String">Export time:</Data></Cell> + <Cell><Data ss:Type="String">22/10/2007 11:31:17</Data></Cell> + </Row> + <Row> + <Cell ss:Index="3" ss:StyleID="sHeader2"/> + </Row> + <Row> + <Cell ss:Index="3" ss:StyleID="sHeader2"><Data ss:Type="String">Number of tasks:</Data></Cell> + <Cell><Data ss:Type="String">73</Data></Cell> + </Row> + <Row> + <Cell ss:Index="3" ss:StyleID="sHeader2"><Data ss:Type="String">Number of completed tasks:</Data></Cell> + <Cell><Data ss:Type="String">15</Data></Cell> + </Row> + <Row> + <Cell ss:Index="3" ss:StyleID="sHeader2"><Data ss:Type="String">Number of projects:</Data></Cell> + <Cell><Data ss:Type="String">7</Data></Cell> + </Row> + <Row> + <Cell ss:Index="3" ss:StyleID="sHeader2"><Data ss:Type="String">Total time required (min/max)</Data></Cell> + <Cell><Data ss:Type="String">513 hours, 25 min / 879 hours, 13 min</Data></Cell> + </Row> + <Row ss:Index="11" ss:AutoFitHeight="0" ss:Height="10.5" ss:StyleID="sHeader3"> + <Cell ss:Index="2"><Data ss:Type="String">Is completed</Data></Cell> + <Cell><Data ss:Type="String">Task name</Data></Cell> + <Cell><Data ss:Type="String">Start time</Data></Cell> + <Cell><Data ss:Type="String">Due time</Data></Cell> + <Cell><Data ss:Type="String">Recurrence</Data></Cell> + <Cell><Data ss:Type="String">Places</Data></Cell> + <Cell><Data ss:Type="String">Notes</Data></Cell> + <Cell><Data ss:Type="String">Outlined task name</Data></Cell> + <Cell><Data ss:Type="String">Full path</Data></Cell> + <Cell><Data ss:Type="String">Created</Data></Cell> + <Cell><Data ss:Type="String">Modified</Data></Cell> + <Cell><Data ss:Type="String">Completed</Data></Cell> + <Cell><Data ss:Type="String">Importance</Data></Cell> + <Cell><Data ss:Type="String">Urgency</Data></Cell> + <Cell><Data ss:Type="String">Goal</Data></Cell> + <Cell><Data ss:Type="String">Project (immediate)</Data></Cell> + <Cell><Data ss:Type="String">Project (top level)</Data></Cell> + <Cell><Data ss:Type="String">Is project</Data></Cell> + <Cell><Data ss:Type="String">Project Status </Data></Cell> + <Cell><Data ss:Type="String">Project Completion %</Data></Cell> + <Cell><Data ss:Type="String">Task Effort</Data></Cell> + <Cell><Data ss:Type="String">Min time required</Data></Cell> + <Cell><Data ss:Type="String">Max time required</Data></Cell> + <Cell><Data ss:Type="String">Hide in To-Do</Data></Cell> + <Cell><Data ss:Type="String">Complete subtasks in order</Data></Cell> + <Cell><Data ss:Type="String">Has subtasks</Data></Cell> + <Cell><Data ss:Type="String">Has uncompleted subtasks</Data></Cell> + <Cell><Data ss:Type="String">Priority By Importance</Data></Cell> + <Cell><Data ss:Type="String">Priority By Urgency</Data></Cell> + <Cell><Data ss:Type="String">Priority By Both</Data></Cell> + </Row> + <Row> + <Cell ss:Index="2"/> + <Cell> + <Data ss:Type="String">Business and Career</Data> + </Cell> + <Cell/> + <Cell/> + <Cell/> + <Cell> + <Data ss:Type="String">@Office</Data> + </Cell> + <Cell/> + <Cell ss:StyleID="sIndent0"> + <Data ss:Type="String">Business and Career</Data> + </Cell> + <Cell> + <Data ss:Type="String">\</Data> + </Cell> + <Cell> + <Data ss:Type="DateTime">2007-10-22T11:27:38</Data> + </Cell> + <Cell> + <Data ss:Type="DateTime">2007-10-22T11:27:38</Data> + </Cell> + <Cell/> + <Cell> + <Data ss:Type="Number">75</Data> + </Cell> + <Cell> + <Data ss:Type="Number">100</Data> + </Cell> + <Cell/> + <Cell/> + <Cell/> + <Cell/> + <Cell/> + <Cell/> + <Cell> + <Data ss:Type="Number">50</Data> + </Cell> + <Cell/> + <Cell/> + <Cell/> + <Cell/> + <Cell> + <Data ss:Type="String">+</Data> + </Cell> + <Cell> + <Data ss:Type="String">+</Data> + </Cell> + <Cell> + <Data ss:Type="Number">0</Data> + </Cell> + <Cell> + <Data ss:Type="Number">0</Data> + </Cell> + <Cell> + <Data ss:Type="Number">0</Data> + </Cell> + </Row> + </Table> + <AutoFilter x:Range="R11C1:R12C25" xmlns="urn:schemas-microsoft-com:office:excel"> + </AutoFilter> + </Worksheet> +</Workbook> diff --git a/sc/qa/unit/helper/qahelper.cxx b/sc/qa/unit/helper/qahelper.cxx index b58bee67cb88..4034ab23e188 100644 --- a/sc/qa/unit/helper/qahelper.cxx +++ b/sc/qa/unit/helper/qahelper.cxx @@ -69,13 +69,13 @@ FormulaGrammarSwitch::~FormulaGrammarSwitch() // calc data structure pretty printer std::ostream& operator<<(std::ostream& rStrm, const ScAddress& rAddr) { - rStrm << "Col: " << rAddr.Col() << " Row: " << rAddr.Row() << " Tab: " << rAddr.Tab() << "\n"; + rStrm << "(Col: " << rAddr.Col() << "; Row: " << rAddr.Row() << "; Tab: " << rAddr.Tab() << ")"; return rStrm; } std::ostream& operator<<(std::ostream& rStrm, const ScRange& rRange) { - rStrm << "ScRange: " << rRange.aStart << rRange.aEnd << "\n"; + rStrm << rRange.aStart << "-" << rRange.aEnd; return rStrm; } @@ -93,6 +93,16 @@ std::ostream& operator<<(std::ostream& rStrm, const OpCode& rCode) return rStrm; } +namespace svl { + +std::ostream& operator<<(std::ostream& rStrm, const SharedString& rStr) +{ + rStrm << "(s='" << rStr.getString() << "'; ics='" << rStr.getIgnoreCaseString() << "')"; + return rStrm; +} + +} + void ScModelTestBase::loadFile(const OUString& aFileName, std::string& aContent) { OString aOFileName = OUStringToOString(aFileName, RTL_TEXTENCODING_UTF8); @@ -188,10 +198,10 @@ void ScModelTestBase::testFormats(ScDocument* pDoc,std::u16string_view sFormat) CPPUNIT_ASSERT_EQUAL_MESSAGE("font size should be 12", tools::Long(240), aFont.GetFontSize().getHeight()); pPattern = pDoc->GetPattern(0,2,1); pPattern->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be italic", ITALIC_NORMAL, aFont.GetItalic()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be italic", ITALIC_NORMAL, aFont.GetItalicMaybeAskConfig()); pPattern = pDoc->GetPattern(0,4,1); pPattern->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeightMaybeAskConfig()); pPattern = pDoc->GetPattern(1,0,1); pPattern->fillFontOnly(aFont); pPattern->fillColor(aComplexColor, ScAutoFontColorMode::Raw); diff --git a/sc/qa/unit/helper/qahelper.hxx b/sc/qa/unit/helper/qahelper.hxx index a2d46916a521..2cf040f44be3 100644 --- a/sc/qa/unit/helper/qahelper.hxx +++ b/sc/qa/unit/helper/qahelper.hxx @@ -76,6 +76,12 @@ SCQAHELPER_DLLPUBLIC std::ostream& operator<<(std::ostream& rStrm, const ScRange SCQAHELPER_DLLPUBLIC std::ostream& operator<<(std::ostream& rStrm, const OpCode& rCode); +namespace svl { + +SCQAHELPER_DLLPUBLIC std::ostream& operator<<(std::ostream& rStrm, const SharedString& rStr); + +} + SCQAHELPER_DLLPUBLIC bool checkOutput( const ScDocument* pDoc, const ScRange& aOutRange, const std::vector<std::vector<const char*>>& aCheck, const char* pCaption ); diff --git a/sc/qa/unit/helper/sctestviewcallback.cxx b/sc/qa/unit/helper/sctestviewcallback.cxx new file mode 100644 index 000000000000..f590c79879cf --- /dev/null +++ b/sc/qa/unit/helper/sctestviewcallback.cxx @@ -0,0 +1,360 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "sctestviewcallback.hxx" + +#include <boost/property_tree/json_parser.hpp> + +#include <LibreOfficeKit/LibreOfficeKitEnums.h> +#include <comphelper/lok.hxx> +#include <comphelper/string.hxx> +#include <test/unoapixml_test.hxx> +#include <sfx2/viewsh.hxx> +#include <sfx2/lokhelper.hxx> + +using namespace com::sun::star; + +void ScTestEditCursorMessage::clear() +{ + m_aRelRect.SetEmpty(); + m_aRefPoint = Point(-1, -1); +} + +bool ScTestEditCursorMessage::empty() +{ + return m_aRelRect.IsEmpty() && m_aRefPoint.X() == -1 && m_aRefPoint.Y() == -1; +} + +void ScTestEditCursorMessage::parseMessage(const char* pMessage) +{ + clear(); + if (!pMessage + || !comphelper::LibreOfficeKit::isCompatFlagSet( + comphelper::LibreOfficeKit::Compat::scPrintTwipsMsgs) + || !comphelper::LibreOfficeKit::isViewIdForVisCursorInvalidation()) + return; + + std::stringstream aStream(pMessage); + boost::property_tree::ptree aTree; + boost::property_tree::read_json(aStream, aTree); + std::string aVal; + boost::property_tree::ptree::const_assoc_iterator it = aTree.find("refpoint"); + if (it != aTree.not_found()) + aVal = aTree.get_child("refpoint").get_value<std::string>(); + else + return; // happens in testTextBoxInsert test + + uno::Sequence<OUString> aSeq + = comphelper::string::convertCommaSeparated(OUString::createFromAscii(aVal)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aSeq.getLength()); + m_aRefPoint.setX(aSeq[0].toInt32()); + m_aRefPoint.setY(aSeq[1].toInt32()); + + aVal = aTree.get_child("relrect").get_value<std::string>(); + aSeq = comphelper::string::convertCommaSeparated(OUString::createFromAscii(aVal)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), aSeq.getLength()); + m_aRelRect.SetLeft(aSeq[0].toInt32()); + m_aRelRect.SetTop(aSeq[1].toInt32()); + m_aRelRect.setWidth(aSeq[2].toInt32()); + m_aRelRect.setHeight(aSeq[3].toInt32()); +} + +tools::Rectangle ScTestEditCursorMessage::getBounds() +{ + tools::Rectangle aBounds = m_aRelRect; + aBounds.Move(m_aRefPoint.X(), m_aRefPoint.Y()); + return aBounds; +} + +void ScTestTextSelectionMessage::clear() +{ + m_aRefPoint.setX(0); + m_aRefPoint.setY(0); + m_aRelRects.clear(); +} + +bool ScTestTextSelectionMessage::empty() { return m_aRelRects.empty(); } + +void ScTestTextSelectionMessage::parseMessage(const char* pMessage) +{ + clear(); + if (!pMessage) + return; + + std::string aStr(pMessage); + if (aStr.find(",") == std::string::npos) + return; + + size_t nRefDelimStart = aStr.find("::"); + std::string aRectListString + = (nRefDelimStart == std::string::npos) ? aStr : aStr.substr(0, nRefDelimStart); + std::string aRefPointString + = (nRefDelimStart == std::string::npos) + ? std::string("0, 0") + : aStr.substr(nRefDelimStart + 2, aStr.length() - 2 - nRefDelimStart); + uno::Sequence<OUString> aSeq + = comphelper::string::convertCommaSeparated(OUString::createFromAscii(aRefPointString)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aSeq.getLength()); + m_aRefPoint.setX(aSeq[0].toInt32()); + m_aRefPoint.setY(aSeq[1].toInt32()); + + size_t nStart = 0; + size_t nEnd = aRectListString.find(";"); + if (nEnd == std::string::npos) + nEnd = aRectListString.length(); + do + { + std::string aRectString = aRectListString.substr(nStart, nEnd - nStart); + { + aSeq + = comphelper::string::convertCommaSeparated(OUString::createFromAscii(aRectString)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(4), aSeq.getLength()); + tools::Rectangle aRect; + aRect.SetLeft(aSeq[0].toInt32()); + aRect.SetTop(aSeq[1].toInt32()); + aRect.setWidth(aSeq[2].toInt32()); + aRect.setHeight(aSeq[3].toInt32()); + + m_aRelRects.push_back(aRect); + } + + nStart = nEnd + 1; + nEnd = aRectListString.find(";", nStart); + } while (nEnd != std::string::npos); +} + +tools::Rectangle ScTestTextSelectionMessage::getBounds(size_t nIndex) +{ + if (nIndex >= m_aRelRects.size()) + return tools::Rectangle(); + + tools::Rectangle aBounds = m_aRelRects[nIndex]; + aBounds.Move(m_aRefPoint.X(), m_aRefPoint.Y()); + return aBounds; +} + +ScTestViewCallback::ScTestViewCallback(bool bDeleteListenerOnDestruct) + : m_bOwnCursorInvalidated(false) + , m_bViewCursorInvalidated(false) + , m_textCursorVisible(false) + , m_bTextViewSelectionInvalidated(false) + , m_bGraphicSelection(false) + , m_bGraphicViewSelection(false) + , m_bFullInvalidateTiles(false) + , m_bInvalidateTiles(false) + , m_bViewLock(false) + , m_callbackWrapper(&callback, this) +{ + mpViewShell = SfxViewShell::Current(); + mpViewShell->setLibreOfficeKitViewCallback(&m_callbackWrapper); + mnView = SfxLokHelper::getView(); + m_callbackWrapper.setLOKViewId(mnView); + if (!bDeleteListenerOnDestruct) + mpViewShell = nullptr; +} + +ScTestViewCallback::~ScTestViewCallback() +{ + if (mpViewShell) + { + SfxLokHelper::setView(mnView); + mpViewShell->setLibreOfficeKitViewCallback(nullptr); + } +} + +void ScTestViewCallback::callback(int nType, const char* pPayload, void* pData) +{ + static_cast<ScTestViewCallback*>(pData)->callbackImpl(nType, pPayload); +} + +void ScTestViewCallback::callbackImpl(int nType, const char* pPayload) +{ + switch (nType) + { + case LOK_CALLBACK_VIEW_CURSOR_VISIBLE: + { + boost::property_tree::ptree aTree; + std::stringstream aStream(pPayload); + boost::property_tree::read_json(aStream, aTree); + m_textCursorVisible = aTree.get_child("visible").get_value<std::string>() == "true"; + } + break; + case LOK_CALLBACK_CELL_CURSOR: + { + m_bOwnCursorInvalidated = true; + uno::Sequence<OUString> aSeq + = comphelper::string::convertCommaSeparated(OUString::createFromAscii(pPayload)); + m_aCellCursorBounds = tools::Rectangle(); + if (aSeq.getLength() == 6) + { + m_aCellCursorBounds.SetLeft(aSeq[0].toInt32()); + m_aCellCursorBounds.SetTop(aSeq[1].toInt32()); + m_aCellCursorBounds.setWidth(aSeq[2].toInt32()); + m_aCellCursorBounds.setHeight(aSeq[3].toInt32()); + } + } + break; + case LOK_CALLBACK_CELL_VIEW_CURSOR: + { + m_bViewCursorInvalidated = true; + } + break; + case LOK_CALLBACK_TEXT_VIEW_SELECTION: + { + m_bTextViewSelectionInvalidated = true; + } + break; + case LOK_CALLBACK_VIEW_LOCK: + { + std::stringstream aStream(pPayload); + boost::property_tree::ptree aTree; + boost::property_tree::read_json(aStream, aTree); + m_bViewLock = aTree.get_child("rectangle").get_value<std::string>() != "EMPTY"; + } + break; + case LOK_CALLBACK_GRAPHIC_SELECTION: + { + m_bGraphicSelection = true; + m_ShapeSelection = OString(pPayload); + } + break; + case LOK_CALLBACK_GRAPHIC_VIEW_SELECTION: + { + m_bGraphicViewSelection = true; + } + break; + case LOK_CALLBACK_INVALIDATE_TILES: + { + OString text(pPayload); + if (text.startsWith("EMPTY")) + { + m_bFullInvalidateTiles = true; + } + else + { + uno::Sequence<OUString> aSeq = comphelper::string::convertCommaSeparated( + OUString::createFromAscii(pPayload)); + CPPUNIT_ASSERT(aSeq.getLength() == 4 || aSeq.getLength() == 6); + tools::Rectangle aInvalidationRect; + aInvalidationRect.SetLeft(aSeq[0].toInt32()); + aInvalidationRect.SetTop(aSeq[1].toInt32()); + aInvalidationRect.setWidth(aSeq[2].toInt32()); + aInvalidationRect.setHeight(aSeq[3].toInt32()); + m_aInvalidations.push_back(aInvalidationRect); + if (aSeq.getLength() == 6) + { + m_aInvalidationsParts.push_back(aSeq[4].toInt32()); + m_aInvalidationsMode.push_back(aSeq[5].toInt32()); + } + m_bInvalidateTiles = true; + } + } + break; + case LOK_CALLBACK_CELL_FORMULA: + { + m_sCellFormula = pPayload; + } + break; + case LOK_CALLBACK_COMMENT: + { + m_aCommentCallbackResult.clear(); + std::stringstream aStream(pPayload); + boost::property_tree::read_json(aStream, m_aCommentCallbackResult); + m_aCommentCallbackResult = m_aCommentCallbackResult.get_child("comment"); + } + break; + case LOK_CALLBACK_INVALIDATE_HEADER: + { + m_sInvalidateHeader = pPayload; + } + break; + case LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY: + { + m_sInvalidateSheetGeometry = pPayload; + } + break; + case LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR: + { + m_aInvalidateCursorResult.parseMessage(pPayload); + } + break; + case LOK_CALLBACK_HYPERLINK_CLICKED: + { + m_aHyperlinkClicked = pPayload; + } + break; + case LOK_CALLBACK_TEXT_SELECTION: + { + m_aTextSelectionResult.parseMessage(pPayload); + } + break; + case LOK_CALLBACK_STATE_CHANGED: + { + std::stringstream aStream(pPayload); + boost::property_tree::ptree aTree; + std::string aCommandName; + + if (aStream.str().starts_with("{")) + { + boost::property_tree::read_json(aStream, aTree); + auto it = aTree.find("commandName"); + if (it == aTree.not_found()) + { + break; + } + + aCommandName = it->second.get_value<std::string>(); + } + else + { + std::string aState = aStream.str(); + auto it = aState.find("="); + if (it == std::string::npos) + { + break; + } + aCommandName = aState.substr(0, it); + aTree.put("state", aState.substr(it + 1)); + } + + m_aStateChanges[aCommandName] = aTree; + } + break; + case LOK_CALLBACK_JSDIALOG: + { + std::stringstream aStream(pPayload); + boost::property_tree::ptree aTree; + boost::property_tree::read_json(aStream, aTree); + if (aTree.get_child("jsontype").get_value<std::string>() == "formulabar") + { + if (aTree.find("data") != aTree.not_found()) + { + if (aTree.get_child("data").find("separator") + != aTree.get_child("data").not_found()) + { + decimalSeparator = aTree.get_child("data") + .get_child("separator") + .get_value<std::string>(); + } + } + } + } + break; + } +} + +void ScTestViewCallback::ClearAllInvalids() +{ + m_bInvalidateTiles = false; + m_aInvalidations.clear(); + m_aInvalidationsParts.clear(); + m_aInvalidationsMode.clear(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/helper/sctestviewcallback.hxx b/sc/qa/unit/helper/sctestviewcallback.hxx new file mode 100644 index 000000000000..a5452a1f8f3e --- /dev/null +++ b/sc/qa/unit/helper/sctestviewcallback.hxx @@ -0,0 +1,94 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <map> + +#include <boost/property_tree/ptree.hpp> + +#include <tools/gen.hxx> +#include <rtl/string.hxx> +#include <test/lokcallback.hxx> + +#include "scqahelperdllapi.h" + +class SfxViewShell; + +struct SCQAHELPER_DLLPUBLIC ScTestEditCursorMessage final +{ + tools::Rectangle m_aRelRect; + Point m_aRefPoint; + + void clear(); + + bool empty(); + + void parseMessage(const char* pMessage); + + tools::Rectangle getBounds(); +}; + +struct SCQAHELPER_DLLPUBLIC ScTestTextSelectionMessage +{ + std::vector<tools::Rectangle> m_aRelRects; + Point m_aRefPoint; + + void clear(); + + bool empty(); + + void parseMessage(const char* pMessage); + + tools::Rectangle getBounds(size_t nIndex); +}; +/// A view callback tracks callbacks invoked on one specific view. +class SCQAHELPER_DLLPUBLIC ScTestViewCallback final +{ + SfxViewShell* mpViewShell; + int mnView; + +public: + bool m_bOwnCursorInvalidated; + bool m_bViewCursorInvalidated; + bool m_textCursorVisible; + bool m_bTextViewSelectionInvalidated; + bool m_bGraphicSelection; + bool m_bGraphicViewSelection; + bool m_bFullInvalidateTiles; + bool m_bInvalidateTiles; + std::vector<tools::Rectangle> m_aInvalidations; + tools::Rectangle m_aCellCursorBounds; + std::vector<int> m_aInvalidationsParts; + std::vector<int> m_aInvalidationsMode; + bool m_bViewLock; + OString m_sCellFormula; + boost::property_tree::ptree m_aCommentCallbackResult; + ScTestEditCursorMessage m_aInvalidateCursorResult; + ScTestTextSelectionMessage m_aTextSelectionResult; + OString m_sInvalidateHeader; + OString m_sInvalidateSheetGeometry; + OString m_aHyperlinkClicked; + OString m_ShapeSelection; + std::map<std::string, boost::property_tree::ptree> m_aStateChanges; + std::string decimalSeparator; + TestLokCallbackWrapper m_callbackWrapper; + + ScTestViewCallback(bool bDeleteListenerOnDestruct = true); + + ~ScTestViewCallback(); + + static void callback(int nType, const char* pPayload, void* pData); + + void callbackImpl(int nType, const char* pPayload); + + void ClearAllInvalids(); +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/helper/sctiledrenderingtest.cxx b/sc/qa/unit/helper/sctiledrenderingtest.cxx new file mode 100644 index 000000000000..7d835209dd9b --- /dev/null +++ b/sc/qa/unit/helper/sctiledrenderingtest.cxx @@ -0,0 +1,171 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "sctiledrenderingtest.hxx" + +#include <LibreOfficeKit/LibreOfficeKitEnums.h> +#include <comphelper/lok.hxx> +#include <comphelper/servicehelper.hxx> +#include <sfx2/lokhelper.hxx> +#include <vcl/scheduler.hxx> + +#include <docuno.hxx> +#include <tabvwsh.hxx> + +#include "sctestviewcallback.hxx" + +using namespace com::sun::star; + +ScTiledRenderingTest::ScTiledRenderingTest() + : UnoApiXmlTest(u"/sc/qa/unit/tiledrendering/data/"_ustr) + , m_callbackWrapper(&callback, this) +{ +} + +void ScTiledRenderingTest::setUp() +{ + UnoApiXmlTest::setUp(); + + comphelper::LibreOfficeKit::setActive(true); +} + +void ScTiledRenderingTest::tearDown() +{ + if (mxComponent.is()) + { + mxComponent->dispose(); + mxComponent.clear(); + } + + m_callbackWrapper.clear(); + + comphelper::LibreOfficeKit::resetCompatFlag(); + + comphelper::LibreOfficeKit::setActive(false); + + UnoApiXmlTest::tearDown(); +} + +ScModelObj* ScTiledRenderingTest::createDoc(const char* pName) +{ + loadFromFile(OUString::createFromAscii(pName)); + + ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent); + CPPUNIT_ASSERT(pModelObj); + pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); + return pModelObj; +} + +void ScTiledRenderingTest::setupLibreOfficeKitViewCallback(SfxViewShell* pViewShell) +{ + pViewShell->setLibreOfficeKitViewCallback(&m_callbackWrapper); + m_callbackWrapper.setLOKViewId(SfxLokHelper::getView(pViewShell)); +} + +void ScTiledRenderingTest::callback(int nType, const char* pPayload, void* pData) +{ + static_cast<ScTiledRenderingTest*>(pData)->callbackImpl(nType, pPayload); +} + +void ScTiledRenderingTest::callbackImpl(int nType, const char* pPayload) +{ + switch (nType) + { + case LOK_CALLBACK_DOCUMENT_SIZE_CHANGED: + { + OString aPayload(pPayload); + sal_Int32 nIndex = 0; + OString aToken = aPayload.getToken(0, ',', nIndex); + m_aDocumentSize.setWidth(aToken.toInt32()); + aToken = aPayload.getToken(0, ',', nIndex); + m_aDocumentSize.setHeight(aToken.toInt32()); + m_aDocSizeCondition.set(); + } + break; + } +} + +void ScTiledRenderingTest::checkSampleInvalidation(const ScTestViewCallback& rView, bool bFullRow) +{ + // we expect invalidations, but that isn't really important + CPPUNIT_ASSERT(rView.m_bInvalidateTiles); + tools::Rectangle aInvalidation; + for (const auto& rRect : rView.m_aInvalidations) + aInvalidation.Union(rRect); + if (!bFullRow) + { + // What matters is that we expect that the invalidation does not extend all the + // way to the max right of the sheet. + // Here we originally got 32212306 and now ~5056 for a single cell case + CPPUNIT_ASSERT_LESSEQUAL(tools::Long(8000), aInvalidation.GetWidth()); + } + else + { + // We expect RTL to continue to invalidate the entire row + // from 0 to end of sheet (see ScDocShell::PostPaint, 'Extend to whole rows'), + // which is different to the adjusted LTR case which + // invalidated the row from left of edited cell to right of end + // of sheet. + CPPUNIT_ASSERT_LESSEQUAL(tools::Long(0), aInvalidation.Left()); + CPPUNIT_ASSERT_EQUAL(tools::Long(32212230), aInvalidation.Right()); + } +} + +void ScTiledRenderingTest::cellInvalidationHelper(ScModelObj* pModelObj, ScTabViewShell* pView, + const ScAddress& rAdr, bool bAddText, + bool bFullRow) +{ + // view + ScTestViewCallback aView; + + if (bAddText) + { + // Type "Hello World" in D8, process events to idle and don't commit yet + typeCharsInCell("Hello World", rAdr.Col(), rAdr.Row(), pView, pModelObj, false, false); + + aView.m_bInvalidateTiles = false; + aView.m_aInvalidations.clear(); + + // commit text and process events to idle + typeCharsInCell("", rAdr.Col(), rAdr.Row(), pView, pModelObj, true, true); + } + else // DeleteText + { + pView->SetCursor(rAdr.Col(), rAdr.Row()); + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::DELETE); + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::DELETE); + Scheduler::ProcessEventsToIdle(); + } + + checkSampleInvalidation(aView, bFullRow); +} + +void ScTiledRenderingTest::typeCharsInCell(const std::string& aStr, SCCOL nCol, SCROW nRow, + ScTabViewShell* pView, ScModelObj* pModelObj, + bool bInEdit, bool bCommit) +{ + if (!bInEdit) + pView->SetCursor(nCol, nRow); + + for (const char& cChar : aStr) + { + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, cChar, 0); + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, cChar, 0); + Scheduler::ProcessEventsToIdle(); + } + + if (bCommit) + { + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN); + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN); + Scheduler::ProcessEventsToIdle(); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/helper/sctiledrenderingtest.hxx b/sc/qa/unit/helper/sctiledrenderingtest.hxx new file mode 100644 index 000000000000..4bd7769e57a8 --- /dev/null +++ b/sc/qa/unit/helper/sctiledrenderingtest.hxx @@ -0,0 +1,53 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <test/unoapixml_test.hxx> + +#include <osl/conditn.hxx> +#include <test/lokcallback.hxx> + +#include <types.hxx> + +#include "scqahelperdllapi.h" + +class ScTestViewCallback; +class ScModelObj; +class ScTabViewShell; +class ScAddress; +class SfxViewShell; + +class SCQAHELPER_DLLPUBLIC ScTiledRenderingTest : public UnoApiXmlTest +{ +public: + ScTiledRenderingTest(); + virtual void setUp() override; + virtual void tearDown() override; + + void checkSampleInvalidation(const ScTestViewCallback& rView, bool bFullRow); + void cellInvalidationHelper(ScModelObj* pModelObj, ScTabViewShell* pView, const ScAddress& rAdr, + bool bAddText, bool bFullRow); + + ScModelObj* createDoc(const char* pName); + void setupLibreOfficeKitViewCallback(SfxViewShell* pViewShell); + static void callback(int nType, const char* pPayload, void* pData); + void callbackImpl(int nType, const char* pPayload); + + void typeCharsInCell(const std::string& aStr, SCCOL nCol, SCROW nRow, ScTabViewShell* pView, + ScModelObj* pModelObj, bool bInEdit = false, bool bCommit = true); + + /// document size changed callback. + osl::Condition m_aDocSizeCondition; + Size m_aDocumentSize; + + TestLokCallbackWrapper m_callbackWrapper; +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/pivottable_filters_test.cxx b/sc/qa/unit/pivottable_filters_test.cxx index 5bc3970d022c..1c17f569deec 100644 --- a/sc/qa/unit/pivottable_filters_test.cxx +++ b/sc/qa/unit/pivottable_filters_test.cxx @@ -125,6 +125,137 @@ CPPUNIT_TEST_FIXTURE(ScPivotTableFiltersTest, testPivotTableBasicODS) sal_uInt16(pDim->GetFunction())); } +CPPUNIT_TEST_FIXTURE(ScPivotTableFiltersTest, testTdf123225PivotTableRowColItems) +{ + createScDoc("ods/tdf123225_pivotTable_row_col_items.ods"); + save(u"Calc Office Open XML"_ustr); + + xmlDocUniquePtr pSheet = parseExport(u"xl/pivotTables/pivotTable1.xml"_ustr); + CPPUNIT_ASSERT(pSheet); + + /* + - be sure that we have <rowItems> and <colItems> element + under <pivotTableDefinition> after export of the .ods to .xlsx + + otherwise: + 1) Excel will fail to open the xlsx document, you will get an error message. + 2) Excel will open the file without any errors but: + 2.1) context menu -by right clicking on the pivot table- will have + less or more items than it should have after "refresh". + 2.2) if e.g. trying to sort the items you will get "Cannot determine + which PivotTable field to sort by" warning. + + - after exporting the .ods as .xlsx and opening the .xlsx document in Excel: + the count attribute of rowItems(or colItems) should have the expected value. + otherwise, context menu on the pivot table will have less/more items + than it should have after "refresh". we shouldn't need "refresh" to use all + functions/items in the context menu. + */ + + // Row items <rowItems> + + assertXPath(pSheet, "/x:pivotTableDefinition/x:rowItems", 1); + // check if <rowItems count="8"> + assertXPath(pSheet, "/x:pivotTableDefinition/x:rowItems", "count", u"8"); + // check if <rowItems> has enough <i> depending on count attribute value + assertXPath(pSheet, "/x:pivotTableDefinition/x:rowItems/x:i", 8); + // check if first <i> has single <x/> element + assertXPath(pSheet, "/x:pivotTableDefinition/x:rowItems/x:i[1]/x:x", 1); + // check if <x/> of the first <i> element, has v="0" attribute value + assertXPath(pSheet, "/x:pivotTableDefinition/x:rowItems/x:i[1]/x:x", "v", u"0"); + + // Column items <colItems> + + assertXPath(pSheet, "/x:pivotTableDefinition/x:colItems", 1); + // check if <colItems count="5"> + assertXPath(pSheet, "/x:pivotTableDefinition/x:colItems", "count", u"5"); + // check if <colItems> has enough <i> depending on count attribute value + assertXPath(pSheet, "/x:pivotTableDefinition/x:colItems/x:i", 5); + // check if first <i> has single <x/> element + assertXPath(pSheet, "/x:pivotTableDefinition/x:colItems/x:i[1]/x:x", 1); + // check if <x/> of the first <i> element, has v="0" attribute value + assertXPath(pSheet, "/x:pivotTableDefinition/x:colItems/x:i[1]/x:x", "v", u"0"); +} + +CPPUNIT_TEST_FIXTURE(ScPivotTableFiltersTest, testTdf123225PivotTableNoColItems) +{ + createScDoc("ods/tdf123225_pivotTable_no_col_items.ods"); + save(u"Calc Office Open XML"_ustr); + + xmlDocUniquePtr pSheet = parseExport(u"xl/pivotTables/pivotTable1.xml"_ustr); + CPPUNIT_ASSERT(pSheet); + + /* + - after exporting the .ods to .xlsx, we should have t="grand" in the + last <i> element of the <rowItems> and <colItems>. Otherwise, Excel will not + have all functions in the context menu of the pivot table. Especially for the + "Grand Total" column/row cells. + + - additionally, we should always export a single <rowItems> and <colItems> regardless of + whether the document has row/col items. Otherwise, in Excel, context menu on some + cells of the pivot table, will not have the expected context menu items. + + - this tdf123225_pivotTable_no_col_items.ods document does not have + axisCol (DataPilotFieldOrientation_COLUMN) and that means <colItems> should not exist + during export. But in Excel, if pivot table refreshed, there will be + + <colItems count="1"> + <i/> + </colItems> + + in the xl/pivotTables/pivotTable1.xml. So, that means we should export <colItems> + without checking the existence of it. + For the sake of completeness, <colItems> exported as: + + <colItems count="1"> + <i t="grand"> + <x v="0"/> + </i> + </colItems> + */ + + // Row items <rowItems> + + // check if <rowItems count="3"> + assertXPath(pSheet, "/x:pivotTableDefinition/x:rowItems", "count", u"3"); + // check if last <i> element, has t="grand" + assertXPath(pSheet, "/x:pivotTableDefinition/x:rowItems/x:i[last()]", "t", u"grand"); + + // Column items <colItems> + + // check if <colItems count="1"> + assertXPath(pSheet, "/x:pivotTableDefinition/x:colItems", "count", u"1"); + // check if <colItems> has only a single <i> element + assertXPath(pSheet, "/x:pivotTableDefinition/x:colItems/x:i", 1); + // check if <i> element has t="grand" + assertXPath(pSheet, "/x:pivotTableDefinition/x:colItems/x:i", "t", u"grand"); + // check if <i> has <x v="0"/> + assertXPath(pSheet, "/x:pivotTableDefinition/x:colItems/x:i/x:x", "v", u"0"); +} + +CPPUNIT_TEST_FIXTURE(ScPivotTableFiltersTest, testTdf123225PivotTableEmptyRowColItems) +{ + // this doc contains blank row/col items + // <sharedItems containsBlank="1" count="..."> (xl/pivotCache/pivotCacheDefinition1.xml) + createScDoc("ods/tdf123225_pivotTable_empty_row_col_items.ods"); + save(u"Calc Office Open XML"_ustr); + + xmlDocUniquePtr pSheet = parseExport(u"xl/pivotTables/pivotTable1.xml"_ustr); + CPPUNIT_ASSERT(pSheet); + + // Row items <rowItems> + + assertXPath(pSheet, "/x:pivotTableDefinition/x:rowItems", 1); + // check if <rowItems count="4"> + assertXPath(pSheet, "/x:pivotTableDefinition/x:rowItems", "count", u"4"); + + // Column items <colItems> + + assertXPath(pSheet, "/x:pivotTableDefinition/x:colItems", 1); + // check if <colItems count="5"> + assertXPath(pSheet, "/x:pivotTableDefinition/x:colItems", "count", u"5"); +} + CPPUNIT_TEST_FIXTURE(ScPivotTableFiltersTest, testPivotTableNamedRangeSourceODS) { createScDoc("ods/pivot-table-named-range-source.ods"); diff --git a/sc/qa/unit/subsequent_export_test2.cxx b/sc/qa/unit/subsequent_export_test2.cxx index ea9374da09ce..9ce4085ca313 100644 --- a/sc/qa/unit/subsequent_export_test2.cxx +++ b/sc/qa/unit/subsequent_export_test2.cxx @@ -50,6 +50,22 @@ CPPUNIT_TEST_FIXTURE(ScExportTest2, testGroupShape) assertXPath(pDoc, "/xdr:wsDr/xdr:twoCellAnchor/xdr:grpSp/xdr:grpSpPr"); } +CPPUNIT_TEST_FIXTURE(ScExportTest2, testFreezePaneStartCellXLSX) +{ + // given a hand-mangled document with a newly-invalid topLeftCell for the active pane + // where pane xSplit="5" ySplit="10" topLeftCell="A1" state="frozen" + + createScDoc("xlsx/freezePaneStartCell.xlsx"); + + save(u"Calc Office Open XML"_ustr); + + xmlDocUniquePtr pDoc = parseExport(u"xl/worksheets/sheet1.xml"_ustr); + OUString sFirstNonFrozenCell = getXPath(pDoc, "//x:sheetViews//x:pane", "topLeftCell"); + + // new versions of Excel complain if the start of the non-frozen section is inside the freeze + CPPUNIT_ASSERT_EQUAL(u"F11"_ustr, sFirstNonFrozenCell); +} + CPPUNIT_TEST_FIXTURE(ScExportTest2, testMatrixMultiplicationXLSX) { createScDoc("xlsx/matrix-multiplication.xlsx"); @@ -416,6 +432,19 @@ CPPUNIT_TEST_FIXTURE(ScExportTest2, testSortConditionRef) assertXPath(pDoc, "//x:worksheet/x:autoFilter/x:sortState/x:sortCondition", "ref", u"B3:B2"); } +CPPUNIT_TEST_FIXTURE(ScExportTest2, testSortConditionRef2) +{ + // Ascending sortCondition reference detected wrong without fix. + //- Expected: A11:A300 + //- Actual : J11:J300 + //- In <>, attribute 'ref' of '//x:worksheet/x:autoFilter/x:sortState/x:sortCondition' incorrect value. + createScDoc("xlsx/sortconditionref2.xlsx"); + save("Calc Office Open XML"); + xmlDocUniquePtr pDoc = parseExport("xl/worksheets/sheet1.xml"); + + assertXPath(pDoc, "//x:worksheet/x:autoFilter/x:sortState/x:sortCondition", "ref", u"A11:A300"); +} + CPPUNIT_TEST_FIXTURE(ScExportTest2, testDateAutofilterXLSX) { // XLSX Roundtripping autofilter with date list diff --git a/sc/qa/unit/subsequent_export_test4.cxx b/sc/qa/unit/subsequent_export_test4.cxx index 276201b79bb6..ef9d49c775da 100644 --- a/sc/qa/unit/subsequent_export_test4.cxx +++ b/sc/qa/unit/subsequent_export_test4.cxx @@ -187,6 +187,33 @@ CPPUNIT_TEST_FIXTURE(ScExportTest4, testTdf162948) verify(); } +CPPUNIT_TEST_FIXTURE(ScExportTest4, testTdf165383) +{ + auto verify = [this]() { + ScDocument* pDoc = getScDoc(); + CPPUNIT_ASSERT_EQUAL(size_t(1), pDoc->GetCondFormList(0)->size()); + + ScConditionalFormat* pFormat = pDoc->GetCondFormat(0, 0, 0); + CPPUNIT_ASSERT(pFormat); + + const ScFormatEntry* pEntry = pFormat->GetEntry(0); + CPPUNIT_ASSERT(pEntry); + CPPUNIT_ASSERT_EQUAL(ScFormatEntry::Type::Condition, pEntry->GetType()); + const ScConditionEntry* pConditionEntry = static_cast<const ScConditionEntry*>(pEntry); + CPPUNIT_ASSERT_EQUAL(ScConditionMode::Direct, pConditionEntry->GetOperation()); + // Without the fix in place, this test would have failed after the roundtrip with + // - Expected: SUM($A$1:A1) > 10 + // - Actual : SUM($A$1) > 10 + CPPUNIT_ASSERT_EQUAL(u"SUM($A$1:A1) > 10"_ustr, + pConditionEntry->GetExpression(ScAddress(0, 0, 0), 0)); + }; + + createScDoc("ods/tdf165383.ods"); + verify(); + saveAndReload(u"Calc Office Open XML"_ustr); + verify(); +} + CPPUNIT_TEST_FIXTURE(ScExportTest4, testCommentTextHAlignment) { // Testing comment text alignments. @@ -1553,13 +1580,15 @@ CPPUNIT_TEST_FIXTURE(ScExportTest4, testWholeRowBold) CPPUNIT_ASSERT_EQUAL(SCCOL(INITIALCOLCOUNT), pDoc->GetAllocatedColumnsCount(0)); vcl::Font aFont; pDoc->GetPattern(pDoc->MaxCol(), 1, 0)->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, + aFont.GetWeightMaybeAskConfig()); saveAndReload(u"Calc Office Open XML"_ustr); pDoc = getScDoc(); CPPUNIT_ASSERT_EQUAL(SCCOL(INITIALCOLCOUNT), pDoc->GetAllocatedColumnsCount(0)); pDoc->GetPattern(pDoc->MaxCol(), 1, 0)->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, + aFont.GetWeightMaybeAskConfig()); } CPPUNIT_TEST_FIXTURE(ScExportTest4, testXlsxRowsOrder) @@ -1597,11 +1626,15 @@ CPPUNIT_TEST_FIXTURE(ScExportTest4, testTdf148820) xmlDocUniquePtr pSheet = parseExport(u"xl/worksheets/sheet1.xml"_ustr); CPPUNIT_ASSERT(pSheet); + CPPUNIT_ASSERT_EQUAL(u"5"_ustr, + getXPathContent(pSheet, "count(/x:worksheet/x:conditionalFormatting)")); + CPPUNIT_ASSERT_EQUAL( + u"5"_ustr, getXPathContent(pSheet, "count(/x:worksheet/x:conditionalFormatting/x:cfRule)")); sal_Int32 nDxfIdCondFormatFirst = getXPath(pSheet, "/x:worksheet/x:conditionalFormatting[1]/x:cfRule", "dxfId").toInt32() + 1; sal_Int32 nDxfIdCondFormatLast - = getXPath(pSheet, "/x:worksheet/x:conditionalFormatting[20]/x:cfRule", "dxfId").toInt32() + = getXPath(pSheet, "/x:worksheet/x:conditionalFormatting[5]/x:cfRule", "dxfId").toInt32() + 1; xmlDocUniquePtr pStyles = parseExport(u"xl/styles.xml"_ustr); @@ -2128,6 +2161,86 @@ CPPUNIT_TEST_FIXTURE(ScExportTest4, testTdf164417) 1, getXPathPosition(pSheet1, "//x:autoFilter/x:filterColumn/x:filters", "dateGroupItem")); } +CPPUNIT_TEST_FIXTURE(ScExportTest4, testTdf165503) +{ + createScDoc("xlsx/tdf165503.xlsx"); + + // FIXME: Invalid content was found starting with element 'c:noMultiLvlLbl' + skipValidation(); + save(u"Calc Office Open XML"_ustr); + + xmlDocUniquePtr pChart1 = parseExport(u"xl/charts/chart1.xml"_ustr); + CPPUNIT_ASSERT(pChart1); + + // Without the fix in place, this test would have failed with + // - Expected: 44199 + // - Actual : 1/3/2021 + // The textual date output can depend on locale, but it'll differ from expected value either way + assertXPathContent(pChart1, + "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser/c:cat/c:numRef/" + "c:numCache/c:pt[@idx=\"0\"]/c:v", + u"44199"); + // And similarly + assertXPathContent(pChart1, + "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser/c:cat/c:numRef/" + "c:numCache/c:pt[@idx=\"4\"]/c:v", + u"44844"); + + // There should be no node with idx 5 (cell is empty) + const int aNodes = countXPathNodes( + pChart1, "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser/c:cat/c:numRef/" + "c:numCache/c:pt[@idx=\"5\"]"); + CPPUNIT_ASSERT_EQUAL(0, aNodes); +} + +CPPUNIT_TEST_FIXTURE(ScExportTest4, testTdf165655) +{ + createScDoc("xlsx/tdf165655.xlsx"); + + save(u"Calc Office Open XML"_ustr); + + xmlDocUniquePtr pDrawing = parseExport(u"xl/drawings/drawing1.xml"_ustr); + CPPUNIT_ASSERT(pDrawing); + + // Original has 3 drawingML and 1 VML objects + // Not sure if the VML dropdown should be exported, but as long as it cannot be + // exported properly, it should not be exported at all (only the 3 drawingMLs) + const int aNodes = countXPathNodes(pDrawing, "/xdr:wsDr/xdr:twoCellAnchor"); + CPPUNIT_ASSERT_EQUAL(3, aNodes); +} + +CPPUNIT_TEST_FIXTURE(ScExportTest4, testTdf165886) +{ + createScDoc("xlsx/tdf165886.xlsx"); + + save(u"Calc Office Open XML"_ustr); + + xmlDocUniquePtr pSheet = parseExport(u"xl/worksheets/sheet1.xml"_ustr); + CPPUNIT_ASSERT(pSheet); + + assertXPathContent(pSheet, "/x:worksheet/x:sheetData/x:row[1]/x:c[1]/x:f", u"“"); + // Without the accompanying fix in place, this test would have failed with + // - Expected: OR(D1=0,D1<>““) + // - Actual : OR(D1=0,D1<>““)) + assertXPathContent(pSheet, "/x:worksheet/x:sheetData/x:row[1]/x:c[2]/x:f", u"OR(D1=0,D1<>““)"); + // Similarly + // - Expected: OR(E1=0,E1<>“) + // - Actual : OR(E1=0,E1<>“)) + assertXPathContent(pSheet, "/x:worksheet/x:sheetData/x:row[1]/x:c[3]/x:f", u"OR(E1=0,E1<>“)"); + // Similarly + // - Expected: OR(D2=0,D2<>””) + // - Actual : OR(D2=0,D2<>””)) + assertXPathContent(pSheet, "/x:worksheet/x:sheetData/x:row[2]/x:c[2]/x:f", u"OR(D2=0,D2<>””)"); + // Similarly + // - Expected: OR(D3=0,D3<>‘‘) + // - Actual : OR(D3=0,D3<>‘‘)) + assertXPathContent(pSheet, "/x:worksheet/x:sheetData/x:row[3]/x:c[2]/x:f", u"OR(D3=0,D3<>‘‘)"); + // Similarly + // - Expected: OR(D4=0,D4<>’’) + // - Actual : OR(D4=0,D4<>’’)) + assertXPathContent(pSheet, "/x:worksheet/x:sheetData/x:row[4]/x:c[2]/x:f", u"OR(D4=0,D4<>’’)"); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/subsequent_filters_test2.cxx b/sc/qa/unit/subsequent_filters_test2.cxx index 60966f08bc5c..4b2bc019d153 100644 --- a/sc/qa/unit/subsequent_filters_test2.cxx +++ b/sc/qa/unit/subsequent_filters_test2.cxx @@ -368,6 +368,22 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest2, testColumnStyleAutoFilterXLSX) CPPUNIT_ASSERT(!rAttr.HasAutoFilter()); } +CPPUNIT_TEST_FIXTURE(ScFiltersTest2, testTdf154311) +{ + createScDoc("xml/tdf154311.xml"); + ScDocument* pDoc = getScDoc(); + + // From Column A to Y + for (SCCOL nCol = 0; nCol <= 24; ++nCol) + { + const ScPatternAttr* pPattern = pDoc->GetPattern(nCol, 10, 0); + CPPUNIT_ASSERT(pPattern); + + const ScMergeFlagAttr& rAttr = pPattern->GetItem(ATTR_MERGE_FLAG); + CPPUNIT_ASSERT(rAttr.HasAutoFilter()); + } +} + CPPUNIT_TEST_FIXTURE(ScFiltersTest2, testSharedFormulaHorizontalXLS) { createScDoc("xls/shared-formula/horizontal.xls"); @@ -862,6 +878,24 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest2, testTdf130132) } } +CPPUNIT_TEST_FIXTURE(ScFiltersTest2, testTdf165080) +{ + createScDoc("xls/tdf165080.xls"); + + ScDocument* pDoc = getScDoc(); + + const ScPatternAttr* pAttr = pDoc->GetPattern(0, 0, 0); + + const SfxPoolItem& rItem = pAttr->GetItem(ATTR_BACKGROUND); + const SvxBrushItem& rBackground = static_cast<const SvxBrushItem&>(rItem); + const Color& rColor = rBackground.GetColor(); + + // Without the fix in place, this test would have failed with + // - Expected: rgba[c0c0c0ff] + // - Actual : rgba[ffffff00] + CPPUNIT_ASSERT_EQUAL(COL_LIGHTGRAY, rColor); +} + CPPUNIT_TEST_FIXTURE(ScFiltersTest2, testTdf133327) { createScDoc("ods/tdf133327.ods"); diff --git a/sc/qa/unit/subsequent_filters_test3.cxx b/sc/qa/unit/subsequent_filters_test3.cxx index afdd54ef2ffc..36048bc2aea9 100644 --- a/sc/qa/unit/subsequent_filters_test3.cxx +++ b/sc/qa/unit/subsequent_filters_test3.cxx @@ -12,6 +12,7 @@ #include <sfx2/docfile.hxx> +#include <svl/sharedstringpool.hxx> #include <svx/svdpage.hxx> #include <svx/svdocapt.hxx> #include <svx/svdoole2.hxx> @@ -36,6 +37,7 @@ #include <tabvwsh.hxx> #include <scresid.hxx> #include <globstr.hrc> +#include <queryparam.hxx> #include <com/sun/star/drawing/FillStyle.hpp> #include <com/sun/star/drawing/XDrawPageSupplier.hpp> @@ -274,6 +276,231 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest3, testWrapAndShrinkXLSXML) } } +CPPUNIT_TEST_FIXTURE(ScFiltersTest3, testAutofilterTextXLSXML) +{ + createScDoc("xml/autofilter-text.xml"); + ScDocument* pDoc = getScDoc(); + + auto aNames = pDoc->GetAllTableNames(); + CPPUNIT_ASSERT_EQUAL(std::size_t(6), aNames.size()); + CPPUNIT_ASSERT_EQUAL(u"Equals"_ustr, aNames[0]); + CPPUNIT_ASSERT_EQUAL(u"Does Not Equal"_ustr, aNames[1]); + CPPUNIT_ASSERT_EQUAL(u"Begins With"_ustr, aNames[2]); + CPPUNIT_ASSERT_EQUAL(u"Ends With"_ustr, aNames[3]); + CPPUNIT_ASSERT_EQUAL(u"Contains"_ustr, aNames[4]); + CPPUNIT_ASSERT_EQUAL(u"Does Not Contain"_ustr, aNames[5]); + + { + // Sheet 0 - "Equals" + + ScDBData* pData = pDoc->GetAnonymousDBData(0); + CPPUNIT_ASSERT(pData); + ScRange aFilterRange; + pData->GetArea(aFilterRange); + + CPPUNIT_ASSERT_EQUAL(ScRange(1, 2, 0, 6, 95, 0), aFilterRange); // B3:G96 + CPPUNIT_ASSERT(pData->HasAutoFilter()); + + ScQueryParam aQueryParam; + pData->GetQueryParam(aQueryParam); + CPPUNIT_ASSERT(aQueryParam.bHasHeader); + CPPUNIT_ASSERT(aQueryParam.bByRow); + + auto aEntries = aQueryParam.FindAllEntriesByField(2); + CPPUNIT_ASSERT_EQUAL(std::size_t(2), aEntries.size()); + + { + const ScQueryEntry& rEntry = aQueryParam.GetEntry(0); + CPPUNIT_ASSERT(rEntry.bDoQuery); + CPPUNIT_ASSERT_EQUAL(SCCOLROW(2), rEntry.nField); + CPPUNIT_ASSERT_EQUAL(SC_EQUAL, rEntry.eOp); + CPPUNIT_ASSERT_EQUAL(ScQueryEntry::ByString, rEntry.GetQueryItem().meType); + + svl::SharedString aSStr = pDoc->GetSharedStringPool().intern(u"Japan"_ustr); + CPPUNIT_ASSERT_EQUAL(aSStr, rEntry.GetQueryItem().maString); + } + + { + const ScQueryEntry& rEntry = aQueryParam.GetEntry(1); + CPPUNIT_ASSERT(rEntry.bDoQuery); + CPPUNIT_ASSERT_EQUAL(SCCOLROW(2), rEntry.nField); + CPPUNIT_ASSERT_EQUAL(SC_EQUAL, rEntry.eOp); + CPPUNIT_ASSERT_EQUAL(SC_OR, rEntry.eConnect); + CPPUNIT_ASSERT_EQUAL(ScQueryEntry::ByString, rEntry.GetQueryItem().meType); + + svl::SharedString aSStr = pDoc->GetSharedStringPool().intern(u"China"_ustr); + CPPUNIT_ASSERT_EQUAL(aSStr, rEntry.GetQueryItem().maString); + } + } + + { + // Sheet 1 - "Does Not Equal" + + ScDBData* pData = pDoc->GetAnonymousDBData(1); + CPPUNIT_ASSERT(pData); + ScRange aFilterRange; + pData->GetArea(aFilterRange); + + CPPUNIT_ASSERT_EQUAL(ScRange(1, 3, 1, 4, 17, 1), aFilterRange); // B4:E18 + CPPUNIT_ASSERT(pData->HasAutoFilter()); + + ScQueryParam aQueryParam; + pData->GetQueryParam(aQueryParam); + CPPUNIT_ASSERT(aQueryParam.bHasHeader); + CPPUNIT_ASSERT(aQueryParam.bByRow); + + auto aEntries = aQueryParam.FindAllEntriesByField(2); + CPPUNIT_ASSERT_EQUAL(std::size_t(2), aEntries.size()); + + { + const ScQueryEntry& rEntry = aQueryParam.GetEntry(0); + CPPUNIT_ASSERT(rEntry.bDoQuery); + CPPUNIT_ASSERT_EQUAL(SCCOLROW(2), rEntry.nField); + CPPUNIT_ASSERT_EQUAL(SC_NOT_EQUAL, rEntry.eOp); + CPPUNIT_ASSERT_EQUAL(ScQueryEntry::ByString, rEntry.GetQueryItem().meType); + + svl::SharedString aSStr = pDoc->GetSharedStringPool().intern(u"NV"_ustr); + CPPUNIT_ASSERT_EQUAL(aSStr, rEntry.GetQueryItem().maString); + } + + { + const ScQueryEntry& rEntry = aQueryParam.GetEntry(1); + CPPUNIT_ASSERT(rEntry.bDoQuery); + CPPUNIT_ASSERT_EQUAL(SCCOLROW(2), rEntry.nField); + CPPUNIT_ASSERT_EQUAL(SC_NOT_EQUAL, rEntry.eOp); + CPPUNIT_ASSERT_EQUAL(SC_AND, rEntry.eConnect); + CPPUNIT_ASSERT_EQUAL(ScQueryEntry::ByString, rEntry.GetQueryItem().meType); + + svl::SharedString aSStr = pDoc->GetSharedStringPool().intern(u"FL"_ustr); + CPPUNIT_ASSERT_EQUAL(aSStr, rEntry.GetQueryItem().maString); + } + } + + { + // Sheet 2 - "Begins With" + + ScDBData* pData = pDoc->GetAnonymousDBData(2); + CPPUNIT_ASSERT(pData); + ScRange aFilterRange; + pData->GetArea(aFilterRange); + + CPPUNIT_ASSERT_EQUAL(ScRange(1, 2, 2, 6, 95, 2), aFilterRange); // B3:G96 + CPPUNIT_ASSERT(pData->HasAutoFilter()); + + ScQueryParam aQueryParam; + pData->GetQueryParam(aQueryParam); + CPPUNIT_ASSERT(aQueryParam.bHasHeader); + CPPUNIT_ASSERT(aQueryParam.bByRow); + + auto aEntries = aQueryParam.FindAllEntriesByField(2); + CPPUNIT_ASSERT_EQUAL(std::size_t(1), aEntries.size()); + + { + const ScQueryEntry& rEntry = aQueryParam.GetEntry(0); + CPPUNIT_ASSERT(rEntry.bDoQuery); + CPPUNIT_ASSERT_EQUAL(SCCOLROW(2), rEntry.nField); + CPPUNIT_ASSERT_EQUAL(SC_BEGINS_WITH, rEntry.eOp); + CPPUNIT_ASSERT_EQUAL(ScQueryEntry::ByString, rEntry.GetQueryItem().meType); + + svl::SharedString aSStr = pDoc->GetSharedStringPool().intern(u"Be"_ustr); + CPPUNIT_ASSERT_EQUAL(aSStr, rEntry.GetQueryItem().maString); + } + } + + { + // Sheet 3 - "Ends With" + + ScDBData* pData = pDoc->GetAnonymousDBData(3); + CPPUNIT_ASSERT(pData); + ScRange aFilterRange; + pData->GetArea(aFilterRange); + + CPPUNIT_ASSERT_EQUAL(ScRange(1, 2, 3, 6, 95, 3), aFilterRange); // B3:G96 + CPPUNIT_ASSERT(pData->HasAutoFilter()); + + ScQueryParam aQueryParam; + pData->GetQueryParam(aQueryParam); + CPPUNIT_ASSERT(aQueryParam.bHasHeader); + CPPUNIT_ASSERT(aQueryParam.bByRow); + + auto aEntries = aQueryParam.FindAllEntriesByField(2); + CPPUNIT_ASSERT_EQUAL(std::size_t(1), aEntries.size()); + + { + const ScQueryEntry& rEntry = aQueryParam.GetEntry(0); + CPPUNIT_ASSERT(rEntry.bDoQuery); + CPPUNIT_ASSERT_EQUAL(SCCOLROW(2), rEntry.nField); + CPPUNIT_ASSERT_EQUAL(SC_ENDS_WITH, rEntry.eOp); + CPPUNIT_ASSERT_EQUAL(ScQueryEntry::ByString, rEntry.GetQueryItem().meType); + + svl::SharedString aSStr = pDoc->GetSharedStringPool().intern(u"lic"_ustr); + CPPUNIT_ASSERT_EQUAL(aSStr, rEntry.GetQueryItem().maString); + } + } + + { + // Sheet 4 - "Contains" + + ScDBData* pData = pDoc->GetAnonymousDBData(4); + CPPUNIT_ASSERT(pData); + ScRange aFilterRange; + pData->GetArea(aFilterRange); + + CPPUNIT_ASSERT_EQUAL(ScRange(1, 3, 4, 4, 17, 4), aFilterRange); // B4:E18 + CPPUNIT_ASSERT(pData->HasAutoFilter()); + + ScQueryParam aQueryParam; + pData->GetQueryParam(aQueryParam); + CPPUNIT_ASSERT(aQueryParam.bHasHeader); + CPPUNIT_ASSERT(aQueryParam.bByRow); + + auto aEntries = aQueryParam.FindAllEntriesByField(1); + CPPUNIT_ASSERT_EQUAL(std::size_t(1), aEntries.size()); + + { + const ScQueryEntry& rEntry = aQueryParam.GetEntry(0); + CPPUNIT_ASSERT(rEntry.bDoQuery); + CPPUNIT_ASSERT_EQUAL(SCCOLROW(1), rEntry.nField); + CPPUNIT_ASSERT_EQUAL(SC_CONTAINS, rEntry.eOp); + CPPUNIT_ASSERT_EQUAL(ScQueryEntry::ByString, rEntry.GetQueryItem().meType); + + svl::SharedString aSStr = pDoc->GetSharedStringPool().intern(u"ing"_ustr); + CPPUNIT_ASSERT_EQUAL(aSStr, rEntry.GetQueryItem().maString); + } + } + + { + // Sheet 5 - "Does Not Contain" + + ScDBData* pData = pDoc->GetAnonymousDBData(5); + CPPUNIT_ASSERT(pData); + ScRange aFilterRange; + pData->GetArea(aFilterRange); + + CPPUNIT_ASSERT_EQUAL(ScRange(1, 3, 5, 4, 17, 5), aFilterRange); // B4:E18 + CPPUNIT_ASSERT(pData->HasAutoFilter()); + + ScQueryParam aQueryParam; + pData->GetQueryParam(aQueryParam); + CPPUNIT_ASSERT(aQueryParam.bHasHeader); + CPPUNIT_ASSERT(aQueryParam.bByRow); + + auto aEntries = aQueryParam.FindAllEntriesByField(1); + CPPUNIT_ASSERT_EQUAL(std::size_t(1), aEntries.size()); + + { + const ScQueryEntry& rEntry = aQueryParam.GetEntry(0); + CPPUNIT_ASSERT(rEntry.bDoQuery); + CPPUNIT_ASSERT_EQUAL(SCCOLROW(1), rEntry.nField); + CPPUNIT_ASSERT_EQUAL(SC_DOES_NOT_CONTAIN, rEntry.eOp); + CPPUNIT_ASSERT_EQUAL(ScQueryEntry::ByString, rEntry.GetQueryItem().meType); + + svl::SharedString aSStr = pDoc->GetSharedStringPool().intern(u"an"_ustr); + CPPUNIT_ASSERT_EQUAL(aSStr, rEntry.GetQueryItem().maString); + } + } +} + CPPUNIT_TEST_FIXTURE(ScFiltersTest3, testCondFormatXLSB) { createScDoc("xlsb/cond_format.xlsb"); @@ -1512,6 +1739,19 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest3, testTdf103960) pDoc->GetString(0, 0, 0)); } +CPPUNIT_TEST_FIXTURE(ScFiltersTest3, testTdf164895) +{ + createScDoc("xlsx/tdf164895.xlsx"); + ScDocument* pDoc = getScDoc(); + + CPPUNIT_ASSERT_EQUAL(u"5"_ustr, pDoc->GetString(ScAddress(3, 7, 0))); + + // Without the fix in place, this test would have failed with + // - Expected: 30 + // - Actual : Err:504 + CPPUNIT_ASSERT_EQUAL(u"30"_ustr, pDoc->GetString(ScAddress(2, 7, 0))); +} + CPPUNIT_TEST_FIXTURE(ScFiltersTest3, testRhbz1390776) { createScDoc("xml/rhbz1390776.xml"); diff --git a/sc/qa/unit/subsequent_filters_test4.cxx b/sc/qa/unit/subsequent_filters_test4.cxx index 72a5b1bd2a53..d8f11d5a3493 100644 --- a/sc/qa/unit/subsequent_filters_test4.cxx +++ b/sc/qa/unit/subsequent_filters_test4.cxx @@ -440,6 +440,29 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest4, testRowHeightODS) CPPUNIT_ASSERT_MESSAGE("Row should have an automatic height.", !bManual); } +CPPUNIT_TEST_FIXTURE(ScFiltersTest4, testRowHeightTdf165003) +{ + createScDoc("ods/RowHeightTdf165003.ods"); + + SCTAB nTab = 0; + SCROW nRow = 0; + ScDocument* pDoc = getScDoc(); + + int nHeight = pDoc->GetRowHeight(nRow, nTab, false); + CPPUNIT_ASSERT_EQUAL(256, nHeight); + nHeight = pDoc->GetRowHeight(++nRow, nTab, false); + CPPUNIT_ASSERT_EQUAL(256, nHeight); + nHeight = pDoc->GetRowHeight(++nRow, nTab, false); + CPPUNIT_ASSERT_EQUAL(256, nHeight); + nHeight = pDoc->GetRowHeight(++nRow, nTab, false); + CPPUNIT_ASSERT_EQUAL(256, nHeight); + // this row has 90-degree rotated text, and without the fix, would have had zero height. + nHeight = pDoc->GetRowHeight(++nRow, nTab, false); + CPPUNIT_ASSERT_EQUAL(582, nHeight); + nHeight = pDoc->GetRowHeight(++nRow, nTab, false); + CPPUNIT_ASSERT_EQUAL(256, nHeight); +} + CPPUNIT_TEST_FIXTURE(ScFiltersTest4, testRichTextContentODS) { createScDoc("ods/rich-text-cells.ods"); diff --git a/sc/qa/unit/tiledrendering/data/decimal-separator.ods b/sc/qa/unit/tiledrendering/data/decimal-separator.ods Binary files differnew file mode 100644 index 000000000000..6f4baedd63f1 --- /dev/null +++ b/sc/qa/unit/tiledrendering/data/decimal-separator.ods diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx index 8d5280ea3128..e4966adc2f4a 100644 --- a/sc/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx @@ -7,11 +7,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "tiledrenderingmodeltestbase.cxx" -#include <test/helper/transferable.hxx> +#include <sctiledrenderingtest.hxx> + +#include <boost/property_tree/json_parser.hpp> #include <com/sun/star/datatransfer/clipboard/LokClipboard.hpp> #include <com/sun/star/util/URLTransformer.hpp> + +#include <test/helper/transferable.hxx> #include <comphelper/processfactory.hxx> #include <comphelper/propertysequence.hxx> #include <comphelper/servicehelper.hxx> @@ -20,7 +23,8 @@ #include <svl/stritem.hxx> #include <svl/numformat.hxx> #include <svl/zformat.hxx> - +#include <LibreOfficeKit/LibreOfficeKitEnums.h> +#include <vcl/scheduler.hxx> #include <comphelper/lok.hxx> #include <comphelper/propertyvalue.hxx> #include <comphelper/dispatchcommand.hxx> @@ -28,14 +32,13 @@ #include <sfx2/childwin.hxx> #include <sfx2/lokhelper.hxx> #include <svx/svdpage.hxx> -#include <vcl/scheduler.hxx> #include <vcl/vclevent.hxx> #include <vcl/virdev.hxx> -#include <sc.hrc> #include <tools/json_writer.hxx> -#include <postit.hxx> #include <unotools/syslocaleoptions.hxx> +#include <sc.hrc> +#include <postit.hxx> #include <attrib.hxx> #include <scitems.hxx> #include <document.hxx> @@ -43,6 +46,11 @@ #include <drwlayer.hxx> #include <editutil.hxx> #include <undomanager.hxx> +#include <docsh.hxx> +#include <tabvwsh.hxx> +#include <sctestviewcallback.hxx> + +using namespace com::sun::star; static std::ostream& operator<<(std::ostream& os, ViewShellId const & id) { @@ -208,10 +216,10 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testEmptyColumnSelection) CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testViewCursors) { ScModelObj* pModelObj = createDoc("select-row-cols.ods"); - ViewCallback aView1; + ScTestViewCallback aView1; SfxLokHelper::createView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2(/*bDeleteListenerOnDestruct*/false); + ScTestViewCallback aView2(/*bDeleteListenerOnDestruct*/false); // This was false, the new view did not get the view (cell) cursor of the old view. CPPUNIT_ASSERT(aView2.m_bViewCursorInvalidated); CPPUNIT_ASSERT(aView2.m_bOwnCursorInvalidated); @@ -244,10 +252,10 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testTextViewSelection) { // Create two views, and leave the second one current. ScModelObj* pModelObj = createDoc("select-row-cols.ods"); - ViewCallback aView1; + ScTestViewCallback aView1; SfxLokHelper::createView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2; + ScTestViewCallback aView2; // Create a selection on two cells in the second view, that's a text selection in LOK terms. aView1.m_bTextViewSelectionInvalidated = false; @@ -277,10 +285,10 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testViewLock) { // Load a document that has a shape and create two views. ScModelObj* pModelObj = createDoc("shape.ods"); - ViewCallback aView1; + ScTestViewCallback aView1; SfxLokHelper::createView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2; + ScTestViewCallback aView2; // Begin text edit in the second view and assert that the first gets a lock // notification. @@ -326,7 +334,7 @@ void lcl_extractHandleParameters(std::string_view selection, sal_uInt32& id, sal CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testMoveShapeHandle) { ScModelObj* pModelObj = createDoc("shape.ods"); - ViewCallback aView1; + ScTestViewCallback aView1; pModelObj->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONDOWN, /*x=*/ 1,/*y=*/ 1,/*count=*/ 1, /*buttons=*/ 1, /*modifier=*/0); pModelObj->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONUP, /*x=*/ 1, /*y=*/ 1, /*count=*/ 1, /*buttons=*/ 1, /*modifier=*/0); Scheduler::ProcessEventsToIdle(); @@ -424,7 +432,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testTextEditViews) CPPUNIT_ASSERT(pViewData); // view #1 - ViewCallback aView1; + ScTestViewCallback aView1; CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData)); // text edit a cell in view #1 @@ -436,7 +444,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testTextEditViews) // view #2 SfxLokHelper::createView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2; + ScTestViewCallback aView2; // move cell cursor i view #2 pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::DOWN); @@ -456,13 +464,13 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testTextEditViewInvalidations) // view #1 int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData)); // view #2 SfxLokHelper::createView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2; + ScTestViewCallback aView2; // text edit a cell in view #1 SfxLokHelper::setView(nView1); @@ -493,7 +501,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testTextEditViewInvalidations) // view #3 SfxLokHelper::createView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView3; + ScTestViewCallback aView3; // text edit a cell in view #1 SfxLokHelper::setView(nView1); @@ -508,7 +516,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCreateViewGraphicSelection) { // Load a document that has a shape and create two views. ScModelObj* pModelObj = createDoc("shape.ods"); - ViewCallback aView1; + ScTestViewCallback aView1; // Mark the graphic in the first view. const ScViewData* pViewData = ScDocShell::GetViewData(); @@ -528,7 +536,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCreateViewGraphicSelection) int nView1 = SfxLokHelper::getView(); SfxLokHelper::createView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2; + ScTestViewCallback aView2; CPPUNIT_ASSERT(aView2.m_bGraphicViewSelection); CPPUNIT_ASSERT(aView1.m_bGraphicViewSelection); @@ -540,7 +548,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testGraphicInvalidate) { // Load a document that has a shape and create two views. ScModelObj* pModelObj = createDoc("shape.ods"); - ViewCallback aView; + ScTestViewCallback aView; // Click to select graphic aView.m_bGraphicSelection = false; @@ -566,7 +574,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testAutoSum) { createDoc("small.ods"); - ViewCallback aView; + ScTestViewCallback aView; uno::Sequence<beans::PropertyValue> aArgs; dispatchCommand(mxComponent, u".uno:AutoSum"_ustr, aArgs); @@ -636,7 +644,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testInvalidateOnCopyPasteCells) CPPUNIT_ASSERT(pModelObj); // view - ViewCallback aView; + ScTestViewCallback aView; uno::Sequence<beans::PropertyValue> aArgs; // select and copy cells @@ -670,7 +678,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testInvalidateOnInserRowCol) CPPUNIT_ASSERT(pModelObj); // view - ViewCallback aView; + ScTestViewCallback aView; uno::Sequence<beans::PropertyValue> aArgs; // move downward @@ -716,13 +724,13 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCommentCallback) { ScModelObj* pModelObj = createDoc("small.ods"); - ViewCallback aView1; + ScTestViewCallback aView1; int nView1 = SfxLokHelper::getView(); // Create a 2nd view SfxLokHelper::createView(); pModelObj->initializeForTiledRendering({}); - ViewCallback aView2; + ScTestViewCallback aView2; SfxLokHelper::setView(nView1); @@ -826,13 +834,13 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testUndoLimiting) // view #1 int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; // view #2 SfxLokHelper::createView(); int nView2 = SfxLokHelper::getView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2; + ScTestViewCallback aView2; // text edit a cell in view #1 SfxLokHelper::setView(nView1); @@ -884,13 +892,13 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testUndoRepairDispatch) // view #1 int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; // view #2 SfxLokHelper::createView(); int nView2 = SfxLokHelper::getView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2; + ScTestViewCallback aView2; // text edit a cell in view #1 SfxLokHelper::setView(nView1); @@ -928,7 +936,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testInsertGraphicInvalidations) CPPUNIT_ASSERT(pViewData); // view - ViewCallback aView; + ScTestViewCallback aView; // we need to paint a tile in the view for triggering the tile invalidation solution int nCanvasWidth = 256; @@ -1378,7 +1386,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testPageDownInvalidation) CPPUNIT_ASSERT(pViewData); int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData)); SfxLokHelper::setView(nView1); @@ -1406,30 +1414,6 @@ static Bitmap getTile(ScModelObj* pModelObj, int nTilePosX, int nTilePosY, tools return xDevice->GetBitmap(Point(0, 0), Size(nTileSize, nTileSize)); } -namespace -{ -void lcl_typeCharsInCell(const std::string& aStr, SCCOL nCol, SCROW nRow, ScTabViewShell* pView, - ScModelObj* pModelObj, bool bInEdit = false, bool bCommit = true) -{ - if (!bInEdit) - pView->SetCursor(nCol, nRow); - - for (const char& cChar : aStr) - { - pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, cChar, 0); - pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, cChar, 0); - Scheduler::ProcessEventsToIdle(); - } - - if (bCommit) - { - pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::RETURN); - pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::RETURN); - Scheduler::ProcessEventsToIdle(); - } -} -} //namespace - CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testSheetChangeNoInvalidation) { const bool oldPartInInvalidation = comphelper::LibreOfficeKit::isPartInInvalidation(); @@ -1447,7 +1431,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testSheetChangeNoInvalidation) CPPUNIT_ASSERT(pView); int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData)); SfxLokHelper::setView(nView1); @@ -1479,7 +1463,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testSheetChangeNoInvalidation) // we change B1 there should be an invalidation in the second sheet for the // range that depends on it. Because this is a single user document with no // active view on the 2nd sheet this will happen on switching back to sheet 2 - lcl_typeCharsInCell("101", 1, 0, pView, pModelObj); // Type '101' in B1 + typeCharsInCell("101", 1, 0, pView, pModelObj); // Type '101' in B1 aView1.ClearAllInvalids(); pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::PAGEDOWN | KEY_MOD1); @@ -1515,7 +1499,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testInsertDeletePageInvalidation) CPPUNIT_ASSERT(pViewData); int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData)); SfxLokHelper::setView(nView1); @@ -1556,7 +1540,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testGetRowColumnHeadersInvalidation) CPPUNIT_ASSERT(pViewData); int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData)); SfxLokHelper::setView(nView1); @@ -1600,7 +1584,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testJumpHorizontallyInvalidation) CPPUNIT_ASSERT(pViewData); int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData)); SfxLokHelper::setView(nView1); @@ -1624,7 +1608,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testJumpToLastRowInvalidation) CPPUNIT_ASSERT(pViewData); int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData)); SfxLokHelper::setView(nView1); @@ -1647,14 +1631,14 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testRowColumnHeaders) CPPUNIT_ASSERT(pViewData); // view #1 - ViewCallback aView1; + ScTestViewCallback aView1; int nView1 = SfxLokHelper::getView(); CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData)); // view #2 SfxLokHelper::createView(); int nView2 = SfxLokHelper::getView(); - ViewCallback aView2; + ScTestViewCallback aView2; pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); // ViewRowColumnHeaders test @@ -1888,13 +1872,13 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testSheetGeometryDataInvariance) CPPUNIT_ASSERT(pViewData); // view #1 - ViewCallback aView1; + ScTestViewCallback aView1; int nView1 = SfxLokHelper::getView(); // view #2 SfxLokHelper::createView(); int nView2 = SfxLokHelper::getView(); - ViewCallback aView2; + ScTestViewCallback aView2; pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); // Try with the default empty document once (nIdx = 0) and then with sheet geometry settings (nIdx = 1) @@ -2012,7 +1996,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testSheetGeometryDataCorrectness) CPPUNIT_ASSERT(pViewData); // view #1 - ViewCallback aView1; + ScTestViewCallback aView1; // with the default empty sheet and test the JSON encoding. OString aGeomDefaultStr = pModelObj->getSheetGeometryData(/*bColumns*/ true, /*bRows*/ true, /*bSizes*/ true, @@ -2038,7 +2022,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testDeleteCellMultilineContent) CPPUNIT_ASSERT(pDocSh); // view #1 - ViewCallback aView1; + ScTestViewCallback aView1; CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData)); aView1.m_sInvalidateHeader = ""_ostr; @@ -2076,7 +2060,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testPasteIntoWrapTextCell) ScViewData* pViewData = ScDocShell::GetViewData(); CPPUNIT_ASSERT(pViewData); - ViewCallback aView; + ScTestViewCallback aView; CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData)); ScTabViewShell* pView = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current()); @@ -2153,7 +2137,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testSortAscendingDescending) ScModelObj* pModelObj = createDoc("sort-range.ods"); ScDocument* pDoc = pModelObj->GetDocument(); - ViewCallback aView; + ScTestViewCallback aView; // select the values in the first column pModelObj->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONDOWN, 551, 129, 1, MOUSE_LEFT, 0); @@ -2211,19 +2195,19 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testAutoInputStringBlock) pDoc->SetString(ScAddress(0, 7, 0), u"ZZZ"_ustr); // A8 ScAddress aA1(0, 0, 0); - lcl_typeCharsInCell("X", aA1.Col(), aA1.Row(), pView, pModelObj); // Type 'X' in A1 + typeCharsInCell("X", aA1.Col(), aA1.Row(), pView, pModelObj); // Type 'X' in A1 CPPUNIT_ASSERT_EQUAL_MESSAGE("A1 should autocomplete", u"XYZ"_ustr, pDoc->GetString(aA1)); ScAddress aA3(0, 2, 0); // Adjacent to the string "superblock" A4:A8 - lcl_typeCharsInCell("X", aA3.Col(), aA3.Row(), pView, pModelObj); // Type 'X' in A3 + typeCharsInCell("X", aA3.Col(), aA3.Row(), pView, pModelObj); // Type 'X' in A3 CPPUNIT_ASSERT_EQUAL_MESSAGE("A3 should autocomplete", u"XYZ"_ustr, pDoc->GetString(aA3)); ScAddress aA9(0, 8, 0); // Adjacent to the string "superblock" A4:A8 - lcl_typeCharsInCell("X", aA9.Col(), aA9.Row(), pView, pModelObj); // Type 'X' in A9 + typeCharsInCell("X", aA9.Col(), aA9.Row(), pView, pModelObj); // Type 'X' in A9 CPPUNIT_ASSERT_EQUAL_MESSAGE("A9 should autocomplete", u"XYZ"_ustr, pDoc->GetString(aA9)); ScAddress aA11(0, 10, 0); - lcl_typeCharsInCell("X", aA11.Col(), aA11.Row(), pView, pModelObj); // Type 'X' in A11 + typeCharsInCell("X", aA11.Col(), aA11.Row(), pView, pModelObj); // Type 'X' in A11 CPPUNIT_ASSERT_EQUAL_MESSAGE("A11 should autocomplete", u"XYZ"_ustr, pDoc->GetString(aA11)); } @@ -2245,31 +2229,31 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testAutoInputExactMatch) pDoc->SetString(ScAddress(0, 6, 0), u"Castle"_ustr); // A7 ScAddress aA8(0, 7, 0); - lcl_typeCharsInCell("S", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "S" in A8 + typeCharsInCell("S", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "S" in A8 // Should show the partial completion "i". CPPUNIT_ASSERT_EQUAL_MESSAGE("1: A8 should have partial completion Si", u"Si"_ustr, pDoc->GetString(aA8)); - lcl_typeCharsInCell("Si", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "Si" in A8 + typeCharsInCell("Si", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "Si" in A8 // Should not show any suggestions. CPPUNIT_ASSERT_EQUAL_MESSAGE("2: A8 should not show suggestions", u"Si"_ustr, pDoc->GetString(aA8)); - lcl_typeCharsInCell("Sim", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "Sim" in A8 + typeCharsInCell("Sim", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "Sim" in A8 // Should autocomplete to "Simple" which is the only match. CPPUNIT_ASSERT_EQUAL_MESSAGE("3: A8 should autocomplete", u"Simple"_ustr, pDoc->GetString(aA8)); - lcl_typeCharsInCell("Sin", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "Sin" in A8 + typeCharsInCell("Sin", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "Sin" in A8 // Should autocomplete to "Sing" which is the only match. CPPUNIT_ASSERT_EQUAL_MESSAGE("4: A8 should autocomplete", u"Sing"_ustr, pDoc->GetString(aA8)); - lcl_typeCharsInCell("C", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "C" in A8 + typeCharsInCell("C", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "C" in A8 // Should show the partial completion "as". CPPUNIT_ASSERT_EQUAL_MESSAGE("5: A8 should have partial completion Cas", u"Cas"_ustr, pDoc->GetString(aA8)); - lcl_typeCharsInCell("Cast", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "Cast" in A8 + typeCharsInCell("Cast", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "Cast" in A8 // Should autocomplete to "Castle" which is the only match. CPPUNIT_ASSERT_EQUAL_MESSAGE("6: A8 should autocomplete", u"Castle"_ustr, pDoc->GetString(aA8)); - lcl_typeCharsInCell("T", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "T" in A8 + typeCharsInCell("T", aA8.Col(), aA8.Row(), pView, pModelObj); // Type "T" in A8 // Should autocomplete to "Time" which is the only match. CPPUNIT_ASSERT_EQUAL_MESSAGE("7: A8 should autocomplete", u"Time"_ustr, pDoc->GetString(aA8)); } @@ -2281,7 +2265,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testEditCursorBounds) ScModelObj* pModelObj = createDoc("empty.ods"); ScDocument* pDoc = pModelObj->GetDocument(); - ViewCallback aView; + ScTestViewCallback aView; ScTabViewShell* pView = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current()); CPPUNIT_ASSERT(pView); comphelper::LibreOfficeKit::setViewIdForVisCursorInvalidation(true); @@ -2324,7 +2308,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testTextSelectionBounds) ScModelObj* pModelObj = createDoc("empty.ods"); ScDocument* pDoc = pModelObj->GetDocument(); - ViewCallback aView; + ScTestViewCallback aView; ScTabViewShell* pView = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current()); CPPUNIT_ASSERT(pView); comphelper::LibreOfficeKit::setViewIdForVisCursorInvalidation(true); @@ -2406,7 +2390,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testSheetViewDataCrash) CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testTextBoxInsert) { createDoc("empty.ods"); - ViewCallback aView1; + ScTestViewCallback aView1; // insert textbox uno::Sequence<beans::PropertyValue> aArgs( @@ -2432,7 +2416,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCommentCellCopyPaste) { ScModelObj* pModelObj = createDoc("empty.ods"); - ViewCallback aView; + ScTestViewCallback aView; int nView = SfxLokHelper::getView(); SfxLokHelper::setView(nView); @@ -2440,7 +2424,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCommentCellCopyPaste) ScTabViewShell* pTabViewShell = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current()); CPPUNIT_ASSERT(pTabViewShell); - lcl_typeCharsInCell("ABC", 0, 0, pTabViewShell, pModelObj); // Type "ABC" in A1 + typeCharsInCell("ABC", 0, 0, pTabViewShell, pModelObj); // Type "ABC" in A1 pTabViewShell->SetCursor(1, 1); @@ -2524,7 +2508,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testInvalidEntrySave) CPPUNIT_ASSERT(pModelObj); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); const ScDocument* pDoc = pModelObj->GetDocument(); - ViewCallback aView; + ScTestViewCallback aView; int nView = SfxLokHelper::getView(); SfxLokHelper::setView(nView); @@ -2535,7 +2519,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testInvalidEntrySave) // Type partial date "7/8" of "7/8/2013" that // the validation cell at A8 can accept - lcl_typeCharsInCell("7/8", 0, 7, pTabViewShell, pModelObj, + typeCharsInCell("7/8", 0, 7, pTabViewShell, pModelObj, false /* bInEdit */, false /* bCommit */); // Type "7/8" in A8 uno::Sequence<beans::PropertyValue> aArgs; @@ -2544,7 +2528,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testInvalidEntrySave) CPPUNIT_ASSERT_MESSAGE("Should not be marked modified after save", !pDocSh->IsModified()); // Complete the date in A8 by appending "/2013" and commit. - lcl_typeCharsInCell("/2013", 0, 7, pTabViewShell, pModelObj, + typeCharsInCell("/2013", 0, 7, pTabViewShell, pModelObj, true /* bInEdit */, true /* bCommit */); // This would hang if the date entered "7/8/2013" is not acceptable. @@ -2565,13 +2549,13 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testUndoReordering) // view #1 int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; // view #2 SfxLokHelper::createView(); int nView2 = SfxLokHelper::getView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2; + ScTestViewCallback aView2; // text edit a cell in view #1 SfxLokHelper::setView(nView1); @@ -2626,14 +2610,14 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testUndoReorderingRedo) // view #1 int nView1 = SfxLokHelper::getView(); SfxViewShell* pView1 = SfxViewShell::Current(); - ViewCallback aView1; + ScTestViewCallback aView1; // view #2 SfxLokHelper::createView(); int nView2 = SfxLokHelper::getView(); SfxViewShell* pView2 = SfxViewShell::Current(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2; + ScTestViewCallback aView2; // text edit a cell in view #1 SfxLokHelper::setView(nView1); @@ -2715,13 +2699,13 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testUndoReorderingMulti) // view #1 int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; // view #2 SfxLokHelper::createView(); int nView2 = SfxLokHelper::getView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2; + ScTestViewCallback aView2; // text edit a cell in view #1 SfxLokHelper::setView(nView1); @@ -2781,12 +2765,12 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testGetViewRenderState) ScModelObj* pModelObj = createDoc("empty.ods"); int nFirstViewId = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; CPPUNIT_ASSERT_EQUAL("S;Default"_ostr, pModelObj->getViewRenderState()); // Create a second view SfxLokHelper::createView(); - ViewCallback aView2; + ScTestViewCallback aView2; CPPUNIT_ASSERT_EQUAL("S;Default"_ostr, pModelObj->getViewRenderState()); // Set second view to dark scheme { @@ -2848,7 +2832,7 @@ void testInvalidateOnTextEditWithDifferentZoomLevels::TestBody(const ColRowZoom& sZoomUnoCmd = ".uno:ZoomMinus"; } // view #1 - ViewCallback aView1; + ScTestViewCallback aView1; // set zoom level for (int i = 0; i < nZoomLevel; ++i) dispatchCommand(mxComponent, sZoomUnoCmd, {}); @@ -2874,7 +2858,7 @@ void testInvalidateOnTextEditWithDifferentZoomLevels::TestBody(const ColRowZoom& // view #2 SfxLokHelper::createView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - ViewCallback aView2; + ScTestViewCallback aView2; Scheduler::ProcessEventsToIdle(); auto* pTabViewShell2 = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current()); CPPUNIT_ASSERT(pTabViewShell2); @@ -2897,9 +2881,9 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testOpenURL) // Given a document that has 2 views: createDoc("empty.ods"); int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; SfxLokHelper::createView(); - ViewCallback aView2; + ScTestViewCallback aView2; // When clicking on a link in view 2, but switching to view 1 before processing async events: ScGlobal::OpenURL(/*aUrl=*/u"http://www.example.com/"_ustr, /*aTarget=*/u""_ustr, @@ -2925,7 +2909,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testInvalidateForSplitPanes) CPPUNIT_ASSERT(pView); // view - ViewCallback aView; + ScTestViewCallback aView; // move way over to the right where BP:20 exists, enough so that rows A and B // would scroll off the page and not be visible, if they were not frozen @@ -2940,7 +2924,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testInvalidateForSplitPanes) aView.m_bInvalidateTiles = false; aView.m_aInvalidations.clear(); - lcl_typeCharsInCell("X", aBP20.Col(), aBP20.Row(), pView, pModelObj); // Type 'X' in A1 + typeCharsInCell("X", aBP20.Col(), aBP20.Row(), pView, pModelObj); // Type 'X' in A1 CPPUNIT_ASSERT(aView.m_bInvalidateTiles); @@ -2977,7 +2961,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testNoInvalidateOnSave) Scheduler::ProcessEventsToIdle(); // track invalidations - ViewCallback aView; + ScTestViewCallback aView; uno::Sequence<beans::PropertyValue> aArgs; dispatchCommand(mxComponent, u".uno:Save"_ustr, aArgs); @@ -2987,60 +2971,6 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testNoInvalidateOnSave) CPPUNIT_ASSERT(!aView.m_bInvalidateTiles); } -void ScTiledRenderingTest::checkSampleInvalidation(const ViewCallback& rView, bool bFullRow) -{ - // we expect invalidations, but that isn't really important - CPPUNIT_ASSERT(rView.m_bInvalidateTiles); - tools::Rectangle aInvalidation; - for (const auto& rRect : rView.m_aInvalidations) - aInvalidation.Union(rRect); - if (!bFullRow) - { - // What matters is that we expect that the invalidation does not extend all the - // way to the max right of the sheet. - // Here we originally got 32212306 and now ~5056 for a single cell case - CPPUNIT_ASSERT_LESSEQUAL(tools::Long(8000), aInvalidation.GetWidth()); - } - else - { - // We expect RTL to continue to invalidate the entire row - // from 0 to end of sheet (see ScDocShell::PostPaint, 'Extend to whole rows'), - // which is different to the adjusted LTR case which - // invalidated the row from left of edited cell to right of end - // of sheet. - CPPUNIT_ASSERT_LESSEQUAL(tools::Long(0), aInvalidation.Left()); - CPPUNIT_ASSERT_EQUAL(tools::Long(32212230), aInvalidation.Right()); - } -} - -void ScTiledRenderingTest::cellInvalidationHelper(ScModelObj* pModelObj, ScTabViewShell* pView, const ScAddress& rAdr, - bool bAddText, bool bFullRow) -{ - // view - ViewCallback aView; - - if (bAddText) - { - // Type "Hello World" in D8, process events to idle and don't commit yet - lcl_typeCharsInCell("Hello World", rAdr.Col(), rAdr.Row(), pView, pModelObj, false, false); - - aView.m_bInvalidateTiles = false; - aView.m_aInvalidations.clear(); - - // commit text and process events to idle - lcl_typeCharsInCell("", rAdr.Col(), rAdr.Row(), pView, pModelObj, true, true); - } - else // DeleteText - { - pView->SetCursor(rAdr.Col(), rAdr.Row()); - pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::DELETE); - pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::DELETE); - Scheduler::ProcessEventsToIdle(); - } - - checkSampleInvalidation(aView, bFullRow); -} - CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCellMinimalInvalidations) { ScAddress aA8(0, 7, 0); @@ -3070,7 +3000,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCellMinimalInvalidations) pView->SetCursor(aA8.Col(), aA8.Row()); Scheduler::ProcessEventsToIdle(); - ViewCallback aView; + ScTestViewCallback aView; dispatchCommand(mxComponent, u".uno:Paste"_ustr, aArgs); Scheduler::ProcessEventsToIdle(); @@ -3114,14 +3044,14 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCellInvalidationDocWithExistingZo int nView1 = SfxLokHelper::getView(); // register to track View #1 invalidations - ViewCallback aView1; + ScTestViewCallback aView1; // Create a View #2 SfxLokHelper::createView(); int nView2 = SfxLokHelper::getView(); pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); // register to track View #1 invalidations - ViewCallback aView2; + ScTestViewCallback aView2; // Set View #2 to initial 100% and generate a paint pModelObj->setClientVisibleArea(tools::Rectangle(0, 0, 19845, 6405)); @@ -3249,9 +3179,9 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testStatusBarLocale) // Given 2 views, the second's locale is set to German: createDoc("empty.ods"); int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; SfxLokHelper::createView(); - ViewCallback aView2; + ScTestViewCallback aView2; SfxViewShell* pView2 = SfxViewShell::Current(); pView2->SetLOKLocale(u"de-DE"_ustr); { @@ -3320,7 +3250,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testLongFirstColumnMouseClick) int y = 1 / nPPTY; // Setup view #1 - ViewCallback aView1; + ScTestViewCallback aView1; // Set client rect to 2000 x 2000 pixels pModelObj->setClientVisibleArea(tools::Rectangle(0, 0, 2000 / nPPTX, 2000 / nPPTY)); Scheduler::ProcessEventsToIdle(); @@ -3348,7 +3278,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testLongFirstColumnMouseClick) // Setup view #2 SfxLokHelper::createView(); int nView2 = SfxLokHelper::getView(); - ViewCallback aView2; + ScTestViewCallback aView2; // Set client rect to 2000 x 2000 pixels pModelObj->setClientVisibleArea(tools::Rectangle(0, 0, 2000 / nPPTX, 2000 / nPPTY)); @@ -3394,7 +3324,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testExtendedAreasDontOverlap) Scheduler::ProcessEventsToIdle(); // register to track View #1 invalidations - ViewCallback aView1; + ScTestViewCallback aView1; // extend to the right and bottom pModelObj->setClientVisibleArea(tools::Rectangle(0, 0, 39750, 12780)); @@ -3446,7 +3376,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testEditShapeText) Bitmap aBitmapBefore = getTile(pModelObj, 4096, 3584, 15360, 7680); // reuse this to type into the active shape edit - lcl_typeCharsInCell("MMMMMMM", 0, 0, pView, pModelObj, true, false); + typeCharsInCell("MMMMMMM", 0, 0, pView, pModelObj, true, false); // Grab a new snapshot of the center of the shape Bitmap aBitmapAfter = getTile(pModelObj, 4096, 3584, 15360, 7680); @@ -3474,7 +3404,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testNumberFormatLocaleMultiUser) ScDocument* pDoc = pModelObj->GetDocument(); int nViewFR = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; SfxViewShell* pViewFR = SfxViewShell::Current(); pViewFR->SetLOKLocale(u"fr-FR"_ustr); @@ -3530,7 +3460,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testLeftOverflowEdit) { comphelper::LibreOfficeKit::setCompatFlag(comphelper::LibreOfficeKit::Compat::scPrintTwipsMsgs); ScModelObj* pModelObj = createDoc("right-aligned-with-overflow.ods"); - ViewCallback aView; + ScTestViewCallback aView; // Go to Cell B5000 uno::Sequence<beans::PropertyValue> aPropertyValues = { @@ -3557,7 +3487,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testLeftOverflowEdit) CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testFreezeRowOrColumn) { createDoc("empty.ods"); - ViewCallback aView; + ScTestViewCallback aView; SfxViewShell* pView = SfxViewShell::Current(); // Freeze panes on a column and receive the proper state back @@ -3594,6 +3524,50 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testFreezeRowOrColumn) CPPUNIT_ASSERT_EQUAL(std::string("8"), index); } +CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCursorVisibilityAfterPaste) +{ + ScModelObj* pModelObj = createDoc("empty.ods"); + ScTestViewCallback aView; + SfxLokHelper::createView(); + pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); + + ScTabViewShell* pView = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current()); + + // copy text view 1 + pView->SetCursor(0, 0); // Go to A1. + + Scheduler::ProcessEventsToIdle(); + + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'B', 0); // Type B. + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 'B', 0); + Scheduler::ProcessEventsToIdle(); + + + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::TAB); + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::TAB); + Scheduler::ProcessEventsToIdle(); + + pView->SetCursor(0, 0); // Go to A1. + Scheduler::ProcessEventsToIdle(); + + pView->GetViewFrame().GetBindings().Execute(SID_COPY); // Copy B. + Scheduler::ProcessEventsToIdle(); + + pView->SetCursor(0, 1); // Go to A2. + Scheduler::ProcessEventsToIdle(); + + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'B', 0); // Type B. + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 'B', 0); + Scheduler::ProcessEventsToIdle(); + + uno::Sequence<beans::PropertyValue> aArgs; + dispatchCommand(mxComponent, u".uno:Paste"_ustr, aArgs); // Paste B. + Scheduler::ProcessEventsToIdle(); + + // Text cursor should still be visible. + CPPUNIT_ASSERT_EQUAL(true, aView.m_textCursorVisible); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/tiledrendering/tiledrendering2.cxx b/sc/qa/unit/tiledrendering/tiledrendering2.cxx index 6e8ce9ea9def..41fdcb17b936 100644 --- a/sc/qa/unit/tiledrendering/tiledrendering2.cxx +++ b/sc/qa/unit/tiledrendering/tiledrendering2.cxx @@ -7,12 +7,20 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "tiledrenderingmodeltestbase.cxx" +#include <sctiledrenderingtest.hxx> #include <com/sun/star/datatransfer/XTransferable2.hpp> -#include <vcl/scheduler.hxx> #include <comphelper/propertyvalue.hxx> +#include <comphelper/propertysequence.hxx> +#include <sfx2/lokhelper.hxx> +#include <vcl/scheduler.hxx> +#include <LibreOfficeKit/LibreOfficeKitEnums.h> + +#include <sctestviewcallback.hxx> +#include <docuno.hxx> +#include <scmod.hxx> +#include <tabvwsh.hxx> using namespace com::sun::star; @@ -20,11 +28,11 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testSidebarLocale) { ScModelObj* pModelObj = createDoc("chart.ods"); int nView1 = SfxLokHelper::getView(); - ViewCallback aView1; + ScTestViewCallback aView1; SfxViewShell* pView1 = SfxViewShell::Current(); pView1->SetLOKLocale(u"en-US"_ustr); SfxLokHelper::createView(); - ViewCallback aView2; + ScTestViewCallback aView2; SfxViewShell* pView2 = SfxViewShell::Current(); pView2->SetLOKLocale(u"de-DE"_ustr); TestLokCallbackWrapper::InitializeSidebar(); @@ -48,7 +56,7 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCopyMultiSelection) { // Given a document with A1 and A3 as selected cells: ScModelObj* pModelObj = createDoc("multi-selection.ods"); - ViewCallback aView1; + ScTestViewCallback aView1; // Get the center of A3: uno::Sequence<beans::PropertyValue> aPropertyValues = { comphelper::makePropertyValue(u"ToPoint"_ustr, u"$A$3"_ustr), @@ -78,6 +86,85 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCopyMultiSelection) CPPUNIT_ASSERT(!xTransferable2->isComplex()); } +CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCursorJumpOnFailedSearch) +{ + createDoc("empty.ods"); + ScTestViewCallback aView; + + // Go to lower cell + uno::Sequence<beans::PropertyValue> aPropertyValues = { + comphelper::makePropertyValue(u"ToPoint"_ustr, u"$C$3"_ustr), + }; + dispatchCommand(mxComponent, u".uno:GoToCell"_ustr, aPropertyValues); + + tools::Rectangle aInitialCursor = aView.m_aCellCursorBounds; + + // Search for a non-existing string using the start point parameters + aPropertyValues = comphelper::InitPropertySequence( + { { "SearchItem.SearchString", uno::Any(u"No-existing"_ustr) }, + { "SearchItem.Backward", uno::Any(false) }, + { "SearchItem.SearchStartPointX", uno::Any(static_cast<sal_Int32>(100)) }, + { "SearchItem.SearchStartPointY", uno::Any(static_cast<sal_Int32>(100)) } }); + dispatchCommand(mxComponent, u".uno:ExecuteSearch"_ustr, aPropertyValues); + + tools::Rectangle aFinalCursor = aView.m_aCellCursorBounds; + + // Without the fix, the cursor jumps even when no match is found + CPPUNIT_ASSERT_EQUAL(aInitialCursor, aFinalCursor); +} + +CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testLocaleFormulaSeparator) +{ + ScModelObj* pModelObj = createDoc("empty.ods"); + ScTabViewShell* pView = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current()); + ScDocument* pDoc = pModelObj->GetDocument(); + + ScAddress addr(2, 0, 0); + typeCharsInCell("=subtotal(9,A1:A8", addr.Col(), addr.Row(), pView, pModelObj, false, true); + // Without the fix it would fail with + // - Expected: 0 + // - Actual : Err:508 + CPPUNIT_ASSERT_EQUAL(u"0"_ustr, pDoc->GetString(addr)); +} + +CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testDecimalSeparatorInfo) +{ + createDoc("decimal-separator.ods"); + + ScTestViewCallback aView1; + + // Go to cell A1. + uno::Sequence<beans::PropertyValue> aPropertyValues + = { comphelper::makePropertyValue("ToPoint", OUString("$A$1")) }; + dispatchCommand(mxComponent, ".uno:GoToCell", aPropertyValues); + + // Cell A1 has language set to English. Decimal separator should be ".". + CPPUNIT_ASSERT_EQUAL(std::string("."), aView1.decimalSeparator); + + // Go to cell B1. + aPropertyValues = { comphelper::makePropertyValue("ToPoint", OUString("B$1")) }; + dispatchCommand(mxComponent, ".uno:GoToCell", aPropertyValues); + + // Cell B1 has language set to Turkish. Decimal separator should be ",". + CPPUNIT_ASSERT_EQUAL(std::string(","), aView1.decimalSeparator); +} + +CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCool11739LocaleDialogFieldUnit) +{ + createDoc("empty.ods"); + SfxViewShell* pView1 = SfxViewShell::Current(); + pView1->SetLOKLocale(u"fr-FR"_ustr); + + ScModule* pMod = ScModule::get(); + FieldUnit eMetric = pMod->GetMetric(); + + // Without the fix, it fails with + // - Expected: 2 + // - Actual : 8 + // where 2 is FieldUnit::CM and 8 is FieldUnit::INCH + CPPUNIT_ASSERT_EQUAL(FieldUnit::CM, eMetric); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/tiledrendering/tiledrenderingmodeltestbase.cxx b/sc/qa/unit/tiledrendering/tiledrenderingmodeltestbase.cxx deleted file mode 100644 index 9fa272789780..000000000000 --- a/sc/qa/unit/tiledrendering/tiledrenderingmodeltestbase.cxx +++ /dev/null @@ -1,465 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include <test/unoapixml_test.hxx> -#include <boost/property_tree/json_parser.hpp> - -#include <LibreOfficeKit/LibreOfficeKitEnums.h> -#include <osl/conditn.hxx> -#include <sfx2/lokhelper.hxx> -#include <comphelper/string.hxx> -#include <tabvwsh.hxx> -#include <test/lokcallback.hxx> -#include <docuno.hxx> - -using namespace css; - -class ViewCallback; - -class ScTiledRenderingTest : public UnoApiXmlTest -{ -public: - ScTiledRenderingTest(); - virtual void setUp() override; - virtual void tearDown() override; - - void checkSampleInvalidation(const ViewCallback& rView, bool bFullRow); - void cellInvalidationHelper(ScModelObj* pModelObj, ScTabViewShell* pView, const ScAddress& rAdr, - bool bAddText, bool bFullRow); - - ScModelObj* createDoc(const char* pName); - void setupLibreOfficeKitViewCallback(SfxViewShell* pViewShell); - static void callback(int nType, const char* pPayload, void* pData); - void callbackImpl(int nType, const char* pPayload); - - /// document size changed callback. - osl::Condition m_aDocSizeCondition; - Size m_aDocumentSize; - - TestLokCallbackWrapper m_callbackWrapper; -}; - -ScTiledRenderingTest::ScTiledRenderingTest() - : UnoApiXmlTest(u"/sc/qa/unit/tiledrendering/data/"_ustr) - , m_callbackWrapper(&callback, this) -{ -} - -void ScTiledRenderingTest::setUp() -{ - UnoApiXmlTest::setUp(); - - comphelper::LibreOfficeKit::setActive(true); -} - -void ScTiledRenderingTest::tearDown() -{ - if (mxComponent.is()) - { - mxComponent->dispose(); - mxComponent.clear(); - } - - m_callbackWrapper.clear(); - - comphelper::LibreOfficeKit::resetCompatFlag(); - - comphelper::LibreOfficeKit::setActive(false); - - UnoApiXmlTest::tearDown(); -} - -ScModelObj* ScTiledRenderingTest::createDoc(const char* pName) -{ - loadFromFile(OUString::createFromAscii(pName)); - - ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent); - CPPUNIT_ASSERT(pModelObj); - pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); - return pModelObj; -} - -void ScTiledRenderingTest::setupLibreOfficeKitViewCallback(SfxViewShell* pViewShell) -{ - pViewShell->setLibreOfficeKitViewCallback(&m_callbackWrapper); - m_callbackWrapper.setLOKViewId(SfxLokHelper::getView(pViewShell)); -} - -void ScTiledRenderingTest::callback(int nType, const char* pPayload, void* pData) -{ - static_cast<ScTiledRenderingTest*>(pData)->callbackImpl(nType, pPayload); -} - -void ScTiledRenderingTest::callbackImpl(int nType, const char* pPayload) -{ - switch (nType) - { - case LOK_CALLBACK_DOCUMENT_SIZE_CHANGED: - { - OString aPayload(pPayload); - sal_Int32 nIndex = 0; - OString aToken = aPayload.getToken(0, ',', nIndex); - m_aDocumentSize.setWidth(aToken.toInt32()); - aToken = aPayload.getToken(0, ',', nIndex); - m_aDocumentSize.setHeight(aToken.toInt32()); - m_aDocSizeCondition.set(); - } - break; - } -} - -struct EditCursorMessage final -{ - tools::Rectangle m_aRelRect; - Point m_aRefPoint; - - void clear() - { - m_aRelRect.SetEmpty(); - m_aRefPoint = Point(-1, -1); - } - - bool empty() { return m_aRelRect.IsEmpty() && m_aRefPoint.X() == -1 && m_aRefPoint.Y() == -1; } - - void parseMessage(const char* pMessage) - { - clear(); - if (!pMessage - || !comphelper::LibreOfficeKit::isCompatFlagSet( - comphelper::LibreOfficeKit::Compat::scPrintTwipsMsgs) - || !comphelper::LibreOfficeKit::isViewIdForVisCursorInvalidation()) - return; - - std::stringstream aStream(pMessage); - boost::property_tree::ptree aTree; - boost::property_tree::read_json(aStream, aTree); - std::string aVal; - boost::property_tree::ptree::const_assoc_iterator it = aTree.find("refpoint"); - if (it != aTree.not_found()) - aVal = aTree.get_child("refpoint").get_value<std::string>(); - else - return; // happens in testTextBoxInsert test - - uno::Sequence<OUString> aSeq - = comphelper::string::convertCommaSeparated(OUString::createFromAscii(aVal)); - CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aSeq.getLength()); - m_aRefPoint.setX(aSeq[0].toInt32()); - m_aRefPoint.setY(aSeq[1].toInt32()); - - aVal = aTree.get_child("relrect").get_value<std::string>(); - aSeq = comphelper::string::convertCommaSeparated(OUString::createFromAscii(aVal)); - CPPUNIT_ASSERT_EQUAL(sal_Int32(4), aSeq.getLength()); - m_aRelRect.SetLeft(aSeq[0].toInt32()); - m_aRelRect.SetTop(aSeq[1].toInt32()); - m_aRelRect.setWidth(aSeq[2].toInt32()); - m_aRelRect.setHeight(aSeq[3].toInt32()); - } - - tools::Rectangle getBounds() - { - tools::Rectangle aBounds = m_aRelRect; - aBounds.Move(m_aRefPoint.X(), m_aRefPoint.Y()); - return aBounds; - } -}; - -struct TextSelectionMessage -{ - std::vector<tools::Rectangle> m_aRelRects; - Point m_aRefPoint; - - void clear() - { - m_aRefPoint.setX(0); - m_aRefPoint.setY(0); - m_aRelRects.clear(); - } - - bool empty() { return m_aRelRects.empty(); } - - void parseMessage(const char* pMessage) - { - clear(); - if (!pMessage) - return; - - std::string aStr(pMessage); - if (aStr.find(",") == std::string::npos) - return; - - size_t nRefDelimStart = aStr.find("::"); - std::string aRectListString - = (nRefDelimStart == std::string::npos) ? aStr : aStr.substr(0, nRefDelimStart); - std::string aRefPointString - = (nRefDelimStart == std::string::npos) - ? std::string("0, 0") - : aStr.substr(nRefDelimStart + 2, aStr.length() - 2 - nRefDelimStart); - uno::Sequence<OUString> aSeq - = comphelper::string::convertCommaSeparated(OUString::createFromAscii(aRefPointString)); - CPPUNIT_ASSERT_EQUAL(sal_Int32(2), aSeq.getLength()); - m_aRefPoint.setX(aSeq[0].toInt32()); - m_aRefPoint.setY(aSeq[1].toInt32()); - - size_t nStart = 0; - size_t nEnd = aRectListString.find(";"); - if (nEnd == std::string::npos) - nEnd = aRectListString.length(); - do - { - std::string aRectString = aRectListString.substr(nStart, nEnd - nStart); - { - aSeq = comphelper::string::convertCommaSeparated( - OUString::createFromAscii(aRectString)); - CPPUNIT_ASSERT_EQUAL(sal_Int32(4), aSeq.getLength()); - tools::Rectangle aRect; - aRect.SetLeft(aSeq[0].toInt32()); - aRect.SetTop(aSeq[1].toInt32()); - aRect.setWidth(aSeq[2].toInt32()); - aRect.setHeight(aSeq[3].toInt32()); - - m_aRelRects.push_back(aRect); - } - - nStart = nEnd + 1; - nEnd = aRectListString.find(";", nStart); - } while (nEnd != std::string::npos); - } - - tools::Rectangle getBounds(size_t nIndex) - { - if (nIndex >= m_aRelRects.size()) - return tools::Rectangle(); - - tools::Rectangle aBounds = m_aRelRects[nIndex]; - aBounds.Move(m_aRefPoint.X(), m_aRefPoint.Y()); - return aBounds; - } -}; - -/// A view callback tracks callbacks invoked on one specific view. -class ViewCallback final -{ - SfxViewShell* mpViewShell; - int mnView; - -public: - bool m_bOwnCursorInvalidated; - bool m_bViewCursorInvalidated; - bool m_bTextViewSelectionInvalidated; - bool m_bGraphicSelection; - bool m_bGraphicViewSelection; - bool m_bFullInvalidateTiles; - bool m_bInvalidateTiles; - std::vector<tools::Rectangle> m_aInvalidations; - tools::Rectangle m_aCellCursorBounds; - std::vector<int> m_aInvalidationsParts; - std::vector<int> m_aInvalidationsMode; - bool m_bViewLock; - OString m_sCellFormula; - boost::property_tree::ptree m_aCommentCallbackResult; - EditCursorMessage m_aInvalidateCursorResult; - TextSelectionMessage m_aTextSelectionResult; - OString m_sInvalidateHeader; - OString m_sInvalidateSheetGeometry; - OString m_aHyperlinkClicked; - OString m_ShapeSelection; - std::map<std::string, boost::property_tree::ptree> m_aStateChanges; - TestLokCallbackWrapper m_callbackWrapper; - - ViewCallback(bool bDeleteListenerOnDestruct = true) - : m_bOwnCursorInvalidated(false) - , m_bViewCursorInvalidated(false) - , m_bTextViewSelectionInvalidated(false) - , m_bGraphicSelection(false) - , m_bGraphicViewSelection(false) - , m_bFullInvalidateTiles(false) - , m_bInvalidateTiles(false) - , m_bViewLock(false) - , m_callbackWrapper(&callback, this) - { - mpViewShell = SfxViewShell::Current(); - mpViewShell->setLibreOfficeKitViewCallback(&m_callbackWrapper); - mnView = SfxLokHelper::getView(); - m_callbackWrapper.setLOKViewId(mnView); - if (!bDeleteListenerOnDestruct) - mpViewShell = nullptr; - } - - ~ViewCallback() - { - if (mpViewShell) - { - SfxLokHelper::setView(mnView); - mpViewShell->setLibreOfficeKitViewCallback(nullptr); - } - } - - static void callback(int nType, const char* pPayload, void* pData) - { - static_cast<ViewCallback*>(pData)->callbackImpl(nType, pPayload); - } - - void callbackImpl(int nType, const char* pPayload) - { - switch (nType) - { - case LOK_CALLBACK_CELL_CURSOR: - { - m_bOwnCursorInvalidated = true; - uno::Sequence<OUString> aSeq = comphelper::string::convertCommaSeparated( - OUString::createFromAscii(pPayload)); - m_aCellCursorBounds = tools::Rectangle(); - if (aSeq.getLength() == 6) - { - m_aCellCursorBounds.SetLeft(aSeq[0].toInt32()); - m_aCellCursorBounds.SetTop(aSeq[1].toInt32()); - m_aCellCursorBounds.setWidth(aSeq[2].toInt32()); - m_aCellCursorBounds.setHeight(aSeq[3].toInt32()); - } - } - break; - case LOK_CALLBACK_CELL_VIEW_CURSOR: - { - m_bViewCursorInvalidated = true; - } - break; - case LOK_CALLBACK_TEXT_VIEW_SELECTION: - { - m_bTextViewSelectionInvalidated = true; - } - break; - case LOK_CALLBACK_VIEW_LOCK: - { - std::stringstream aStream(pPayload); - boost::property_tree::ptree aTree; - boost::property_tree::read_json(aStream, aTree); - m_bViewLock = aTree.get_child("rectangle").get_value<std::string>() != "EMPTY"; - } - break; - case LOK_CALLBACK_GRAPHIC_SELECTION: - { - m_bGraphicSelection = true; - m_ShapeSelection = OString(pPayload); - } - break; - case LOK_CALLBACK_GRAPHIC_VIEW_SELECTION: - { - m_bGraphicViewSelection = true; - } - break; - case LOK_CALLBACK_INVALIDATE_TILES: - { - OString text(pPayload); - if (text.startsWith("EMPTY")) - { - m_bFullInvalidateTiles = true; - } - else - { - uno::Sequence<OUString> aSeq = comphelper::string::convertCommaSeparated( - OUString::createFromAscii(pPayload)); - CPPUNIT_ASSERT(aSeq.getLength() == 4 || aSeq.getLength() == 6); - tools::Rectangle aInvalidationRect; - aInvalidationRect.SetLeft(aSeq[0].toInt32()); - aInvalidationRect.SetTop(aSeq[1].toInt32()); - aInvalidationRect.setWidth(aSeq[2].toInt32()); - aInvalidationRect.setHeight(aSeq[3].toInt32()); - m_aInvalidations.push_back(aInvalidationRect); - if (aSeq.getLength() == 6) - { - m_aInvalidationsParts.push_back(aSeq[4].toInt32()); - m_aInvalidationsMode.push_back(aSeq[5].toInt32()); - } - m_bInvalidateTiles = true; - } - } - break; - case LOK_CALLBACK_CELL_FORMULA: - { - m_sCellFormula = pPayload; - } - break; - case LOK_CALLBACK_COMMENT: - { - m_aCommentCallbackResult.clear(); - std::stringstream aStream(pPayload); - boost::property_tree::read_json(aStream, m_aCommentCallbackResult); - m_aCommentCallbackResult = m_aCommentCallbackResult.get_child("comment"); - } - break; - case LOK_CALLBACK_INVALIDATE_HEADER: - { - m_sInvalidateHeader = pPayload; - } - break; - case LOK_CALLBACK_INVALIDATE_SHEET_GEOMETRY: - { - m_sInvalidateSheetGeometry = pPayload; - } - break; - case LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR: - { - m_aInvalidateCursorResult.parseMessage(pPayload); - } - break; - case LOK_CALLBACK_HYPERLINK_CLICKED: - { - m_aHyperlinkClicked = pPayload; - } - break; - case LOK_CALLBACK_TEXT_SELECTION: - { - m_aTextSelectionResult.parseMessage(pPayload); - } - break; - case LOK_CALLBACK_STATE_CHANGED: - { - std::stringstream aStream(pPayload); - boost::property_tree::ptree aTree; - std::string aCommandName; - - if (aStream.str().starts_with("{")) - { - boost::property_tree::read_json(aStream, aTree); - auto it = aTree.find("commandName"); - if (it == aTree.not_found()) - { - break; - } - - aCommandName = it->second.get_value<std::string>(); - } - else - { - std::string aState = aStream.str(); - auto it = aState.find("="); - if (it == std::string::npos) - { - break; - } - aCommandName = aState.substr(0, it); - aTree.put("state", aState.substr(it + 1)); - } - - m_aStateChanges[aCommandName] = aTree; - } - break; - } - } - - void ClearAllInvalids() - { - m_bInvalidateTiles = false; - m_aInvalidations.clear(); - m_aInvalidationsParts.clear(); - m_aInvalidationsMode.clear(); - } -}; - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx index f8aa50bef874..2e1c8fc40341 100644 --- a/sc/qa/unit/ucalc.cxx +++ b/sc/qa/unit/ucalc.cxx @@ -1435,7 +1435,7 @@ CPPUNIT_TEST_FIXTURE(Test, testIteratorsUnallocatedColumnsAttributes) vcl::Font aFont; const ScPatternAttr* pattern = m_pDoc->GetPattern(m_pDoc->MaxCol(), 1, 0); pattern->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeightMaybeAskConfig()); // Test iterators. ScDocAttrIterator docit( *m_pDoc, 0, allocatedColsCount - 1, 1, allocatedColsCount, 2 ); @@ -3097,6 +3097,7 @@ CPPUNIT_TEST_FIXTURE(Test, testFunctionLists) "ADDRESS", "AREAS", "CHOOSE", + "CHOOSECOLS", "CHOOSEROWS", "COLUMN", "COLUMNS", @@ -3108,6 +3109,7 @@ CPPUNIT_TEST_FIXTURE(Test, testFunctionLists) "FILTER", "GETPIVOTDATA", "HLOOKUP", + "HSTACK", "HYPERLINK", "INDEX", "INDIRECT", @@ -3127,6 +3129,7 @@ CPPUNIT_TEST_FIXTURE(Test, testFunctionLists) "TOROW", "UNIQUE", "VLOOKUP", + "VSTACK", "WRAPCOLS", "WRAPROWS", "XLOOKUP", diff --git a/sc/qa/unit/ucalc_condformat.cxx b/sc/qa/unit/ucalc_condformat.cxx index 56ebcd01e3eb..7b077ba5d1ed 100644 --- a/sc/qa/unit/ucalc_condformat.cxx +++ b/sc/qa/unit/ucalc_condformat.cxx @@ -841,9 +841,9 @@ CPPUNIT_TEST_FIXTURE(TestCondformat, testIconSet) ScIconSetFormat* pEntry = new ScIconSetFormat(m_pDoc); ScIconSetFormatData* pData = new ScIconSetFormatData; - pData->m_Entries.emplace_back(new ScColorScaleEntry(0, COL_BLUE)); - pData->m_Entries.emplace_back(new ScColorScaleEntry(1, COL_GREEN)); - pData->m_Entries.emplace_back(new ScColorScaleEntry(2, COL_RED)); + pData->m_Entries.emplace_back(new ScColorScaleEntry(0, COL_BLUE, COLORSCALE_VALUE, ScConditionMode::EqLess)); + pData->m_Entries.emplace_back(new ScColorScaleEntry(1, COL_GREEN, COLORSCALE_VALUE, ScConditionMode::EqGreater)); + pData->m_Entries.emplace_back(new ScColorScaleEntry(2, COL_RED, COLORSCALE_VALUE, ScConditionMode::Equal)); pEntry->SetIconSetData(pData); m_pDoc->AddCondFormatData(pFormat->GetRange(), 0, 1); @@ -856,7 +856,7 @@ CPPUNIT_TEST_FIXTURE(TestCondformat, testIconSet) { 0.0, 0 }, { 1.0, 1 }, { 2.0, 2 }, - { 3.0, 2 } + { 3.0, 1 } }; for(size_t i = 0; i < SAL_N_ELEMENTS(aTests); ++i) { diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx index 40d2c6f174de..4dd944fb1774 100644 --- a/sc/qa/unit/ucalc_formula.cxx +++ b/sc/qa/unit/ucalc_formula.cxx @@ -4761,6 +4761,78 @@ CPPUNIT_TEST_FIXTURE(TestFormula, testFuncSUMPRODUCT) m_pDoc->DeleteTab(0); } +CPPUNIT_TEST_FIXTURE(TestFormula, testFuncSUBTOTAL) +{ + m_pDoc->InsertTab(0, u"Formula"_ustr); + + sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on. + + // Fill C1:C1025 with values and insert formulas in D1:D1025 using the named expression. + for (size_t i = 0; i < 1025; i++) + m_pDoc->SetValue(ScAddress(2, i, 0), i + 1); + + // Add a named expression for a function. + ScRangeName* pGlobalNames = m_pDoc->GetRangeName(); + CPPUNIT_ASSERT_MESSAGE("Failed to obtain global named expression object.", pGlobalNames); + ScRangeData* pName = new ScRangeData( + *m_pDoc, u"MyRelative"_ustr, u"$C1:$C$1000"_ustr, ScAddress(2, 999, 0), + ScRangeData::Type::Name, formula::FormulaGrammar::GRAM_NATIVE); + + bool bInserted = pGlobalNames->insert(pName); + CPPUNIT_ASSERT_MESSAGE("Failed to insert a new name.", bInserted); + + for (size_t i = 0; i < 1025; i++) + m_pDoc->SetString(ScAddress(3, i, 0), u"=IF(SUBTOTAL(3;MyRelative)=1;"";SUBTOTAL(3;MyRelative))"_ustr); + + // Make sure the results are correct. + for (size_t i = 0; i < 1025; i++) + { + if (i < 999.0) + CPPUNIT_ASSERT_EQUAL(26.0, m_pDoc->GetValue(3, i, 0)); + else + CPPUNIT_ASSERT_EQUAL((1000.0 - (i - 999.0)), m_pDoc->GetValue(3, i, 0)); + } + + ScRange aTrimedRange(2, 999, 0, 2, 1024, 0); + ScRange aValidRange(2, 0, 0, 2, 999, 0); + for (size_t i = 0; i < 1025; i++) + { + ScFormulaCell* pCell = m_pDoc->GetFormulaCell(ScAddress(3, i, 0)); + ScTokenArray* pCode = pCell->GetCode(); + sal_uInt16 nLen = pCode->GetCodeLen(); + FormulaToken** pRPNArray = pCode->GetCode(); + OUString aCellName = pCell->aPos.GetColRowString(); + + for (sal_uInt16 nIdx = 0; nIdx < nLen; ++nIdx) + { + FormulaToken* pTok = pRPNArray[nIdx]; + if (pTok && pTok->GetType() == svDoubleRef) + { + ScRange aRange = pTok->GetDoubleRef()->toAbs(*m_pDoc, ScAddress(3, i, 0)); + if (i < 999) + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(OUString("Double ref is incorrectly trimmed in: " + aCellName).toUtf8().getStr(), + aRange, aTrimedRange); + // Without the trim it would failed with + // assertion failed + // - Expression: aRange == aTrimedRange + // - Double ref is incorrectly trimmed in : D1 + // ScRange aTrimmableRange(2, 999, 0, 0, 1048575, 0); + } + else + { + CPPUNIT_ASSERT_EQUAL_MESSAGE(OUString("Double ref is incorrectly trimmed in: " + aCellName).toUtf8().getStr(), + aRange, aValidRange); + } + } + } + if (i >= 999) + aValidRange.aStart.IncRow(); + } + + m_pDoc->DeleteTab(0); +} + CPPUNIT_TEST_FIXTURE(TestFormula, testFuncSUMXMY2) { m_pDoc->InsertTab(0, u"Test SumXMY2"_ustr); diff --git a/sc/qa/unit/uicalc/uicalc.cxx b/sc/qa/unit/uicalc/uicalc.cxx index 82f9c296b1f1..e2dd7940e7cf 100644 --- a/sc/qa/unit/uicalc/uicalc.cxx +++ b/sc/qa/unit/uicalc/uicalc.cxx @@ -981,6 +981,19 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf147744) pMod->SetInputOptions(aInputOption); } +CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf165821) +{ + createScDoc(); + + insertStringToCell(u"A1"_ustr, u"=COUNTA(XFD:XFD)"); + + ScDocument* pDoc = getScDoc(); + // Without the fix in place, this test would have failed with + // - Expected: 0 + // - Actual : 1 + CPPUNIT_ASSERT_EQUAL(u"0"_ustr, pDoc->GetString(ScAddress(0, 0, 0))); +} + CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf138432) { createScDoc("tdf138432.ods"); @@ -1939,7 +1952,8 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testPasteTransposed) const ScPatternAttr* pPattern = pDoc->GetPattern(0, 1, 0); vcl::Font aFont; pPattern->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, + aFont.GetWeightMaybeAskConfig()); goToCell(u"A1:A3"_ustr); @@ -1965,7 +1979,8 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testPasteTransposed) pPattern = pDoc->GetPattern(1, 0, 0); pPattern->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, + aFont.GetWeightMaybeAskConfig()); } // Test the call of .uno:PasteAsLink (tdf#90101) @@ -1994,7 +2009,8 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testPasteAsLink) const ScPatternAttr* pPattern = pDoc->GetPattern(0, 1, 0); vcl::Font aFont; pPattern->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, + aFont.GetWeightMaybeAskConfig()); goToCell(u"A1:A3"_ustr); @@ -2018,7 +2034,7 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testPasteAsLink) pPattern = pDoc->GetPattern(2, 1, 0); pPattern->fillFontOnly(aFont); CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be normal (cell attributes should not be copied)", - WEIGHT_NORMAL, aFont.GetWeight()); + WEIGHT_NORMAL, aFont.GetWeightMaybeAskConfig()); } CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testTdf119659) @@ -2468,6 +2484,38 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testMouseMergeRef) } } +CPPUNIT_TEST_FIXTURE(ScUiCalcTest, testFillHandleDnD) +{ + // Test the fill handle drag and drop + createScDoc(); + + ScTabViewShell* pViewShell = getViewShell(); + + insertStringToCell(u"A1"_ustr, u"1"); + + // Select cell A1 to show the handle + goToCell(u"A1"_ustr); + + // B2 left top corner = A1 right bottom corner + Point aB2 = pViewShell->GetViewData().GetPrintTwipsPos(1, 1); + Point aA7 = pViewShell->GetViewData().GetPrintTwipsPos(0, 6); + + ScModelObj* pModelObj = comphelper::getFromUnoTunnel<ScModelObj>(mxComponent); + pModelObj->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONDOWN, aB2.X() - 1, aB2.Y() - 1, 1, + MOUSE_LEFT, 0); + pModelObj->postMouseEvent(LOK_MOUSEEVENT_MOUSEMOVE, aA7.X(), aA7.Y(), 1, MOUSE_LEFT, 0); + pModelObj->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONUP, aA7.X(), aA7.Y(), 1, MOUSE_LEFT, 0); + Scheduler::ProcessEventsToIdle(); + + ScDocument* pDoc = getScDoc(); + CPPUNIT_ASSERT_EQUAL(u"1"_ustr, pDoc->GetString(ScAddress(0, 0, 0))); + CPPUNIT_ASSERT_EQUAL(u"2"_ustr, pDoc->GetString(ScAddress(0, 1, 0))); + CPPUNIT_ASSERT_EQUAL(u"3"_ustr, pDoc->GetString(ScAddress(0, 2, 0))); + CPPUNIT_ASSERT_EQUAL(u"4"_ustr, pDoc->GetString(ScAddress(0, 3, 0))); + CPPUNIT_ASSERT_EQUAL(u"5"_ustr, pDoc->GetString(ScAddress(0, 4, 0))); + CPPUNIT_ASSERT_EQUAL(u"6"_ustr, pDoc->GetString(ScAddress(0, 5, 0))); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/uicalc/uicalc2.cxx b/sc/qa/unit/uicalc/uicalc2.cxx index 83bf9fcd36f5..253fb35c4b9d 100644 --- a/sc/qa/unit/uicalc/uicalc2.cxx +++ b/sc/qa/unit/uicalc/uicalc2.cxx @@ -1319,16 +1319,19 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest2, testUnallocatedColumnsAttributes) CPPUNIT_ASSERT_EQUAL(INITIALCOLCOUNT, pDoc->GetAllocatedColumnsCount(0)); vcl::Font aFont; pDoc->GetPattern(pDoc->MaxCol(), 0, 0)->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, + aFont.GetWeightMaybeAskConfig()); goToCell(u"A2:CV2"_ustr); // first 100 cells in row 2 dispatchCommand(mxComponent, u".uno:Bold"_ustr, {}); // These need to be explicitly allocated. CPPUNIT_ASSERT_EQUAL(SCCOL(100), pDoc->GetAllocatedColumnsCount(0)); pDoc->GetPattern(99, 1, 0)->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, + aFont.GetWeightMaybeAskConfig()); pDoc->GetPattern(100, 1, 0)->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should not be bold", WEIGHT_NORMAL, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should not be bold", WEIGHT_NORMAL, + aFont.GetWeightMaybeAskConfig()); goToCell("CW3:" + pDoc->MaxColAsString() + "3"); // All but first 100 cells in row 3. dispatchCommand(mxComponent, u".uno:Bold"_ustr, {}); @@ -1336,9 +1339,11 @@ CPPUNIT_TEST_FIXTURE(ScUiCalcTest2, testUnallocatedColumnsAttributes) // by the default attribute. CPPUNIT_ASSERT_EQUAL(SCCOL(100), pDoc->GetAllocatedColumnsCount(0)); pDoc->GetPattern(99, 2, 0)->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should not be bold", WEIGHT_NORMAL, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should not be bold", WEIGHT_NORMAL, + aFont.GetWeightMaybeAskConfig()); pDoc->GetPattern(100, 2, 0)->fillFontOnly(aFont); - CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, aFont.GetWeight()); + CPPUNIT_ASSERT_EQUAL_MESSAGE("font should be bold", WEIGHT_BOLD, + aFont.GetWeightMaybeAskConfig()); } CPPUNIT_TEST_FIXTURE(ScUiCalcTest2, testAutoSum) diff --git a/sc/sdi/cellsh.sdi b/sc/sdi/cellsh.sdi index 44e87cd69119..0f16536d1c42 100644 --- a/sc/sdi/cellsh.sdi +++ b/sc/sdi/cellsh.sdi @@ -63,6 +63,7 @@ interface CellSelection FID_VALIDATION [ ExecMethod = ExecuteDB; StateMethod = GetBlockState; ] FID_CURRENTVALIDATION [ ExecMethod = ExecuteDB; StateMethod = GetBlockState; ] SID_TEXT_TO_COLUMNS [ ExecMethod = ExecuteDB; StateMethod = GetDBState; ] + SID_CLEAR_AUTO_FILTER [ ExecMethod = ExecuteDB; StateMethod = GetDBState; ] // } database operations diff --git a/sc/sdi/docsh.sdi b/sc/sdi/docsh.sdi index 380ddb08e620..2d9a50ccb8ae 100644 --- a/sc/sdi/docsh.sdi +++ b/sc/sdi/docsh.sdi @@ -81,6 +81,8 @@ interface TableDocument SID_SPELLCHECK_APPLY_SUGGESTION [ ExecMethod = Execute; StateMethod = GetState; ] SID_REFRESH_VIEW [ ExecMethod = Execute; StateMethod = GetState; ] + SID_PROTECTPOS [ ExecMethod = Execute; StateMethod = GetState; ] + SID_PROTECTSIZE [ ExecMethod = Execute; StateMethod = GetState; ]; } diff --git a/sc/sdi/drawsh.sdi b/sc/sdi/drawsh.sdi index 87688e93f8f7..cf840a07be43 100644 --- a/sc/sdi/drawsh.sdi +++ b/sc/sdi/drawsh.sdi @@ -229,6 +229,7 @@ interface TableDraw SID_MOVE_SHAPE_HANDLE [ ExecMethod = ExecDrawAttr; ] SID_ATTR_TEXTCOLUMNS_NUMBER [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; ] SID_ATTR_TEXTCOLUMNS_SPACING [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; ] + SID_CLICK_CHANGE_ROTATION [ ExecMethod = ExecDrawAttr; StateMethod = GetState; ] } diff --git a/sc/sdi/scalc.sdi b/sc/sdi/scalc.sdi index 710f3c702045..e93e78e125e2 100644 --- a/sc/sdi/scalc.sdi +++ b/sc/sdi/scalc.sdi @@ -1069,6 +1069,23 @@ SfxVoidItem DataFilterRemoveFilter SID_UNFILTER GroupId = SfxGroupId::Data; ] +SfxVoidItem ClearAutoFilter SID_CLEAR_AUTO_FILTER +() +[ + AutoUpdate = FALSE, + FastCall = FALSE, + ReadOnlyDoc = FALSE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + + AccelConfig = TRUE, + MenuConfig = TRUE, + ToolBoxConfig = TRUE, + GroupId = SfxGroupId::Data; +] + SfxVoidItem DataFilterSpecialFilter SID_SPECIAL_FILTER () @@ -1634,7 +1651,7 @@ SfxVoidItem FillDown FID_FILL_TO_BOTTOM [ AutoUpdate = FALSE, FastCall = FALSE, - ReadOnlyDoc = TRUE, + ReadOnlyDoc = FALSE, Toggle = FALSE, Container = FALSE, RecordAbsolute = FALSE, @@ -4461,7 +4478,7 @@ SfxVoidItem ResetAttributes SID_CELL_FORMAT_RESET [ AutoUpdate = FALSE, FastCall = FALSE, - ReadOnlyDoc = TRUE, + ReadOnlyDoc = FALSE, Toggle = FALSE, Container = FALSE, RecordAbsolute = FALSE, diff --git a/sc/source/core/data/attrib.cxx b/sc/source/core/data/attrib.cxx index 21e7cb350756..81f2f598ef89 100644 --- a/sc/source/core/data/attrib.cxx +++ b/sc/source/core/data/attrib.cxx @@ -417,9 +417,7 @@ bool ScPageHFItem::QueryValue( uno::Any& rVal, sal_uInt8 /* nMemberId */ ) const new ScHeaderFooterContentObj(); xContent->Init(pLeftArea.get(), pCenterArea.get(), pRightArea.get()); - uno::Reference<sheet::XHeaderFooterContent> xCont(xContent); - - rVal <<= xCont; + rVal <<= uno::Reference<sheet::XHeaderFooterContent>(xContent); return true; } diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx index 9d7df4506c4f..786f1d242a4c 100644 --- a/sc/source/core/data/colorscale.cxx +++ b/sc/source/core/data/colorscale.cxx @@ -155,16 +155,17 @@ ScColorScaleEntry::ScColorScaleEntry(): mnVal(0), mpFormat(nullptr), meType(COLORSCALE_VALUE), - mbGreaterThanOrEqual(true) + meMode(ScConditionMode::EqGreater) { } -ScColorScaleEntry::ScColorScaleEntry(double nVal, const Color& rCol, ScColorScaleEntryType eType): +ScColorScaleEntry::ScColorScaleEntry(double nVal, const Color& rCol, ScColorScaleEntryType eType, + ScConditionMode eMode): mnVal(nVal), mpFormat(nullptr), maColor(rCol), meType(eType), - mbGreaterThanOrEqual(true) + meMode(eMode) { } @@ -173,7 +174,7 @@ ScColorScaleEntry::ScColorScaleEntry(const ScColorScaleEntry& rEntry): mpFormat(rEntry.mpFormat), maColor(rEntry.maColor), meType(rEntry.meType), - mbGreaterThanOrEqual(true) + meMode(rEntry.meMode) { setListener(); if(rEntry.mpCell) @@ -189,7 +190,7 @@ ScColorScaleEntry::ScColorScaleEntry(ScDocument* pDoc, const ScColorScaleEntry& mpFormat(rEntry.mpFormat), maColor(rEntry.maColor), meType(rEntry.meType), - mbGreaterThanOrEqual(true) + meMode(rEntry.meMode) { setListener(); if(rEntry.mpCell) @@ -251,14 +252,14 @@ double ScColorScaleEntry::GetValue() const return mnVal; } -bool ScColorScaleEntry::GetGreaterThanOrEqual() const +ScConditionMode ScColorScaleEntry::GetMode() const { - return mbGreaterThanOrEqual; + return meMode; } -void ScColorScaleEntry::SetGreaterThanOrEqual(bool bGreaterThanOrEqual) +void ScColorScaleEntry::SetMode(ScConditionMode eMode) { - mbGreaterThanOrEqual = bGreaterThanOrEqual; + meMode = eMode; } void ScColorScaleEntry::SetValue(double nValue) @@ -1080,6 +1081,28 @@ void ScDataBarFormat::EnsureSize() } } +static bool Compare(double nVal1, double nVal2, const ScIconSetFormat::const_iterator& itr) +{ + switch ((*itr)->GetMode()) + { + case ScConditionMode::Equal: + return nVal1 == nVal2; + case ScConditionMode::Less: + return nVal1 < nVal2; + case ScConditionMode::Greater: + return nVal1 > nVal2; + case ScConditionMode::EqLess: + return nVal1 <= nVal2; + case ScConditionMode::EqGreater: + return nVal1 >= nVal2; + case ScConditionMode::NotEqual: + return nVal1 != nVal2; + default: + break; + } + return false; +} + ScIconSetFormatData::ScIconSetFormatData(ScIconSetFormatData const& rOther) : eIconSetType(rOther.eIconSetType) , mbShowValue(rOther.mbShowValue) @@ -1145,37 +1168,30 @@ std::unique_ptr<ScIconSetInfo> ScIconSetFormat::GetIconSetInfo(const ScAddress& // now we have for sure a value double nVal = rCell.getValue(); - if (mpFormatData->m_Entries.size() < 2) + if (mpFormatData->m_Entries.size() < 3) return nullptr; double nMin = GetMinValue(); double nMax = GetMaxValue(); - sal_Int32 nIndex = 0; + sal_Int32 nIndex = -1; const_iterator itr = begin(); - ++itr; - double nValMax = CalcValue(nMin, nMax, itr); - - ++itr; - bool bGreaterThanOrEqual = true; - while(itr != end() && nVal >= nValMax) + ScConditionMode eMode = ScConditionMode::EqGreater; + double nValRef = 0; + int i = 0; + while(itr != end()) { - bGreaterThanOrEqual = (*itr)->GetGreaterThanOrEqual(); - ++nIndex; - nValMax = CalcValue(nMin, nMax, itr); - ++itr; - } - - if (bGreaterThanOrEqual) - { - if(nVal >= nValMax) - ++nIndex; - } - else - { - if(nVal > nValMax) - ++nIndex; + nValRef = CalcValue(nMin, nMax, itr); + if (Compare(nVal, nValRef, itr)) + { + nIndex = i; + eMode = (*itr)->GetMode(); + } + itr++; + i++; } + if (nIndex == -1) + return nullptr; std::unique_ptr<ScIconSetInfo> pInfo(new ScIconSetInfo); @@ -1208,6 +1224,7 @@ std::unique_ptr<ScIconSetInfo> ScIconSetFormat::GetIconSetInfo(const ScAddress& } pInfo->mbShowValue = mpFormatData->mbShowValue; + pInfo->eConditionMode = eMode; return pInfo; } diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index e0e5505da9aa..b32e48b14e9d 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -310,7 +310,10 @@ tools::Long ScColumn::GetNeededSize( tools::Long nWidth = 0; if ( eOrient != SvxCellOrientation::Standard ) { - nWidth = pDev->GetTextHeight(); + tools::Long nHeight = pDev->GetTextHeight(); + // swap width and height + nValue = bWidth ? nHeight : pDev->GetTextWidth( aValStr ); + nWidth = nHeight; } else if ( nRotate ) { @@ -363,7 +366,10 @@ tools::Long ScColumn::GetNeededSize( } } else if (bBreak && !bWidth) + { nWidth = pDev->GetTextWidth(aValStr); + nValue = pDev->GetTextHeight(); + } else // in the common case (height), avoid calling the expensive GetTextWidth nValue = bWidth ? pDev->GetTextWidth( aValStr ) : pDev->GetTextHeight(); @@ -415,22 +421,22 @@ tools::Long ScColumn::GetNeededSize( pDev->SetMapMode( aHMMMode ); pEngine->SetRefDevice( pDev ); rDocument.ApplyAsianEditSettings( *pEngine ); - auto pSet = std::make_unique<SfxItemSet>(pEngine->GetEmptyItemSet()); + SfxItemSet aSet(pEngine->GetEmptyItemSet()); if ( ScStyleSheet* pPreviewStyle = rDocument.GetPreviewCellStyle( nCol, nRow, nTab ) ) { ScPatternAttr aPreviewPattern( *pPattern ); aPreviewPattern.SetStyleSheet(pPreviewStyle); - aPreviewPattern.FillEditItemSet(pSet.get(), pCondSet); + aPreviewPattern.FillEditItemSet(&aSet, pCondSet); } else { SfxItemSet* pFontSet = rDocument.GetPreviewFont( nCol, nRow, nTab ); - pPattern->FillEditItemSet(pSet.get(), pFontSet ? pFontSet : pCondSet); + pPattern->FillEditItemSet(&aSet, pFontSet ? pFontSet : pCondSet); } // no longer needed, are set with the text (is faster) // pEngine->SetDefaults( pSet ); - if ( pSet->Get(EE_PARA_HYPHENATE).GetValue() ) { + if ( aSet.Get(EE_PARA_HYPHENATE).GetValue() ) { css::uno::Reference<css::linguistic2::XHyphenator> xXHyphenator( LinguMgr::GetHyphenator() ); pEngine->SetHyphenator( xXHyphenator ); @@ -483,7 +489,7 @@ tools::Long ScColumn::GetNeededSize( if (aCell.getType() == CELLTYPE_EDIT) { - pEngine->SetTextNewDefaults(*aCell.getEditText(), std::move(pSet)); + pEngine->SetTextNewDefaults(*aCell.getEditText(), std::move(aSet)); } else { @@ -493,9 +499,9 @@ tools::Long ScColumn::GetNeededSize( rOptions.bFormula); if (!aString.isEmpty()) - pEngine->SetTextNewDefaults(aString, std::move(pSet)); + pEngine->SetTextNewDefaults(aString, std::move(aSet)); else - pEngine->SetDefaults(std::move(pSet)); + pEngine->SetDefaults(std::move(aSet)); } bool bEngineVertical = pEngine->IsEffectivelyVertical(); diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index 8d9a4e9731b2..973bdaeb7c09 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -2572,7 +2572,7 @@ class FilterEntriesHandler bool mbFiltering; bool mbFilteredRow; - void processCell(const ScColumn& rColumn, SCROW nRow, ScRefCellValue& rCell, bool bIsEmptyCell=false) + void processCell(const ScColumn& rColumn, SCROW nRow, const ScRefCellValue& rCell, bool bIsEmptyCell=false) { ScInterpreterContext& rContext = mrColumn.GetDoc().GetNonThreadedContext(); sal_uInt32 nFormat = mrColumn.GetNumberFormat(rContext, nRow); diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx index 79ca0357361a..452786cfbf87 100644 --- a/sc/source/core/data/column4.cxx +++ b/sc/source/core/data/column4.cxx @@ -368,7 +368,7 @@ void ScColumn::CopyOneCellFromClip( sc::CopyFromClipContext& rCxt, SCROW nRow1, } } -void ScColumn::duplicateSparkline(sc::CopyFromClipContext& rContext, sc::ColumnBlockPosition* pBlockPos, +void ScColumn::duplicateSparkline(const sc::CopyFromClipContext& rContext, sc::ColumnBlockPosition* pBlockPos, size_t nColOffset, size_t nDestSize, ScAddress aDestPosition) { if ((rContext.getInsertFlag() & InsertDeleteFlags::SPARKLINES) == InsertDeleteFlags::NONE) @@ -1130,7 +1130,7 @@ class ScriptTypeUpdater bool mbUpdated; private: - void updateScriptType( size_t nRow, ScRefCellValue& rCell ) + void updateScriptType( size_t nRow, const ScRefCellValue& rCell ) { sc::CellTextAttrStoreType::position_type aAttrPos = mrTextAttrs.position(miPosAttr, nRow); miPosAttr = aAttrPos.first; diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx index 97b1c73b0e08..625d3bac2bd7 100644 --- a/sc/source/core/data/conditio.cxx +++ b/sc/source/core/data/conditio.cxx @@ -755,7 +755,7 @@ void ScConditionEntry::Interpret( const ScAddress& rPos ) bFirstRun = false; } -static bool lcl_GetCellContent( ScRefCellValue& rCell, bool bIsStr1, double& rArg, OUString& rArgStr, +static bool lcl_GetCellContent( const ScRefCellValue& rCell, bool bIsStr1, double& rArg, OUString& rArgStr, const ScDocument* pDoc ) { @@ -1261,7 +1261,7 @@ bool ScConditionEntry::IsValidStr( const OUString& rArg, const ScAddress& rPos ) return bValid; } -bool ScConditionEntry::IsCellValid( ScRefCellValue& rCell, const ScAddress& rPos ) const +bool ScConditionEntry::IsCellValid( const ScRefCellValue& rCell, const ScAddress& rPos ) const { const_cast<ScConditionEntry*>(this)->Interpret(rPos); // Evaluate formula @@ -1862,7 +1862,7 @@ const ScFormatEntry* ScConditionalFormat::GetEntry( sal_uInt16 nPos ) const return nullptr; } -OUString ScConditionalFormat::GetCellStyle( ScRefCellValue& rCell, const ScAddress& rPos ) const +OUString ScConditionalFormat::GetCellStyle( const ScRefCellValue& rCell, const ScAddress& rPos ) const { for (const auto& rxEntry : maEntries) { @@ -1884,7 +1884,7 @@ OUString ScConditionalFormat::GetCellStyle( ScRefCellValue& rCell, const ScAddre return OUString(); } -ScCondFormatData ScConditionalFormat::GetData( ScRefCellValue& rCell, const ScAddress& rPos ) const +ScCondFormatData ScConditionalFormat::GetData( const ScRefCellValue& rCell, const ScAddress& rPos ) const { ScCondFormatData aData; for(const auto& rxEntry : maEntries) diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx index 00309ceb871b..6b90faf2b06e 100644 --- a/sc/source/core/data/dociter.cxx +++ b/sc/source/core/data/dociter.cxx @@ -875,17 +875,29 @@ void ScCellIterator::init() while (maEndPos.Tab() > 0 && !mrDoc.maTabs[maEndPos.Tab()]) maEndPos.IncTab(-1); // Only the tables in use - if (maStartPos.Tab() > maEndPos.Tab()) - maStartPos.SetTab(maEndPos.Tab()); - - if (!mrDoc.maTabs[maStartPos.Tab()]) + if (maStartPos.Tab() > maEndPos.Tab() || !mrDoc.maTabs[maStartPos.Tab()]) { assert(!"Table not found"); - maStartPos = ScAddress(mrDoc.MaxCol()+1, mrDoc.MaxRow()+1, MAXTAB+1); // -> Abort on GetFirst. + maStartPos = ScAddress(mrDoc.MaxCol()+1, mrDoc.MaxRow()+1, MAXTAB+1); // -> Abort on first(). } else { - maStartPos.SetCol(mrDoc.maTabs[maStartPos.Tab()]->ClampToAllocatedColumns(maStartPos.Col())); + for (auto tabNo = maStartPos.Tab();; ++tabNo) + { + const auto& pTab = mrDoc.maTabs[tabNo]; + if (pTab && maStartPos.Col() < pTab->GetAllocatedColumnsCount()) + { + // Found the first table with allocated columns in range + maStartPos.SetTab(tabNo); + break; + } + if (tabNo == maEndPos.Tab()) + { + // No allocated columns found in the range -> return false from first(). + maStartPos = ScAddress(mrDoc.MaxCol() + 1, mrDoc.MaxRow() + 1, MAXTAB + 1); + break; + } + } } maCurPos = maStartPos; diff --git a/sc/source/core/data/docpool.cxx b/sc/source/core/data/docpool.cxx index 7a1000ca3cce..9247f16d25e2 100644 --- a/sc/source/core/data/docpool.cxx +++ b/sc/source/core/data/docpool.cxx @@ -77,8 +77,8 @@ namespace { SvxFontItem* getDefaultFontItem(LanguageType eLang, DefaultFontType nFontType, sal_uInt16 nItemId) { vcl::Font aDefFont = OutputDevice::GetDefaultFont( nFontType, eLang, GetDefaultFontFlags::OnlyOne ); - SvxFontItem* pNewItem = new SvxFontItem( aDefFont.GetFamilyType(), aDefFont.GetFamilyName(), aDefFont.GetStyleName(), - aDefFont.GetPitch(), aDefFont.GetCharSet(), nItemId ); + SvxFontItem* pNewItem = new SvxFontItem( aDefFont.GetFamilyTypeMaybeAskConfig(), aDefFont.GetFamilyName(), aDefFont.GetStyleName(), + aDefFont.GetPitchMaybeAskConfig(), aDefFont.GetCharSet(), nItemId ); return pNewItem; } diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index 3890a5194e85..b60a4cd1d6d1 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -519,9 +519,9 @@ ScNoteEditEngine& ScDocument::GetNoteEngine() mpNoteEngine->SetRefMapMode(MapMode(MapUnit::Map100thMM)); ApplyAsianEditSettings( *mpNoteEngine ); const SfxItemSet& rItemSet(getCellAttributeHelper().getDefaultCellAttribute().GetItemSet()); - auto pEEItemSet = std::make_unique<SfxItemSet>(mpNoteEngine->GetEmptyItemSet()); - ScPatternAttr::FillToEditItemSet(*pEEItemSet, rItemSet); - mpNoteEngine->SetDefaults(std::move(pEEItemSet)); // edit engine takes ownership + SfxItemSet aEEItemSet(mpNoteEngine->GetEmptyItemSet()); + ScPatternAttr::FillToEditItemSet(aEEItemSet, rItemSet); + mpNoteEngine->SetDefaults(std::move(aEEItemSet)); // edit engine takes ownership } return *mpNoteEngine; } diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx index f86fedc4b472..d69d71913238 100644 --- a/sc/source/core/data/documen4.cxx +++ b/sc/source/core/data/documen4.cxx @@ -799,7 +799,7 @@ const SfxItemSet* ScDocument::GetCondResult( SCCOL nCol, SCROW nRow, SCTAB nTab, } const SfxItemSet* ScDocument::GetCondResult( - ScRefCellValue& rCell, const ScAddress& rPos, const ScConditionalFormatList& rList, + const ScRefCellValue& rCell, const ScAddress& rPos, const ScConditionalFormatList& rList, const ScCondFormatIndexes& rIndex ) const { for (const auto& rItem : rIndex) diff --git a/sc/source/core/data/documen8.cxx b/sc/source/core/data/documen8.cxx index ca19d460c720..9ef1045a3a63 100644 --- a/sc/source/core/data/documen8.cxx +++ b/sc/source/core/data/documen8.cxx @@ -114,13 +114,11 @@ SfxPrinter* ScDocument::GetPrinter(bool bCreateIfNotExist) { if (!mpPrinter && bCreateIfNotExist && mxPoolHelper) { - auto pSet = - std::make_unique<SfxItemSetFixed - <SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN, - SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC, - SID_PRINT_SELECTEDSHEET, SID_PRINT_SELECTEDSHEET, - SID_SCPRINTOPTIONS, SID_SCPRINTOPTIONS>>(*mxPoolHelper->GetDocPool()); - + auto pSet = std::make_unique<SfxItemSet>( + SfxItemSet::makeFixedSfxItemSet<SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN, + SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC, + SID_PRINT_SELECTEDSHEET, SID_PRINT_SELECTEDSHEET, + SID_SCPRINTOPTIONS, SID_SCPRINTOPTIONS>(*mxPoolHelper->GetDocPool())); SfxPrinterChangeFlags nFlags = SfxPrinterChangeFlags::NONE; if (officecfg::Office::Common::Print::Warning::PaperOrientation::get()) nFlags |= SfxPrinterChangeFlags::CHG_ORIENTATION; @@ -1051,9 +1049,10 @@ void ScDocument::UpdateAreaLinks() return; const ::sfx2::SvBaseLinks& rLinks = pMgr->GetLinks(); - for (const auto & rLink : rLinks) + // Note: SvBaseLink::Update can remove entries after the current one + for (size_t i = 0; i < rLinks.size(); ++i) { - ::sfx2::SvBaseLink* pBase = rLink.get(); + ::sfx2::SvBaseLink* pBase = rLinks[i].get(); if (dynamic_cast<const ScAreaLink*>( pBase) != nullptr) pBase->Update(); } @@ -1246,19 +1245,19 @@ void ScDocument::TransliterateText( const ScMarkData& rMultiMark, Transliteratio // defaults from cell attributes must be set so right language is used const ScPatternAttr* pPattern = GetPattern( nCol, nRow, nTab ); - auto pDefaults = std::make_unique<SfxItemSet>( pEngine->GetEmptyItemSet() ); + SfxItemSet aDefaults( pEngine->GetEmptyItemSet() ); if ( ScStyleSheet* pPreviewStyle = GetPreviewCellStyle( nCol, nRow, nTab ) ) { ScPatternAttr aPreviewPattern( *pPattern ); aPreviewPattern.SetStyleSheet(pPreviewStyle); - aPreviewPattern.FillEditItemSet(pDefaults.get()); + aPreviewPattern.FillEditItemSet(&aDefaults); } else { SfxItemSet* pFontSet = GetPreviewFont( nCol, nRow, nTab ); - pPattern->FillEditItemSet(pDefaults.get(), pFontSet); + pPattern->FillEditItemSet(&aDefaults, pFontSet); } - pEngine->SetDefaults(std::move(pDefaults)); + pEngine->SetDefaults(std::move(aDefaults)); if (aCell.getType() == CELLTYPE_STRING) pEngine->SetTextCurrentDefaults(aCell.getSharedString()->getString()); else if (aCell.getEditText()) diff --git a/sc/source/core/data/dpcache.cxx b/sc/source/core/data/dpcache.cxx index 412a058bb5b9..19d96c50e9da 100644 --- a/sc/source/core/data/dpcache.cxx +++ b/sc/source/core/data/dpcache.cxx @@ -1160,7 +1160,7 @@ SCROW ScDPCache::GetIdByItemData(tools::Long nDim, const ScDPItemData& rItem) co } // static -sal_uInt32 ScDPCache::GetLocaleIndependentFormat(ScInterpreterContext& rContext, sal_uInt32 nNumFormat) +sal_uInt32 ScDPCache::GetLocaleIndependentFormat(const ScInterpreterContext& rContext, sal_uInt32 nNumFormat) { // For a date or date+time format use ISO format so it works across locales // and can be matched against string based item queries. For time use 24h @@ -1187,7 +1187,7 @@ OUString ScDPCache::GetLocaleIndependentFormattedNumberString( double fValue ) // static OUString ScDPCache::GetLocaleIndependentFormattedString( double fValue, - ScInterpreterContext& rContext, sal_uInt32 nNumFormat ) + const ScInterpreterContext& rContext, sal_uInt32 nNumFormat ) { nNumFormat = GetLocaleIndependentFormat( rContext, nNumFormat); if ((nNumFormat % SV_COUNTRY_LANGUAGE_OFFSET) == 0) diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx index c96ccaa7de74..5608384604cb 100644 --- a/sc/source/core/data/dpobject.cxx +++ b/sc/source/core/data/dpobject.cxx @@ -1447,7 +1447,7 @@ void ScDPObject::GetMemberResultNames(ScDPUniqueStringSet& rNames, tools::Long n mpOutput->GetMemberResultNames(rNames, nDimension); // used only with table data -> level not needed } -OUString ScDPObject::GetFormattedString(ScDPTableData* pTableData, tools::Long nDimension, const double fValue) +OUString ScDPObject::GetFormattedString(const ScDPTableData* pTableData, tools::Long nDimension, const double fValue) { ScDPItemData aItemData; aItemData.SetValue(fValue); @@ -2039,7 +2039,7 @@ void ScDPObject::ToggleDetails(const DataPilotTableHeaderData& rElemDesc, ScDPOb // query old state tools::Long nHierCount = 0; - uno::Reference<container::XIndexAccess> xHiers; + rtl::Reference<ScNameToIndexAccess> xHiers; uno::Reference<sheet::XHierarchiesSupplier> xHierSupp( xDim, uno::UNO_QUERY ); if ( xHierSupp.is() ) { @@ -2054,7 +2054,7 @@ void ScDPObject::ToggleDetails(const DataPilotTableHeaderData& rElemDesc, ScDPOb if ( !xHier.is() ) return; tools::Long nLevCount = 0; - uno::Reference<container::XIndexAccess> xLevels; + rtl::Reference<ScNameToIndexAccess> xLevels; uno::Reference<sheet::XLevelsSupplier> xLevSupp( xHier, uno::UNO_QUERY ); if ( xLevSupp.is() ) { diff --git a/sc/source/core/data/dpsave.cxx b/sc/source/core/data/dpsave.cxx index 6e1d5c56f085..82494c99431b 100644 --- a/sc/source/core/data/dpsave.cxx +++ b/sc/source/core/data/dpsave.cxx @@ -517,7 +517,7 @@ void ScDPSaveDimension::WriteToSource( const uno::Reference<uno::XInterface>& xD tools::Long nCount = maMemberHash.size(); tools::Long nHierCount = 0; - uno::Reference<container::XIndexAccess> xHiers; + rtl::Reference<ScNameToIndexAccess> xHiers; uno::Reference<sheet::XHierarchiesSupplier> xHierSupp( xDim, uno::UNO_QUERY ); if ( xHierSupp.is() ) { @@ -530,7 +530,7 @@ void ScDPSaveDimension::WriteToSource( const uno::Reference<uno::XInterface>& xD for (tools::Long nHier=0; nHier<nHierCount; nHier++) { tools::Long nLevCount = 0; - uno::Reference<container::XIndexAccess> xLevels; + rtl::Reference<ScNameToIndexAccess> xLevels; uno::Reference<sheet::XLevelsSupplier> xLevSupp(xHiers->getByIndex(nHier), uno::UNO_QUERY); if ( xLevSupp.is() ) { diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx index 0fefb79fc1ad..995f4dd76103 100644 --- a/sc/source/core/data/funcdesc.cxx +++ b/sc/source/core/data/funcdesc.cxx @@ -793,9 +793,12 @@ ScFunctionList::ScFunctionList( bool bEnglishFunctionNames ) { SC_OPCODE_SORTBY, ENTRY(SC_OPCODE_SORTBY_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_SORTBY_MS, PAIRED_VAR_ARGS + 1, { 0, 0, 1 }, 0 }, { SC_OPCODE_MAT_SEQUENCE, ENTRY(SC_OPCODE_MAT_SEQUENCE_ARY), 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_MSEQUENCE_MS, 4, { 0, 1, 1, 1 }, 0 }, { SC_OPCODE_RANDARRAY, ENTRY(SC_OPCODE_RANDARRAY_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_RANDARRAY_MS, 5, { 1, 1, 1, 1, 1 }, 0 }, - { SC_OPCODE_CHOOSEROWS, ENTRY(SC_OPCODE_CHOOSEROWS_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_CHOOSEROWS_MS, VAR_ARGS + 2, { 0, 0, 1 }, 0 }, + { SC_OPCODE_CHOOSECOLS, ENTRY(SC_OPCODE_CHOOSECOLS_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_CHOOSECOLS_MS, VAR_ARGS + 1, { 0, 0 }, 0 }, + { SC_OPCODE_CHOOSEROWS, ENTRY(SC_OPCODE_CHOOSEROWS_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_CHOOSEROWS_MS, VAR_ARGS + 1, { 0, 0 }, 0 }, { SC_OPCODE_DROP, ENTRY(SC_OPCODE_DROP_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_DROP_MS, 3, { 0, 0, 1 }, 0 }, { SC_OPCODE_EXPAND, ENTRY(SC_OPCODE_EXPAND_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_EXPAND_MS, 4, { 0, 0, 1, 1 }, 0 }, + { SC_OPCODE_HSTACK, ENTRY(SC_OPCODE_HSTACK_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_HSTACK_MS, VAR_ARGS + 1, { 0, 0 }, 0 }, + { SC_OPCODE_VSTACK, ENTRY(SC_OPCODE_VSTACK_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_VSTACK_MS, VAR_ARGS + 1, { 0, 0 }, 0 }, { SC_OPCODE_TAKE, ENTRY(SC_OPCODE_TAKE_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_TAKE_MS, 3, { 0, 1, 1 }, 0 }, { SC_OPCODE_TOCOL, ENTRY(SC_OPCODE_TOCOL_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_TOCOL_MS, 3, { 0, 1, 1 }, 0 }, { SC_OPCODE_TOROW, ENTRY(SC_OPCODE_TOROW_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_TOROW_MS, 3, { 0, 1, 1 }, 0 }, diff --git a/sc/source/core/data/patattr.cxx b/sc/source/core/data/patattr.cxx index f11cacb6c0b2..0e406b8c6cf8 100644 --- a/sc/source/core/data/patattr.cxx +++ b/sc/source/core/data/patattr.cxx @@ -152,6 +152,7 @@ void CellAttributeHelper::doUnregister(const ScPatternAttr& rCandidate) if (mpLastHit == &rCandidate) mpLastHit = nullptr; + assert(maRegisteredCellAttributes.find(&rCandidate) != maRegisteredCellAttributes.end()); maRegisteredCellAttributes.erase(&rCandidate); delete &rCandidate; } @@ -196,7 +197,34 @@ void CellAttributeHelper::CellStyleDeleted(const ScStyleSheet& rStyle) } } -void CellAttributeHelper::CellStyleCreated(ScDocument& rDoc, const OUString& rName) +void CellAttributeHelper::RenameCellStyle(ScStyleSheet& rStyle, const OUString& rNewName) +{ + std::vector<const ScPatternAttr*> aChanged; + + const OUString& rCandidateStyleName = rStyle.GetName(); + auto it = maRegisteredCellAttributes.lower_bound(&rCandidateStyleName); + while(it != maRegisteredCellAttributes.end()) + { + const ScPatternAttr* pCheck = *it; + if (CompareStringPtr(pCheck->GetStyleName(), &rCandidateStyleName) != 0) + break; + if (&rStyle == pCheck->GetStyleSheet()) + { + aChanged.push_back(pCheck); + // The name will change, we have to re-insert it + it = maRegisteredCellAttributes.erase(it); + } + else + ++it; + } + + rStyle.SetName(rNewName); + + for (const ScPatternAttr* p : aChanged) + maRegisteredCellAttributes.insert(p); +} + +void CellAttributeHelper::CellStyleCreated(const ScDocument& rDoc, const OUString& rName) { // If a style was created, don't keep any pattern with its name string in the pool, // because it would compare equal to a pattern with a pointer to the new style. @@ -227,7 +255,7 @@ void CellAttributeHelper::CellStyleCreated(ScDocument& rDoc, const OUString& rNa maRegisteredCellAttributes.insert(p); } -void CellAttributeHelper::UpdateAllStyleSheets(ScDocument& rDoc) +void CellAttributeHelper::UpdateAllStyleSheets(const ScDocument& rDoc) { bool bNameChanged = false; for (const ScPatternAttr* pCheck : maRegisteredCellAttributes) @@ -805,7 +833,7 @@ void ScPatternAttr::fillColor(model::ComplexColor& rComplexColor, const SfxItemS aSysTextColor = ScModule::get()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor; } - if (comphelper::LibreOfficeKit::isActive() && SfxViewShell::Current()) + if (SfxViewShell::Current()) { if (aBackColor.IsDark()) aColor = COL_WHITE; diff --git a/sc/source/core/data/postit.cxx b/sc/source/core/data/postit.cxx index b28b89fe613f..817c33566ba3 100644 --- a/sc/source/core/data/postit.cxx +++ b/sc/source/core/data/postit.cxx @@ -23,6 +23,7 @@ #include <rtl/ustrbuf.hxx> #include <sal/log.hxx> #include <unotools/useroptions.hxx> +#include <unotools/datetime.hxx> #include <svx/svdocapt.hxx> #include <svx/svdpage.hxx> #include <editeng/outlobj.hxx> @@ -367,7 +368,7 @@ public: /** Create a new caption object and inserts it into the document. */ explicit ScNoteCaptionCreator( ScDocument& rDoc, const ScAddress& rPos, ScNoteData& rNoteData ); /** Manipulate an existing caption. */ - explicit ScNoteCaptionCreator( ScDocument& rDoc, const ScAddress& rPos, rtl::Reference<SdrCaptionObj>& xCaption, bool bShown ); + explicit ScNoteCaptionCreator( ScDocument& rDoc, const ScAddress& rPos, const rtl::Reference<SdrCaptionObj>& xCaption, bool bShown ); }; ScNoteCaptionCreator::ScNoteCaptionCreator( ScDocument& rDoc, const ScAddress& rPos, ScNoteData& rNoteData ) : @@ -391,7 +392,7 @@ ScNoteCaptionCreator::ScNoteCaptionCreator( ScDocument& rDoc, const ScAddress& r } } -ScNoteCaptionCreator::ScNoteCaptionCreator( ScDocument& rDoc, const ScAddress& rPos, rtl::Reference<SdrCaptionObj>& xCaption, bool bShown ) : +ScNoteCaptionCreator::ScNoteCaptionCreator( ScDocument& rDoc, const ScAddress& rPos, const rtl::Reference<SdrCaptionObj>& xCaption, bool bShown ) : ScCaptionCreator( rDoc, rPos, xCaption ) { SdrPage* pDrawPage = GetDrawPage(); @@ -494,8 +495,7 @@ void ScPostIt::AutoStamp(bool bCreate) if (bCreate) { DateTime aNow(DateTime::SYSTEM); - auto const & rLocaleData = ScGlobal::getLocaleData(); - maNoteData.maDate = rLocaleData.getDate(aNow) + " " + rLocaleData.getTime(aNow, false); + maNoteData.maDate = utl::toISO8601(aNow.GetUNODateTime()); } if (!maNoteData.maAuthor.isEmpty()) return; @@ -931,7 +931,7 @@ ScPostIt* ScNoteUtil::CreateNoteFromCaption( return pNote; } -ScNoteData ScNoteUtil::CreateNoteData(ScDocument& rDoc, const ScAddress& rPos, +ScNoteData ScNoteUtil::CreateNoteData(const ScDocument& rDoc, const ScAddress& rPos, const tools::Rectangle& rCaptionRect, bool bShown) { ScNoteData aNoteData( bShown ); diff --git a/sc/source/core/data/queryevaluator.cxx b/sc/source/core/data/queryevaluator.cxx index 98ef255946e2..4fc793b4d73e 100644 --- a/sc/source/core/data/queryevaluator.cxx +++ b/sc/source/core/data/queryevaluator.cxx @@ -665,7 +665,8 @@ std::pair<bool, bool> ScQueryEvaluator::compareByRangeLookup(const ScRefCellValu return std::pair<bool, bool>(!rCell.hasNumeric(), bTestEqual); } -std::pair<bool, bool> ScQueryEvaluator::processEntry(SCROW nRow, SCCOL nCol, ScRefCellValue& aCell, +std::pair<bool, bool> ScQueryEvaluator::processEntry(SCROW nRow, SCCOL nCol, + const ScRefCellValue& aCell, const ScQueryEntry& rEntry, size_t nEntryIndex) { std::pair<bool, bool> aRes(false, false); diff --git a/sc/source/core/data/segmenttree.cxx b/sc/source/core/data/segmenttree.cxx index a39c956a478b..470cc90ff2f4 100644 --- a/sc/source/core/data/segmenttree.cxx +++ b/sc/source/core/data/segmenttree.cxx @@ -134,7 +134,7 @@ typename ScFlatSegmentsImpl<ValueType_, ExtValueType_>::ValueType ScFlatSegments return nValue; } - if (!maSegments.is_tree_valid()) + if (!maSegments.valid_tree()) { assert(!ScGlobal::bThreadedGroupCalcInProgress); maSegments.build_tree(); @@ -150,7 +150,7 @@ sal_uInt64 ScFlatSegmentsImpl<ValueType_, ExtValueType_>::getSumValue(SCCOLROW n if (mbTreeSearchEnabled) { - if (!maSegments.is_tree_valid()) + if (!maSegments.valid_tree()) { assert(!ScGlobal::bThreadedGroupCalcInProgress); maSegments.build_tree(); @@ -242,7 +242,7 @@ bool ScFlatSegmentsImpl<ValueType_, ExtValueType_>::getRangeData(SCCOLROW nPos, if (!mbTreeSearchEnabled) return getRangeDataLeaf(nPos, rData); - if (!maSegments.is_tree_valid()) + if (!maSegments.valid_tree()) { assert(!ScGlobal::bThreadedGroupCalcInProgress); maSegments.build_tree(); @@ -333,7 +333,7 @@ template<typename ValueType_, typename ExtValueType_> void ScFlatSegmentsImpl<ValueType_, ExtValueType_>::makeReady() { assert(!ScGlobal::bThreadedGroupCalcInProgress); - if (!maSegments.is_tree_valid()) + if (!maSegments.valid_tree()) maSegments.build_tree(); } diff --git a/sc/source/core/data/stlpool.cxx b/sc/source/core/data/stlpool.cxx index aa4ae40dae1d..2dde31f721ef 100644 --- a/sc/source/core/data/stlpool.cxx +++ b/sc/source/core/data/stlpool.cxx @@ -114,6 +114,17 @@ rtl::Reference<SfxStyleSheetBase> ScStyleSheetPool::Create( const SfxStyleSheetB return new ScStyleSheet( static_cast<const ScStyleSheet&>(rStyle) ); } +void ScStyleSheetPool::Rename(SfxStyleSheetBase& rStyle, const OUString& rNewName, SfxStyleFamily eFamily) +{ + if (eFamily == SfxStyleFamily::Para) + { + assert(nullptr != pDoc); + pDoc->getCellAttributeHelper().RenameCellStyle(static_cast<ScStyleSheet&>(rStyle), rNewName); + return; + } + rStyle.SetName(rNewName); +} + void ScStyleSheetPool::Remove( SfxStyleSheetBase* pStyle ) { if ( pStyle ) @@ -232,8 +243,8 @@ static void lcl_CheckFont( SfxItemSet& rSet, LanguageType eLang, DefaultFontType if ( eLang != LANGUAGE_NONE && eLang != LANGUAGE_DONTKNOW && eLang != LANGUAGE_SYSTEM ) { vcl::Font aDefFont = OutputDevice::GetDefaultFont( nFontType, eLang, GetDefaultFontFlags::OnlyOne ); - SvxFontItem aNewItem( aDefFont.GetFamilyType(), aDefFont.GetFamilyName(), aDefFont.GetStyleName(), - aDefFont.GetPitch(), aDefFont.GetCharSet(), nItemId ); + SvxFontItem aNewItem( aDefFont.GetFamilyTypeMaybeAskConfig(), aDefFont.GetFamilyName(), aDefFont.GetStyleName(), + aDefFont.GetPitchMaybeAskConfig(), aDefFont.GetCharSet(), nItemId ); if ( aNewItem != rSet.Get( nItemId ) ) { // put item into style's ItemSet only if different from (static) default diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx index 6b320dd64a95..20125f3de716 100644 --- a/sc/source/core/data/table2.cxx +++ b/sc/source/core/data/table2.cxx @@ -2448,13 +2448,30 @@ bool ScTable::IsBlockEmpty( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ) return bEmpty; } +// Return value = new nArrY SCSIZE ScTable::FillMaxRot( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCCOL nX2, SCCOL nCol, SCROW nAttrRow1, SCROW nAttrRow2, SCSIZE nArrY, - const ScPatternAttr* pPattern, const SfxItemSet* pCondSet ) -{ - // Return value = new nArrY + const ScPatternAttr* pPattern, const SfxItemSet* pCondSet, + FillMaxRotCacheMap* pCache ) +{ + // Use a cache to lookup nRotDir, because it gets expensive when painting large spreadsheets + // with lots of conditional formatting. + ScRotateDir nRotDir; + if (pCache) + { + auto aKey = std::make_pair(pPattern, pCondSet); + auto it = pCache->find(aKey); + if (it != pCache->end()) + nRotDir = it->second; + else + { + nRotDir = pPattern->GetRotateDir( pCondSet ); + pCache->insert({aKey, nRotDir}); + } + } + else + nRotDir = pPattern->GetRotateDir( pCondSet ); - ScRotateDir nRotDir = pPattern->GetRotateDir( pCondSet ); if ( nRotDir != ScRotateDir::NONE ) { bool bHit = true; @@ -2529,8 +2546,13 @@ void ScTable::FindMaxRotCol( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCC SCROW nY1 = pRowInfo[0].nRowNo; SCROW nY2 = pRowInfo[nArrCount-1].nRowNo; - - for (SCCOL nCol : GetColumnsRange(0, rDocument.MaxCol())) + FillMaxRotCacheMap aCacheMap; + std::unordered_map<OUString, SfxStyleSheetBase*> aStyleSheetCache; + SCCOL nStartCol = 0; + SCCOL nEndCol = rDocument.MaxCol(); + bool bShrunk = false; + ShrinkToUsedDataArea(bShrunk, nStartCol, nY1, nEndCol, nY2, /*bColumnsOnly*/false, false, false, nullptr); + for (SCCOL nCol = nStartCol; nCol <= nEndCol; ++nCol) { if (!ColHidden(nCol)) { @@ -2566,13 +2588,20 @@ void ScTable::FindMaxRotCol( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCC OUString aStyleName = static_cast<const ScCondFormatEntry*>(pEntry)->GetStyle(); if (!aStyleName.isEmpty()) { - SfxStyleSheetBase* pStyleSheet = - pStylePool->Find( aStyleName, SfxStyleFamily::Para ); + SfxStyleSheetBase* pStyleSheet; + auto it = aStyleSheetCache.find(aStyleName); + if (it != aStyleSheetCache.end()) + pStyleSheet = it->second; + else + { + pStyleSheet = pStylePool->Find( aStyleName, SfxStyleFamily::Para ); + aStyleSheetCache.insert({aStyleName, pStyleSheet}); + } if ( pStyleSheet ) { FillMaxRot( pRowInfo, nArrCount, nX1, nX2, nCol, nAttrRow1, nAttrRow2, - nArrY, pPattern, &pStyleSheet->GetItemSet() ); + nArrY, pPattern, &pStyleSheet->GetItemSet(), &aCacheMap); // not changing nArrY } } @@ -2584,7 +2613,7 @@ void ScTable::FindMaxRotCol( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCC nArrY = FillMaxRot( pRowInfo, nArrCount, nX1, nX2, nCol, nAttrRow1, nAttrRow2, - nArrY, pPattern, nullptr ); + nArrY, pPattern, nullptr, &aCacheMap ); pPattern = aIter.GetNext( nAttrCol, nAttrRow1, nAttrRow2 ); } diff --git a/sc/source/core/data/validat.cxx b/sc/source/core/data/validat.cxx index 5bedbb6a8c6c..6acc7185df42 100644 --- a/sc/source/core/data/validat.cxx +++ b/sc/source/core/data/validat.cxx @@ -597,7 +597,7 @@ bool ScValidationData::IsDataValid( return bRet; } -bool ScValidationData::IsDataValid( ScRefCellValue& rCell, const ScAddress& rPos ) const +bool ScValidationData::IsDataValid( const ScRefCellValue& rCell, const ScAddress& rPos ) const { if( eDataMode == SC_VALID_LIST ) return IsListValid(rCell, rPos); @@ -804,7 +804,7 @@ bool ScValidationData::HasSelectionList() const } bool ScValidationData::GetSelectionFromFormula( - std::vector<ScTypedStrData>* pStrings, ScRefCellValue& rCell, const ScAddress& rPos, + std::vector<ScTypedStrData>* pStrings, const ScRefCellValue& rCell, const ScAddress& rPos, const ScTokenArray& rTokArr, int& rMatch) const { bool bOk = true; @@ -1032,7 +1032,7 @@ bool ScValidationData::FillSelectionList(std::vector<ScTypedStrData>& rStrColl, return bOk; } -bool ScValidationData::IsEqualToTokenArray( ScRefCellValue& rCell, const ScAddress& rPos, const ScTokenArray& rTokArr ) const +bool ScValidationData::IsEqualToTokenArray( const ScRefCellValue& rCell, const ScAddress& rPos, const ScTokenArray& rTokArr ) const { // create a condition entry that tests on equality and set the passed token array ScConditionEntry aCondEntry( ScConditionMode::Equal, &rTokArr, nullptr, *GetDocument(), rPos ); @@ -1041,7 +1041,7 @@ bool ScValidationData::IsEqualToTokenArray( ScRefCellValue& rCell, const ScAddre return aCondEntry.IsCellValid(rCell, rPos); } -bool ScValidationData::IsListValid( ScRefCellValue& rCell, const ScAddress& rPos ) const +bool ScValidationData::IsListValid( const ScRefCellValue& rCell, const ScAddress& rPos ) const { bool bIsValid = false; diff --git a/sc/source/core/inc/cellkeytranslator.hxx b/sc/source/core/inc/cellkeytranslator.hxx index 953e0c99ed59..adb471a1267a 100644 --- a/sc/source/core/inc/cellkeytranslator.hxx +++ b/sc/source/core/inc/cellkeytranslator.hxx @@ -20,34 +20,18 @@ #pragma once #include <formula/opcode.hxx> -#include <unotools/transliterationwrapper.hxx> -#include <vector> -#include <memory> -#include <unordered_map> +#include <rtl/ustring.hxx> namespace com::sun::star::lang { struct Locale; } -struct TransItem; - -struct ScCellKeyword -{ - const char* mpName; - OpCode meOpCode; - const css::lang::Locale& mrLocale; - - ScCellKeyword(const char* pName, OpCode eOpCode, const css::lang::Locale& rLocale); -}; - -typedef std::unordered_map<OUString, ::std::vector<ScCellKeyword>> ScCellKeywordHashMap; - /** Translate cell function keywords. - This class provides a convenient way to translate a string keyword used as + Provides a convenient way to translate a string keyword used as a cell function argument. Since Calc's built-in cell functions don't - localize string keywords, this class is used mainly to deal with an Excel + localize string keywords, this is used mainly to deal with an Excel document where string names may be localized. To use, simply call the @@ -56,27 +40,11 @@ typedef std::unordered_map<OUString, ::std::vector<ScCellKeyword>> ScCellKeyword function. - Note that when the locale and/or the opcode is specified, the function - tries to find a string with matching locale and/or opcode. But when it - fails to find one that satisfies the specified locale and/or opcode, it - returns a translated string with non-matching locale and/or opcode if - available. */ -class ScCellKeywordTranslator + Note that the function only finds a string with matching locale and opcode. + Locale is matched as close as possible */ +namespace ScCellKeywordTranslator { -public: - static void transKeyword(OUString& rName, const css::lang::Locale* pLocale, OpCode eOpCode); - ~ScCellKeywordTranslator(); - -private: - ScCellKeywordTranslator(); - - void addToMap(const OUString& rKey, const char* pName, const css::lang::Locale& rLocale, - OpCode eOpCode); - void addToMap(const TransItem* pItems, const css::lang::Locale& rLocale); - - static ::std::unique_ptr<ScCellKeywordTranslator> spInstance; - ScCellKeywordHashMap maStringNameMap; - ::utl::TransliterationWrapper maTransWrapper; +void transKeyword(OUString& rName, const css::lang::Locale& rLocale, OpCode eOpCode); }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/inc/ddelink.hxx b/sc/source/core/inc/ddelink.hxx index d872a102cc9c..0a53e9cdc66b 100644 --- a/sc/source/core/inc/ddelink.hxx +++ b/sc/source/core/inc/ddelink.hxx @@ -23,8 +23,6 @@ #include <svl/broadcast.hxx> #include <types.hxx> -namespace com::sun::star::uno { class Any; } - class ScDocument; class ScMultipleReadHeader; class ScMultipleWriteHeader; diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx index faf8922cbed6..f724acc3a3ff 100644 --- a/sc/source/core/inc/interpre.hxx +++ b/sc/source/core/inc/interpre.hxx @@ -33,6 +33,7 @@ #include <queryentry.hxx> #include <sortparam.hxx> #include "parclass.hxx" +#include <lookupsearchmode.hxx> #include <unordered_map> #include <memory> @@ -57,8 +58,8 @@ class ScJumpMatrix; struct ScRefCellValue; enum MatchMode{ exactorNA=0, exactorS=-1, exactorG=1, wildcard=2, regex=3 }; -enum SearchMode{ searchfwd=1, searchrev=-1, searchbasc=2, searchbdesc=-2 }; -enum IgnoreValues{ DEFAULT=0, BLANKS=1, ERRORS=2, ALL=3 }; +// mode for the TOCOL and TOROW formula functions +enum class IgnoreValues{ DEFAULT=0, BLANKS=1, ERRORS=2, ALL=3 }; struct VectorSearchArguments { @@ -89,7 +90,7 @@ struct VectorSearchArguments svl::SharedString sSearchStr; bool bVLookup; - // search mode (only XLOOKUP has all 4 options, MATCH only uses searchfwd) + // search mode (only XLOOKUP has all 4 options, MATCH only uses Forward) // optional 6th argument to set search mode // 1 - Perform a search starting at the first item. This is the default. // -1 - Perform a reverse search starting at the last item. @@ -98,7 +99,7 @@ struct VectorSearchArguments // -2 - Perform a binary search that relies on lookup_array being sorted in descending order. // If not sorted, invalid results will be returned. // - SearchMode eSearchMode = searchfwd; + LookupSearchMode eSearchMode = LookupSearchMode::Forward; // search variables SCSIZE nHitIndex = 0; @@ -294,11 +295,11 @@ private: void ReplaceCell( ScAddress& ); // for TableOp bool IsTableOpInRange( const ScRange& ); - sal_uInt32 GetCellNumberFormat( const ScAddress& rPos, ScRefCellValue& rCell ); + sal_uInt32 GetCellNumberFormat( const ScAddress& rPos, const ScRefCellValue& rCell ); double ConvertStringToValue( const OUString& ); bool SearchVectorForValue( VectorSearchArguments& ); - bool SearchMatrixForValue( VectorSearchArguments&, ScQueryParam&, ScQueryEntry&, ScQueryEntry::Item& ); - bool SearchRangeForValue( VectorSearchArguments&, ScQueryParam&, ScQueryEntry& ); + bool SearchMatrixForValue( VectorSearchArguments&, const ScQueryParam&, const ScQueryEntry&, const ScQueryEntry::Item& ); + bool SearchRangeForValue( VectorSearchArguments&, ScQueryParam&, const ScQueryEntry& ); public: static double ScGetGCD(double fx, double fy); @@ -306,10 +307,10 @@ public: Uses rError instead of nGlobalError and rCurFmtType instead of nCurFmtType. */ double ConvertStringToValue( const OUString&, FormulaError& rError, SvNumFormatType& rCurFmtType ); private: - double GetCellValue( const ScAddress&, ScRefCellValue& rCell ); - double GetCellValueOrZero( const ScAddress&, ScRefCellValue& rCell ); + double GetCellValue( const ScAddress&, const ScRefCellValue& rCell ); + double GetCellValueOrZero( const ScAddress&, const ScRefCellValue& rCell ); double GetValueCellValue( const ScAddress&, double fOrig ); - void GetCellString( svl::SharedString& rStr, ScRefCellValue& rCell ); + void GetCellString( svl::SharedString& rStr, const ScRefCellValue& rCell ); static FormulaError GetCellErrCode( const ScRefCellValue& rCell ); bool CreateDoubleArr(SCCOL nCol1, SCROW nRow1, SCTAB nTab1, @@ -488,6 +489,7 @@ private: double GetDouble(); double GetDoubleWithDefault(double nDefault); bool IsMissing() const; + template <typename Int> requires std::is_integral_v<Int> Int double_to(double fVal); sal_Int32 double_to_int32(double fVal); /** if GetDouble() not within int32 limits sets nGlobalError and returns SAL_MAX_INT32 */ sal_Int32 GetInt32(); @@ -497,6 +499,7 @@ private: sal_Int32 GetFloor32(); /** if GetDouble() not within int16 limits sets nGlobalError and returns SAL_MAX_INT16 */ sal_Int16 GetInt16(); + sal_Int16 GetInt16WithDefault(sal_Int16 nDefault); /** if GetDouble() not within uint32 limits sets nGlobalError and returns SAL_MAX_UINT32 */ sal_uInt32 GetUInt32(); bool GetBool() { return GetDouble() != 0.0; } @@ -517,9 +520,10 @@ private: sc::RangeMatrix GetRangeMatrix(); // Get tokens at specific parameters for LET (lambda) function - void getTokensAtParameter( std::unique_ptr<ScTokenArray>& pTokens, short nPos ); static void replaceNamesToResult( const std::unordered_map<OUString, formula::FormulaToken*>& rResultIndexes, - std::unique_ptr<ScTokenArray>& pTokens ); + ScTokenArray& rTokens, short nStartPos, short nEndPos ); + ScTokenArray checkPushTokens( const ScTokenArray& rTokens, + short nStartPos, short nEndPos ); void ScTableOp(); // repeated operations @@ -558,9 +562,10 @@ private: inline void TreatDoubleError( double& rVal ); // Lookup using ScLookupCache, @returns true if found and result address bool LookupQueryWithCache( ScAddress & o_rResultPos, const ScQueryParam & rParam, - const ScComplexRefData* refData, sal_Int8 nSearchMode, sal_uInt16 nOpCode ) const; + const ScComplexRefData* refData, LookupSearchMode nSearchMode, sal_uInt16 nOpCode ) const; void ScIfJump(); + void ScIfJumpNotMatrix( const short* pJump, short nJumpCount ); void ScIfError( bool bNAonly ); void ScChooseJump(); @@ -724,9 +729,12 @@ private: void ScFilter(); void ScSort(); void ScSortBy(); + void ScChooseCols(); void ScChooseRows(); void ScDrop(); void ScExpand(); + void ScHStack(); + void ScVStack(); void ScTake(); void ScToCol(); void ScToRow(); @@ -737,9 +745,11 @@ private: void ScWrapRows(); private: + void ScChooseColsOrRows(bool bCols); void ScToColOrRow(bool bCol); void ScWrapColsOrRows(bool bCols); void ScTakeOrDrop(bool bTake); + void ScHorizontalOrVerticalStack(bool bHorizontal); public: // If upon call rMissingField==true then the database field parameter may be @@ -832,9 +842,9 @@ public: void ScGetIsoWeekOfYear(); void ScWeeknumOOo(); void ScEasterSunday(); - FormulaError GetWeekendAndHolidayMasks( const sal_uInt8 nParamCount, const sal_uInt32 nNullDate, + FormulaError GetWeekendAndHolidayMasks( const sal_uInt8 nParamCount, const sal_Int32 nNullDate, ::std::vector<double>& rSortArray, bool bWeekendMask[ 7 ] ); - FormulaError GetWeekendAndHolidayMasks_MS( const sal_uInt8 nParamCount, const sal_uInt32 nNullDate, + FormulaError GetWeekendAndHolidayMasks_MS( const sal_uInt8 nParamCount, const sal_Int32 nNullDate, ::std::vector<double>& rSortArray, bool bWeekendMask[ 7 ], bool bWorkdayFunction ); static inline sal_Int16 GetDayOfWeek( sal_Int32 n ); void ScNetWorkdays( bool bOOXML_Version ); diff --git a/sc/source/core/inc/webservicelink.hxx b/sc/source/core/inc/webservicelink.hxx index 8504a8c1b6e3..41ff2662b800 100644 --- a/sc/source/core/inc/webservicelink.hxx +++ b/sc/source/core/inc/webservicelink.hxx @@ -12,11 +12,6 @@ #include <sfx2/lnkbase.hxx> #include <svl/broadcast.hxx> -namespace com::sun::star::uno -{ -class Any; -} - class ScDocument; class ScWebServiceLink final : public ::sfx2::SvBaseLink, public SvtBroadcaster diff --git a/sc/source/core/opencl/op_math.cxx b/sc/source/core/opencl/op_math.cxx index d0e033f8843b..75475bc5f054 100644 --- a/sc/source/core/opencl/op_math.cxx +++ b/sc/source/core/opencl/op_math.cxx @@ -258,7 +258,7 @@ void OpSqrtPi::GenerateCode( outputstream& ss ) const void OpDeg::GenerateCode( outputstream& ss ) const { - ss << " return arg0 / M_PI * 180;;\n"; + ss << " return arg0 / M_PI * 180;\n"; } void OpFact::GenerateCode( outputstream& ss ) const @@ -571,7 +571,7 @@ void OpLog::GenSlidingWindowFunction(outputstream &ss, ss << " int gid0 = get_global_id(0);\n"; GenerateArg( "arg0", 0, vSubArguments, ss ); GenerateArgWithDefault( "arg1", 1, 10, vSubArguments, ss ); - ss << " return log10(arg0)/log10(arg1);;\n"; + ss << " return log10(arg0)/log10(arg1);\n"; ss << "}"; } diff --git a/sc/source/core/opencl/opbase.hxx b/sc/source/core/opencl/opbase.hxx index 3b5991275b17..bfdad82df998 100644 --- a/sc/source/core/opencl/opbase.hxx +++ b/sc/source/core/opencl/opbase.hxx @@ -429,9 +429,6 @@ public: int nCurWindowSize ); }; -class OpAverage; -class OpCount; - /// Handling a Double Vector that is used as a sliding window input /// to either a sliding window average or sum-of-products /// Generate a sequential loop for reductions diff --git a/sc/source/core/tool/address.cxx b/sc/source/core/tool/address.cxx index a7eb79023d94..4c6453cf53e4 100644 --- a/sc/source/core/tool/address.cxx +++ b/sc/source/core/tool/address.cxx @@ -693,7 +693,6 @@ static const sal_Unicode* lcl_r1c1_get_col( const ScSheetLimits& rSheetLimits, ScAddress* pAddr, ScRefFlags* nFlags ) { const sal_Unicode *pEnd; - sal_Int64 n; bool isRelative; if( p[0] == '\0' ) @@ -703,7 +702,7 @@ static const sal_Unicode* lcl_r1c1_get_col( const ScSheetLimits& rSheetLimits, isRelative = *p == '['; if( isRelative ) p++; - n = sal_Unicode_strtol( p, &pEnd ); + sal_Int64 n = sal_Unicode_strtol( p, &pEnd ); if( nullptr == pEnd ) return nullptr; @@ -712,22 +711,31 @@ static const sal_Unicode* lcl_r1c1_get_col( const ScSheetLimits& rSheetLimits, if( isRelative ) return nullptr; n = rDetails.nCol; + + if (n < 0 || n >= rSheetLimits.GetMaxColCount()) + return nullptr; } else if( isRelative ) { if( *pEnd != ']' ) return nullptr; n += rDetails.nCol; + + if (n < 0 || n >= rSheetLimits.GetMaxColCount()) + return nullptr; + pEnd++; } else { *nFlags |= ScRefFlags::COL_ABS; + + if (n <= 0 || n > rSheetLimits.GetMaxColCount()) + return nullptr; + n--; } - if( n < 0 || n >= rSheetLimits.GetMaxColCount()) - return nullptr; pAddr->SetCol( static_cast<SCCOL>( n ) ); *nFlags |= ScRefFlags::COL_VALID; diff --git a/sc/source/core/tool/appoptio.cxx b/sc/source/core/tool/appoptio.cxx index e6137341094d..3825ccf8468b 100644 --- a/sc/source/core/tool/appoptio.cxx +++ b/sc/source/core/tool/appoptio.cxx @@ -79,6 +79,7 @@ void ScAppOptions::SetDefaults() nDefaultObjectSizeHeight = 5000; mbShowSharedDocumentWarning = true; + bClickChangeRotation = false; meKeyBindingType = ScOptionsUtil::KEY_DEFAULT; mbLinksInsertedLikeMSExcel = false; @@ -103,6 +104,7 @@ ScAppOptions& ScAppOptions::operator=( const ScAppOptions& rCpy ) nDefaultObjectSizeWidth = rCpy.nDefaultObjectSizeWidth; nDefaultObjectSizeHeight = rCpy.nDefaultObjectSizeHeight; mbShowSharedDocumentWarning = rCpy.mbShowSharedDocumentWarning; + bClickChangeRotation = rCpy.bClickChangeRotation; meKeyBindingType = rCpy.meKeyBindingType; mbLinksInsertedLikeMSExcel = rCpy.mbLinksInsertedLikeMSExcel; return *this; @@ -193,6 +195,7 @@ constexpr OUStringLiteral CFGPATH_MISC = u"Office.Calc/Misc"; #define SCMISCOPT_DEFOBJWIDTH 0 #define SCMISCOPT_DEFOBJHEIGHT 1 #define SCMISCOPT_SHOWSHAREDDOCWARN 2 +#define SCMISCOPT_CLICKCHANGEROTATION 3 constexpr OUStringLiteral CFGPATH_COMPAT = u"Office.Calc/Compatibility"; @@ -260,7 +263,8 @@ Sequence<OUString> ScAppCfg::GetMiscPropertyNames() { return {u"DefaultObjectSize/Width"_ustr, // SCMISCOPT_DEFOBJWIDTH u"DefaultObjectSize/Height"_ustr, // SCMISCOPT_DEFOBJHEIGHT - u"SharedDocument/ShowWarning"_ustr}; // SCMISCOPT_SHOWSHAREDDOCWARN + u"SharedDocument/ShowWarning"_ustr, // SCMISCOPT_SHOWSHAREDDOCWARN + u"Draw/ClickChangeRotation"_ustr}; // SCMISCOPT_CLICKCHANGEROTATION } Sequence<OUString> ScAppCfg::GetCompatPropertyNames() @@ -465,6 +469,8 @@ void ScAppCfg::ReadMiscCfg() SetDefaultObjectSizeHeight(nIntVal); SetShowSharedDocumentWarning( ScUnoHelpFunctions::GetBoolFromAny(aValues[SCMISCOPT_SHOWSHAREDDOCWARN])); + SetClickChangeRotation( + ScUnoHelpFunctions::GetBoolFromAny(aValues[SCMISCOPT_CLICKCHANGEROTATION])); } void ScAppCfg::ReadCompatCfg() @@ -635,6 +641,9 @@ IMPL_LINK_NOARG(ScAppCfg, MiscCommitHdl, ScLinkConfigItem&, void) case SCMISCOPT_SHOWSHAREDDOCWARN: pValues[nProp] <<= GetShowSharedDocumentWarning(); break; + case SCMISCOPT_CLICKCHANGEROTATION: + pValues[nProp] <<= IsClickChangeRotation(); + break; } } aMiscItem.PutProperties(aNames, aValues); diff --git a/sc/source/core/tool/autoform.cxx b/sc/source/core/tool/autoform.cxx index d6a178bf1894..599e28af1035 100644 --- a/sc/source/core/tool/autoform.cxx +++ b/sc/source/core/tool/autoform.cxx @@ -671,20 +671,20 @@ ScAutoFormat::ScAutoFormat() : vcl::Font aStdFont = OutputDevice::GetDefaultFont( DefaultFontType::LATIN_SPREADSHEET, LANGUAGE_ENGLISH_US, GetDefaultFontFlags::OnlyOne ); SvxFontItem aFontItem( - aStdFont.GetFamilyType(), aStdFont.GetFamilyName(), aStdFont.GetStyleName(), - aStdFont.GetPitch(), aStdFont.GetCharSet(), ATTR_FONT ); + aStdFont.GetFamilyTypeMaybeAskConfig(), aStdFont.GetFamilyName(), aStdFont.GetStyleName(), + aStdFont.GetPitchMaybeAskConfig(), aStdFont.GetCharSet(), ATTR_FONT ); aStdFont = OutputDevice::GetDefaultFont( DefaultFontType::CJK_SPREADSHEET, LANGUAGE_ENGLISH_US, GetDefaultFontFlags::OnlyOne ); SvxFontItem aCJKFontItem( - aStdFont.GetFamilyType(), aStdFont.GetFamilyName(), aStdFont.GetStyleName(), - aStdFont.GetPitch(), aStdFont.GetCharSet(), ATTR_CJK_FONT ); + aStdFont.GetFamilyTypeMaybeAskConfig(), aStdFont.GetFamilyName(), aStdFont.GetStyleName(), + aStdFont.GetPitchMaybeAskConfig(), aStdFont.GetCharSet(), ATTR_CJK_FONT ); aStdFont = OutputDevice::GetDefaultFont( DefaultFontType::CTL_SPREADSHEET, LANGUAGE_ENGLISH_US, GetDefaultFontFlags::OnlyOne ); SvxFontItem aCTLFontItem( - aStdFont.GetFamilyType(), aStdFont.GetFamilyName(), aStdFont.GetStyleName(), - aStdFont.GetPitch(), aStdFont.GetCharSet(), ATTR_CTL_FONT ); + aStdFont.GetFamilyTypeMaybeAskConfig(), aStdFont.GetFamilyName(), aStdFont.GetStyleName(), + aStdFont.GetPitchMaybeAskConfig(), aStdFont.GetCharSet(), ATTR_CTL_FONT ); SvxFontHeightItem aHeight( 200, 100, ATTR_FONT_HEIGHT ); // 10 pt; diff --git a/sc/source/core/tool/cellkeytranslator.cxx b/sc/source/core/tool/cellkeytranslator.cxx index 4f4a1dd4179d..3a77651b5aab 100644 --- a/sc/source/core/tool/cellkeytranslator.cxx +++ b/sc/source/core/tool/cellkeytranslator.cxx @@ -17,17 +17,18 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <memory> +#include <sal/config.h> + +#include <vector> +#include <unordered_map> + #include <global.hxx> #include <cellkeytranslator.hxx> #include <comphelper/processfactory.hxx> #include <i18nlangtag/lang.h> #include <i18nutil/transliteration.hxx> -#include <rtl/ustring.hxx> #include <unotools/syslocale.hxx> -#include <com/sun/star/uno/Sequence.hxx> - -using ::com::sun::star::uno::Sequence; +#include <unotools/transliterationwrapper.hxx> using namespace ::com::sun::star; @@ -42,184 +43,183 @@ enum LocaleMatch LOCALE_MATCH_ALL }; -} - -static LocaleMatch lclLocaleCompare(const lang::Locale& rLocale1, const LanguageTag& rLanguageTag2) +LocaleMatch lclLocaleCompare(const lang::Locale& rLocale1, const LanguageTag& rLanguageTag2) { - LocaleMatch eMatchLevel = LOCALE_MATCH_NONE; LanguageTag aLanguageTag1( rLocale1); - if ( aLanguageTag1.getLanguage() == rLanguageTag2.getLanguage() ) - eMatchLevel = LOCALE_MATCH_LANG; - else - return eMatchLevel; + if (aLanguageTag1.getLanguage() != rLanguageTag2.getLanguage()) + return LOCALE_MATCH_NONE; - if ( aLanguageTag1.getScript() == rLanguageTag2.getScript() ) - eMatchLevel = LOCALE_MATCH_LANG_SCRIPT; - else - return eMatchLevel; + if (aLanguageTag1.getScript() != rLanguageTag2.getScript()) + return LOCALE_MATCH_LANG; - if ( aLanguageTag1.getCountry() == rLanguageTag2.getCountry() ) - eMatchLevel = LOCALE_MATCH_LANG_SCRIPT_COUNTRY; - else - return eMatchLevel; + if (aLanguageTag1.getCountry() != rLanguageTag2.getCountry()) + return LOCALE_MATCH_LANG_SCRIPT; - if (aLanguageTag1 == rLanguageTag2) - return LOCALE_MATCH_ALL; + if (aLanguageTag1 != rLanguageTag2) + return LOCALE_MATCH_LANG_SCRIPT_COUNTRY; - return eMatchLevel; + return LOCALE_MATCH_ALL; } -ScCellKeyword::ScCellKeyword(const char* pName, OpCode eOpCode, const lang::Locale& rLocale) : - mpName(pName), - meOpCode(eOpCode), - mrLocale(rLocale) +struct ScCellKeyword { -} + OUString msName; + OpCode meOpCode; + const css::lang::Locale& mrLocale; + + ScCellKeyword(const OUString& sName, OpCode eOpCode, const css::lang::Locale& rLocale) + : msName(sName) + , meOpCode(eOpCode) + , mrLocale(rLocale) + { + } +}; -::std::unique_ptr<ScCellKeywordTranslator> ScCellKeywordTranslator::spInstance; +typedef std::unordered_map<OUString, std::vector<ScCellKeyword>> ScCellKeywordHashMap; -static void lclMatchKeyword(OUString& rName, const ScCellKeywordHashMap& aMap, - OpCode eOpCode, const lang::Locale* pLocale) +void lclMatchKeyword(OUString& rName, const ScCellKeywordHashMap& aMap, OpCode eOpCode, + const lang::Locale& rLocale) { - ScCellKeywordHashMap::const_iterator itrEnd = aMap.end(); + assert(eOpCode != ocNone); ScCellKeywordHashMap::const_iterator itr = aMap.find(rName); - if ( itr == itrEnd || itr->second.empty() ) + if (itr == aMap.end() || itr->second.empty()) // No candidate strings exist. Bail out. return; - if ( eOpCode == ocNone && !pLocale ) - { - // Since no locale nor opcode matching is needed, simply return - // the first item on the list. - rName = OUString::createFromAscii( itr->second.front().mpName ); - return; - } - - LanguageTag aLanguageTag( pLocale ? *pLocale : lang::Locale(u""_ustr,u""_ustr,u""_ustr)); - const char* aBestMatchName = itr->second.front().mpName; + LanguageTag aLanguageTag(rLocale); + const OUString* aBestMatchName = nullptr; LocaleMatch eLocaleMatchLevel = LOCALE_MATCH_NONE; - bool bOpCodeMatched = false; for (auto const& elem : itr->second) { - if ( eOpCode != ocNone && pLocale ) - { - if (elem.meOpCode == eOpCode) - { - LocaleMatch eLevel = lclLocaleCompare(elem.mrLocale, aLanguageTag); - if ( eLevel == LOCALE_MATCH_ALL ) - { - // Name with matching opcode and locale found. - rName = OUString::createFromAscii( elem.mpName ); - return; - } - else if ( eLevel > eLocaleMatchLevel ) - { - // Name with a better matching locale. - eLocaleMatchLevel = eLevel; - aBestMatchName = elem.mpName; - } - else if ( !bOpCodeMatched ) - // At least the opcode matches. - aBestMatchName = elem.mpName; - - bOpCodeMatched = true; - } - } - else if ( eOpCode != ocNone && !pLocale ) - { - if ( elem.meOpCode == eOpCode ) - { - // Name with a matching opcode preferred. - rName = OUString::createFromAscii( elem.mpName ); - return; - } - } - else if ( pLocale ) + if (elem.meOpCode == eOpCode) { LocaleMatch eLevel = lclLocaleCompare(elem.mrLocale, aLanguageTag); if ( eLevel == LOCALE_MATCH_ALL ) { - // Name with matching locale preferred. - rName = OUString::createFromAscii( elem.mpName ); + // Name with matching opcode and locale found. + rName = elem.msName; return; } else if ( eLevel > eLocaleMatchLevel ) { // Name with a better matching locale. eLocaleMatchLevel = eLevel; - aBestMatchName = elem.mpName; + aBestMatchName = &elem.msName; } } } // No preferred strings found. Return the best matching name. - rName = OUString::createFromAscii(aBestMatchName); + if (aBestMatchName) + rName = *aBestMatchName; } -void ScCellKeywordTranslator::transKeyword(OUString& rName, const lang::Locale* pLocale, OpCode eOpCode) +ScCellKeywordHashMap MakeMap() { - if (!spInstance) - spInstance.reset( new ScCellKeywordTranslator ); - - LanguageType nLang = pLocale ? - LanguageTag(*pLocale).makeFallback().getLanguageType() : ScGlobal::oSysLocale->GetLanguageTag().getLanguageType(); - Sequence<sal_Int32> aOffsets; - rName = spInstance->maTransWrapper.transliterate(rName, nLang, 0, rName.getLength(), &aOffsets); - lclMatchKeyword(rName, spInstance->maStringNameMap, eOpCode, pLocale); -} + ScCellKeywordHashMap map; -struct TransItem -{ - const sal_Unicode* from; - const char* to; - OpCode func; -}; - -ScCellKeywordTranslator::ScCellKeywordTranslator() : - maTransWrapper( ::comphelper::getProcessComponentContext(), - TransliterationFlags::LOWERCASE_UPPERCASE ) -{ - // The file below has been autogenerated by sc/workben/celltrans/parse.py. - // To add new locale keywords, edit sc/workben/celltrans/keywords_utf16.txt - // and re-run the parse.py script. - // // All keywords must be uppercase, and the mapping must be from the // localized keyword to the English keyword. - // - // Make sure that the original keyword file (keywords_utf16.txt) is - // encoded in UCS-2/UTF-16! - - #include "cellkeywords.inl" + struct TransItem + { + OUString from; + OUString to; + OpCode func; + }; + + // French language locale + + static const lang::Locale aFr(u"fr"_ustr, {}, {}); + + static constexpr TransItem pFr[] = { + { u"ADRESSE"_ustr, u"ADDRESS"_ustr, ocCell }, + { u"COLONNE"_ustr, u"COL"_ustr, ocCell }, + { u"CONTENU"_ustr, u"CONTENTS"_ustr, ocCell }, + { u"COULEUR"_ustr, u"COLOR"_ustr, ocCell }, + { u"LARGEUR"_ustr, u"WIDTH"_ustr, ocCell }, + { u"LIGNE"_ustr, u"ROW"_ustr, ocCell }, + { u"NOMFICHIER"_ustr, u"FILENAME"_ustr, ocCell }, + { u"PREFIXE"_ustr, u"PREFIX"_ustr, ocCell }, + { u"PROTEGE"_ustr, u"PROTECT"_ustr, ocCell }, + { u"NBFICH"_ustr, u"NUMFILE"_ustr, ocInfo }, + { u"RECALCUL"_ustr, u"RECALC"_ustr, ocInfo }, + { u"SYSTEXPL"_ustr, u"SYSTEM"_ustr, ocInfo }, + { u"VERSION"_ustr, u"RELEASE"_ustr, ocInfo }, + { u"VERSIONSE"_ustr, u"OSVERSION"_ustr, ocInfo }, + }; + + for (const auto& element : pFr) + map[element.from].emplace_back(element.to, element.func, aFr); + + // Hungarian language locale + + static const lang::Locale aHu(u"hu"_ustr, {}, {}); + + static constexpr TransItem pHu[] = { + { u"CÍM"_ustr, u"ADDRESS"_ustr, ocCell }, + { u"OSZLOP"_ustr, u"COL"_ustr, ocCell }, + { u"SZÍN"_ustr, u"COLOR"_ustr, ocCell }, + { u"TARTALOM"_ustr, u"CONTENTS"_ustr, ocCell }, + { u"SZÉLES"_ustr, u"WIDTH"_ustr, ocCell }, + { u"SOR"_ustr, u"ROW"_ustr, ocCell }, + { u"FILENÉV"_ustr, u"FILENAME"_ustr, ocCell }, + { u"VÉDETT"_ustr, u"PROTECT"_ustr, ocCell }, + { u"KOORD"_ustr, u"COORD"_ustr, ocCell }, + { u"FORMA"_ustr, u"FORMAT"_ustr, ocCell }, + { u"ZÁRÓJELEK"_ustr, u"PARENTHESES"_ustr, ocCell }, + { u"LAP"_ustr, u"SHEET"_ustr, ocCell }, + { u"TÍPUS"_ustr, u"TYPE"_ustr, ocCell }, + { u"FILESZÁM"_ustr, u"NUMFILE"_ustr, ocInfo }, + { u"SZÁMOLÁS"_ustr, u"RECALC"_ustr, ocInfo }, + { u"RENDSZER"_ustr, u"SYSTEM"_ustr, ocInfo }, + { u"VERZIÓ"_ustr, u"RELEASE"_ustr, ocInfo }, + { u"OPRENDSZER"_ustr, u"OSVERSION"_ustr, ocInfo }, + }; + + for (const auto& element : pHu) + map[element.from].emplace_back(element.to, element.func, aHu); + + // German language locale + + static const lang::Locale aDe(u"de"_ustr, {}, {}); + + static constexpr TransItem pDe[] = { + { u"ZEILE"_ustr, u"ROW"_ustr, ocCell }, + { u"SPALTE"_ustr, u"COL"_ustr, ocCell }, + { u"BREITE"_ustr, u"WIDTH"_ustr, ocCell }, + { u"ADRESSE"_ustr, u"ADDRESS"_ustr, ocCell }, + { u"DATEINAME"_ustr, u"FILENAME"_ustr, ocCell }, + { u"FARBE"_ustr, u"COLOR"_ustr, ocCell }, + { u"INHALT"_ustr, u"CONTENTS"_ustr, ocCell }, + { u"KLAMMERN"_ustr, u"PARENTHESES"_ustr, ocCell }, + { u"SCHUTZ"_ustr, u"PROTECT"_ustr, ocCell }, + { u"TYP"_ustr, u"TYPE"_ustr, ocCell }, + { u"PRÄFIX"_ustr, u"PREFIX"_ustr, ocCell }, + { u"BLATT"_ustr, u"SHEET"_ustr, ocCell }, + { u"KOORD"_ustr, u"COORD"_ustr, ocCell }, + }; + + for (const auto& element : pDe) + map[element.from].emplace_back(element.to, element.func, aDe); + + return map; } -ScCellKeywordTranslator::~ScCellKeywordTranslator() -{ -} +} // namespace -void ScCellKeywordTranslator::addToMap(const OUString& rKey, const char* pName, const lang::Locale& rLocale, OpCode eOpCode) +void ScCellKeywordTranslator::transKeyword(OUString& rName, const css::lang::Locale& rLocale, + OpCode eOpCode) { - ScCellKeyword aKeyItem( pName, eOpCode, rLocale ); + static const ScCellKeywordHashMap saStringNameMap(MakeMap()); + static utl::TransliterationWrapper saTransWrapper(comphelper::getProcessComponentContext(), + TransliterationFlags::LOWERCASE_UPPERCASE); - ScCellKeywordHashMap::iterator itrEnd = maStringNameMap.end(); - ScCellKeywordHashMap::iterator itr = maStringNameMap.find(rKey); - - if ( itr == itrEnd ) - { - // New keyword. - std::vector<ScCellKeyword> aVector { aKeyItem }; - maStringNameMap.emplace(rKey, aVector); - } - else - itr->second.push_back(aKeyItem); -} - -void ScCellKeywordTranslator::addToMap(const TransItem* pItems, const lang::Locale& rLocale) -{ - for (sal_uInt16 i = 0; pItems[i].from != nullptr; ++i) - addToMap(OUString(pItems[i].from), pItems[i].to, rLocale, pItems[i].func); + const LanguageType nLang = LanguageTag(rLocale).makeFallback().getLanguageType(); + rName = saTransWrapper.transliterate(rName, nLang, 0, rName.getLength(), nullptr); + lclMatchKeyword(rName, saStringNameMap, eOpCode, rLocale); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/tool/cellkeywords.inl b/sc/source/core/tool/cellkeywords.inl deleted file mode 100644 index 364e16042f46..000000000000 --- a/sc/source/core/tool/cellkeywords.inl +++ /dev/null @@ -1,199 +0,0 @@ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -// This file has been automatically generated. Do not hand-edit this! - - -// French language locale (automatically generated) - -static const lang::Locale aFr(u"fr"_ustr, u""_ustr, u""_ustr); - -// pre instantiations of localized function names -static const sal_Unicode cell_address_fr[] = { - 0x0041, 0x0044, 0x0052, 0x0045, 0x0053, 0x0053, 0x0045, 0x0000}; -static const sal_Unicode cell_col_fr[] = { - 0x0043, 0x004F, 0x004C, 0x004F, 0x004E, 0x004E, 0x0045, 0x0000}; -static const sal_Unicode cell_contents_fr[] = { - 0x0043, 0x004F, 0x004E, 0x0054, 0x0045, 0x004E, 0x0055, 0x0000}; -static const sal_Unicode cell_color_fr[] = { - 0x0043, 0x004F, 0x0055, 0x004C, 0x0045, 0x0055, 0x0052, 0x0000}; -static const sal_Unicode cell_width_fr[] = { - 0x004C, 0x0041, 0x0052, 0x0047, 0x0045, 0x0055, 0x0052, 0x0000}; -static const sal_Unicode cell_row_fr[] = { - 0x004C, 0x0049, 0x0047, 0x004E, 0x0045, 0x0000}; -static const sal_Unicode cell_filename_fr[] = { - 0x004E, 0x004F, 0x004D, 0x0046, 0x0049, 0x0043, 0x0048, 0x0049, 0x0045, 0x0052, 0x0000}; -static const sal_Unicode cell_prefix_fr[] = { - 0x0050, 0x0052, 0x0045, 0x0046, 0x0049, 0x0058, 0x0045, 0x0000}; -static const sal_Unicode cell_protect_fr[] = { - 0x0050, 0x0052, 0x004F, 0x0054, 0x0045, 0x0047, 0x0045, 0x0000}; -static const sal_Unicode info_numfile_fr[] = { - 0x004E, 0x0042, 0x0046, 0x0049, 0x0043, 0x0048, 0x0000}; -static const sal_Unicode info_recalc_fr[] = { - 0x0052, 0x0045, 0x0043, 0x0041, 0x004C, 0x0043, 0x0055, 0x004C, 0x0000}; -static const sal_Unicode info_system_fr[] = { - 0x0053, 0x0059, 0x0053, 0x0054, 0x0045, 0x0058, 0x0050, 0x004C, 0x0000}; -static const sal_Unicode info_release_fr[] = { - 0x0056, 0x0045, 0x0052, 0x0053, 0x0049, 0x004F, 0x004E, 0x0000}; -static const sal_Unicode info_osversion_fr[] = { - 0x0056, 0x0045, 0x0052, 0x0053, 0x0049, 0x004F, 0x004E, 0x0053, 0x0045, 0x0000}; - -static const TransItem pFr[] = { - {cell_address_fr, "ADDRESS", ocCell}, - {cell_col_fr, "COL", ocCell}, - {cell_contents_fr, "CONTENTS", ocCell}, - {cell_color_fr, "COLOR", ocCell}, - {cell_width_fr, "WIDTH", ocCell}, - {cell_row_fr, "ROW", ocCell}, - {cell_filename_fr, "FILENAME", ocCell}, - {cell_prefix_fr, "PREFIX", ocCell}, - {cell_protect_fr, "PROTECT", ocCell}, - {info_numfile_fr, "NUMFILE", ocInfo}, - {info_recalc_fr, "RECALC", ocInfo}, - {info_system_fr, "SYSTEM", ocInfo}, - {info_release_fr, "RELEASE", ocInfo}, - {info_osversion_fr, "OSVERSION", ocInfo}, - {nullptr, nullptr, ocNone} -}; - -addToMap(pFr, aFr); - - -// Hungarian language locale (automatically generated) - -static const lang::Locale aHu(u"hu"_ustr, u""_ustr, u""_ustr); - -// pre instantiations of localized function names -static const sal_Unicode cell_address_hu[] = { - 0x0043, 0x00CD, 0x004D, 0x0000}; -static const sal_Unicode cell_col_hu[] = { - 0x004F, 0x0053, 0x005A, 0x004C, 0x004F, 0x0050, 0x0000}; -static const sal_Unicode cell_color_hu[] = { - 0x0053, 0x005A, 0x00CD, 0x004E, 0x0000}; -static const sal_Unicode cell_contents_hu[] = { - 0x0054, 0x0041, 0x0052, 0x0054, 0x0041, 0x004C, 0x004F, 0x004D, 0x0000}; -static const sal_Unicode cell_width_hu[] = { - 0x0053, 0x005A, 0x00C9, 0x004C, 0x0045, 0x0053, 0x0000}; -static const sal_Unicode cell_row_hu[] = { - 0x0053, 0x004F, 0x0052, 0x0000}; -static const sal_Unicode cell_filename_hu[] = { - 0x0046, 0x0049, 0x004C, 0x0045, 0x004E, 0x00C9, 0x0056, 0x0000}; -static const sal_Unicode cell_prefix_hu[] = { - 0x0050, 0x0052, 0x0045, 0x0046, 0x0049, 0x0058, 0x0000}; -static const sal_Unicode cell_protect_hu[] = { - 0x0056, 0x00C9, 0x0044, 0x0045, 0x0054, 0x0054, 0x0000}; -static const sal_Unicode cell_coord_hu[] = { - 0x004B, 0x004F, 0x004F, 0x0052, 0x0044, 0x0000}; -static const sal_Unicode cell_format_hu[] = { - 0x0046, 0x004F, 0x0052, 0x004D, 0x0041, 0x0000}; -static const sal_Unicode cell_parentheses_hu[] = { - 0x005A, 0x00C1, 0x0052, 0x00D3, 0x004A, 0x0045, 0x004C, 0x0045, 0x004B, 0x0000}; -static const sal_Unicode cell_sheet_hu[] = { - 0x004C, 0x0041, 0x0050, 0x0000}; -static const sal_Unicode cell_type_hu[] = { - 0x0054, 0x00CD, 0x0050, 0x0055, 0x0053, 0x0000}; -static const sal_Unicode info_numfile_hu[] = { - 0x0046, 0x0049, 0x004C, 0x0045, 0x0053, 0x005A, 0x00C1, 0x004D, 0x0000}; -static const sal_Unicode info_recalc_hu[] = { - 0x0053, 0x005A, 0x00C1, 0x004D, 0x004F, 0x004C, 0x00C1, 0x0053, 0x0000}; -static const sal_Unicode info_system_hu[] = { - 0x0052, 0x0045, 0x004E, 0x0044, 0x0053, 0x005A, 0x0045, 0x0052, 0x0000}; -static const sal_Unicode info_release_hu[] = { - 0x0056, 0x0045, 0x0052, 0x005A, 0x0049, 0x00D3, 0x0000}; -static const sal_Unicode info_osversion_hu[] = { - 0x004F, 0x0050, 0x0052, 0x0045, 0x004E, 0x0044, 0x0053, 0x005A, 0x0045, 0x0052, 0x0000}; - -static const TransItem pHu[] = { - {cell_address_hu, "ADDRESS", ocCell}, - {cell_col_hu, "COL", ocCell}, - {cell_color_hu, "COLOR", ocCell}, - {cell_contents_hu, "CONTENTS", ocCell}, - {cell_width_hu, "WIDTH", ocCell}, - {cell_row_hu, "ROW", ocCell}, - {cell_filename_hu, "FILENAME", ocCell}, - {cell_prefix_hu, "PREFIX", ocCell}, - {cell_protect_hu, "PROTECT", ocCell}, - {cell_coord_hu, "COORD", ocCell}, - {cell_format_hu, "FORMAT", ocCell}, - {cell_parentheses_hu, "PARENTHESES", ocCell}, - {cell_sheet_hu, "SHEET", ocCell}, - {cell_type_hu, "TYPE", ocCell}, - {info_numfile_hu, "NUMFILE", ocInfo}, - {info_recalc_hu, "RECALC", ocInfo}, - {info_system_hu, "SYSTEM", ocInfo}, - {info_release_hu, "RELEASE", ocInfo}, - {info_osversion_hu, "OSVERSION", ocInfo}, - {nullptr, nullptr, ocNone} -}; - -addToMap(pHu, aHu); - - -// German language locale (automatically generated) - -static const lang::Locale aDe(u"de"_ustr, u""_ustr, u""_ustr); - -// pre instantiations of localized function names -static const sal_Unicode cell_row_de[] = { - 0x005A, 0x0045, 0x0049, 0x004C, 0x0045, 0x0000}; -static const sal_Unicode cell_col_de[] = { - 0x0053, 0x0050, 0x0041, 0x004C, 0x0054, 0x0045, 0x0000}; -static const sal_Unicode cell_width_de[] = { - 0x0042, 0x0052, 0x0045, 0x0049, 0x0054, 0x0045, 0x0000}; -static const sal_Unicode cell_address_de[] = { - 0x0041, 0x0044, 0x0052, 0x0045, 0x0053, 0x0053, 0x0045, 0x0000}; -static const sal_Unicode cell_filename_de[] = { - 0x0044, 0x0041, 0x0054, 0x0045, 0x0049, 0x004E, 0x0041, 0x004D, 0x0045, 0x0000}; -static const sal_Unicode cell_color_de[] = { - 0x0046, 0x0041, 0x0052, 0x0042, 0x0045, 0x0000}; -static const sal_Unicode cell_format_de[] = { - 0x0046, 0x004F, 0x0052, 0x004D, 0x0041, 0x0054, 0x0000}; -static const sal_Unicode cell_contents_de[] = { - 0x0049, 0x004E, 0x0048, 0x0041, 0x004C, 0x0054, 0x0000}; -static const sal_Unicode cell_parentheses_de[] = { - 0x004B, 0x004C, 0x0041, 0x004D, 0x004D, 0x0045, 0x0052, 0x004E, 0x0000}; -static const sal_Unicode cell_protect_de[] = { - 0x0053, 0x0043, 0x0048, 0x0055, 0x0054, 0x005A, 0x0000}; -static const sal_Unicode cell_type_de[] = { - 0x0054, 0x0059, 0x0050, 0x0000}; -static const sal_Unicode cell_prefix_de[] = { - 0x0050, 0x0052, 0x00C4, 0x0046, 0x0049, 0x0058, 0x0000}; -static const sal_Unicode cell_sheet_de[] = { - 0x0042, 0x004C, 0x0041, 0x0054, 0x0054, 0x0000}; -static const sal_Unicode cell_coord_de[] = { - 0x004B, 0x004F, 0x004F, 0x0052, 0x0044, 0x0000}; - -static const TransItem pDe[] = { - {cell_row_de, "ROW", ocCell}, - {cell_col_de, "COL", ocCell}, - {cell_width_de, "WIDTH", ocCell}, - {cell_address_de, "ADDRESS", ocCell}, - {cell_filename_de, "FILENAME", ocCell}, - {cell_color_de, "COLOR", ocCell}, - {cell_format_de, "FORMAT", ocCell}, - {cell_contents_de, "CONTENTS", ocCell}, - {cell_parentheses_de, "PARENTHESES", ocCell}, - {cell_protect_de, "PROTECT", ocCell}, - {cell_type_de, "TYPE", ocCell}, - {cell_prefix_de, "PREFIX", ocCell}, - {cell_sheet_de, "SHEET", ocCell}, - {cell_coord_de, "COORD", ocCell}, - {nullptr, nullptr, ocNone} -}; - -addToMap(pDe, aDe); diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx index f5ccfd579afb..e054d3e91004 100644 --- a/sc/source/core/tool/chgtrack.cxx +++ b/sc/source/core/tool/chgtrack.cxx @@ -1667,7 +1667,7 @@ void ScChangeActionContent::SetValue( rCell.clear(); } -void ScChangeActionContent::SetCell( OUString& rStr, ScCellValue& rCell, sal_uLong nFormat, const ScDocument* pDoc ) +void ScChangeActionContent::SetCell( OUString& rStr, const ScCellValue& rCell, sal_uLong nFormat, const ScDocument* pDoc ) { rStr.clear(); if (rCell.isEmpty()) diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 90f67c3eec22..147c2220e039 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -103,9 +103,186 @@ enum ScanState ssStop }; +constexpr std::array<ScCharFlags, 128> makeCommonCharTable() +{ + std::array<ScCharFlags, 128> a; + a.fill(ScCharFlags::Illegal); + + // Allow tabs/newlines. + // Allow saving whitespace as is (as per OpenFormula specification v.1.2, clause 5.14 "Whitespace"). + a['\t'] = ScCharFlags::CharDontCare | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['\n'] = ScCharFlags::CharDontCare | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['\r'] = ScCharFlags::CharDontCare | ScCharFlags::WordSep | ScCharFlags::ValueSep; + + a[' '] = ScCharFlags::CharDontCare | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['!'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['"'] = ScCharFlags::CharString | ScCharFlags::StringSep; + a['#'] = ScCharFlags::WordSep | ScCharFlags::CharErrConst; + a['$'] = ScCharFlags::CharWord | ScCharFlags::Word | ScCharFlags::CharIdent | ScCharFlags::Ident; + a['%'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['&'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['\''] = ScCharFlags::NameSep; + a['('] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a[')'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['*'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['+'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueExp | ScCharFlags::ValueSign; + a[','] = ScCharFlags::CharValue | ScCharFlags::Value; + a['-'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueExp | ScCharFlags::ValueSign; + a['.'] = ScCharFlags::Word | ScCharFlags::CharValue | ScCharFlags::Value | ScCharFlags::Ident | ScCharFlags::Name; + a['/'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; + + for (int i = '0'; i <= '9'; i++) + a[i] = ScCharFlags::CharValue | ScCharFlags::Word | ScCharFlags::Value | ScCharFlags::ValueExp | ScCharFlags::ValueValue | ScCharFlags::Ident | ScCharFlags::Name; + + a[':'] = ScCharFlags::Char | ScCharFlags::Word; + a[';'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['<'] = ScCharFlags::CharBool | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['='] = ScCharFlags::Char | ScCharFlags::Bool | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['>'] = ScCharFlags::CharBool | ScCharFlags::Bool | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['?'] = ScCharFlags::CharWord | ScCharFlags::Word | ScCharFlags::Name; + /* @ */ // FREE + + for (int i = 'A'; i <= 'Z'; i++) + a[i] = ScCharFlags::CharWord | ScCharFlags::Word | ScCharFlags::CharIdent | ScCharFlags::Ident | ScCharFlags::CharName | ScCharFlags::Name; + + /* [ */ // FREE + /* \ */ // FREE + /* ] */ // FREE + + a['^'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; + a['_'] = ScCharFlags::CharWord | ScCharFlags::Word | ScCharFlags::CharIdent | ScCharFlags::Ident | ScCharFlags::CharName | ScCharFlags::Name; + /* ` */ // FREE + + for (int i = 'a'; i <= 'z'; i++) + a[i] = ScCharFlags::CharWord | ScCharFlags::Word | ScCharFlags::CharIdent | ScCharFlags::Ident | ScCharFlags::CharName | ScCharFlags::Name; + + a['{'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; // array open + a['|'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; // array row sep (Should be OOo specific) + a['}'] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; // array close + a['~'] = ScCharFlags::Char; // OOo specific + /* 127 */ // FREE + + return a; +} + +constexpr std::array<ScCharFlags, 128> makeCharTable_OOO_A1() +{ + auto a = makeCommonCharTable(); + a['['] = ScCharFlags::Char; + a[']'] = ScCharFlags::Char; + return a; +} + +constexpr std::array<ScCharFlags, 128> makeCharTable_OOO_A1_ODF() +{ + auto a = makeCommonCharTable(); + a['!'] |= ScCharFlags::OdfLabelOp; + a['$'] |= ScCharFlags::OdfNameMarker; + a['['] = ScCharFlags::OdfLBracket; + a[']'] = ScCharFlags::OdfRBracket; + return a; +} + +constexpr std::array<ScCharFlags, 128> makeCharTable_XL() +{ + auto a = makeCommonCharTable(); + a[' '] |= ScCharFlags::Word; + a['!'] |= ScCharFlags::Ident | ScCharFlags::Word; + a['"'] |= ScCharFlags::Word; + a['#'] &= ~ScCharFlags::WordSep; + a['#'] |= ScCharFlags::Word; + a['%'] |= ScCharFlags::Word; + a['&'] |= ScCharFlags::Word; + a['\''] |= ScCharFlags::Word; + a['('] |= ScCharFlags::Word; + a[')'] |= ScCharFlags::Word; + a['*'] |= ScCharFlags::Word; + a['+'] |= ScCharFlags::Word; +#if 0 /* this really needs to be locale specific. */ + a[','] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; +#else + a[','] |= ScCharFlags::Word; +#endif + a['-'] |= ScCharFlags::Word; + + a[';'] |= ScCharFlags::Word; + a['<'] |= ScCharFlags::Word; + a['='] |= ScCharFlags::Word; + a['>'] |= ScCharFlags::Word; + /* ? */ // question really is not permitted in sheet name + a['@'] |= ScCharFlags::Word; + a['['] = ScCharFlags::Word; + a[']'] = ScCharFlags::Word; + a['{'] |= ScCharFlags::Word; + a['|'] |= ScCharFlags::Word; + a['}'] |= ScCharFlags::Word; + a['~'] |= ScCharFlags::Word; + return a; +} + +constexpr std::array<ScCharFlags, 128> makeCharTable_XL_A1() +{ + auto a = makeCharTable_XL(); + a['['] |= ScCharFlags::Char; + a[']'] |= ScCharFlags::Char; + return a; +} + +constexpr std::array<ScCharFlags, 128> makeCharTable_XL_OOX() +{ + auto a = makeCharTable_XL_A1(); + a['['] |= ScCharFlags::CharIdent; + a[']'] |= ScCharFlags::Ident; + return a; } -static const char* pInternal[2] = { "TTT", "__DEBUG_VAR" }; +constexpr std::array<ScCharFlags, 128> makeCharTable_XL_R1C1() +{ + auto a = makeCharTable_XL(); + a['['] |= ScCharFlags::Ident; + a[']'] |= ScCharFlags::Ident; + return a; +} + +const std::array<ScCharFlags, 128>& getCharTable(FormulaGrammar::AddressConvention eConv) +{ + switch (eConv) + { + case FormulaGrammar::CONV_OOO: + { + static constexpr auto table_OOO_A1(makeCharTable_OOO_A1()); + return table_OOO_A1; + } + case FormulaGrammar::CONV_ODF: + { + static constexpr auto table_OOO_A1_ODF(makeCharTable_OOO_A1_ODF()); + return table_OOO_A1_ODF; + } + case FormulaGrammar::CONV_XL_A1: + { + static constexpr auto table_XL_A1(makeCharTable_XL_A1()); + return table_XL_A1; + } + case FormulaGrammar::CONV_XL_R1C1: + { + static constexpr auto table_XL_R1C1(makeCharTable_XL_R1C1()); + return table_XL_R1C1; + } + case FormulaGrammar::CONV_XL_OOX: + { + static constexpr auto table_XL_OOX(makeCharTable_XL_OOX()); + return table_XL_OOX; + } + case FormulaGrammar::CONV_UNSPECIFIED: + default: + { + assert(!"Unimplemented convention"); + std::abort(); + } + } +} + +} using namespace ::com::sun::star::i18n; @@ -365,143 +542,10 @@ ScCompiler::Convention::~Convention() } ScCompiler::Convention::Convention( FormulaGrammar::AddressConvention eConv ) - : - meConv( eConv ) + : meConv(eConv) + , mrCharTable(getCharTable(eConv)) { - int i; - ScCharFlags *t= new ScCharFlags [128]; - ScCompiler::pConventions[ meConv ] = this; - mpCharTable.reset( t ); - - for (i = 0; i < 128; i++) - t[i] = ScCharFlags::Illegal; - -// Allow tabs/newlines. -// Allow saving whitespace as is (as per OpenFormula specification v.1.2, clause 5.14 "Whitespace"). -/* tab */ t[ 9] = ScCharFlags::CharDontCare | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* lf */ t[10] = ScCharFlags::CharDontCare | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* cr */ t[13] = ScCharFlags::CharDontCare | ScCharFlags::WordSep | ScCharFlags::ValueSep; - -/* */ t[32] = ScCharFlags::CharDontCare | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* ! */ t[33] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; - if (FormulaGrammar::CONV_ODF == meConv) -/* ! */ t[33] |= ScCharFlags::OdfLabelOp; -/* " */ t[34] = ScCharFlags::CharString | ScCharFlags::StringSep; -/* # */ t[35] = ScCharFlags::WordSep | ScCharFlags::CharErrConst; -/* $ */ t[36] = ScCharFlags::CharWord | ScCharFlags::Word | ScCharFlags::CharIdent | ScCharFlags::Ident; - if (FormulaGrammar::CONV_ODF == meConv) -/* $ */ t[36] |= ScCharFlags::OdfNameMarker; -/* % */ t[37] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* & */ t[38] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* ' */ t[39] = ScCharFlags::NameSep; -/* ( */ t[40] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* ) */ t[41] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* * */ t[42] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* + */ t[43] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueExp | ScCharFlags::ValueSign; -/* , */ t[44] = ScCharFlags::CharValue | ScCharFlags::Value; -/* - */ t[45] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueExp | ScCharFlags::ValueSign; -/* . */ t[46] = ScCharFlags::Word | ScCharFlags::CharValue | ScCharFlags::Value | ScCharFlags::Ident | ScCharFlags::Name; -/* / */ t[47] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; - - for (i = 48; i < 58; i++) -/* 0-9 */ t[i] = ScCharFlags::CharValue | ScCharFlags::Word | ScCharFlags::Value | ScCharFlags::ValueExp | ScCharFlags::ValueValue | ScCharFlags::Ident | ScCharFlags::Name; - -/* : */ t[58] = ScCharFlags::Char | ScCharFlags::Word; -/* ; */ t[59] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* < */ t[60] = ScCharFlags::CharBool | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* = */ t[61] = ScCharFlags::Char | ScCharFlags::Bool | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* > */ t[62] = ScCharFlags::CharBool | ScCharFlags::Bool | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* ? */ t[63] = ScCharFlags::CharWord | ScCharFlags::Word | ScCharFlags::Name; -/* @ */ // FREE - - for (i = 65; i < 91; i++) -/* A-Z */ t[i] = ScCharFlags::CharWord | ScCharFlags::Word | ScCharFlags::CharIdent | ScCharFlags::Ident | ScCharFlags::CharName | ScCharFlags::Name; - - if (FormulaGrammar::CONV_ODF == meConv) - { -/* [ */ t[91] = ScCharFlags::OdfLBracket; -/* \ */ // FREE -/* ] */ t[93] = ScCharFlags::OdfRBracket; - } - else if (FormulaGrammar::CONV_OOO == meConv) - { -/* [ */ t[91] = ScCharFlags::Char; -/* \ */ // FREE -/* ] */ t[93] = ScCharFlags::Char; - } - else if (FormulaGrammar::CONV_XL_OOX == meConv) - { -/* [ */ t[91] = ScCharFlags::Char | ScCharFlags::CharIdent; -/* \ */ // FREE -/* ] */ t[93] = ScCharFlags::Char | ScCharFlags::Ident; - } - else if (FormulaGrammar::CONV_XL_A1 == meConv) - { -/* [ */ t[91] = ScCharFlags::Char; -/* \ */ // FREE -/* ] */ t[93] = ScCharFlags::Char; - } - else if( FormulaGrammar::CONV_XL_R1C1 == meConv ) - { -/* [ */ t[91] = ScCharFlags::Ident; -/* \ */ // FREE -/* ] */ t[93] = ScCharFlags::Ident; - } - else - { -/* [ */ // FREE -/* \ */ // FREE -/* ] */ // FREE - } - -/* ^ */ t[94] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; -/* _ */ t[95] = ScCharFlags::CharWord | ScCharFlags::Word | ScCharFlags::CharIdent | ScCharFlags::Ident | ScCharFlags::CharName | ScCharFlags::Name; -/* ` */ // FREE - - for (i = 97; i < 123; i++) -/* a-z */ t[i] = ScCharFlags::CharWord | ScCharFlags::Word | ScCharFlags::CharIdent | ScCharFlags::Ident | ScCharFlags::CharName | ScCharFlags::Name; - -/* { */ t[123] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; // array open -/* | */ t[124] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; // array row sep (Should be OOo specific) -/* } */ t[125] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; // array close -/* ~ */ t[126] = ScCharFlags::Char; // OOo specific -/* 127 */ // FREE - - if( !(FormulaGrammar::CONV_XL_A1 == meConv || FormulaGrammar::CONV_XL_R1C1 == meConv || FormulaGrammar::CONV_XL_OOX == meConv) ) -return; - -/* */ t[32] |= ScCharFlags::Word; -/* ! */ t[33] |= ScCharFlags::Ident | ScCharFlags::Word; -/* " */ t[34] |= ScCharFlags::Word; -/* # */ t[35] &= ~ScCharFlags::WordSep; -/* # */ t[35] |= ScCharFlags::Word; -/* % */ t[37] |= ScCharFlags::Word; -/* & */ t[38] |= ScCharFlags::Word; -/* ' */ t[39] |= ScCharFlags::Word; -/* ( */ t[40] |= ScCharFlags::Word; -/* ) */ t[41] |= ScCharFlags::Word; -/* * */ t[42] |= ScCharFlags::Word; -/* + */ t[43] |= ScCharFlags::Word; -#if 0 /* this really needs to be locale specific. */ -/* , */ t[44] = ScCharFlags::Char | ScCharFlags::WordSep | ScCharFlags::ValueSep; -#else -/* , */ t[44] |= ScCharFlags::Word; -#endif -/* - */ t[45] |= ScCharFlags::Word; - -/* ; */ t[59] |= ScCharFlags::Word; -/* < */ t[60] |= ScCharFlags::Word; -/* = */ t[61] |= ScCharFlags::Word; -/* > */ t[62] |= ScCharFlags::Word; -/* ? */ // question really is not permitted in sheet name -/* @ */ t[64] |= ScCharFlags::Word; -/* [ */ t[91] |= ScCharFlags::Word; -/* ] */ t[93] |= ScCharFlags::Word; -/* { */ t[123]|= ScCharFlags::Word; -/* | */ t[124]|= ScCharFlags::Word; -/* } */ t[125]|= ScCharFlags::Word; -/* ~ */ t[126]|= ScCharFlags::Word; } static bool lcl_isValidQuotedText( std::u16string_view rFormula, size_t nSrcPos, ParseResult& rRes ) @@ -792,7 +836,7 @@ struct Convention_A1 : public ScCompiler::Convention virtual ScCharFlags getCharTableFlags( sal_Unicode c, sal_Unicode /*cLast*/ ) const override { - return mpCharTable[static_cast<sal_uInt8>(c)]; + return mrCharTable[static_cast<sal_uInt8>(c)]; } }; @@ -1386,7 +1430,9 @@ struct ConventionXL_A1 : public Convention_A1, public ConventionXL } makeSingleCellStr(rLimits, rBuf, aRef.Ref1, aAbs1); - if (!bSingleRef && (aAbs1.Row() != aAbs2.Row() || aAbs1.Col() != aAbs2.Col())) + if (!bSingleRef && + (aAbs1.Row() != aAbs2.Row() || aRef.Ref1.IsRowRel() != aRef.Ref2.IsRowRel() || + aAbs1.Col() != aAbs2.Col() || aRef.Ref1.IsColRel() != aRef.Ref2.IsColRel())) { rBuf.append( ':' ); makeSingleCellStr(rLimits, rBuf, aRef.Ref2, aAbs2); @@ -1734,7 +1780,8 @@ struct ConventionXL_R1C1 : public ScCompiler::Convention, public ConventionXL // additional condition similar to ConventionXL_A1::makeRefStr() could // be // - // && (aAbsRef.aStart.Row() != aAbsRef.aEnd.Row() || aAbsRef.aStart.Col() != aAbsRef.aEnd.Col()) + // && (aAbsRef.aStart.Row() != aAbsRef.aEnd.Row() || rRef.Ref1.IsRowRel() != rRef.Ref2.IsRowRel() || + // aAbsRef.aStart.Col() != aAbsRef.aEnd.Col() || rRef.Ref1.IsColRel() != rRef.Ref2.IsColRel()) if (!bSingleRef) { rBuf.append( ':' ); @@ -1853,7 +1900,7 @@ struct ConventionXL_R1C1 : public ScCompiler::Convention, public ConventionXL virtual ScCharFlags getCharTableFlags( sal_Unicode c, sal_Unicode cLast ) const override { - ScCharFlags nFlags = mpCharTable[static_cast<sal_uInt8>(c)]; + ScCharFlags nFlags = mrCharTable[static_cast<sal_uInt8>(c)]; if (c == '-' && cLast == '[') // '-' can occur within a reference string only after '[' e.g. R[-1]C. nFlags |= ScCharFlags::Ident; @@ -3128,13 +3175,15 @@ bool ScCompiler::ParseOpCode( const OUString& rName, bool bInArray ) bool ScCompiler::ParseOpCode2( std::u16string_view rName ) { - for (sal_uInt16 i = ocInternalBegin; i <= ocInternalEnd; i++) + if (rName == u"TTT") { - if (o3tl::equalsAscii(rName, pInternal[i - ocInternalBegin])) - { - maRawToken.SetOpCode(static_cast<OpCode>(i)); - return true; - } + maRawToken.SetOpCode(ocTTT); + return true; + } + if (rName == u"__DEBUG_VAR") + { + maRawToken.SetOpCode(ocDebugVar); + return true; } return false; @@ -5155,7 +5204,7 @@ ScRangeData* ScCompiler::GetRangeData( const FormulaToken& rToken ) const bool ScCompiler::HandleStringName() { ScTokenArray* pNew = new ScTokenArray(rDoc); - pNew->AddString(mpToken->GetString()); + pNew->AddStringName(mpToken->GetString()); PushTokenArray(pNew, true); return GetToken(); } @@ -6817,6 +6866,35 @@ void ScCompiler::AnnotateTrimOnDoubleRefs() --ppTok; } } + else if (eOpCode == ocSubTotal) + { + // tdf#164843: Double references from relative named ranges can point to large + // ranges (MAXCOL/MAXROW) and because of that some function evaluation + // like SubTotal can be extremely slow when we call ScTable::CompileHybridFormula + // with these large ranges. Since all the SubTotal functions ignore empty cells + // its worth to optimize and trim the double references in SubTotal functions. + FormulaToken** ppTok = pCode - 2; + while (*ppTok) + { + FormulaToken* pTok = *ppTok; + if (pTok->GetType() == svDoubleRef) + { + ScComplexRefData* pRefData = pTok->GetDoubleRef(); + // no need to set pRefData->SetTrimToData(true); because we already trim here + ScRange rRange = pRefData->toAbs(rDoc, aPos); + SCCOL nTempStartCol = rRange.aStart.Col(); + SCROW nTempStartRow = rRange.aStart.Row(); + SCCOL nTempEndCol = rRange.aEnd.Col(); + SCROW nTempEndRow = rRange.aEnd.Row(); + rDoc.ShrinkToDataArea(rRange.aStart.Tab(), nTempStartCol, nTempStartRow, nTempEndCol, nTempEndRow); + rRange.aStart.Set(nTempStartCol, nTempStartRow, rRange.aStart.Tab()); + rRange.aEnd.Set(nTempEndCol, nTempEndRow, rRange.aEnd.Tab()); + rRange.PutInOrder(); + pRefData->SetRange(rDoc.GetSheetLimits(), rRange, aPos); + } + --ppTok; + } + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/tool/editutil.cxx b/sc/source/core/tool/editutil.cxx index d72235516d01..45972774b836 100644 --- a/sc/source/core/tool/editutil.cxx +++ b/sc/source/core/tool/editutil.cxx @@ -579,51 +579,51 @@ void ScEditEngineDefaulter::ApplyDefaults(const SfxItemSet& rNewSet) void ScEditEngineDefaulter::SetDefaults(const SfxItemSet& rSet) { - SetDefaults(std::make_unique<SfxItemSet>(rSet)); + m_oDefaults.emplace(rSet); + ApplyDefaults(*m_oDefaults); } -void ScEditEngineDefaulter::SetDefaults( std::unique_ptr<SfxItemSet> pSet ) +void ScEditEngineDefaulter::SetDefaults( SfxItemSet&& aSet ) { - m_pDefaults = std::move(pSet); - if ( m_pDefaults ) - ApplyDefaults(*m_pDefaults); + m_oDefaults.emplace(std::move(aSet)); + ApplyDefaults(*m_oDefaults); } void ScEditEngineDefaulter::SetDefaultItem( const SfxPoolItem& rItem ) { - if ( !m_pDefaults ) + if ( !m_oDefaults ) { - m_pDefaults = std::make_unique<SfxItemSet>( GetEmptyItemSet() ); + m_oDefaults.emplace( GetEmptyItemSet() ); } - m_pDefaults->Put( rItem ); - ApplyDefaults(*m_pDefaults); + m_oDefaults->Put( rItem ); + ApplyDefaults(*m_oDefaults); } const SfxItemSet& ScEditEngineDefaulter::GetDefaults() { - if ( !m_pDefaults ) + if ( !m_oDefaults ) { - m_pDefaults = std::make_unique<SfxItemSet>( GetEmptyItemSet() ); + m_oDefaults.emplace( GetEmptyItemSet() ); } - return *m_pDefaults; + return *m_oDefaults; } void ScEditEngineDefaulter::SetTextCurrentDefaults( const EditTextObject& rTextObject ) { bool bUpdateMode = SetUpdateLayout( false ); SetText( rTextObject ); - if ( m_pDefaults ) - ApplyDefaults(*m_pDefaults); + if ( m_oDefaults ) + ApplyDefaults(*m_oDefaults); if ( bUpdateMode ) SetUpdateLayout( true ); } void ScEditEngineDefaulter::SetTextNewDefaults(const EditTextObject& rTextObject, - std::unique_ptr<SfxItemSet> pDefaults) + SfxItemSet&& aDefaults) { bool bUpdateMode = SetUpdateLayout( false ); SetText( rTextObject ); - SetDefaults(std::move(pDefaults)); + SetDefaults(std::move(aDefaults)); if ( bUpdateMode ) SetUpdateLayout( true ); } @@ -642,29 +642,29 @@ void ScEditEngineDefaulter::SetTextCurrentDefaults( const OUString& rText ) { bool bUpdateMode = SetUpdateLayout( false ); SetText( rText ); - if ( m_pDefaults ) - ApplyDefaults(*m_pDefaults); + if ( m_oDefaults ) + ApplyDefaults(*m_oDefaults); if ( bUpdateMode ) SetUpdateLayout( true ); } void ScEditEngineDefaulter::SetTextNewDefaults( const OUString& rText, - std::unique_ptr<SfxItemSet> pDefaults ) + SfxItemSet&& aDefaults ) { bool bUpdateMode = SetUpdateLayout( false ); SetText( rText ); - SetDefaults(std::move(pDefaults)); + SetDefaults(std::move(aDefaults)); if ( bUpdateMode ) SetUpdateLayout( true ); } void ScEditEngineDefaulter::RepeatDefaults() { - if ( m_pDefaults ) + if ( m_oDefaults ) { sal_Int32 nPara = GetParagraphCount(); for ( sal_Int32 j=0; j<nPara; j++ ) - SetParaAttribs( j, *m_pDefaults ); + SetParaAttribs( j, *m_oDefaults ); } } @@ -683,7 +683,7 @@ void ScEditEngineDefaulter::RemoveParaAttribs() if ( rParaAttribs.GetItemState( nWhich, false, &pParaItem ) == SfxItemState::SET ) { // if defaults are set, use only items that are different from default - if ( !m_pDefaults || *pParaItem != m_pDefaults->Get(nWhich) ) + if ( !m_oDefaults || *pParaItem != m_oDefaults->Get(nWhich) ) { if (!pCharItems) pCharItems.emplace( GetEmptyItemSet() ); @@ -758,9 +758,9 @@ ScTabEditEngine::ScTabEditEngine( const ScPatternAttr& rPattern, void ScTabEditEngine::Init( const ScPatternAttr& rPattern ) { SetRefMapMode(MapMode(MapUnit::Map100thMM)); - auto pEditDefaults = std::make_unique<SfxItemSet>( GetEmptyItemSet() ); - rPattern.FillEditItemSet( pEditDefaults.get() ); - SetDefaults( std::move(pEditDefaults) ); + SfxItemSet aEditDefaults( GetEmptyItemSet() ); + rPattern.FillEditItemSet( &aEditDefaults ); + SetDefaults( std::move(aEditDefaults) ); // we have no StyleSheets for text SetControlWord( GetControlWord() & ~EEControlBits::RTFSTYLESHEETS ); } diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx index ac7a8f8a149b..63aa0583e4a3 100644 --- a/sc/source/core/tool/interpr1.cxx +++ b/sc/source/core/tool/interpr1.cxx @@ -90,142 +90,88 @@ void ScInterpreter::ScIfJump() const short* pJump = pCur->GetJump(); short nJumpCount = pJump[ 0 ]; MatrixJumpConditionToMatrix(); - switch ( GetStackType() ) + if ( GetStackType() != svMatrix ) { - case svMatrix: - { - ScMatrixRef pMat = PopMatrix(); - if ( !pMat ) - PushIllegalParameter(); - else - { - FormulaConstTokenRef xNew; - ScTokenMatrixMap::const_iterator aMapIter; - // DoubleError handled by JumpMatrix - pMat->SetErrorInterpreter( nullptr); - SCSIZE nCols, nRows; - pMat->GetDimensions( nCols, nRows ); - if ( nCols == 0 || nRows == 0 ) - { - PushIllegalArgument(); - return; - } - else if ((aMapIter = maTokenMatrixMap.find( pCur)) != maTokenMatrixMap.end()) - xNew = (*aMapIter).second; - else - { - std::shared_ptr<ScJumpMatrix> pJumpMat( std::make_shared<ScJumpMatrix>( - pCur->GetOpCode(), nCols, nRows)); - for ( SCSIZE nC=0; nC < nCols; ++nC ) - { - for ( SCSIZE nR=0; nR < nRows; ++nR ) - { - double fVal; - bool bTrue; - bool bIsValue = pMat->IsValue(nC, nR); - if (bIsValue) - { - fVal = pMat->GetDouble(nC, nR); - bIsValue = std::isfinite(fVal); - bTrue = bIsValue && (fVal != 0.0); - if (bTrue) - fVal = 1.0; - } - else - { - // Treat empty and empty path as 0, but string - // as error. ScMatrix::IsValueOrEmpty() returns - // true for any empty, empty path, empty cell, - // empty result. - bIsValue = pMat->IsValueOrEmpty(nC, nR); - bTrue = false; - fVal = (bIsValue ? 0.0 : CreateDoubleError( FormulaError::NoValue)); - } - if ( bTrue ) - { // TRUE - if( nJumpCount >= 2 ) - { // THEN path - pJumpMat->SetJump( nC, nR, fVal, - pJump[ 1 ], - pJump[ nJumpCount ]); - } - else - { // no parameter given for THEN - pJumpMat->SetJump( nC, nR, fVal, - pJump[ nJumpCount ], - pJump[ nJumpCount ]); - } - } - else - { // FALSE - if( nJumpCount == 3 && bIsValue ) - { // ELSE path - pJumpMat->SetJump( nC, nR, fVal, - pJump[ 2 ], - pJump[ nJumpCount ]); - } - else - { // no parameter given for ELSE, - // or DoubleError - pJumpMat->SetJump( nC, nR, fVal, - pJump[ nJumpCount ], - pJump[ nJumpCount ]); - } - } - } - } - xNew = new ScJumpMatrixToken(std::move(pJumpMat)); - GetTokenMatrixMap().emplace(pCur, xNew); - } - if (!xNew) - { - PushIllegalArgument(); - return; - } - PushTokenRef( xNew); - // set endpoint of path for main code line - aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] ); - } + ScIfJumpNotMatrix(pJump, nJumpCount); + return; + } + + ScMatrixRef pMat = PopMatrix(); + if ( !pMat ) + { + PushIllegalParameter(); + return; + } + + FormulaConstTokenRef xNew; + ScTokenMatrixMap::const_iterator aMapIter; + // DoubleError handled by JumpMatrix + pMat->SetErrorInterpreter( nullptr); + SCSIZE nCols, nRows; + pMat->GetDimensions( nCols, nRows ); + if ( nCols == 0 || nRows == 0 ) + { + PushIllegalArgument(); + return; + } + + if ((aMapIter = maTokenMatrixMap.find( pCur)) != maTokenMatrixMap.end()) + xNew = (*aMapIter).second; + else + { + std::shared_ptr<ScJumpMatrix> pJumpMat( std::make_shared<ScJumpMatrix>( + pCur->GetOpCode(), nCols, nRows)); + pMat->IfJump(*pJumpMat, pJump, nJumpCount); + xNew = new ScJumpMatrixToken(std::move(pJumpMat)); + GetTokenMatrixMap().emplace(pCur, xNew); + } + if (!xNew) + { + PushIllegalArgument(); + return; + } + PushTokenRef( xNew); + // set endpoint of path for main code line + aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] ); +} + +void ScInterpreter::ScIfJumpNotMatrix( const short* pJump, short nJumpCount ) +{ + const bool bCondition = GetBool(); + if (nGlobalError != FormulaError::NONE) + { // Propagate error, not THEN- or ELSE-path, jump behind. + PushError(nGlobalError); + aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] ); + } + else if ( bCondition ) + { // TRUE + if( nJumpCount >= 2 ) + { // THEN path + aCode.Jump( pJump[ 1 ], pJump[ nJumpCount ] ); } - break; - default: - { - const bool bCondition = GetBool(); - if (nGlobalError != FormulaError::NONE) - { // Propagate error, not THEN- or ELSE-path, jump behind. - PushError(nGlobalError); - aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] ); - } - else if ( bCondition ) - { // TRUE - if( nJumpCount >= 2 ) - { // THEN path - aCode.Jump( pJump[ 1 ], pJump[ nJumpCount ] ); - } - else - { // no parameter given for THEN - nFuncFmtType = SvNumFormatType::LOGICAL; - PushInt(1); - aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] ); - } - } - else - { // FALSE - if( nJumpCount == 3 ) - { // ELSE path - aCode.Jump( pJump[ 2 ], pJump[ nJumpCount ] ); - } - else - { // no parameter given for ELSE - nFuncFmtType = SvNumFormatType::LOGICAL; - PushInt(0); - aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] ); - } - } + else + { // no parameter given for THEN + nFuncFmtType = SvNumFormatType::LOGICAL; + PushInt(1); + aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] ); + } + } + else + { // FALSE + if( nJumpCount == 3 ) + { // ELSE path + aCode.Jump( pJump[ 2 ], pJump[ nJumpCount ] ); + } + else + { // no parameter given for ELSE + nFuncFmtType = SvNumFormatType::LOGICAL; + PushInt(0); + aCode.Jump( pJump[ nJumpCount ], pJump[ nJumpCount ] ); } } } + /** Store a matrix value in another matrix in the context of that other matrix is the result matrix of a jump matrix. All arguments must be valid and are not checked. */ @@ -1414,7 +1360,7 @@ void ScInterpreter::ScOr() double fVal; FormulaError nErr = FormulaError::NONE; ScValueIterator aValIter( mrContext, aRange ); - if ( aValIter.GetFirst( fVal, nErr ) ) + if ( aValIter.GetFirst( fVal, nErr ) && nErr == FormulaError::NONE ) { bHaveValue = true; do @@ -2373,7 +2319,7 @@ void ScInterpreter::ScCell() { ScRefCellValue aCell(mrDoc, aCellPos); - ScCellKeywordTranslator::transKeyword(aInfoType, &ScGlobal::GetLocale(), ocCell); + ScCellKeywordTranslator::transKeyword(aInfoType, ScGlobal::GetLocale(), ocCell); // *** ADDRESS INFO *** if( aInfoType == "COL" ) @@ -2590,7 +2536,7 @@ void ScInterpreter::ScCellExternal() } aRef.SetAbsTab(-1); // revert the value. - ScCellKeywordTranslator::transKeyword(aInfoType, &ScGlobal::GetLocale(), ocCell); + ScCellKeywordTranslator::transKeyword(aInfoType, ScGlobal::GetLocale(), ocCell); ScExternalRefManager* pRefMgr = mrDoc.GetExternalRefManager(); if ( aInfoType == "COL" ) @@ -5009,16 +4955,16 @@ void ScInterpreter::ScMatch() { case -1 : vsa.eMatchMode = exactorG; - vsa.eSearchMode = searchbdesc; + vsa.eSearchMode = LookupSearchMode::BinaryDescending; break; case 0 : vsa.eMatchMode = exactorNA; - vsa.eSearchMode = searchfwd; + vsa.eSearchMode = LookupSearchMode::Forward; break; case 1 : // default value vsa.eMatchMode = exactorS; - vsa.eSearchMode = searchbasc; + vsa.eSearchMode = LookupSearchMode::BinaryAscending; break; default : PushIllegalParameter(); @@ -5170,7 +5116,7 @@ void ScInterpreter::ScXMatch() { sal_Int16 k = GetInt16(); if (k >= -2 && k <= 2 && k != 0) - vsa.eSearchMode = static_cast<SearchMode>(k); + vsa.eSearchMode = static_cast<LookupSearchMode>(k); else { PushIllegalParameter(); @@ -5178,7 +5124,7 @@ void ScInterpreter::ScXMatch() } } else - vsa.eSearchMode = searchfwd; + vsa.eSearchMode = LookupSearchMode::Forward; // get match mode if (nParamCount >= 3) @@ -7826,7 +7772,7 @@ void ScInterpreter::CalculateLookup(bool bHLookup) else { ScAddress aResultPos( nCol1, nRow1, nTab1); - bFound = LookupQueryWithCache( aResultPos, aParam, refData, 1 /*searchfwd*/, SC_OPCODE_V_LOOKUP ); + bFound = LookupQueryWithCache( aResultPos, aParam, refData, LookupSearchMode::Forward, SC_OPCODE_V_LOOKUP ); nRow = aResultPos.Row(); nCol = nSpIndex; } @@ -7925,7 +7871,7 @@ void ScInterpreter::ScXLookup() { sal_Int16 k = GetInt16(); if ( k >= -2 && k <= 2 && k != 0 ) - vsa.eSearchMode = static_cast<SearchMode>(k); + vsa.eSearchMode = static_cast<LookupSearchMode>(k); else { PushIllegalParameter(); @@ -7933,7 +7879,7 @@ void ScInterpreter::ScXLookup() } } else - vsa.eSearchMode = searchfwd; + vsa.eSearchMode = LookupSearchMode::Forward; if ( nParamCount >= 5 ) { @@ -8230,8 +8176,21 @@ void ScInterpreter::ScXLookup() } else { - // result is a single ref - PushSingleRef(nSearchCol1 + nX, nSearchRow1 + nY, nSearchTab1); + if (prMat) + { + // result is matrix with one value + if (prMat->IsEmptyCell(nX, nY)) + PushNA(); + else if (prMat->IsStringOrEmpty(nX, nY)) + PushString(prMat->GetString(nX, nY)); + else + PushDouble(prMat->GetDouble(nX, nY)); + } + else + { + // result is a single ref + PushSingleRef(nSearchCol1 + nX, nSearchRow1 + nY, nSearchTab1); + } } } else @@ -8560,18 +8519,30 @@ void ScInterpreter::ScSort() aSortData.maKeyState[i].bAscending = (aSortOrderValues[0] == 1.0); } - // sorting... - std::vector<SCCOLROW> aOrderIndices = GetSortOrder(aSortData, pMatSrc); - // create sorted matrix - ScMatrixRef pResMat = CreateSortedMatrix(aSortData, pMatSrc, - ScRange(aSortData.nCol1, aSortData.nRow1, aSortData.nSourceTab, + if ((aSortData.bByRow && nsR == 1) || (!aSortData.bByRow && nsC == 1)) + { + // No need to sort + if (pMatSrc) + PushMatrix(pMatSrc); + else + PushDoubleRef(aSortData.nCol1, aSortData.nRow1, aSortData.nSourceTab, + aSortData.nCol2, aSortData.nRow2, aSortData.nSourceTab); + } + else + { + // sorting... + std::vector<SCCOLROW> aOrderIndices = GetSortOrder(aSortData, pMatSrc); + // create sorted matrix + ScMatrixRef pResMat = CreateSortedMatrix(aSortData, pMatSrc, + ScRange(aSortData.nCol1, aSortData.nRow1, aSortData.nSourceTab, aSortData.nCol2, aSortData.nRow2, aSortData.nSourceTab), - aOrderIndices, nsC, nsR); + aOrderIndices, nsC, nsR); - if (pResMat) - PushMatrix(pResMat); - else - PushIllegalParameter(); + if (pResMat) + PushMatrix(pResMat); + else + PushIllegalParameter(); + } } void ScInterpreter::ScSortBy() @@ -8588,6 +8559,7 @@ void ScInterpreter::ScSortBy() ScSortParam aSortData; aSortData.maKeyState.resize(nSortCount); + bool bNoNeedToSort = false; // 127th, ..., 3rd and 2nd argument: sort by range/array and sort orders pair sal_uInt8 nSortBy = nSortCount; @@ -8646,6 +8618,8 @@ void ScInterpreter::ScSortBy() aSortData.bByRow = true; else if (nbyR == 1 && nbyC > 1) aSortData.bByRow = false; + else if (nbyC == 1 && nbyR == 1) + bNoNeedToSort = true; else { PushIllegalParameter(); @@ -8787,17 +8761,28 @@ void ScInterpreter::ScSortBy() aSortData.nRow2 = nCheckMatrixRow - 1; } - // sorting... - std::vector<SCCOLROW> aOrderIndices = GetSortOrder(aSortData, pFullMatSortBy); - // create sorted matrix - ScMatrixRef pResMat = CreateSortedMatrix(aSortData, pMatSrc, - ScRange(nSortCol1, nSortRow1, nSortTab1, nSortCol2, nSortRow2, nSortTab2), - aOrderIndices, nsC, nsR); - - if (pResMat) - PushMatrix(pResMat); + if (bNoNeedToSort) + { + // no need to sort + if (pMatSrc) + PushMatrix(pMatSrc); + else + PushDoubleRef(nSortCol1, nSortRow1, nSortTab1, nSortCol2, nSortRow2, nSortTab2); + } else - PushIllegalParameter(); + { + // sorting... + std::vector<SCCOLROW> aOrderIndices = GetSortOrder(aSortData, pFullMatSortBy); + // create sorted matrix + ScMatrixRef pResMat = CreateSortedMatrix(aSortData, pMatSrc, + ScRange(nSortCol1, nSortRow1, nSortTab1, nSortCol2, nSortRow2, nSortTab2), + aOrderIndices, nsC, nsR); + + if (pResMat) + PushMatrix(pResMat); + else + PushIllegalParameter(); + } } static void lcl_FillCell(const ScMatrixRef& pMatSource, const ScMatrixRef& pMatDest, SCSIZE nsC, SCSIZE nsR, SCSIZE ndC, SCSIZE ndR) @@ -8960,8 +8945,18 @@ void ScInterpreter::ScTakeOrDrop(bool bTake) PushMatrix(pResMat); } +void ScInterpreter::ScChooseCols() +{ + ScChooseColsOrRows(/*bCols*/ true); +} + void ScInterpreter::ScChooseRows() { + ScChooseColsOrRows(/*bCols*/ false); +} + +void ScInterpreter::ScChooseColsOrRows(bool bCols) +{ sal_uInt8 nParamCount = GetByte(); if (!MustHaveParamCountMin( nParamCount, 2)) @@ -8997,7 +8992,13 @@ void ScInterpreter::ScChooseRows() return; } - std::vector<sal_Int32> aRowsVector; + if (nGlobalError != FormulaError::NONE || nsC < 1 || nsR < 1) + { + PushIllegalArgument(); + return; + } + + std::vector<sal_Int32> aParamsVector; while (nGlobalError == FormulaError::NONE && nParamCount-- > 1) { if (IsMissing()) @@ -9021,17 +9022,18 @@ void ScInterpreter::ScChooseRows() { if (!pRefMatrix->IsStringOrEmpty(nC, nR)) { - sal_Int32 nRow = double_to_int32(pRefMatrix->GetDouble(col, row)); - if (nRow < 0) - nRow = nsR + nRow + 1; + sal_Int32 nParam = double_to_int32(pRefMatrix->GetDouble(col, row)); + sal_Int32 nMax = bCols ? nsC : nsR; + if (nParam < 0) + nParam = nMax + nParam + 1; - if (nRow <= 0 || o3tl::make_unsigned(nRow) > nsR) + if (nParam <= 0 || nParam > nMax) { PushIllegalParameter(); return; } else - aRowsVector.push_back(nRow); + aParamsVector.push_back(nParam); } else { @@ -9042,24 +9044,23 @@ void ScInterpreter::ScChooseRows() } } - if (nGlobalError != FormulaError::NONE || nsC < 1 || nsR < 1) - { - PushIllegalArgument(); - return; - } - - ScMatrixRef pResMat = GetNewMat(nsC, aRowsVector.size(), /*bEmpty*/true); + SCSIZE nColumns = bCols ? aParamsVector.size() : nsC; + SCSIZE nRows = bCols ? nsR : aParamsVector.size(); + ScMatrixRef pResMat = GetNewMat(nColumns, nRows, /*bEmpty*/true); if (!pResMat) { PushIllegalArgument(); return; } - for (SCSIZE col = 0; col < nsC; ++col) + for (SCSIZE col = 0; col < nColumns; ++col) { - for(SCSIZE row = 0; row < aRowsVector.size(); ++row) + for(SCSIZE row = 0; row < nRows; ++row) { - lcl_FillCell(pMatSource, pResMat, col, aRowsVector[row] - 1, col, row); + if (bCols) + lcl_FillCell(pMatSource, pResMat, aParamsVector[col] - 1, row, col, row); + else + lcl_FillCell(pMatSource, pResMat, col, aParamsVector[row] - 1, col, row); } } @@ -9192,6 +9193,103 @@ void ScInterpreter::ScExpand() PushMatrix(pResMat); } +void ScInterpreter::ScHStack() +{ + ScHorizontalOrVerticalStack(/*bHorizontal*/ true); +} + +void ScInterpreter::ScVStack() +{ + ScHorizontalOrVerticalStack(/*bHorizontal*/ false); +} + +void ScInterpreter::ScHorizontalOrVerticalStack(bool bHorizontal) +{ + sal_uInt8 nParamCount = GetByte(); + + if (!MustHaveParamCountMin( nParamCount, 1)) + return; + + //reverse order of parameter stack to read them from first to last + ReverseStack(nParamCount); + + SCSIZE nColumns = 0; + SCSIZE nRows = 0; + std::vector<ScMatrixRef> aResMatrix; + while (nGlobalError == FormulaError::NONE && nParamCount-- > 0) + { + if (IsMissing()) + { + PushIllegalParameter(); + return; + } + + ScMatrixRef pRefMatrix = GetMatrix(); + if (!pRefMatrix) + { + PushIllegalParameter(); + return; + } + + SCSIZE nC = 0, nR = 0; + pRefMatrix->GetDimensions(nC, nR); + nColumns = bHorizontal ? nColumns + nC : std::max(nColumns, nC); + nRows = bHorizontal ? std::max(nRows , nR) : nRows + nR; + aResMatrix.emplace_back(pRefMatrix); + } + + // No result + if (aResMatrix.size() == 0) + { + PushNA(); + return; + } + + ScMatrixRef pResMat = GetNewMat(nColumns, nRows, /*bEmpty*/true); + if (!pResMat) + { + PushIllegalArgument(); + return; + } + + SCSIZE nCount = 0; + for (const ScMatrixRef& rMatrix : aResMatrix) + { + SCSIZE nC = 0, nR = 0; + rMatrix->GetDimensions(nC, nR); + if (bHorizontal) + { + for (SCSIZE col = 0; col < nC; ++col) + { + for (SCSIZE row = 0; row < nRows; ++row) + { + if (row < nR) + lcl_FillCell(rMatrix, pResMat, col, row, nCount, row); + else + pResMat->PutError(FormulaError::NotAvailable, nCount, row); + } + ++nCount; + } + } + else + { + for (SCSIZE row = 0; row < nR; ++row) + { + for (SCSIZE col = 0; col < nColumns; ++col) + { + if (col < nC) + lcl_FillCell(rMatrix, pResMat, col, row, col, nCount); + else + pResMat->PutError(FormulaError::NotAvailable, col, nCount); + } + ++nCount; + } + } + } + + PushMatrix(pResMat); +} + void ScInterpreter::ScTake() { ScTakeOrDrop(/*bTake*/ true); @@ -9377,7 +9475,7 @@ void ScInterpreter::ScUnique() aStr += aCellStr + u"\x0001"; } - if (aStrSet.insert(aStr).second) // unique if inserted + if (aStrSet.insert(ScGlobal::getCharClass().lowercase(aStr)).second) // unique if inserted { aResPos.emplace_back(std::make_pair(i, aStr)); } @@ -9386,9 +9484,9 @@ void ScInterpreter::ScUnique() if (bExactly_once) { auto it = std::find_if(aResPos.begin(), aResPos.end(), - [&aStr](const std::pair<SCSIZE, OUString>& aRes) + [str = ScGlobal::getCharClass().lowercase(aStr)](const std::pair<SCSIZE, OUString>& aRes) { - return aRes.second.equals(aStr); + return ScGlobal::getCharClass().lowercase(aRes.second).equals(str); } ); if (it != aResPos.end()) @@ -9432,44 +9530,34 @@ void ScInterpreter::ScUnique() PushMatrix(pResMat); } -void ScInterpreter::getTokensAtParameter( std::unique_ptr<ScTokenArray>& pTokens, short nPos ) +void ScInterpreter::replaceNamesToResult( const std::unordered_map<OUString, formula::FormulaToken*>& rResultIndexes, + ScTokenArray& rTokens, short nStartPos, short nEndPos ) { - sal_uInt16 nOpen = 0; - sal_uInt16 nSepCount = 0; - formula::FormulaTokenArrayPlainIterator aIter(*pArr); - formula::FormulaToken* t = aIter.First(); - for (t = aIter.NextNoSpaces(); t; t = aIter.NextNoSpaces()) + formula::FormulaTokenArrayPlainIterator aIterResult(rTokens); + aIterResult.Jump(nStartPos + 1); + for (FormulaToken* t = aIterResult.GetNextStringName(); t; t = aIterResult.GetNextStringName()) { - OpCode aOpCode = t->GetOpCode(); - formula::StackVar aIntType = t->GetType(); - if ((aOpCode == ocOpen || aOpCode == ocArrayOpen || aOpCode == ocTableRefOpen) && aIntType == formula::StackVar::svSep) - nOpen++; - else if ((aOpCode == ocClose || aOpCode == ocArrayClose || aOpCode == ocTableRefClose) && aIntType == formula::StackVar::svSep) - nOpen--; - else if (aOpCode == ocSep && aIntType == formula::StackVar::svSep && nOpen == 1) - { - nSepCount++; - continue; - } - - if (nSepCount == nPos && nOpen > 0) - { - pTokens->AddToken(*t->Clone()); - } + if (aIterResult.GetIndex() > nEndPos) + break; + auto iRes = rResultIndexes.find(t->GetString().getString()); + if (iRes != rResultIndexes.end()) + rTokens.ReplaceRPNToken(aIterResult.GetIndex() - 1, iRes->second->Clone()); } } -void ScInterpreter::replaceNamesToResult(const std::unordered_map<OUString, formula::FormulaToken*>& rResultIndexes, - std::unique_ptr<ScTokenArray>& pTokens ) +ScTokenArray ScInterpreter::checkPushTokens(const ScTokenArray& rTokens, short nStartPos, short nEndPos) { - formula::FormulaTokenArrayPlainIterator aIterResult(*pTokens); - for (FormulaToken* t = aIterResult.GetNextStringName(); t; t = aIterResult.GetNextStringName()) + formula::FormulaTokenArrayPlainIterator aIterResult(rTokens); + aIterResult.Jump(nStartPos + 1); + ScTokenArray aTempTokens(mrDoc); + for (FormulaToken* t = aIterResult.NextRPN(); t; t = aIterResult.NextRPN()) { - auto iRes = rResultIndexes.find(t->GetString().getString()); - if (iRes != rResultIndexes.end()) - pTokens->ReplaceToken(aIterResult.GetIndex() - 1, iRes->second->Clone(), - FormulaTokenArray::ReplaceMode::CODE_ONLY); + if (aIterResult.GetIndex() > nEndPos) + break; + + aTempTokens.AddToken(*t->Clone()); } + return aTempTokens; } void ScInterpreter::ScLet() @@ -9488,7 +9576,8 @@ void ScInterpreter::ScLet() OUString aStrName; std::unordered_map<OUString, formula::FormulaToken*> nResultIndexes; formula::FormulaTokenArrayPlainIterator aIter(*pArr); - unique_ptr<ScTokenArray> pValueTokens(new ScTokenArray(mrDoc)); + // clone tokens for replacing string name tokens + ScTokenArray aValueTokens = pArr->CloneValue(); // name and function pairs parameter while (nJumpCount > 1) @@ -9511,17 +9600,21 @@ void ScInterpreter::ScLet() } nJumpCount--; - // get value tokens - getTokensAtParameter(pValueTokens, nOrgJumpCount - nJumpCount); - nJumpCount--; - // replace names with result tokens - replaceNamesToResult(nResultIndexes, pValueTokens); + replaceNamesToResult(nResultIndexes, aValueTokens, pJump[nOrgJumpCount - nJumpCount], pJump[nOrgJumpCount - nJumpCount + 1]); + + ScTokenArray aTempTokens = checkPushTokens(aValueTokens, pJump[nOrgJumpCount - nJumpCount], pJump[nOrgJumpCount - nJumpCount + 1]); // calculate the inner results unless we already have a push result token - if (pValueTokens->GetLen() == 1 && pValueTokens->GetArray()[0]->GetOpCode() == ocPush) + if (aTempTokens.GetLen() == 0) + { + PushIllegalParameter(); + aCode.Jump(pJump[nOrgJumpCount], pJump[nOrgJumpCount]); + return; + } + else if (aTempTokens.GetLen() == 1 && aTempTokens.GetArray()[0]->GetOpCode() == ocPush) { - if (!nResultIndexes.insert(std::make_pair(aStrName, pValueTokens->GetArray()[0]->Clone())).second) + if (!nResultIndexes.insert(std::make_pair(aStrName, aTempTokens.GetArray()[0]->Clone())).second) { PushIllegalParameter(); aCode.Jump(pJump[nOrgJumpCount], pJump[nOrgJumpCount]); @@ -9530,11 +9623,15 @@ void ScInterpreter::ScLet() } else { - ScCompiler aComp(mrDoc, aPos, *pValueTokens, mrDoc.GetGrammar(), false, false, &mrContext); - aComp.CompileTokenArray(); - ScInterpreter aInt(mrDoc.GetFormulaCell(aPos), mrDoc, mrContext, aPos, *pValueTokens); + ScInterpreter aInt(mrDoc.GetFormulaCell(aPos), mrDoc, mrContext, aPos, aValueTokens); + aInt.aCode.Jump(pJump[nOrgJumpCount - nJumpCount], pJump[nOrgJumpCount - nJumpCount + 1], pJump[nOrgJumpCount - nJumpCount + 1]); + while (aInt.aCode.HasStacked()) + aInt.aCode.FrontPop(); + aInt.aCode.Lambda(true); + sfx2::LinkManager aNewLinkMgr(mrDoc.GetDocumentShell()); aInt.SetLinkManager(&aNewLinkMgr); + formula::StackVar aIntType = aInt.Interpret(); if (aIntType == formula::svMatrixCell) @@ -9558,20 +9655,20 @@ void ScInterpreter::ScLet() } } } - pValueTokens->Clear(); + nJumpCount--; } // last parameter: calculation - getTokensAtParameter(pValueTokens, nOrgJumpCount - nJumpCount); - nJumpCount--; - // replace names with result tokens - replaceNamesToResult(nResultIndexes, pValueTokens); + replaceNamesToResult(nResultIndexes, aValueTokens, pJump[nOrgJumpCount - nJumpCount], pJump[nOrgJumpCount - nJumpCount + 1]); // calculate the final result - ScCompiler aComp(mrDoc, aPos, *pValueTokens, mrDoc.GetGrammar(), false, false, &mrContext); - aComp.CompileTokenArray(); - ScInterpreter aInt(mrDoc.GetFormulaCell(aPos), mrDoc, mrContext, aPos, *pValueTokens); + ScInterpreter aInt(mrDoc.GetFormulaCell(aPos), mrDoc, mrContext, aPos, aValueTokens); + aInt.aCode.Jump(pJump[nOrgJumpCount - nJumpCount], pJump[nOrgJumpCount - nJumpCount + 1], pJump[nOrgJumpCount - nJumpCount + 1]); + while (aInt.aCode.HasStacked()) + aInt.aCode.FrontPop(); + aInt.aCode.Lambda(true); + sfx2::LinkManager aNewLinkMgr(mrDoc.GetDocumentShell()); aInt.SetLinkManager(&aNewLinkMgr); formula::StackVar aIntType = aInt.Interpret(); @@ -9594,7 +9691,7 @@ void ScInterpreter::ScLet() } } - pValueTokens.reset(); + nJumpCount--; aCode.Jump(pJump[nOrgJumpCount], pJump[nOrgJumpCount]); } @@ -10764,12 +10861,12 @@ void ScInterpreter::ScIndex() if ( !MustHaveParamCount( nParamCount, 1, 4 ) ) return; - sal_uInt32 nArea; + sal_Int32 nArea; size_t nAreaCount; SCCOL nCol; SCROW nRow; if (nParamCount == 4) - nArea = GetUInt32(); + nArea = GetInt32(); else nArea = 1; bool bColMissing; @@ -10787,28 +10884,27 @@ void ScInterpreter::ScIndex() nRow = static_cast<SCROW>(GetInt32()); else nRow = 0; + if (nArea < 1 || nCol < 0 || nRow < 0) + { + PushIllegalArgument(); + return; + } if (GetStackType() == svRefList) nAreaCount = (sp ? pStack[sp-1]->GetRefList()->size() : 0); else nAreaCount = 1; // one reference or array or whatever - if (nGlobalError != FormulaError::NONE || nAreaCount == 0 || static_cast<size_t>(nArea) > nAreaCount) + if (nGlobalError != FormulaError::NONE || nAreaCount == 0 || o3tl::make_unsigned(nArea) > nAreaCount) { PushError( FormulaError::NoRef); return; } - else if (nArea < 1 || nCol < 0 || nRow < 0) - { - PushIllegalArgument(); - return; - } switch (GetStackType()) { case svMatrix: case svExternalSingleRef: case svExternalDoubleRef: { - if (nArea != 1) - SetError(FormulaError::IllegalArgument); + assert(nArea == 1); sal_uInt16 nOldSp = sp; ScMatrixRef pMat = GetMatrix(); if (!pMat) @@ -12197,7 +12293,7 @@ utl::SearchParam::SearchType ScInterpreter::DetectSearchType( std::u16string_vie return utl::SearchParam::SearchType::Normal; } -bool ScInterpreter::SearchMatrixForValue( VectorSearchArguments& vsa, ScQueryParam& rParam, ScQueryEntry& rEntry, ScQueryEntry::Item& rItem ) +bool ScInterpreter::SearchMatrixForValue( VectorSearchArguments& vsa, const ScQueryParam& rParam, const ScQueryEntry& rEntry, const ScQueryEntry::Item& rItem ) { SCSIZE nC, nR; vsa.pMatSrc->GetDimensions( nC, nR); @@ -12218,7 +12314,7 @@ bool ScInterpreter::SearchMatrixForValue( VectorSearchArguments& vsa, ScQueryPar switch ( vsa.eSearchMode ) { - case searchfwd : + case LookupSearchMode::Forward : { switch ( vsa.eMatchMode ) { @@ -12279,7 +12375,7 @@ bool ScInterpreter::SearchMatrixForValue( VectorSearchArguments& vsa, ScQueryPar } break; - case searchrev: + case LookupSearchMode::Reverse: { switch ( vsa.eMatchMode ) { @@ -12340,11 +12436,11 @@ bool ScInterpreter::SearchMatrixForValue( VectorSearchArguments& vsa, ScQueryPar } break; - case searchbasc: - case searchbdesc: + case LookupSearchMode::BinaryAscending: + case LookupSearchMode::BinaryDescending: { // binary search for non-equality mode (the source data is sorted) - bool bAscOrder = ( vsa.eSearchMode == searchbasc ); + bool bAscOrder = ( vsa.eSearchMode == LookupSearchMode::BinaryAscending ); SCSIZE nFirst = 0; SCSIZE nLast = nMatCount - 1; for ( SCSIZE nLen = nLast - nFirst; nLen > 0; nLen = nLast - nFirst ) @@ -12417,15 +12513,15 @@ bool ScInterpreter::SearchMatrixForValue( VectorSearchArguments& vsa, ScQueryPar return true; } -bool ScInterpreter::SearchRangeForValue( VectorSearchArguments& vsa, ScQueryParam& rParam, ScQueryEntry& rEntry ) +bool ScInterpreter::SearchRangeForValue( VectorSearchArguments& vsa, ScQueryParam& rParam, const ScQueryEntry& rEntry ) { vsa.bVLookup = ( vsa.nCol1 == vsa.nCol2 ); switch ( vsa.eSearchMode ) { - case searchfwd: - case searchrev: - case searchbasc: - case searchbdesc: + case LookupSearchMode::Forward: + case LookupSearchMode::Reverse: + case LookupSearchMode::BinaryAscending: + case LookupSearchMode::BinaryDescending: { if (vsa.bVLookup) { @@ -12439,7 +12535,7 @@ bool ScInterpreter::SearchRangeForValue( VectorSearchArguments& vsa, ScQueryPara else { rParam.bByRow = false; - bool bBinarySearch = vsa.eSearchMode == searchbasc || vsa.eSearchMode == searchbdesc; + bool bBinarySearch = vsa.eSearchMode == LookupSearchMode::BinaryAscending || vsa.eSearchMode == LookupSearchMode::BinaryDescending; if (bBinarySearch && (vsa.nSearchOpCode == SC_OPCODE_X_LOOKUP || vsa.nSearchOpCode == SC_OPCODE_X_MATCH)) { ScQueryCellIteratorSortedCache aCellIter(mrDoc, mrContext, rParam.nTab, rParam, false, false); @@ -12455,7 +12551,7 @@ bool ScInterpreter::SearchRangeForValue( VectorSearchArguments& vsa, ScQueryPara else { // search of columns in row - bool bReverseSearch = (vsa.eSearchMode == searchrev); + bool bReverseSearch = (vsa.eSearchMode == LookupSearchMode::Reverse); ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, vsa.nTab1, rParam, false, bReverseSearch); // Advance Entry.nField in Iterator if column changed aCellIter.SetAdvanceQueryParamEntryField(true); @@ -12506,7 +12602,7 @@ bool ScInterpreter::SearchVectorForValue( VectorSearchArguments& vsa ) rParam.nTab = vsa.nTab1; ScQueryEntry& rEntry = rParam.GetEntry(0); - rEntry.nField = vsa.eSearchMode != searchrev ? vsa.nCol1 : vsa.nCol2; + rEntry.nField = vsa.eSearchMode != LookupSearchMode::Reverse ? vsa.nCol1 : vsa.nCol2; rEntry.bDoQuery = true; switch ( vsa.eMatchMode ) { @@ -12528,7 +12624,7 @@ bool ScInterpreter::SearchVectorForValue( VectorSearchArguments& vsa ) if ( vsa.nSearchOpCode == SC_OPCODE_X_LOOKUP || vsa.nSearchOpCode == SC_OPCODE_X_MATCH ) { // Wildcard/Regex search mode with binary search is not allowed - if (vsa.eSearchMode == searchbasc || vsa.eSearchMode == searchbdesc) + if (vsa.eSearchMode == LookupSearchMode::BinaryAscending || vsa.eSearchMode == LookupSearchMode::BinaryDescending) { PushNoValue(); return false; @@ -12632,14 +12728,14 @@ bool ScInterpreter::SearchVectorForValue( VectorSearchArguments& vsa ) static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInterpreterContext& rContext, const ScQueryParam & rParam, const ScQueryEntry & rEntry, const ScFormulaCell* cell, - const ScComplexRefData* refData, sal_Int8 nSearchMode, sal_uInt16 nOpCode ) + const ScComplexRefData* refData, LookupSearchMode nSearchMode, sal_uInt16 nOpCode ) { if (rEntry.eOp != SC_EQUAL) { // range lookup <= or >= SCCOL nCol; SCROW nRow; - bool bBinarySearch = static_cast<SearchMode>(nSearchMode) == searchbasc || static_cast<SearchMode>(nSearchMode) == searchbdesc; + bool bBinarySearch = nSearchMode == LookupSearchMode::BinaryAscending || nSearchMode == LookupSearchMode::BinaryDescending; if ((bBinarySearch && (nOpCode == SC_OPCODE_X_LOOKUP || nOpCode == SC_OPCODE_X_MATCH)) || ScQueryCellIteratorSortedCache::CanBeUsed(rDoc, rParam, rParam.nTab, cell, refData, rContext)) { @@ -12655,7 +12751,7 @@ static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInter } else { - bool bReverse = (static_cast<SearchMode>(nSearchMode) == searchrev); + bool bReverse = nSearchMode == LookupSearchMode::Reverse; ScQueryCellIteratorDirect aCellIter(rDoc, rContext, rParam.nTab, rParam, false, bReverse); aCellIter.SetSortedBinarySearchMode(nSearchMode); @@ -12676,7 +12772,7 @@ static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInter bool bBinary = rParam.bByRow && (bLiteral || rEntry.GetQueryItem().meType == ScQueryEntry::ByValue); - if( bBinary && (static_cast<SearchMode>(nSearchMode) == searchbasc || static_cast<SearchMode>(nSearchMode) == searchbdesc || + if( bBinary && (nSearchMode == LookupSearchMode::BinaryAscending || nSearchMode == LookupSearchMode::BinaryDescending || ScQueryCellIteratorSortedCache::CanBeUsed(rDoc, rParam, rParam.nTab, cell, refData, rContext))) { ScQueryCellIteratorSortedCache aCellIter( rDoc, rContext, rParam.nTab, rParam, false, false ); @@ -12692,7 +12788,7 @@ static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInter else { ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false, - static_cast<SearchMode>(nSearchMode) == searchrev); + nSearchMode == LookupSearchMode::Reverse); aCellIter.SetSortedBinarySearchMode(nSearchMode); aCellIter.SetLookupMode(nOpCode); if (aCellIter.GetFirst()) @@ -12746,7 +12842,7 @@ static SCROW lcl_getPrevRowWithEmptyValueLookup( const ScLookupCache& rCache, bool ScInterpreter::LookupQueryWithCache( ScAddress & o_rResultPos, const ScQueryParam & rParam, const ScComplexRefData* refData, - sal_Int8 nSearchMode, sal_uInt16 nOpCode ) const + LookupSearchMode nSearchMode, sal_uInt16 nOpCode ) const { bool bFound = false; const ScQueryEntry& rEntry = rParam.GetEntry(0); diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx index 8fa8ffa0f67d..a2edd03c9188 100644 --- a/sc/source/core/tool/interpr2.cxx +++ b/sc/source/core/tool/interpr2.cxx @@ -253,7 +253,7 @@ void ScInterpreter::ScGetWeekOfYear() if ( !MustHaveParamCount( nParamCount, 1, 2 ) ) return; - sal_Int16 nFlag = ( nParamCount == 1 ) ? 1 : GetInt16(); + sal_Int16 nFlag = (nParamCount == 1) ? 1 : GetInt16WithDefault(1); Date aDate = mrContext.NFGetNullDate(); aDate.AddDays( GetFloor32()); @@ -344,7 +344,7 @@ void ScInterpreter::ScEasterSunday() } FormulaError ScInterpreter::GetWeekendAndHolidayMasks( - const sal_uInt8 nParamCount, const sal_uInt32 nNullDate, vector< double >& rSortArray, + const sal_uInt8 nParamCount, const sal_Int32 nNullDate, vector< double >& rSortArray, bool bWeekendMask[ 7 ] ) { if ( nParamCount == 4 ) @@ -384,7 +384,7 @@ FormulaError ScInterpreter::GetWeekendAndHolidayMasks( } FormulaError ScInterpreter::GetWeekendAndHolidayMasks_MS( - const sal_uInt8 nParamCount, const sal_uInt32 nNullDate, vector< double >& rSortArray, + const sal_uInt8 nParamCount, const sal_Int32 nNullDate, vector< double >& rSortArray, bool bWeekendMask[ 7 ], bool bWorkdayFunction ) { FormulaError nErr = FormulaError::NONE; @@ -509,7 +509,7 @@ void ScInterpreter::ScNetWorkdays( bool bOOXML_Version ) vector<double> nSortArray; bool bWeekendMask[ 7 ]; const Date& rNullDate = mrContext.NFGetNullDate(); - sal_uInt32 nNullDate = Date::DateToDays( rNullDate.GetDay(), rNullDate.GetMonth(), rNullDate.GetYear() ); + sal_Int32 nNullDate = rNullDate.GetAsNormalizedDays(); FormulaError nErr; if ( bOOXML_Version ) { @@ -525,9 +525,9 @@ void ScInterpreter::ScNetWorkdays( bool bOOXML_Version ) PushError( nErr ); else { - sal_uInt32 nDate2 = GetUInt32(); - sal_uInt32 nDate1 = GetUInt32(); - if (nGlobalError != FormulaError::NONE || (nDate1 > SAL_MAX_UINT32 - nNullDate) || nDate2 > (SAL_MAX_UINT32 - nNullDate)) + sal_Int32 nDate2 = GetFloor32(); + sal_Int32 nDate1 = GetFloor32(); + if (nGlobalError != FormulaError::NONE || (nDate1 > SAL_MAX_INT32 - nNullDate) || nDate2 > (SAL_MAX_INT32 - nNullDate)) { PushIllegalArgument(); return; @@ -566,7 +566,7 @@ void ScInterpreter::ScWorkday_MS() vector<double> nSortArray; bool bWeekendMask[ 7 ]; const Date& rNullDate = mrContext.NFGetNullDate(); - sal_uInt32 nNullDate = Date::DateToDays( rNullDate.GetDay(), rNullDate.GetMonth(), rNullDate.GetYear() ); + sal_Int32 nNullDate = rNullDate.GetAsNormalizedDays(); FormulaError nErr = GetWeekendAndHolidayMasks_MS( nParamCount, nNullDate, nSortArray, bWeekendMask, true ); if ( nErr != FormulaError::NONE ) @@ -574,8 +574,8 @@ void ScInterpreter::ScWorkday_MS() else { sal_Int32 nDays = GetFloor32(); - sal_uInt32 nDate = GetUInt32(); - if (nGlobalError != FormulaError::NONE || (nDate > SAL_MAX_UINT32 - nNullDate)) + sal_Int32 nDate = GetFloor32(); + if (nGlobalError != FormulaError::NONE || (nDate > SAL_MAX_INT32 - nNullDate)) { PushIllegalArgument(); return; @@ -2735,8 +2735,8 @@ void ScInterpreter::ScDde() sal_uInt8 nMode = SC_DDE_DEFAULT; if (nParamCount == 4) { - sal_uInt32 nTmp = GetUInt32(); - if (nGlobalError != FormulaError::NONE || nTmp > SAL_MAX_UINT8) + sal_Int32 nTmp = GetInt32(); + if (nGlobalError != FormulaError::NONE || nTmp < 0 || nTmp > SAL_MAX_UINT8) { PushIllegalArgument(); return; diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index 747853b49a70..3a996bd331f5 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -123,7 +123,7 @@ bool ScInterpreter::IsTableOpInRange( const ScRange& rRange ) return false; } -sal_uInt32 ScInterpreter::GetCellNumberFormat( const ScAddress& rPos, ScRefCellValue& rCell ) +sal_uInt32 ScInterpreter::GetCellNumberFormat( const ScAddress& rPos, const ScRefCellValue& rCell ) { sal_uInt32 nFormat; FormulaError nErr; @@ -176,7 +176,7 @@ double ScInterpreter::ConvertStringToValue( const OUString& rStr, FormulaError& return ScGlobal::ConvertStringToValue( rStr, maCalcConfig, rError, mnStringNoValueError, mrContext, rCurFmtType); } -double ScInterpreter::GetCellValue( const ScAddress& rPos, ScRefCellValue& rCell ) +double ScInterpreter::GetCellValue( const ScAddress& rPos, const ScRefCellValue& rCell ) { FormulaError nErr = nGlobalError; nGlobalError = FormulaError::NONE; @@ -188,7 +188,7 @@ double ScInterpreter::GetCellValue( const ScAddress& rPos, ScRefCellValue& rCell return nVal; } -double ScInterpreter::GetCellValueOrZero( const ScAddress& rPos, ScRefCellValue& rCell ) +double ScInterpreter::GetCellValueOrZero( const ScAddress& rPos, const ScRefCellValue& rCell ) { double fValue = 0.0; @@ -245,7 +245,7 @@ double ScInterpreter::GetCellValueOrZero( const ScAddress& rPos, ScRefCellValue& return fValue; } -void ScInterpreter::GetCellString( svl::SharedString& rStr, ScRefCellValue& rCell ) +void ScInterpreter::GetCellString( svl::SharedString& rStr, const ScRefCellValue& rCell ) { FormulaError nErr = FormulaError::NONE; @@ -827,6 +827,7 @@ const svl::SharedString & ScInterpreter::PopString() nGlobalError = p->GetError(); break; case svString: + case svStringName: return p->GetString(); case svEmptyCell: case svMissing: @@ -1477,6 +1478,7 @@ bool ScInterpreter::ConvertMatrixParameters() { case svDouble: case svString: + case svStringName: case svSingleRef: case svExternalSingleRef: case svMissing: @@ -1966,34 +1968,27 @@ bool ScInterpreter::IsMissing() const StackVar ScInterpreter::GetRawStackType() { - StackVar eRes; if( sp ) { - eRes = pStack[sp - 1]->GetType(); + return pStack[sp - 1]->GetType(); } else { SetError(FormulaError::UnknownStackVariable); - eRes = svUnknown; + return svUnknown; } - return eRes; } StackVar ScInterpreter::GetStackType() { - StackVar eRes; - if( sp ) - { - eRes = pStack[sp - 1]->GetType(); - if( eRes == svMissing || eRes == svEmptyCell ) - eRes = svDouble; // default! - } - else + switch (StackVar eRes = GetRawStackType()) { - SetError(FormulaError::UnknownStackVariable); - eRes = svUnknown; + case svMissing: + case svEmptyCell: + return svDouble; // default! + default: + return eRes; } - return eRes; } StackVar ScInterpreter::GetStackType( sal_uInt8 nParam ) @@ -2187,48 +2182,50 @@ double ScInterpreter::GetDouble() double ScInterpreter::GetDoubleWithDefault(double nDefault) { - bool bMissing = IsMissing(); - double nResultVal = GetDouble(); - if ( bMissing ) - nResultVal = nDefault; - return nResultVal; + if (!IsMissing()) + return GetDouble(); + Pop(); + return nDefault; } bool ScInterpreter::GetBoolWithDefault(bool bDefault) { - bool bMissing = IsMissing(); - bool bResultVal = (GetDouble() != 0.0); - if (bMissing) - bResultVal = bDefault; - return bResultVal; + return GetDoubleWithDefault(bDefault ? 1.0 : 0.0) != 0.0; } -sal_Int32 ScInterpreter::double_to_int32(double fVal) +template <typename Int> + requires std::is_integral_v<Int> +Int ScInterpreter::double_to(double fVal) { if (!std::isfinite(fVal)) { SetError( GetDoubleErrorValue( fVal)); - return SAL_MAX_INT32; + return std::numeric_limits<Int>::max(); } if (fVal > 0.0) { fVal = rtl::math::approxFloor( fVal); - if (fVal > SAL_MAX_INT32) + if (fVal > std::numeric_limits<Int>::max()) { SetError( FormulaError::IllegalArgument); - return SAL_MAX_INT32; + return std::numeric_limits<Int>::max(); } } else if (fVal < 0.0) { fVal = rtl::math::approxCeil( fVal); - if (fVal < SAL_MIN_INT32) + if (fVal < std::numeric_limits<Int>::min()) { SetError( FormulaError::IllegalArgument); - return SAL_MAX_INT32; + return std::numeric_limits<Int>::max(); } } - return static_cast<sal_Int32>(fVal); + return static_cast<Int>(fVal); +} + +sal_Int32 ScInterpreter::double_to_int32(double fVal) +{ + return double_to<sal_Int32>(fVal); } sal_Int32 ScInterpreter::GetInt32() @@ -2238,11 +2235,7 @@ sal_Int32 ScInterpreter::GetInt32() sal_Int32 ScInterpreter::GetInt32WithDefault( sal_Int32 nDefault ) { - bool bMissing = IsMissing(); - double fVal = GetDouble(); - if ( bMissing ) - return nDefault; - return double_to_int32(fVal); + return double_to_int32(GetDoubleWithDefault(nDefault)); } sal_Int32 ScInterpreter::GetFloor32() @@ -2264,47 +2257,17 @@ sal_Int32 ScInterpreter::GetFloor32() sal_Int16 ScInterpreter::GetInt16() { - double fVal = GetDouble(); - if (!std::isfinite(fVal)) - { - SetError( GetDoubleErrorValue( fVal)); - return SAL_MAX_INT16; - } - if (fVal > 0.0) - { - fVal = rtl::math::approxFloor( fVal); - if (fVal > SAL_MAX_INT16) - { - SetError( FormulaError::IllegalArgument); - return SAL_MAX_INT16; - } - } - else if (fVal < 0.0) - { - fVal = rtl::math::approxCeil( fVal); - if (fVal < SAL_MIN_INT16) - { - SetError( FormulaError::IllegalArgument); - return SAL_MAX_INT16; - } - } - return static_cast<sal_Int16>(fVal); + return double_to<sal_Int16>(GetDouble()); +} + +sal_Int16 ScInterpreter::GetInt16WithDefault(sal_Int16 nDefault) +{ + return double_to<sal_Int16>(GetDoubleWithDefault(nDefault)); } sal_uInt32 ScInterpreter::GetUInt32() { - double fVal = rtl::math::approxFloor( GetDouble()); - if (!std::isfinite(fVal)) - { - SetError( GetDoubleErrorValue( fVal)); - return SAL_MAX_UINT32; - } - if (fVal < 0.0 || fVal > SAL_MAX_UINT32) - { - SetError( FormulaError::IllegalArgument); - return SAL_MAX_UINT32; - } - return static_cast<sal_uInt32>(fVal); + return double_to<sal_uInt32>(GetDouble()); } bool ScInterpreter::GetDoubleOrString( double& rDouble, svl::SharedString& rString ) @@ -2383,6 +2346,7 @@ svl::SharedString ScInterpreter::GetString() return GetStringFromDouble( PopDouble() ); } case svString: + case svStringName: return PopString(); case svSingleRef: { @@ -4129,6 +4093,7 @@ StackVar ScInterpreter::Interpret() case ocIfError : ScIfError( false ); break; case ocIfNA : ScIfError( true ); break; case ocChoose : ScChooseJump(); break; + case ocChooseCols : ScChooseCols(); break; case ocChooseRows : ScChooseRows(); break; case ocAdd : ScAdd(); break; case ocSub : ScSub(); break; @@ -4162,6 +4127,8 @@ StackVar ScInterpreter::Interpret() case ocSortBy : ScSortBy(); break; case ocDrop : ScDrop(); break; case ocExpand : ScExpand(); break; + case ocHStack : ScHStack(); break; + case ocVStack : ScVStack(); break; case ocTake : ScTake(); break; case ocToCol : ScToCol(); break; case ocToRow : ScToRow(); break; diff --git a/sc/source/core/tool/interpr5.cxx b/sc/source/core/tool/interpr5.cxx index f282d5fe7169..ba5592a935a0 100644 --- a/sc/source/core/tool/interpr5.cxx +++ b/sc/source/core/tool/interpr5.cxx @@ -1152,7 +1152,7 @@ void ScInterpreter::ScMatSequence() return; } - size_t nMatrixSize = nColumns * nRows; + size_t nMatrixSize = static_cast<size_t>(nColumns) * nRows; ScMatrixRef pResMat = GetNewMat(nColumns, nRows, /*bEmpty*/true); for (size_t iPos = 0; iPos < nMatrixSize; iPos++) { @@ -3336,7 +3336,7 @@ void ScInterpreter::ScInfo() return; OUString aStr = GetString().getString(); - ScCellKeywordTranslator::transKeyword(aStr, &ScGlobal::GetLocale(), ocInfo); + ScCellKeywordTranslator::transKeyword(aStr, ScGlobal::GetLocale(), ocInfo); if( aStr == "SYSTEM" ) PushString( u"" SC_INFO_OSVERSION ""_ustr ); else if( aStr == "OSVERSION" ) diff --git a/sc/source/core/tool/lookupcache.cxx b/sc/source/core/tool/lookupcache.cxx index c405714f1e34..389886939680 100644 --- a/sc/source/core/tool/lookupcache.cxx +++ b/sc/source/core/tool/lookupcache.cxx @@ -24,8 +24,8 @@ #include <sal/log.hxx> -ScLookupCache::QueryCriteria::QueryCriteria( const ScQueryEntry& rEntry, sal_Int8 nSearchMode ) : - mfVal(0.0), mbAlloc(false), mbString(false), meSearchMode(static_cast<SearchMode>(nSearchMode)) +ScLookupCache::QueryCriteria::QueryCriteria( const ScQueryEntry& rEntry, LookupSearchMode nSearchMode ) : + mfVal(0.0), mbAlloc(false), mbString(false), meSearchMode(nSearchMode) { switch (rEntry.eOp) { diff --git a/sc/source/core/tool/numformat.cxx b/sc/source/core/tool/numformat.cxx index c69da6de4e3b..45f473c7e945 100644 --- a/sc/source/core/tool/numformat.cxx +++ b/sc/source/core/tool/numformat.cxx @@ -36,10 +36,9 @@ namespace return ScGlobal::getLocaleData().getNumDecimalSep(); // LocaleDataWrapper can be expensive to construct, so cache the result for // repeated calls - static std::optional<LocaleDataWrapper> localeCache; + static const LocaleDataWrapper* localeCache { nullptr }; if (!localeCache || localeCache->getLanguageTag().getLanguageType() != nFormatLang) - localeCache.emplace( - comphelper::getProcessComponentContext(), LanguageTag(nFormatLang)); + localeCache = LocaleDataWrapper::get(LanguageTag(nFormatLang)); return localeCache->getNumDecimalSep(); } } diff --git a/sc/source/core/tool/parclass.cxx b/sc/source/core/tool/parclass.cxx index 50ffedba042e..204c9a943f7d 100644 --- a/sc/source/core/tool/parclass.cxx +++ b/sc/source/core/tool/parclass.cxx @@ -57,7 +57,8 @@ const ScParameterClassification::RawData ScParameterClassification::pRawData[] = { ocIfError, {{ Array, Reference }, 0, Value }}, { ocIfNA, {{ Array, Reference }, 0, Value }}, { ocChoose, {{ Array, Reference }, 1, Value }}, - { ocChooseRows, {{ ReferenceOrRefArray, ReferenceOrRefArray, ReferenceOrRefArray, }, 2, ForceArrayReturn }}, + { ocChooseCols, {{ ReferenceOrRefArray, ReferenceOrRefArray }, 1, ForceArrayReturn }}, + { ocChooseRows, {{ ReferenceOrRefArray, ReferenceOrRefArray }, 1, ForceArrayReturn }}, { ocLet, {{ Value, ReferenceOrRefArray, ReferenceOrRefArray, }, 2, ForceArrayReturn } }, // Other specials. { ocArrayClose, {{ Bounds }, 0, Bounds }}, @@ -162,6 +163,7 @@ const ScParameterClassification::RawData ScParameterClassification::pRawData[] = { ocGreaterEqual, {{ Array, Array }, 0, Value }}, { ocGrowth, {{ Reference, Reference, Reference, Value }, 0, Value }}, { ocHLookup, {{ Value, ReferenceOrForceArray, Value, Value }, 0, Value }}, + { ocHStack, {{ ReferenceOrRefArray, ReferenceOrRefArray, }, 1, ForceArrayReturn }}, { ocHarMean, {{ Reference }, 1, Value }}, { ocIRR, {{ Reference, Value }, 0, Value }}, { ocIndex, {{ Reference, Value, Value, Value }, 0, Value }}, @@ -276,6 +278,7 @@ const ScParameterClassification::RawData ScParameterClassification::pRawData[] = { ocVarPA, {{ ReferenceOrRefArray }, 1, Value }}, { ocVarP_MS, {{ Reference }, 1, Value }}, { ocVarS, {{ Reference }, 1, Value }}, + { ocVStack, {{ ReferenceOrRefArray, ReferenceOrRefArray, }, 1, ForceArrayReturn }}, { ocWhitespace, {{ Bounds }, 0, Bounds }}, { ocWorkday_MS, {{ Value, Value, Value, Reference }, 0, Value }}, { ocWrapCols, {{ ReferenceOrRefArray, Value, Value, }, 0, ForceArrayReturn } }, diff --git a/sc/source/core/tool/queryentry.cxx b/sc/source/core/tool/queryentry.cxx index d66382d2e2b8..a39dabdcf559 100644 --- a/sc/source/core/tool/queryentry.cxx +++ b/sc/source/core/tool/queryentry.cxx @@ -56,6 +56,15 @@ ScQueryEntry::ScQueryEntry(const ScQueryEntry& r) : { } +ScQueryEntry::ScQueryEntry(ScQueryEntry&& r) noexcept : + bDoQuery(r.bDoQuery), + nField(r.nField), + eOp(r.eOp), + eConnect(r.eConnect), + maQueryItems(std::move(r.maQueryItems)) +{ +} + ScQueryEntry::~ScQueryEntry() { } diff --git a/sc/source/core/tool/rangeseq.cxx b/sc/source/core/tool/rangeseq.cxx index 63731b3236c9..9549a78c1952 100644 --- a/sc/source/core/tool/rangeseq.cxx +++ b/sc/source/core/tool/rangeseq.cxx @@ -197,7 +197,7 @@ bool ScRangeToSequence::FillStringArray( uno::Any& rAny, ScDocument& rDoc, const return !bHasErrors; } -bool ScRangeToSequence::FillStringArray(uno::Any& rAny, const ScMatrix* pMatrix, ScInterpreterContext& rContext) +bool ScRangeToSequence::FillStringArray(uno::Any& rAny, const ScMatrix* pMatrix, const ScInterpreterContext& rContext) { if (!pMatrix) return false; diff --git a/sc/source/core/tool/scmatrix.cxx b/sc/source/core/tool/scmatrix.cxx index 0f792203c66b..90782fc5d5d1 100644 --- a/sc/source/core/tool/scmatrix.cxx +++ b/sc/source/core/tool/scmatrix.cxx @@ -26,6 +26,7 @@ #include <compare.hxx> #include <matrixoperators.hxx> #include <math.hxx> +#include <jumpmatrix.hxx> #include <svl/numformat.hxx> #include <svl/zforlist.hxx> @@ -318,6 +319,7 @@ public: size_t Count(bool bCountStrings, bool bCountErrors, bool bIgnoreEmptyStrings) const; size_t MatchDoubleInColumns(double fValue, size_t nCol1, size_t nCol2) const; size_t MatchStringInColumns(const svl::SharedString& rStr, size_t nCol1, size_t nCol2) const; + void IfJump( ScJumpMatrix& rJumpMatrix, const short* pJump, short nJumpCount ) const ; double GetMaxValue( bool bTextAsZero, bool bIgnoreErrorValues ) const; double GetMinValue( bool bTextAsZero, bool bIgnoreErrorValues ) const; @@ -1134,11 +1136,12 @@ double EvalMatrix(const MatrixImplType& rMat) { Evaluator aEval; size_t nRows = rMat.size().row, nCols = rMat.size().column; - for (size_t i = 0; i < nRows; ++i) + + MatrixImplType::const_position_type aPos = rMat.position(0, 0); + for (size_t nC = 0; nC < nCols; ++nC) { - for (size_t j = 0; j < nCols; ++j) + for (size_t nR = 0; nR < nRows; ++nR) { - MatrixImplType::const_position_type aPos = rMat.position(i, j); mdds::mtm::element_t eType = rMat.get_type(aPos); if (eType != mdds::mtm::element_numeric && eType != mdds::mtm::element_boolean) // assuming a CompareMat this is an error @@ -1150,8 +1153,11 @@ double EvalMatrix(const MatrixImplType& rMat) return fVal; aEval.operate(fVal); + + aPos = MatrixImplType::next_position(aPos); } } + return aEval.result(); } @@ -2172,6 +2178,96 @@ size_t ScMatrixImpl::MatchStringInColumns(const svl::SharedString& rStr, size_t return aFunc.getMatching(); } +void ScMatrixImpl::IfJump( ScJumpMatrix& rJumpMatrix, const short* pJump, short nJumpCount ) const +{ + const MatrixImplType::size_pair_type aSize = maMat.size(); + const SCSIZE nRows = aSize.row; + const SCSIZE nCols = aSize.column; + MatrixImplType::const_position_type aPos = maMat.position(0, 0); + for (SCSIZE nC = 0; nC < nCols; ++nC) + { + for (SCSIZE nR = 0; nR < nRows; ++nR) + { + bool bIsValue; + bool bTrue; + double fVal; + mdds::mtm::element_t eType = maMat.get_type(aPos); + switch (eType) + { + case mdds::mtm::element_boolean: + fVal = maMat.get_boolean(aPos) ? 1.0 : 0.0; + bIsValue = std::isfinite(fVal); + bTrue = bIsValue && (fVal != 0.0); + if (bTrue) + fVal = 1.0; + break; + case mdds::mtm::element_numeric: + fVal = maMat.get_numeric(aPos); + bIsValue = std::isfinite(fVal); + bTrue = bIsValue && (fVal != 0.0); + if (bTrue) + fVal = 1.0; + break; + case mdds::mtm::element_string: + // Treat empty and empty path as 0, but string + // as error. ScMatrix::IsValueOrEmpty() returns + // true for any empty, empty path, empty cell, + // empty result. + bIsValue = false; + bTrue = false; + fVal = CreateDoubleError(FormulaError::NoValue); + break; + case mdds::mtm::element_empty: + // Treat empty and empty path as 0, but string + // as error. ScMatrix::IsValueOrEmpty() returns + // true for any empty, empty path, empty cell, + // empty result. + bIsValue = true; + bTrue = false; + fVal = 0.0; + break; + default: + assert(false); + bIsValue = true; + bTrue = false; + fVal = 0; + } + if ( bTrue ) + { // TRUE + if( nJumpCount >= 2 ) + { // THEN path + rJumpMatrix.SetJump( nC, nR, fVal, + pJump[ 1 ], + pJump[ nJumpCount ]); + } + else + { // no parameter given for THEN + rJumpMatrix.SetJump( nC, nR, fVal, + pJump[ nJumpCount ], + pJump[ nJumpCount ]); + } + } + else + { // FALSE + if( nJumpCount == 3 && bIsValue ) + { // ELSE path + rJumpMatrix.SetJump( nC, nR, fVal, + pJump[ 2 ], + pJump[ nJumpCount ]); + } + else + { // no parameter given for ELSE, + // or DoubleError + rJumpMatrix.SetJump( nC, nR, fVal, + pJump[ nJumpCount ], + pJump[ nJumpCount ]); + } + } + aPos = MatrixImplType::next_position(aPos); + } + } +} + double ScMatrixImpl::GetMaxValue( bool bTextAsZero, bool bIgnoreErrorValues ) const { CalcMaxMinValue<MaxOp> aFunc(bTextAsZero, bIgnoreErrorValues); @@ -2318,6 +2414,13 @@ public: return *this; } + wrapped_iterator operator++(int) + { + auto const old = *this; + ++it; + return old; + } + wrapped_iterator& operator--() { --it; @@ -2325,6 +2428,13 @@ public: return *this; } + wrapped_iterator operator--(int) + { + auto const old = *this; + --it; + return old; + } + value_type& operator*() const { val = calcVal(); @@ -3467,6 +3577,11 @@ ScMatrix::KahanIterateResult ScMatrix::SumSquare(bool bTextAsZero, bool bIgnoreE return pImpl->SumSquare(bTextAsZero, bIgnoreErrorValues); } +void ScMatrix::IfJump(ScJumpMatrix& rJumpMatrix, const short* pJump, short nJumpCount) const +{ + return pImpl->IfJump(rJumpMatrix, pJump, nJumpCount); +} + ScMatrix::DoubleIterateResult ScMatrix::Product(bool bTextAsZero, bool bIgnoreErrorValues) const { return pImpl->Product(bTextAsZero, bIgnoreErrorValues); diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index fc100dd4023c..75b1929f321d 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -1591,9 +1591,12 @@ void ScTokenArray::CheckToken( const FormulaToken& r ) case ocAveDev: case ocMatSequence: case ocRandArray: + case ocChooseCols: case ocChooseRows: case ocDrop: case ocExpand: + case ocHStack: + case ocVStack: case ocTake: case ocToCol: case ocToRow: diff --git a/sc/source/core/tool/viewopti.cxx b/sc/source/core/tool/viewopti.cxx index 5ec30bd7e7da..ac6c0390ebea 100644 --- a/sc/source/core/tool/viewopti.cxx +++ b/sc/source/core/tool/viewopti.cxx @@ -284,8 +284,6 @@ ScViewCfg::ScViewCfg() : aDisplayItem( CFGPATH_DISPLAY ), aGridItem( CFGPATH_GRID ) { - sal_Int32 nIntVal = 0; - Sequence<OUString> aNames = GetLayoutPropertyNames(); Sequence<Any> aValues = aLayoutItem.GetProperties(aNames); aLayoutItem.EnableNotification(aNames); @@ -346,73 +344,10 @@ ScViewCfg::ScViewCfg() : } aLayoutItem.SetCommitLink( LINK( this, ScViewCfg, LayoutCommitHdl ) ); - aNames = GetDisplayPropertyNames(); - aValues = aDisplayItem.GetProperties(aNames); - aDisplayItem.EnableNotification(aNames); - pValues = aValues.getConstArray(); - OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed"); - if(aValues.getLength() == aNames.getLength()) - { - for(int nProp = 0; nProp < aNames.getLength(); nProp++) - { - OSL_ENSURE(pValues[nProp].hasValue(), "property value missing"); - if(pValues[nProp].hasValue()) - { - switch(nProp) - { - case SCDISPLAYOPT_FORMULA: - SetOption( VOPT_FORMULAS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); - break; - case SCDISPLAYOPT_ZEROVALUE: - SetOption( VOPT_NULLVALS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); - break; - case SCDISPLAYOPT_NOTETAG: - SetOption( VOPT_NOTES, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); - break; - case SCDISPLAYOPT_NOTEAUTHOR: - SetOption( VOPT_NOTEAUTHOR, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); - break; - case SCDISPLAYOPT_FORMULAMARK: - SetOption( VOPT_FORMULAS_MARKS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); - break; - case SCDISPLAYOPT_VALUEHI: - SetOption( VOPT_SYNTAX, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); - break; - case SCDISPLAYOPT_ANCHOR: - SetOption( VOPT_ANCHOR, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); - break; - case SCDISPLAYOPT_OBJECTGRA: - if ( pValues[nProp] >>= nIntVal ) - { - //#i80528# adapt to new range eventually - if(sal_Int32(VOBJ_MODE_HIDE) < nIntVal) nIntVal = sal_Int32(VOBJ_MODE_SHOW); - - SetObjMode( VOBJ_TYPE_OLE, static_cast<ScVObjMode>(nIntVal)); - } - break; - case SCDISPLAYOPT_CHART: - if ( pValues[nProp] >>= nIntVal ) - { - //#i80528# adapt to new range eventually - if(sal_Int32(VOBJ_MODE_HIDE) < nIntVal) nIntVal = sal_Int32(VOBJ_MODE_SHOW); - - SetObjMode( VOBJ_TYPE_CHART, static_cast<ScVObjMode>(nIntVal)); - } - break; - case SCDISPLAYOPT_DRAWING: - if ( pValues[nProp] >>= nIntVal ) - { - //#i80528# adapt to new range eventually - if(sal_Int32(VOBJ_MODE_HIDE) < nIntVal) nIntVal = sal_Int32(VOBJ_MODE_SHOW); - - SetObjMode( VOBJ_TYPE_DRAW, static_cast<ScVObjMode>(nIntVal)); - } - break; - } - } - } - } + aDisplayItem.EnableNotification(GetDisplayPropertyNames()); + ReadDisplayCfg(); aDisplayItem.SetCommitLink( LINK( this, ScViewCfg, DisplayCommitHdl ) ); + aDisplayItem.SetNotifyLink( LINK( this, ScViewCfg, DisplayNotifyHdl ) ); aGridItem.EnableNotification(GetGridPropertyNames()); ReadGridCfg(); @@ -471,6 +406,82 @@ IMPL_LINK_NOARG(ScViewCfg, LayoutCommitHdl, ScLinkConfigItem&, void) aLayoutItem.PutProperties(aNames, aValues); } +void ScViewCfg::ReadDisplayCfg() +{ + const Sequence<OUString> aNames = GetDisplayPropertyNames(); + const Sequence<Any> aValues = aDisplayItem.GetProperties(aNames); + OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed"); + if (aValues.getLength() != aNames.getLength()) + return; + + sal_Int32 nIntVal = 0; + + const Any* pValues = aValues.getConstArray(); + for(int nProp = 0; nProp < aNames.getLength(); nProp++) + { + OSL_ENSURE(pValues[nProp].hasValue(), "property value missing"); + if(pValues[nProp].hasValue()) + { + switch(nProp) + { + case SCDISPLAYOPT_FORMULA: + SetOption( VOPT_FORMULAS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); + break; + case SCDISPLAYOPT_ZEROVALUE: + SetOption( VOPT_NULLVALS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); + break; + case SCDISPLAYOPT_NOTETAG: + SetOption( VOPT_NOTES, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); + break; + case SCDISPLAYOPT_NOTEAUTHOR: + SetOption( VOPT_NOTEAUTHOR, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); + break; + case SCDISPLAYOPT_FORMULAMARK: + SetOption( VOPT_FORMULAS_MARKS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); + break; + case SCDISPLAYOPT_VALUEHI: + SetOption( VOPT_SYNTAX, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); + break; + case SCDISPLAYOPT_ANCHOR: + SetOption( VOPT_ANCHOR, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) ); + break; + case SCDISPLAYOPT_OBJECTGRA: + if ( pValues[nProp] >>= nIntVal ) + { + //#i80528# adapt to new range eventually + if(sal_Int32(VOBJ_MODE_HIDE) < nIntVal) nIntVal = sal_Int32(VOBJ_MODE_SHOW); + + SetObjMode( VOBJ_TYPE_OLE, static_cast<ScVObjMode>(nIntVal)); + } + break; + case SCDISPLAYOPT_CHART: + if ( pValues[nProp] >>= nIntVal ) + { + //#i80528# adapt to new range eventually + if(sal_Int32(VOBJ_MODE_HIDE) < nIntVal) nIntVal = sal_Int32(VOBJ_MODE_SHOW); + + SetObjMode( VOBJ_TYPE_CHART, static_cast<ScVObjMode>(nIntVal)); + } + break; + case SCDISPLAYOPT_DRAWING: + if ( pValues[nProp] >>= nIntVal ) + { + //#i80528# adapt to new range eventually + if(sal_Int32(VOBJ_MODE_HIDE) < nIntVal) nIntVal = sal_Int32(VOBJ_MODE_SHOW); + + SetObjMode( VOBJ_TYPE_DRAW, static_cast<ScVObjMode>(nIntVal)); + } + break; + } + } + } +} + +IMPL_LINK_NOARG(ScViewCfg, DisplayNotifyHdl, ScLinkConfigItem&, void) +{ + ReadDisplayCfg(); +} + IMPL_LINK_NOARG(ScViewCfg, DisplayCommitHdl, ScLinkConfigItem&, void) { Sequence<OUString> aNames = GetDisplayPropertyNames(); @@ -567,7 +578,10 @@ void ScViewCfg::ReadGridCfg() SetGridOptions( aGrid ); } -IMPL_LINK_NOARG(ScViewCfg, GridNotifyHdl, ScLinkConfigItem&, void) { ReadGridCfg(); } +IMPL_LINK_NOARG(ScViewCfg, GridNotifyHdl, ScLinkConfigItem&, void) +{ + ReadGridCfg(); +} IMPL_LINK_NOARG(ScViewCfg, GridCommitHdl, ScLinkConfigItem&, void) { diff --git a/sc/source/filter/excel/colrowst.cxx b/sc/source/filter/excel/colrowst.cxx index e194b7309d9b..663fe5d864ea 100644 --- a/sc/source/filter/excel/colrowst.cxx +++ b/sc/source/filter/excel/colrowst.cxx @@ -215,7 +215,7 @@ void XclImpColRowSettings::Convert( SCTAB nScTab ) rDoc.SetRowFlags( 0, rDoc.MaxRow(), nScTab, CRFlags::ManualSize ); maRowHeights.build_tree(); - if (!maRowHeights.is_tree_valid()) + if (!maRowHeights.valid_tree()) return; SCROW nPrevRow = -1; diff --git a/sc/source/filter/excel/excdoc.cxx b/sc/source/filter/excel/excdoc.cxx index 7907a87223c0..f62dfe0ace60 100644 --- a/sc/source/filter/excel/excdoc.cxx +++ b/sc/source/filter/excel/excdoc.cxx @@ -1281,7 +1281,7 @@ void ExcDocument::WriteXml( XclExpXmlStream& rStrm ) rWorkbook.reset(); } -void ExcDocument::addElemensToAttrList(rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, +void ExcDocument::addElemensToAttrList(const rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, css::uno::Sequence<css::uno::Any>& aSeqs) { css::uno::Sequence<css::xml::FastAttribute> aFastSeq; diff --git a/sc/source/filter/excel/export/ExportTools.cxx b/sc/source/filter/excel/export/ExportTools.cxx index b093da012581..dacd4e469a4a 100644 --- a/sc/source/filter/excel/export/ExportTools.cxx +++ b/sc/source/filter/excel/export/ExportTools.cxx @@ -15,7 +15,7 @@ namespace oox::xls { -void writeComplexColor(sax_fastparser::FSHelperPtr& pFS, sal_Int32 nElement, +void writeComplexColor(const sax_fastparser::FSHelperPtr& pFS, sal_Int32 nElement, model::ComplexColor const& rComplexColor, Color const& rColor) { if (rComplexColor.isValidThemeType()) @@ -32,7 +32,7 @@ void writeComplexColor(sax_fastparser::FSHelperPtr& pFS, sal_Int32 nElement, } } -void writeComplexColor(sax_fastparser::FSHelperPtr& pFS, sal_Int32 nElement, +void writeComplexColor(const sax_fastparser::FSHelperPtr& pFS, sal_Int32 nElement, model::ComplexColor const& rComplexColor) { if (rComplexColor.isValidThemeType() || rComplexColor.getType() == model::ColorType::RGB) diff --git a/sc/source/filter/excel/export/SparklineExt.cxx b/sc/source/filter/excel/export/SparklineExt.cxx index e61a16c70f2c..96bfc805761e 100644 --- a/sc/source/filter/excel/export/SparklineExt.cxx +++ b/sc/source/filter/excel/export/SparklineExt.cxx @@ -54,8 +54,8 @@ void SparklineExt::SaveXml(XclExpXmlStream& rStream) } void SparklineExt::addSparklineGroupAttributes( - rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, - sc::SparklineAttributes& rAttributes) + const rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, + const sc::SparklineAttributes& rAttributes) { if (rAttributes.getLineWeight() != 0.75) pAttrList->add(XML_lineWeight, OString::number(rAttributes.getLineWeight())); @@ -123,7 +123,7 @@ void SparklineExt::addSparklineGroupAttributes( } void SparklineExt::addSparklineGroupColors(XclExpXmlStream& rStream, - sc::SparklineAttributes& rAttributes) + const sc::SparklineAttributes& rAttributes) { sax_fastparser::FSHelperPtr& rWorksheet = rStream.GetCurrentStream(); diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx index aad8a9cdcfde..fdff19415a48 100644 --- a/sc/source/filter/excel/xecontent.cxx +++ b/sc/source/filter/excel/xecontent.cxx @@ -1091,7 +1091,7 @@ void XclExpCFImpl::SaveXml( XclExpXmlStream& rStrm ) { rWorksheet->startElement(XML_formula); OString aFormula = GetFixedFormula(eOperation, maOrigin, aText); - rWorksheet->writeEscaped(aFormula.getStr()); + rWorksheet->writeEscaped(aFormula); rWorksheet->endElement( XML_formula ); } else if(RequiresFormula(eOperation)) @@ -1254,7 +1254,7 @@ void XclExpCfvo::SaveXml( XclExpXmlStream& rStrm ) rWorksheet->startElement( XML_cfvo, XML_type, getColorScaleType(mrEntry, mbFirst), XML_val, aValue, - XML_gte, sax_fastparser::UseIf("0", !mrEntry.GetGreaterThanOrEqual())); + XML_gte, sax_fastparser::UseIf("0", mrEntry.GetMode() != ScConditionMode::EqGreater)); rWorksheet->endElement( XML_cfvo ); } diff --git a/sc/source/filter/excel/xeextlst.cxx b/sc/source/filter/excel/xeextlst.cxx index 8d36f639b1f3..c2b9e3469802 100644 --- a/sc/source/filter/excel/xeextlst.cxx +++ b/sc/source/filter/excel/xeextlst.cxx @@ -138,7 +138,7 @@ void XclExpExtCfvo::SaveXml( XclExpXmlStream& rStrm ) meType == COLORSCALE_VALUE) { rWorksheet->startElementNS(XML_xm, XML_f); - rWorksheet->writeEscaped(maValue.getStr()); + rWorksheet->writeEscaped(maValue); rWorksheet->endElementNS(XML_xm, XML_f); } @@ -247,7 +247,7 @@ void XclExpExtCF::SaveXml( XclExpXmlStream& rStrm ) OString aFixedFormulaText = aFormula.toUtf8(); OString aFixedFormula = GetFixedFormula(eOperation, aFixedFormulaPos, aFixedFormulaText); rWorksheet->startElementNS( XML_xm, XML_f ); - rWorksheet->writeEscaped(aFixedFormula.getStr()); + rWorksheet->writeEscaped(aFixedFormula); rWorksheet->endElementNS( XML_xm, XML_f ); rWorksheet->startElementNS( XML_xm, XML_f ); diff --git a/sc/source/filter/excel/xehelper.cxx b/sc/source/filter/excel/xehelper.cxx index 18ea2dc3484a..7ba3fb58c02d 100644 --- a/sc/source/filter/excel/xehelper.cxx +++ b/sc/source/filter/excel/xehelper.cxx @@ -597,9 +597,9 @@ XclExpStringRef XclExpStringHelper::CreateCellString( const SfxItemSet& rItemSet = pCellAttr ? pCellAttr->GetItemSet() : rRoot.GetDoc().getCellAttributeHelper().getDefaultCellAttribute().GetItemSet(); - auto pEEItemSet = std::make_unique<SfxItemSet>( rEE.GetEmptyItemSet() ); - ScPatternAttr::FillToEditItemSet( *pEEItemSet, rItemSet ); - rEE.SetDefaults( std::move(pEEItemSet) ); // edit engine takes ownership + SfxItemSet aEEItemSet( rEE.GetEmptyItemSet() ); + ScPatternAttr::FillToEditItemSet( aEEItemSet, rItemSet ); + rEE.SetDefaults( std::move(aEEItemSet) ); // edit engine takes ownership // create the string rEE.SetTextCurrentDefaults(rEditText); @@ -750,8 +750,8 @@ void XclExpHFConverter::AppendPortion( const EditTextObject* pTextObj, sal_Unico // font name and style aNewData.maName = XclTools::GetXclFontName( aFont.GetFamilyName() ); - aNewData.mnWeight = (aFont.GetWeight() > WEIGHT_NORMAL) ? EXC_FONTWGHT_BOLD : EXC_FONTWGHT_NORMAL; - aNewData.mbItalic = (aFont.GetItalic() != ITALIC_NONE); + aNewData.mnWeight = (aFont.GetWeightMaybeAskConfig() > WEIGHT_NORMAL) ? EXC_FONTWGHT_BOLD : EXC_FONTWGHT_NORMAL; + aNewData.mbItalic = (aFont.GetItalicMaybeAskConfig() != ITALIC_NONE); bool bNewFont = (aFontData.maName != aNewData.maName); bool bNewStyle = (aFontData.mnWeight != aNewData.mnWeight) || (aFontData.mbItalic != aNewData.mbItalic); diff --git a/sc/source/filter/excel/xename.cxx b/sc/source/filter/excel/xename.cxx index aa33b31deeb3..2312a7920613 100644 --- a/sc/source/filter/excel/xename.cxx +++ b/sc/source/filter/excel/xename.cxx @@ -330,6 +330,9 @@ OUString XclExpName::GetWithDefaultRangeSeparator( const OUString& rSymbol ) con void XclExpName::SaveXml( XclExpXmlStream& rStrm ) { sax_fastparser::FSHelperPtr& rWorkbook = rStrm.GetCurrentStream(); + // Sheets where IsExportTab is not true are not exported, so use mnXclTab + // (1 based) to get the sheetid as of the exported document's perspective. + SCTAB nXlsxTab = mnXclTab - 1; rWorkbook->startElement( XML_definedName, // OOXTODO: XML_comment, "", // OOXTODO: XML_customMenu, "", @@ -338,7 +341,7 @@ void XclExpName::SaveXml( XclExpXmlStream& rStrm ) // OOXTODO: XML_functionGroupId, "", // OOXTODO: XML_help, "", XML_hidden, ToPsz( ::get_flag( mnFlags, EXC_NAME_HIDDEN ) ), - XML_localSheetId, sax_fastparser::UseIf(OString::number( mnScTab ), mnScTab != SCTAB_GLOBAL), + XML_localSheetId, sax_fastparser::UseIf(OString::number(nXlsxTab), mnScTab != SCTAB_GLOBAL), XML_name, maOrigName.toUtf8(), // OOXTODO: XML_publishToServer, "", // OOXTODO: XML_shortcutKey, "", diff --git a/sc/source/filter/excel/xepage.cxx b/sc/source/filter/excel/xepage.cxx index 28779bd209a1..06af615d0e56 100644 --- a/sc/source/filter/excel/xepage.cxx +++ b/sc/source/filter/excel/xepage.cxx @@ -489,8 +489,9 @@ void XclExpPageSettings::SaveXml( XclExpXmlStream& rStrm ) XclExpImgData* XclExpPageSettings::getGraphicExport() { - if( const Graphic* pGraphic = maData.mxBrushItem->GetGraphic() ) - return new XclExpImgData( *pGraphic, EXC_ID8_IMGDATA ); + if( maData.mxBrushItem ) + if( const Graphic* pGraphic = maData.mxBrushItem->GetGraphic() ) + return new XclExpImgData( *pGraphic, EXC_ID8_IMGDATA ); return nullptr; } diff --git a/sc/source/filter/excel/xepivotxml.cxx b/sc/source/filter/excel/xepivotxml.cxx index 90f58aebc574..bbb9957ee1e9 100644 --- a/sc/source/filter/excel/xepivotxml.cxx +++ b/sc/source/filter/excel/xepivotxml.cxx @@ -776,6 +776,11 @@ void XclExpXmlPivotTables::SavePivotTableXml( XclExpXmlStream& rStrm, const ScDP std::vector<tools::Long> aPageFields; std::vector<DataField> aDataFields; + // we should always export <rowItems> and <colItems>, even if the pivot table + // does not contain col/row items. otherwise, in Excel, pivot table will not + // have all context menu items. + tools::Long nRowItemsCount = 1; // for <rowItems count="..."> of pivotTable*.xml + tools::Long nColItemsCount = 1; // for <colItems count="..."> of pivotTable*.xml tools::Long nDataDimCount = rSaveData.GetDataDimensionCount(); // Use dimensions in the save data to get their correct ordering. // Dimension order here is significant as they specify the order of @@ -858,6 +863,12 @@ void XclExpXmlPivotTables::SavePivotTableXml( XclExpXmlStream& rStrm, const ScDP // NB: Excel's range does not include page field area (if any). ScRange aOutRange = rDPObj.GetOutputRangeByType(sheet::DataPilotOutputRangeType::TABLE); + // normalize the order to prevent negative row/col counts - just in case. + aOutRange.PutInOrder(); + // both start and end cells are included. subtraction excludes the start cells, therefore add +1. + SCROW pivotTableRowCount = aOutRange.aEnd.Row() - aOutRange.aStart.Row() + 1; + SCCOL pivotTableColCount = aOutRange.aEnd.Col() - aOutRange.aStart.Col() + 1; + sal_Int32 nFirstHeaderRow = rDPObj.GetHideHeader() ? 0 : (rDPObj.GetHeaderLayout() ? 2 : 1); sal_Int32 nFirstDataRow = rDPObj.GetHideHeader() ? 1 : 2; sal_Int32 nFirstDataCol = 1; @@ -1067,6 +1078,11 @@ void XclExpXmlPivotTables::SavePivotTableXml( XclExpXmlStream& rStrm, const ScDP pPivotStrm->singleElement(XML_item, pItemAttList); } + if (strcmp(toOOXMLAxisType(eOrient), "axisCol") == 0) + nColItemsCount = pivotTableColCount - nFirstDataCol; + else if (strcmp(toOOXMLAxisType(eOrient), "axisRow") == 0) + nRowItemsCount = pivotTableRowCount - nFirstDataRow; + for (const OString& sSubtotal : aSubtotalSequence) { pPivotStrm->singleElement(XML_item, XML_t, sSubtotal); @@ -1094,6 +1110,31 @@ void XclExpXmlPivotTables::SavePivotTableXml( XclExpXmlStream& rStrm, const ScDP } // <rowItems> + if (nRowItemsCount > 0) + { + pPivotStrm->startElement(XML_rowItems, XML_count, OString::number(nRowItemsCount)); + + // export nRowItemsCount times <i> and <x> elements + for (tools::Long nCount = 0; nCount < nRowItemsCount; ++nCount) + { + /* we should add t="grand" to the last <i> element. Otherwise, Excel will not + have all functions in the context menu of the pivot table. Especially for the + "Grand Total" column/row cells. + + note: it is not completely clear that the last <i> element always gets t="grand". + however, testing on the same docs indicate that t="grand" should be + in the last element, so let's try this here. */ + if (nCount == nRowItemsCount - 1) + pPivotStrm->startElement(XML_i, XML_t, "grand"); + else + pPivotStrm->startElement(XML_i); + + pPivotStrm->singleElement(XML_x, XML_v, OString::number(nCount)); + pPivotStrm->endElement(XML_i); + } + + pPivotStrm->endElement(XML_rowItems); + } // <colFields> @@ -1111,6 +1152,31 @@ void XclExpXmlPivotTables::SavePivotTableXml( XclExpXmlStream& rStrm, const ScDP } // <colItems> + if (nColItemsCount > 0) + { + pPivotStrm->startElement(XML_colItems, XML_count, OString::number(nColItemsCount)); + + // export nColItemsCount times <i> and <x> elements + for (tools::Long nCount = 0; nCount < nColItemsCount; ++nCount) + { + /* we should add t="grand" to the last <i> element. Otherwise, Excel will not + have all functions in the context menu of the pivot table. Especially for the + "Grand Total" column/row cells. + + note: it is not completely clear that the last <i> element always gets t="grand". + however, testing on the some docs indicate that t="grand" should be + in the last element, so let's try this here. */ + if (nCount == nColItemsCount - 1) + pPivotStrm->startElement(XML_i, XML_t, "grand"); + else + pPivotStrm->startElement(XML_i); + + pPivotStrm->singleElement(XML_x, XML_v, OString::number(nCount)); + pPivotStrm->endElement(XML_i); + } + + pPivotStrm->endElement(XML_colItems); + } // <pageFields> diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx index 01bc9bfe8d81..cee24d9ca352 100644 --- a/sc/source/filter/excel/xestyle.cxx +++ b/sc/source/filter/excel/xestyle.cxx @@ -3180,7 +3180,7 @@ XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot ) } } -void XclExpDxfs::fillDxfFrom(SfxItemSet& rItemSet, SvNumberFormatterPtr& xFormatter) +void XclExpDxfs::fillDxfFrom(const SfxItemSet& rItemSet, const SvNumberFormatterPtr& xFormatter) { std::unique_ptr<XclExpCellBorder> pBorder(new XclExpCellBorder); if (!pBorder->FillFromItemSet(rItemSet, GetPalette(), GetBiff())) diff --git a/sc/source/filter/excel/xeview.cxx b/sc/source/filter/excel/xeview.cxx index 5db6de1c2fff..c5760fafcdb7 100644 --- a/sc/source/filter/excel/xeview.cxx +++ b/sc/source/filter/excel/xeview.cxx @@ -348,6 +348,13 @@ XclExpTabViewSettings::XclExpTabViewSettings( const XclExpRoot& rRoot, SCTAB nSc maData.mnActivePane = EXC_PANE_TOPRIGHT; else if( maData.HasPane( EXC_PANE_BOTTOMLEFT ) ) maData.mnActivePane = EXC_PANE_BOTTOMLEFT; + + // Starting cell for active, frozen pane must not be less than the split position + // i.e. it must not be in the frozen section (or Excel 2019 considers the file corrupt). + if (maData.maSecondXclPos.mnCol < maData.mnSplitX) + maData.maSecondXclPos.mnCol = maData.mnSplitX; + if (maData.maSecondXclPos.mnRow < maData.mnSplitY) + maData.maSecondXclPos.mnRow = maData.mnSplitY; } else { diff --git a/sc/source/filter/excel/xistyle.cxx b/sc/source/filter/excel/xistyle.cxx index dddf509b0944..314f6f0daaec 100644 --- a/sc/source/filter/excel/xistyle.cxx +++ b/sc/source/filter/excel/xistyle.cxx @@ -227,8 +227,8 @@ void XclImpFont::SetFontData( const XclFontData& rFontData, bool bHasCharSet ) if( const FontList* pFontList = pInfoItem->GetFontList() ) { FontMetric aFontMetric( pFontList->Get( maData.maName, maData.maStyle ) ); - maData.SetScWeight( aFontMetric.GetWeight() ); - maData.SetScPosture( aFontMetric.GetItalic() ); + maData.SetScWeight( aFontMetric.GetWeightMaybeAskConfig() ); + maData.SetScPosture( aFontMetric.GetItalicMaybeAskConfig() ); } } } @@ -1993,17 +1993,6 @@ void XclImpXFRangeBuffer::Finalize() ScDocument& rDoc = rDocImport.getDoc(); SCTAB nScTab = GetCurrScTab(); - // apply row styles - for( SCROW nScRow = 0; nScRow < static_cast<SCROW>(maRows.size()); ++nScRow ) - { - if (!maRows[nScRow]) - continue; - sal_uInt16 nXFIndex = *maRows[nScRow]; - for( SCCOL nScCol = 0; nScCol < static_cast<SCCOL>(maColumns.size()); ++nScCol ) - if (maColumns[nScCol]) - SetXF( ScAddress( nScCol, nScRow, 0 ), nXFIndex, xlXFModeRow ); - } - // apply patterns XclImpXFBuffer& rXFBuffer = GetXFBuffer(); ScDocumentImport::Attrs aPendingAttrParam; @@ -2062,6 +2051,16 @@ void XclImpXFRangeBuffer::Finalize() if( pendingColStart != -1 ) rDocImport.setAttrEntries(nScTab, pendingColStart, pendingColEnd, std::move(aPendingAttrParam)); + // apply row styles + for( SCROW nScRow = 0; nScRow < static_cast<SCROW>(maRows.size()); ++nScRow ) + { + if (!maRows[nScRow]) + continue; + sal_uInt16 nXFIndex = *maRows[nScRow]; + for( nScCol = 0; nScCol < static_cast<SCCOL>(maColumns.size()); ++nScCol ) + SetXF( ScAddress( nScCol, nScRow, 0 ), nXFIndex, xlXFModeRow ); + } + // insert hyperlink cells for( const auto& [rXclRange, rUrl] : maHyperlinks ) XclImpHyperlink::InsertUrl( GetRoot(), rXclRange, rUrl ); diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx index 31dd0a8b60c4..cbb211b19cd0 100644 --- a/sc/source/filter/excel/xlformula.cxx +++ b/sc/source/filter/excel/xlformula.cxx @@ -619,9 +619,12 @@ const XclFunctionInfo saFuncTable_2021[] = */ const XclFunctionInfo saFuncTable_2024[] = { - EXC_FUNCENTRY_V_VR( ocChooseRows, 2, MX, 0, "CHOOSEROWS" ), + EXC_FUNCENTRY_V_VR( ocChooseCols, 1, MX, 0, "CHOOSECOLS" ), + EXC_FUNCENTRY_V_VR( ocChooseRows, 1, MX, 0, "CHOOSEROWS" ), EXC_FUNCENTRY_V_VR( ocDrop, 1, 3, 0, "DROP" ), EXC_FUNCENTRY_V_VR( ocExpand, 2, 4, 0, "EXPAND" ), + EXC_FUNCENTRY_V_VR( ocHStack, 1, MX, 0, "HSTACK" ), + EXC_FUNCENTRY_V_VR( ocVStack, 1, MX, 0, "VSTACK" ), EXC_FUNCENTRY_V_VR( ocTake, 1, 3, 0, "TAKE" ), EXC_FUNCENTRY_V_VR( ocToCol, 1, 3, 0, "TOCOL" ), EXC_FUNCENTRY_V_VR( ocToRow, 1, 3, 0, "TOROW" ), diff --git a/sc/source/filter/excel/xlroot.cxx b/sc/source/filter/excel/xlroot.cxx index 4ee2b155c8d7..783d9c98e532 100644 --- a/sc/source/filter/excel/xlroot.cxx +++ b/sc/source/filter/excel/xlroot.cxx @@ -388,14 +388,14 @@ ScHeaderEditEngine& XclRoot::GetHFEditEngine() const rEE.SetControlWord( rEE.GetControlWord() & ~EEControlBits::ALLOWBIGOBJS ); // set Calc header/footer defaults - auto pEditSet = std::make_unique<SfxItemSet>( rEE.GetEmptyItemSet() ); + SfxItemSet aEditSet( rEE.GetEmptyItemSet() ); SfxItemSetFixed<ATTR_PATTERN_START, ATTR_PATTERN_END> aItemSet( *GetDoc().GetPool() ); - ScPatternAttr::FillToEditItemSet( *pEditSet, aItemSet ); + ScPatternAttr::FillToEditItemSet( aEditSet, aItemSet ); // FillToEditItemSet() adjusts font height to 1/100th mm, we need twips - pEditSet->Put( aItemSet.Get( ATTR_FONT_HEIGHT ).CloneSetWhich(EE_CHAR_FONTHEIGHT) ); - pEditSet->Put( aItemSet.Get( ATTR_CJK_FONT_HEIGHT ).CloneSetWhich(EE_CHAR_FONTHEIGHT_CJK) ); - pEditSet->Put( aItemSet.Get( ATTR_CTL_FONT_HEIGHT ).CloneSetWhich(EE_CHAR_FONTHEIGHT_CTL) ); - rEE.SetDefaults( std::move(pEditSet) ); // takes ownership + aEditSet.Put( aItemSet.Get( ATTR_FONT_HEIGHT ).CloneSetWhich(EE_CHAR_FONTHEIGHT) ); + aEditSet.Put( aItemSet.Get( ATTR_CJK_FONT_HEIGHT ).CloneSetWhich(EE_CHAR_FONTHEIGHT_CJK) ); + aEditSet.Put( aItemSet.Get( ATTR_CTL_FONT_HEIGHT ).CloneSetWhich(EE_CHAR_FONTHEIGHT_CTL) ); + rEE.SetDefaults( std::move(aEditSet) ); // takes ownership } return *mrData.mxHFEditEngine; } diff --git a/sc/source/filter/ftools/ftools.cxx b/sc/source/filter/ftools/ftools.cxx index d3145e537429..3e8259339103 100644 --- a/sc/source/filter/ftools/ftools.cxx +++ b/sc/source/filter/ftools/ftools.cxx @@ -231,7 +231,7 @@ ScStyleSheet& lclMakeStyleSheet( ScStyleSheetPool& rPool, const OUString& rStyle // rename existing style if( pOldStyleSheet && bForceName ) { - pOldStyleSheet->SetName( aNewName ); + rPool.Rename(*pOldStyleSheet, aNewName, eFamily); aNewName = rStyleName; } diff --git a/sc/source/filter/inc/PivotTableFormat.hxx b/sc/source/filter/inc/PivotTableFormat.hxx index 6d876147af9e..544ee06cc2d0 100644 --- a/sc/source/filter/inc/PivotTableFormat.hxx +++ b/sc/source/filter/inc/PivotTableFormat.hxx @@ -19,7 +19,6 @@ namespace oox::xls { class PivotTable; -class PivotTableFormat; class PivotTableReference; enum class PivotAreaType diff --git a/sc/source/filter/inc/SparklineFragment.hxx b/sc/source/filter/inc/SparklineFragment.hxx index 0d4e76e6b9a9..34c1fd4e62ac 100644 --- a/sc/source/filter/inc/SparklineFragment.hxx +++ b/sc/source/filter/inc/SparklineFragment.hxx @@ -16,11 +16,6 @@ #include <vector> #include <memory> -namespace oox -{ -class AttributeList; -} - namespace oox::xls { /** Transitional sparkline data */ diff --git a/sc/source/filter/inc/autofilterbuffer.hxx b/sc/source/filter/inc/autofilterbuffer.hxx index fad4de53bf09..70203c36f0a8 100644 --- a/sc/source/filter/inc/autofilterbuffer.hxx +++ b/sc/source/filter/inc/autofilterbuffer.hxx @@ -27,7 +27,6 @@ namespace com::sun::star { namespace sheet { class XDatabaseRange; } - namespace sheet { class XSheetFilterDescriptor3; } } namespace oox { class AttributeList; } diff --git a/sc/source/filter/inc/condformatbuffer.hxx b/sc/source/filter/inc/condformatbuffer.hxx index ef60145a11fe..506e3eb91db2 100644 --- a/sc/source/filter/inc/condformatbuffer.hxx +++ b/sc/source/filter/inc/condformatbuffer.hxx @@ -28,12 +28,6 @@ #include <memory> #include <vector> -class ScColorScaleFormat; -class ScDataBarFormat; -struct ScDataBarFormatData; -class ScIconSetFormat; -struct ScIconSetFormatData; - namespace oox { class AttributeList; } namespace oox::xls { @@ -80,7 +74,7 @@ struct ColorScaleRuleModelEntry bool mbPercentile; bool mbNum; OUString maFormula; - bool mbGreaterThanOrEqual; + ScConditionMode meMode; ColorScaleRuleModelEntry(): maColor(), @@ -90,7 +84,9 @@ struct ColorScaleRuleModelEntry mbPercent(false), mbPercentile(false), mbNum(false), - mbGreaterThanOrEqual(true) {} + meMode(ScConditionMode::EqGreater) {} + + bool operator==(const ColorScaleRuleModelEntry &) const = default; }; class ColorScaleRule final : public WorksheetHelper @@ -103,6 +99,9 @@ public: void AddEntries( ScColorScaleFormat* pFormat, ScDocument* pDoc, const ScAddress& rAddr ); + const std::vector< ColorScaleRuleModelEntry > & getModelEntries() const { return maColorScaleRuleEntries; } + sal_uInt32 getCfvo() const { return mnCfvo; } + sal_uInt32 getCol() const { return mnCol; } private: std::vector< ColorScaleRuleModelEntry > maColorScaleRuleEntries; @@ -147,10 +146,16 @@ private: bool mbCustom; }; -/** Represents a single rule in a conditional formatting. */ +/** Represents a single rule in a conditional formatting. + Unlike other objects, we hold this by unique_ptr. + We cannot use shared_ptr like the other objects, since + it wants to have a pointer to its parent, + and its parent might get deduplicated and deleted. +*/ class CondFormatRule final : public WorksheetHelper { friend class CondFormatBuffer; +friend struct CondFormatEquals; public: explicit CondFormatRule( const CondFormat& rCondFormat, ScConditionalFormat* pFormat ); @@ -171,10 +176,14 @@ public: /** Returns the priority of this rule. */ sal_Int32 getPriority() const { return maModel.mnPriority; } + const CondFormatRuleModel & getRuleModel() const { return maModel; } + ColorScaleRule* getColorScale(); DataBarRule* getDataBar(); IconSetRule* getIconSet(); + const CondFormat& getParentCondFormat() const { return mrCondFormat; } + private: const CondFormat& mrCondFormat; CondFormatRuleModel maModel; @@ -185,8 +194,6 @@ private: std::unique_ptr<IconSetRule> mpIconSet; }; -typedef std::shared_ptr< CondFormatRule > CondFormatRuleRef; - /** Model for a conditional formatting object. */ struct CondFormatModel { @@ -196,12 +203,12 @@ struct CondFormatModel explicit CondFormatModel(); }; -class CondFormatBuffer; - /** Represents a conditional formatting object with a list of affected cell ranges. */ class CondFormat final : public WorksheetHelper { friend class CondFormatBuffer; +friend struct CondFormatHash; +friend struct CondFormatEquals; public: explicit CondFormat( const WorksheetHelper& rHelper ); ~CondFormat(); @@ -209,7 +216,7 @@ public: /** Imports settings from the conditionalFormatting element. */ void importConditionalFormatting( const AttributeList& rAttribs ); /** Imports a conditional formatting rule from the cfRule element. */ - CondFormatRuleRef importCfRule( const AttributeList& rAttribs ); + std::unique_ptr<CondFormatRule> importCfRule( const AttributeList& rAttribs ); /** Imports settings from the CONDFORMATTING record. */ void importCondFormatting( SequenceInputStream& rStrm ); @@ -223,12 +230,12 @@ public: const ScRangeList& getRanges() const { return maModel.maRanges; } void setReadyForFinalize() { mbReadyForFinalize = true; } - void insertRule( CondFormatRuleRef const & xRule ); + void insertRule( std::unique_ptr<CondFormatRule> xRule ); private: - CondFormatRuleRef createRule(); + std::unique_ptr<CondFormatRule> createRule(); private: - typedef RefMap< sal_Int32, CondFormatRule > CondFormatRuleMap; + typedef std::map< sal_Int32, std::unique_ptr<CondFormatRule> > CondFormatRuleMap; CondFormatModel maModel; /// Model of this conditional formatting. CondFormatRuleMap maRules; /// Maps formatting rules by priority. @@ -316,15 +323,16 @@ public: static sal_Int32 convertToApiOperator( sal_Int32 nToken ); static ScConditionMode convertToInternalOperator( sal_Int32 nToken ); void finalizeImport(); - bool insertRule(CondFormatRef const & xCondFmt, CondFormatRuleRef const & xRule); private: CondFormatRef createCondFormat(); void updateImport(const ScDataBarFormatData* pTarget); + void deduplicateCondFormats(); private: typedef RefVector< CondFormat > CondFormatVec; typedef RefVector< ExtCfDataBarRule > ExtCfDataBarRuleVec; + CondFormatVec maCondFormats; /// All conditional formatting in a sheet. ExtCfDataBarRuleVec maCfRules; /// All external conditional formatting rules in a sheet. std::vector< std::unique_ptr<ExtCfCondFormat> > maExtCondFormats; diff --git a/sc/source/filter/inc/condformatcontext.hxx b/sc/source/filter/inc/condformatcontext.hxx index 351d2541b8ff..e406be4ddfac 100644 --- a/sc/source/filter/inc/condformatcontext.hxx +++ b/sc/source/filter/inc/condformatcontext.hxx @@ -29,25 +29,25 @@ class CondFormatContext; class ColorScaleContext final : public WorksheetContextBase { public: - explicit ColorScaleContext( CondFormatContext& rFragment, CondFormatRuleRef xRule ); + explicit ColorScaleContext( CondFormatContext& rFragment, CondFormatRule& rRule ); virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) override; virtual void onStartElement( const AttributeList& rAttribs ) override; private: - CondFormatRuleRef mxRule; + CondFormatRule& mrRule; }; class DataBarContext final : public WorksheetContextBase { public: - explicit DataBarContext( CondFormatContext& rFormat, CondFormatRuleRef xRule ); + explicit DataBarContext( CondFormatContext& rFormat, CondFormatRule& rRule ); virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) override; virtual void onStartElement( const AttributeList& rAttribs ) override; private: - CondFormatRuleRef mxRule; + CondFormatRule& mrRule; }; class IconSetContext final : public WorksheetContextBase @@ -81,7 +81,7 @@ private: virtual void onEndRecord() override; CondFormatRef mxCondFmt; - CondFormatRuleRef mxRule; + std::unique_ptr<CondFormatRule> mxRule; }; } // namespace oox::xls diff --git a/sc/source/filter/inc/connectionsbuffer.hxx b/sc/source/filter/inc/connectionsbuffer.hxx index 4bad185febc5..5f3fb3ac734f 100644 --- a/sc/source/filter/inc/connectionsbuffer.hxx +++ b/sc/source/filter/inc/connectionsbuffer.hxx @@ -188,7 +188,7 @@ public: void importWebPrTable( SequenceInputStream& rStrm, sal_Int32 nRecId ); static css::uno::Sequence<css::uno::Any> - getSequenceOfAny(css::uno::Reference<css::xml::sax::XFastAttributeList>& xFastAttributeList); + getSequenceOfAny(const css::uno::Reference<css::xml::sax::XFastAttributeList>& xFastAttributeList); /** Returns the unique connection identifier. */ sal_Int32 getConnectionId() const { return maModel.mnId; } /** Returns the source data type of the connection. */ diff --git a/sc/source/filter/inc/eeimport.hxx b/sc/source/filter/inc/eeimport.hxx index 0d0466eb8909..74611a61e913 100644 --- a/sc/source/filter/inc/eeimport.hxx +++ b/sc/source/filter/inc/eeimport.hxx @@ -26,7 +26,6 @@ class ScDocument; class ScEEParser; class ScTabEditEngine; -class SvStream; struct ScEEParseEntry; diff --git a/sc/source/filter/inc/excdoc.hxx b/sc/source/filter/inc/excdoc.hxx index af0ffade53e5..af9b83b570af 100644 --- a/sc/source/filter/inc/excdoc.hxx +++ b/sc/source/filter/inc/excdoc.hxx @@ -96,7 +96,7 @@ public: void WriteXml( XclExpXmlStream& ); // add an element attributes and values to FastAttributeList - static void addElemensToAttrList(rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, + static void addElemensToAttrList(const rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, css::uno::Sequence<css::uno::Any>& aSeqs); }; diff --git a/sc/source/filter/inc/export/ExportTools.hxx b/sc/source/filter/inc/export/ExportTools.hxx index 369728f06e10..dc08c33846b1 100644 --- a/sc/source/filter/inc/export/ExportTools.hxx +++ b/sc/source/filter/inc/export/ExportTools.hxx @@ -14,9 +14,9 @@ namespace oox::xls { -void writeComplexColor(sax_fastparser::FSHelperPtr& pFS, sal_Int32 nElement, +void writeComplexColor(const sax_fastparser::FSHelperPtr& pFS, sal_Int32 nElement, model::ComplexColor const& rComplexColor, Color const& rColor); -void writeComplexColor(sax_fastparser::FSHelperPtr& pFS, sal_Int32 nElement, +void writeComplexColor(const sax_fastparser::FSHelperPtr& pFS, sal_Int32 nElement, model::ComplexColor const& rComplexColor); } diff --git a/sc/source/filter/inc/export/SparklineExt.hxx b/sc/source/filter/inc/export/SparklineExt.hxx index f2bff1c7d377..16559d1c5b76 100644 --- a/sc/source/filter/inc/export/SparklineExt.hxx +++ b/sc/source/filter/inc/export/SparklineExt.hxx @@ -35,10 +35,10 @@ public: std::vector<std::shared_ptr<sc::Sparkline>> const& rSparklines); static void - addSparklineGroupAttributes(rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, - sc::SparklineAttributes& rSparklineAttributes); + addSparklineGroupAttributes(const rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, + const sc::SparklineAttributes& rSparklineAttributes); static void addSparklineGroupColors(XclExpXmlStream& rStream, - sc::SparklineAttributes& rSparklineAttributes); + const sc::SparklineAttributes& rSparklineAttributes); XclExpExtType GetType() override { return XclExpExtSparklineType; } }; diff --git a/sc/source/filter/inc/extlstcontext.hxx b/sc/source/filter/inc/extlstcontext.hxx index c8c3f5ddb355..b3016103d0f9 100644 --- a/sc/source/filter/inc/extlstcontext.hxx +++ b/sc/source/filter/inc/extlstcontext.hxx @@ -19,7 +19,6 @@ extern sal_Int32 gnStyleIdx; // Holds index of the <extlst> <cfRule> style (Will be reset by finalize import) struct ScDataBarFormatData; -namespace oox { class AttributeList; } namespace oox::xls { class WorkbookFragment; } namespace oox::xls { class WorksheetFragment; } diff --git a/sc/source/filter/inc/htmlpars.hxx b/sc/source/filter/inc/htmlpars.hxx index a03d1c4d5fca..846ee7fc897d 100644 --- a/sc/source/filter/inc/htmlpars.hxx +++ b/sc/source/filter/inc/htmlpars.hxx @@ -144,7 +144,6 @@ struct ScHTMLAdjustStackEntry class EditEngine; class ScDocument; -class HTMLOption; // TODO these need better names typedef ::std::map<SCROW, SCROW> InnerMap; diff --git a/sc/source/filter/inc/lotattr.hxx b/sc/source/filter/inc/lotattr.hxx index 372e7dadbf8c..94c88b733b6e 100644 --- a/sc/source/filter/inc/lotattr.hxx +++ b/sc/source/filter/inc/lotattr.hxx @@ -24,7 +24,6 @@ #include <address.hxx> -class ScDocumentPool; class ScPatternAttr; class SvxColorItem; class Color; diff --git a/sc/source/filter/inc/numberformatsbuffer.hxx b/sc/source/filter/inc/numberformatsbuffer.hxx index 10ec0de1ce9e..bbd0d4fff20f 100644 --- a/sc/source/filter/inc/numberformatsbuffer.hxx +++ b/sc/source/filter/inc/numberformatsbuffer.hxx @@ -40,6 +40,8 @@ struct NumFmtModel sal_Int16 mnPredefId; explicit NumFmtModel(); + + bool operator==(const NumFmtModel&) const = default; }; /** Contains all API number format attributes. */ @@ -51,7 +53,7 @@ struct ApiNumFmtData }; /** Contains all data for a number format code. */ -class NumberFormat : public WorkbookHelper +class NumberFormat final : public WorkbookHelper { public: explicit NumberFormat( const WorkbookHelper& rHelper ); @@ -73,6 +75,8 @@ public: const css::lang::Locale& rFromLocale ); sal_uInt32 fillToItemSet( SfxItemSet& rItemSet, bool bSkipPoolDefs = false ) const; + const NumFmtModel & getModel() const { return maModel; } + private: NumFmtModel maModel; ApiNumFmtData maApiData; diff --git a/sc/source/filter/inc/orcus_autofilter.hxx b/sc/source/filter/inc/orcus_autofilter.hxx new file mode 100644 index 000000000000..eff38a4914b3 --- /dev/null +++ b/sc/source/filter/inc/orcus_autofilter.hxx @@ -0,0 +1,111 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <address.hxx> +#include <documentimport.hxx> +#include <queryentry.hxx> + +#include <orcus/spreadsheet/import_interface_auto_filter.hpp> + +#include <vector> +#include <functional> + +class ScOrcusGlobalSettings; + +class ScOrcusAutoFilterMultiValues + : public orcus::spreadsheet::iface::import_auto_filter_multi_values +{ +public: + using commitFuncType = std::function<void(ScQueryEntry)>; + + ScOrcusAutoFilterMultiValues(ScDocument& rDoc, const ScOrcusGlobalSettings& rGS); + + void add_value(std::string_view value) override; + + void commit() override; + + void reset(commitFuncType func); + +private: + ScDocument& mrDoc; + const ScOrcusGlobalSettings& mrGlobalSettings; + + ScQueryEntry maEntry; + commitFuncType maCommitFunc; +}; + +class ScOrcusAutoFilterNode : public orcus::spreadsheet::iface::import_auto_filter_node +{ +public: + using commitFuncType = std::function<void(std::vector<ScQueryEntry>, bool)>; + + ScOrcusAutoFilterNode(ScDocument& rDoc, const ScOrcusGlobalSettings& rGS); + + virtual void append_item(orcus::spreadsheet::col_t field, + orcus::spreadsheet::auto_filter_op_t op, double value) override; + + virtual void append_item(orcus::spreadsheet::col_t field, + orcus::spreadsheet::auto_filter_op_t op, std::string_view value, + bool regex) override; + + virtual void append_item(orcus::spreadsheet::col_t field, + orcus::spreadsheet::auto_filter_op_t op) override; + + virtual orcus::spreadsheet::iface::import_auto_filter_node* + start_node(orcus::spreadsheet::auto_filter_node_op_t op) override; + + virtual orcus::spreadsheet::iface::import_auto_filter_multi_values* + start_multi_values(orcus::spreadsheet::col_t field) override; + + virtual void commit() override; + + void reset(SCCOL nStartCol, ScQueryConnect eConn, commitFuncType func); + +private: + ScDocument& mrDoc; + const ScOrcusGlobalSettings& mrGlobalSettings; + ScOrcusAutoFilterMultiValues maMultiValues; + std::unique_ptr<ScOrcusAutoFilterNode> mxChild; + + SCCOL mnStartCol = -1; + ScQueryConnect meConn = ScQueryConnect::SC_AND; + bool mbHasRegex = false; + + std::vector<ScQueryEntry> maEntries; + commitFuncType maCommitFunc; +}; + +class ScOrcusAutoFilter : public orcus::spreadsheet::iface::import_auto_filter +{ +public: + ScOrcusAutoFilter(ScDocumentImport& rDoc, const ScOrcusGlobalSettings& rGS, SCTAB nTab); + ScOrcusAutoFilter(const ScOrcusAutoFilter&) = delete; + ~ScOrcusAutoFilter(); + + virtual orcus::spreadsheet::iface::import_auto_filter_node* + start_node(orcus::spreadsheet::auto_filter_node_op_t op) override; + + virtual void commit() override; + + void reset(const orcus::spreadsheet::range_t& range); + +private: + ScDocumentImport& mrDoc; + + ScOrcusAutoFilterNode maNode; + std::unique_ptr<ScDBData> mxData; + + const SCTAB mnTab; + SCCOL mnCol1; + SCCOL mnCol2; + SCROW mnRow1; + SCROW mnRow2; +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/inc/orcus_global.hxx b/sc/source/filter/inc/orcus_global.hxx new file mode 100644 index 000000000000..77d6874493af --- /dev/null +++ b/sc/source/filter/inc/orcus_global.hxx @@ -0,0 +1,42 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <documentimport.hxx> +#include <formula/grammar.hxx> + +#include <orcus/spreadsheet/import_interface.hpp> + +formula::FormulaGrammar::Grammar +getCalcGrammarFromOrcus(orcus::spreadsheet::formula_grammar_t grammar); + +class ScOrcusGlobalSettings : public orcus::spreadsheet::iface::import_global_settings +{ + ScDocumentImport& mrDoc; + formula::FormulaGrammar::Grammar meCalcGrammar; + orcus::spreadsheet::formula_grammar_t meOrcusGrammar; + rtl_TextEncoding mnTextEncoding; + +public: + ScOrcusGlobalSettings(ScDocumentImport& rDoc); + + virtual void set_origin_date(int year, int month, int day) override; + virtual void set_character_set(orcus::character_set_t cs) override; + + virtual void + set_default_formula_grammar(orcus::spreadsheet::formula_grammar_t grammar) override; + virtual orcus::spreadsheet::formula_grammar_t get_default_formula_grammar() const override; + + formula::FormulaGrammar::Grammar getCalcGrammar() const { return meCalcGrammar; } + + rtl_TextEncoding getTextEncoding() const { return mnTextEncoding; } + + ScDocumentImport& getDoc() const { return mrDoc; } +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx index 2fd1d5ed40f3..7d15b68c18c9 100644 --- a/sc/source/filter/inc/orcusinterface.hxx +++ b/sc/source/filter/inc/orcusinterface.hxx @@ -18,6 +18,8 @@ #include <editeng/svxenum.hxx> #include <editeng/editobj.hxx> +#include "orcus_autofilter.hxx" +#include "orcus_global.hxx" #include "sharedformulagroups.hxx" #include <conditio.hxx> @@ -25,8 +27,9 @@ #include <rtl/strbuf.hxx> #include <editeng/borderline.hxx> -#include <orcus/spreadsheet/import_interface.hpp> #include <orcus/spreadsheet/import_interface_styles.hpp> +#include <orcus/spreadsheet/import_interface_underline.hpp> +#include <orcus/spreadsheet/import_interface_strikethrough.hpp> #include <memory> #include <map> @@ -37,47 +40,18 @@ class ScOrcusSheet; class ScOrcusStyles; class ScOrcusFactory; -class SfxItemSet; -namespace com::sun::star::task { class XStatusIndicator; } -class ScOrcusGlobalSettings : public orcus::spreadsheet::iface::import_global_settings +namespace com::sun::star::task { - ScDocumentImport& mrDoc; - formula::FormulaGrammar::Grammar meCalcGrammar; - orcus::spreadsheet::formula_grammar_t meOrcusGrammar; - rtl_TextEncoding mnTextEncoding; - -public: - ScOrcusGlobalSettings(ScDocumentImport& rDoc); - - virtual void set_origin_date(int year, int month, int day) override; - virtual void set_character_set(orcus::character_set_t cs) override; - - virtual void set_default_formula_grammar(orcus::spreadsheet::formula_grammar_t grammar) override; - virtual orcus::spreadsheet::formula_grammar_t get_default_formula_grammar() const override; - - formula::FormulaGrammar::Grammar getCalcGrammar() const - { - return meCalcGrammar; - } - - rtl_TextEncoding getTextEncoding() const - { - return mnTextEncoding; - } - - ScDocumentImport& getDoc() const - { - return mrDoc; - } -}; +class XStatusIndicator; +} class ScOrcusRefResolver : public orcus::spreadsheet::iface::import_reference_resolver { const ScOrcusGlobalSettings& mrGlobalSettings; public: - ScOrcusRefResolver( const ScOrcusGlobalSettings& rGS ); + ScOrcusRefResolver(const ScOrcusGlobalSettings& rGS); orcus::spreadsheet::src_address_t resolve_address(std::string_view address) override; orcus::spreadsheet::src_range_t resolve_range(std::string_view range) override; @@ -93,7 +67,8 @@ class ScOrcusNamedExpression : public orcus::spreadsheet::iface::import_named_ex const SCTAB mnTab; //< negative if global, else >= 0 for sheet-local named expressions. public: - ScOrcusNamedExpression( ScDocumentImport& rDoc, const ScOrcusGlobalSettings& rGS, SCTAB nTab = -1 ); + ScOrcusNamedExpression(ScDocumentImport& rDoc, const ScOrcusGlobalSettings& rGS, + SCTAB nTab = -1); void reset(); @@ -103,6 +78,67 @@ public: virtual void commit() override; }; +struct ScOrcusStrikethrough +{ + std::optional<orcus::spreadsheet::strikethrough_style_t> meStyle; + std::optional<orcus::spreadsheet::strikethrough_type_t> meType; + std::optional<orcus::spreadsheet::strikethrough_width_t> meWidth; + std::optional<orcus::spreadsheet::strikethrough_text_t> meText; + + void reset(); + std::optional<FontStrikeout> toFontStrikeout() const; +}; + +struct ScOrcusUnderline +{ + std::optional<orcus::spreadsheet::underline_style_t> meStyle; + std::optional<orcus::spreadsheet::underline_thickness_t> meThickness; + std::optional<orcus::spreadsheet::underline_spacing_t> meSpacing; + std::optional<orcus::spreadsheet::underline_count_t> meCount; + + void reset(); + std::optional<FontLineStyle> toFontLineStyle() const; +}; + +class ScOrcusSegmentStrikethrough : public orcus::spreadsheet::iface::import_strikethrough +{ + friend class ScOrcusSharedStrings; + + SfxItemSet* mpDestFormat = nullptr; + ScOrcusStrikethrough maAttrs; + + void reset(SfxItemSet* pDestFormat); + +public: + void set_style(orcus::spreadsheet::strikethrough_style_t s) override; + void set_type(orcus::spreadsheet::strikethrough_type_t s) override; + void set_width(orcus::spreadsheet::strikethrough_width_t s) override; + void set_text(orcus::spreadsheet::strikethrough_text_t s) override; + void commit() override; +}; + +class ScOrcusSegmentUnderline : public orcus::spreadsheet::iface::import_underline +{ + friend class ScOrcusSharedStrings; + + SfxItemSet* mpDestFormat = nullptr; + + ScOrcusUnderline maAttrs; + std::optional<Color> maColor; + + void reset(SfxItemSet* pDestFormat); + +public: + void set_style(orcus::spreadsheet::underline_style_t e) override; + void set_thickness(orcus::spreadsheet::underline_thickness_t e) override; + void set_spacing(orcus::spreadsheet::underline_spacing_t e) override; + void set_count(orcus::spreadsheet::underline_count_t e) override; + void set_color(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, + orcus::spreadsheet::color_elem_t green, + orcus::spreadsheet::color_elem_t blue) override; + void commit() override; +}; + class ScOrcusSharedStrings : public orcus::spreadsheet::iface::import_shared_strings { ScOrcusFactory& mrFactory; @@ -111,6 +147,9 @@ class ScOrcusSharedStrings : public orcus::spreadsheet::iface::import_shared_str SfxItemSet maCurFormat; std::vector<std::pair<ESelection, SfxItemSet>> maFormatSegments; + ScOrcusSegmentUnderline maImportUnderline; + ScOrcusSegmentStrikethrough maImportStrikethrough; + OUString toOUString(std::string_view s); public: @@ -121,13 +160,19 @@ public: virtual void set_segment_bold(bool b) override; virtual void set_segment_italic(bool b) override; + virtual void set_segment_superscript(bool b) override; + virtual void set_segment_subscript(bool b) override; virtual void set_segment_font(size_t font_index) override; virtual void set_segment_font_name(std::string_view s) override; virtual void set_segment_font_size(double point) override; virtual void set_segment_font_color(orcus::spreadsheet::color_elem_t alpha, - orcus::spreadsheet::color_elem_t red, - orcus::spreadsheet::color_elem_t green, - orcus::spreadsheet::color_elem_t blue) override; + orcus::spreadsheet::color_elem_t red, + orcus::spreadsheet::color_elem_t green, + orcus::spreadsheet::color_elem_t blue) override; + + virtual orcus::spreadsheet::iface::import_underline* start_underline() override; + virtual orcus::spreadsheet::iface::import_strikethrough* start_strikethrough() override; + virtual void append_segment(std::string_view s) override; virtual size_t commit_segments() override; @@ -139,8 +184,10 @@ public: ScOrcusConditionalFormat(SCTAB nTab, ScDocument& rDoc); virtual ~ScOrcusConditionalFormat() override; - virtual void set_color(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, - orcus::spreadsheet::color_elem_t green, orcus::spreadsheet::color_elem_t blue) override; + virtual void set_color(orcus::spreadsheet::color_elem_t alpha, + orcus::spreadsheet::color_elem_t red, + orcus::spreadsheet::color_elem_t green, + orcus::spreadsheet::color_elem_t blue) override; virtual void set_formula(std::string_view formula) override; @@ -156,11 +203,15 @@ public: virtual void set_databar_axis(orcus::spreadsheet::databar_axis_t axis) override; - virtual void set_databar_color_positive(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, - orcus::spreadsheet::color_elem_t green, orcus::spreadsheet::color_elem_t blue) override; + virtual void set_databar_color_positive(orcus::spreadsheet::color_elem_t alpha, + orcus::spreadsheet::color_elem_t red, + orcus::spreadsheet::color_elem_t green, + orcus::spreadsheet::color_elem_t blue) override; - virtual void set_databar_color_negative(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, - orcus::spreadsheet::color_elem_t green, orcus::spreadsheet::color_elem_t blue) override; + virtual void set_databar_color_negative(orcus::spreadsheet::color_elem_t alpha, + orcus::spreadsheet::color_elem_t red, + orcus::spreadsheet::color_elem_t green, + orcus::spreadsheet::color_elem_t blue) override; virtual void set_min_databar_length(double length) override; @@ -181,12 +232,12 @@ public: virtual void set_range(std::string_view range) override; virtual void set_range(orcus::spreadsheet::row_t row_start, orcus::spreadsheet::col_t col_start, - orcus::spreadsheet::row_t row_end, orcus::spreadsheet::col_t col_end) override; + orcus::spreadsheet::row_t row_end, + orcus::spreadsheet::col_t col_end) override; virtual void commit_format() override; private: - SCTAB mnTab; ScDocument& mrDoc; @@ -195,54 +246,39 @@ private: ScFormatEntry::Type meEntryType; }; -class ScOrcusAutoFilter : public orcus::spreadsheet::iface::import_auto_filter -{ -public: - ScOrcusAutoFilter( const ScOrcusGlobalSettings& rGS ); - - virtual ~ScOrcusAutoFilter() override; - - virtual void set_range(const orcus::spreadsheet::range_t& range) override; - - virtual void set_column(orcus::spreadsheet::col_t col) override; - - virtual void append_column_match_value(std::string_view value) override; - - virtual void commit_column() override; - - virtual void commit() override; - -private: - const ScOrcusGlobalSettings& mrGlobalSettings; - ScRange maRange; -}; - class ScOrcusSheetProperties : public orcus::spreadsheet::iface::import_sheet_properties { ScDocumentImport& mrDoc; SCTAB mnTab; + public: ScOrcusSheetProperties(SCTAB nTab, ScDocumentImport& rDoc); virtual ~ScOrcusSheetProperties() override; - virtual void set_column_width( - orcus::spreadsheet::col_t col, orcus::spreadsheet::col_t col_span, - double width, orcus::length_unit_t unit) override; + virtual void set_column_width(orcus::spreadsheet::col_t col, orcus::spreadsheet::col_t col_span, + double width, orcus::length_unit_t unit) override; - virtual void set_column_hidden( - orcus::spreadsheet::col_t col, orcus::spreadsheet::col_t col_span, - bool hidden) override; + virtual void set_column_hidden(orcus::spreadsheet::col_t col, + orcus::spreadsheet::col_t col_span, bool hidden) override; - virtual void set_row_height(orcus::spreadsheet::row_t row, double height, orcus::length_unit_t unit) override; + virtual void set_row_height(orcus::spreadsheet::row_t row, orcus::spreadsheet::row_t row_span, + double height, orcus::length_unit_t unit) override; - virtual void set_row_hidden(orcus::spreadsheet::row_t row, bool hidden) override; + virtual void set_row_hidden(orcus::spreadsheet::row_t row, orcus::spreadsheet::row_t row_span, + bool hidden) override; virtual void set_merge_cell_range(const orcus::spreadsheet::range_t& range) override; }; class ScOrcusFormula : public orcus::spreadsheet::iface::import_formula { - enum class ResultType { NotSet, String, Value, Empty }; + enum class ResultType + { + NotSet, + String, + Value, + Empty + }; friend class ScOrcusSheet; @@ -262,11 +298,13 @@ class ScOrcusFormula : public orcus::spreadsheet::iface::import_formula void reset(); public: - ScOrcusFormula( ScOrcusSheet& rSheet ); + ScOrcusFormula(ScOrcusSheet& rSheet); virtual ~ScOrcusFormula() override; - virtual void set_position(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col) override; - virtual void set_formula(orcus::spreadsheet::formula_grammar_t grammar, std::string_view formula) override; + virtual void set_position(orcus::spreadsheet::row_t row, + orcus::spreadsheet::col_t col) override; + virtual void set_formula(orcus::spreadsheet::formula_grammar_t grammar, + std::string_view formula) override; virtual void set_shared_formula_index(size_t index) override; virtual void set_result_value(double value) override; virtual void set_result_string(std::string_view value) override; @@ -291,15 +329,20 @@ class ScOrcusArrayFormula : public orcus::spreadsheet::iface::import_array_formu void reset(); public: - ScOrcusArrayFormula( ScOrcusSheet& rSheet ); + ScOrcusArrayFormula(ScOrcusSheet& rSheet); virtual ~ScOrcusArrayFormula() override; virtual void set_range(const orcus::spreadsheet::range_t& range) override; - virtual void set_formula(orcus::spreadsheet::formula_grammar_t grammar, std::string_view formula) override; - virtual void set_result_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value) override; - virtual void set_result_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, std::string_view value) override; - virtual void set_result_empty(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col) override; - virtual void set_result_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value) override; + virtual void set_formula(orcus::spreadsheet::formula_grammar_t grammar, + std::string_view formula) override; + virtual void set_result_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, + double value) override; + virtual void set_result_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, + std::string_view value) override; + virtual void set_result_empty(orcus::spreadsheet::row_t row, + orcus::spreadsheet::col_t col) override; + virtual void set_result_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, + bool value) override; virtual void commit() override; }; @@ -309,17 +352,17 @@ class ScOrcusSheet : public orcus::spreadsheet::iface::import_sheet friend class ScOrcusArrayFormula; ScDocumentImport& mrDoc; - SCTAB mnTab; + const SCTAB mnTab; ScOrcusFactory& mrFactory; ScOrcusStyles& mrStyles; sc::SharedFormulaGroups maFormulaGroups; - ScOrcusAutoFilter maAutoFilter; ScOrcusSheetProperties maProperties; ScOrcusConditionalFormat maConditionalFormat; ScOrcusNamedExpression maNamedExpressions; ScOrcusFormula maFormula; ScOrcusArrayFormula maArrayFormula; + ScOrcusAutoFilter maAutoFilter; int mnCellCount; @@ -328,10 +371,9 @@ class ScOrcusSheet : public orcus::spreadsheet::iface::import_sheet ScDocumentImport& getDoc(); public: - ScOrcusSheet(ScDocumentImport& rDoc, SCTAB nTab, ScOrcusFactory& rFactory); + ScOrcusSheet(ScDocumentImport& rDoc, const ScOrcusGlobalSettings& rGS, SCTAB nTab, + ScOrcusFactory& rFactory); - virtual orcus::spreadsheet::iface::import_auto_filter* get_auto_filter() override; - virtual orcus::spreadsheet::iface::import_table* get_table() override; virtual orcus::spreadsheet::iface::import_sheet_properties* get_sheet_properties() override; virtual orcus::spreadsheet::iface::import_conditional_format* get_conditional_format() override; virtual orcus::spreadsheet::iface::import_named_expression* get_named_expression() override; @@ -339,23 +381,35 @@ public: virtual orcus::spreadsheet::iface::import_array_formula* get_array_formula() override; // Orcus import interface - virtual void set_auto(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, std::string_view value) override; - virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, orcus::spreadsheet::string_id_t sindex) override; - virtual void set_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, double value) override; - virtual void set_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, bool value) override; - virtual void set_date_time( - orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, int year, int month, int day, int hour, int minute, double second) override; - - virtual void set_format(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, size_t xf_index) override; - virtual void set_format(orcus::spreadsheet::row_t row_start, orcus::spreadsheet::col_t col_start, - orcus::spreadsheet::row_t row_end, orcus::spreadsheet::col_t col_end, size_t xf_index) override; - virtual void set_column_format( - orcus::spreadsheet::col_t col, orcus::spreadsheet::col_t col_span, std::size_t xf_index) override; + virtual void set_auto(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, + std::string_view value) override; + virtual void set_string(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, + orcus::spreadsheet::string_id_t sindex) override; + virtual void set_value(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, + double value) override; + virtual void set_bool(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, + bool value) override; + virtual void set_date_time(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, + int year, int month, int day, int hour, int minute, + double second) override; + + virtual void set_format(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, + size_t xf_index) override; + virtual void set_format(orcus::spreadsheet::row_t row_start, + orcus::spreadsheet::col_t col_start, orcus::spreadsheet::row_t row_end, + orcus::spreadsheet::col_t col_end, size_t xf_index) override; + virtual void set_column_format(orcus::spreadsheet::col_t col, + orcus::spreadsheet::col_t col_span, + std::size_t xf_index) override; virtual void set_row_format(orcus::spreadsheet::row_t row, std::size_t xf_index) override; virtual orcus::spreadsheet::range_size_t get_sheet_size() const override; - virtual void fill_down_cells(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, orcus::spreadsheet::row_t range_size) override; + virtual void fill_down_cells(orcus::spreadsheet::row_t row, orcus::spreadsheet::col_t col, + orcus::spreadsheet::row_t range_size) override; + + virtual orcus::spreadsheet::iface::import_auto_filter* + start_auto_filter(const orcus::spreadsheet::range_t& range) override; SCTAB getIndex() const { return mnTab; } @@ -383,7 +437,7 @@ struct ScOrcusFont std::optional<Color> maUnderlineColor; std::optional<FontStrikeout> meStrikeout; - void applyToItemSet( SfxItemSet& rSet ) const; + void applyToItemSet(SfxItemSet& rSet) const; }; struct ScOrcusFill @@ -392,7 +446,7 @@ struct ScOrcusFill std::optional<Color> maFgColor; std::optional<Color> maBgColor; // currently not used. - void applyToItemSet( SfxItemSet& rSet ) const; + void applyToItemSet(SfxItemSet& rSet) const; }; struct ScOrcusBorder @@ -406,7 +460,7 @@ struct ScOrcusBorder std::map<orcus::spreadsheet::border_direction_t, BorderLine> maBorders; - void applyToItemSet( SfxItemSet& rSet ) const; + void applyToItemSet(SfxItemSet& rSet) const; }; struct ScOrcusProtection @@ -416,14 +470,14 @@ struct ScOrcusProtection std::optional<bool> mbPrintContent; std::optional<bool> mbFormulaHidden; - void applyToItemSet( SfxItemSet& rSet ) const; + void applyToItemSet(SfxItemSet& rSet) const; }; struct ScOrcusNumberFormat { std::optional<OUString> maCode; - void applyToItemSet( SfxItemSet& rSet, const ScDocument& rDoc ) const; + void applyToItemSet(SfxItemSet& rSet, const ScDocument& rDoc) const; }; struct ScOrcusXf @@ -458,14 +512,55 @@ struct ScOrcusCellStyle ScOrcusCellStyle(); }; +class ScOrcusImportFontUnderlineStyle : public orcus::spreadsheet::iface::import_underline +{ + friend class ScOrcusImportFontStyle; + + ScOrcusFont* mpDestFont = nullptr; + ScOrcusUnderline maAttrs; + std::optional<Color> maColor; + + void reset(ScOrcusFont* pDest); + +public: + void set_style(orcus::spreadsheet::underline_style_t e) override; + void set_thickness(orcus::spreadsheet::underline_thickness_t e) override; + void set_spacing(orcus::spreadsheet::underline_spacing_t e) override; + void set_count(orcus::spreadsheet::underline_count_t e) override; + void set_color(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, + orcus::spreadsheet::color_elem_t green, + orcus::spreadsheet::color_elem_t blue) override; + void commit() override; +}; + +class ScOrcusImportFontStrikethroughStyle : public orcus::spreadsheet::iface::import_strikethrough +{ + friend class ScOrcusImportFontStyle; + + ScOrcusFont* mpDestFont = nullptr; + ScOrcusStrikethrough maAttrs; + + void reset(ScOrcusFont* pDest); + +public: + void set_style(orcus::spreadsheet::strikethrough_style_t s) override; + void set_type(orcus::spreadsheet::strikethrough_type_t s) override; + void set_width(orcus::spreadsheet::strikethrough_width_t s) override; + void set_text(orcus::spreadsheet::strikethrough_text_t s) override; + void commit() override; +}; + class ScOrcusImportFontStyle : public orcus::spreadsheet::iface::import_font_style { ScOrcusFont maCurrentFont; ScOrcusFactory& mrFactory; std::vector<ScOrcusFont>& mrFonts; + ScOrcusImportFontUnderlineStyle maUnderlineImport; + ScOrcusImportFontStrikethroughStyle maStrikeoutImport; + public: - ScOrcusImportFontStyle( ScOrcusFactory& rFactory, std::vector<ScOrcusFont>& rFonts ); + ScOrcusImportFontStyle(ScOrcusFactory& rFactory, std::vector<ScOrcusFont>& rFonts); void reset(); @@ -481,24 +576,14 @@ public: void set_size(double point) override; void set_size_asian(double point) override; void set_size_complex(double point) override; - void set_underline(orcus::spreadsheet::underline_t e) override; - void set_underline_width(orcus::spreadsheet::underline_width_t e) override; - void set_underline_mode(orcus::spreadsheet::underline_mode_t e) override; - void set_underline_type(orcus::spreadsheet::underline_type_t e) override; - void set_underline_color( - orcus::spreadsheet::color_elem_t alpha, - orcus::spreadsheet::color_elem_t red, - orcus::spreadsheet::color_elem_t green, - orcus::spreadsheet::color_elem_t blue) override; - void set_color( - orcus::spreadsheet::color_elem_t alpha, - orcus::spreadsheet::color_elem_t red, - orcus::spreadsheet::color_elem_t green, - orcus::spreadsheet::color_elem_t blue) override; - void set_strikethrough_style(orcus::spreadsheet::strikethrough_style_t s) override; - void set_strikethrough_type(orcus::spreadsheet::strikethrough_type_t s) override; - void set_strikethrough_width(orcus::spreadsheet::strikethrough_width_t s) override; - void set_strikethrough_text(orcus::spreadsheet::strikethrough_text_t s) override; + + void set_color(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, + orcus::spreadsheet::color_elem_t green, + orcus::spreadsheet::color_elem_t blue) override; + + orcus::spreadsheet::iface::import_underline* start_underline() override; + orcus::spreadsheet::iface::import_strikethrough* start_strikethrough() override; + std::size_t commit() override; }; @@ -508,21 +593,17 @@ class ScOrcusImportFillStyle : public orcus::spreadsheet::iface::import_fill_sty std::vector<ScOrcusFill>& mrFills; public: - ScOrcusImportFillStyle( std::vector<ScOrcusFill>& rFills ); + ScOrcusImportFillStyle(std::vector<ScOrcusFill>& rFills); void reset(); void set_pattern_type(orcus::spreadsheet::fill_pattern_t fp) override; - void set_fg_color( - orcus::spreadsheet::color_elem_t alpha, - orcus::spreadsheet::color_elem_t red, - orcus::spreadsheet::color_elem_t green, - orcus::spreadsheet::color_elem_t blue) override; - void set_bg_color( - orcus::spreadsheet::color_elem_t alpha, - orcus::spreadsheet::color_elem_t red, - orcus::spreadsheet::color_elem_t green, - orcus::spreadsheet::color_elem_t blue) override; + void set_fg_color(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, + orcus::spreadsheet::color_elem_t green, + orcus::spreadsheet::color_elem_t blue) override; + void set_bg_color(orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, + orcus::spreadsheet::color_elem_t green, + orcus::spreadsheet::color_elem_t blue) override; std::size_t commit() override; }; @@ -532,20 +613,18 @@ class ScOrcusImportBorderStyle : public orcus::spreadsheet::iface::import_border std::vector<ScOrcusBorder>& mrBorders; public: - ScOrcusImportBorderStyle( std::vector<ScOrcusBorder>& rBorders ); + ScOrcusImportBorderStyle(std::vector<ScOrcusBorder>& rBorders); void reset(); - void set_width( - orcus::spreadsheet::border_direction_t dir, double width, orcus::length_unit_t unit) override; - void set_style( - orcus::spreadsheet::border_direction_t dir, orcus::spreadsheet::border_style_t style) override; - void set_color( - orcus::spreadsheet::border_direction_t dir, - orcus::spreadsheet::color_elem_t alpha, - orcus::spreadsheet::color_elem_t red, - orcus::spreadsheet::color_elem_t green, - orcus::spreadsheet::color_elem_t blue) override; + void set_width(orcus::spreadsheet::border_direction_t dir, double width, + orcus::length_unit_t unit) override; + void set_style(orcus::spreadsheet::border_direction_t dir, + orcus::spreadsheet::border_style_t style) override; + void set_color(orcus::spreadsheet::border_direction_t dir, + orcus::spreadsheet::color_elem_t alpha, orcus::spreadsheet::color_elem_t red, + orcus::spreadsheet::color_elem_t green, + orcus::spreadsheet::color_elem_t blue) override; std::size_t commit() override; }; @@ -555,7 +634,7 @@ class ScOrcusImportCellProtection : public orcus::spreadsheet::iface::import_cel std::vector<ScOrcusProtection>& mrProtections; public: - ScOrcusImportCellProtection( std::vector<ScOrcusProtection>& rProtections ); + ScOrcusImportCellProtection(std::vector<ScOrcusProtection>& rProtections); void reset(); @@ -573,7 +652,7 @@ class ScOrcusImportNumberFormat : public orcus::spreadsheet::iface::import_numbe std::vector<ScOrcusNumberFormat>& mrNumberFormats; public: - ScOrcusImportNumberFormat( ScOrcusFactory& rFactory, std::vector<ScOrcusNumberFormat>& rFormats ); + ScOrcusImportNumberFormat(ScOrcusFactory& rFactory, std::vector<ScOrcusNumberFormat>& rFormats); void reset(); @@ -590,8 +669,8 @@ class ScOrucsImportCellStyle : public orcus::spreadsheet::iface::import_cell_sty const std::vector<ScOrcusXf>& mrXfs; public: - ScOrucsImportCellStyle( - ScOrcusFactory& rFactory, ScOrcusStyles& rStyles, const std::vector<ScOrcusXf>& rXfs ); + ScOrucsImportCellStyle(ScOrcusFactory& rFactory, ScOrcusStyles& rStyles, + const std::vector<ScOrcusXf>& rXfs); void reset(); @@ -609,7 +688,7 @@ class ScOrcusImportXf : public orcus::spreadsheet::iface::import_xf std::vector<ScOrcusXf>* mpXfs = nullptr; public: - void reset( std::vector<ScOrcusXf>& rXfs ); + void reset(std::vector<ScOrcusXf>& rXfs); void set_font(std::size_t index) override; void set_fill(std::size_t index) override; @@ -648,17 +727,18 @@ private: ScOrcusImportXf maXf; public: - ScOrcusStyles( ScOrcusFactory& rFactory, bool bSkipDefaultStyles=false ); + ScOrcusStyles(ScOrcusFactory& rFactory, bool bSkipDefaultStyles = false); - void applyXfToItemSet( SfxItemSet& rSet, const ScOrcusXf& rXf ); - void applyXfToItemSet( SfxItemSet& rSet, std::size_t xfId ); + void applyXfToItemSet(SfxItemSet& rSet, const ScOrcusXf& rXf); + void applyXfToItemSet(SfxItemSet& rSet, std::size_t xfId); virtual orcus::spreadsheet::iface::import_font_style* start_font_style() override; virtual orcus::spreadsheet::iface::import_fill_style* start_fill_style() override; virtual orcus::spreadsheet::iface::import_border_style* start_border_style() override; virtual orcus::spreadsheet::iface::import_cell_protection* start_cell_protection() override; virtual orcus::spreadsheet::iface::import_number_format* start_number_format() override; - virtual orcus::spreadsheet::iface::import_xf* start_xf(orcus::spreadsheet::xf_category_t cat) override; + virtual orcus::spreadsheet::iface::import_xf* + start_xf(orcus::spreadsheet::xf_category_t cat) override; virtual orcus::spreadsheet::iface::import_cell_style* start_cell_style() override; virtual void set_font_count(size_t n) override; @@ -686,7 +766,6 @@ class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory FillDownCells }; - OUString maStr1; OUString maStr2; double mfValue; @@ -698,10 +777,11 @@ class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory uint32_t mnIndex2; formula::FormulaGrammar::Grammar meGrammar; - CellStoreToken( const ScAddress& rPos, Type eType ); - CellStoreToken( const ScAddress& rPos, double fValue ); - CellStoreToken( const ScAddress& rPos, uint32_t nIndex ); - CellStoreToken( const ScAddress& rPos, OUString aFormula, formula::FormulaGrammar::Grammar eGrammar ); + CellStoreToken(const ScAddress& rPos, Type eType); + CellStoreToken(const ScAddress& rPos, double fValue); + CellStoreToken(const ScAddress& rPos, uint32_t nIndex); + CellStoreToken(const ScAddress& rPos, OUString aFormula, + formula::FormulaGrammar::Grammar eGrammar); }; using StringValueType = std::variant<OUString, std::unique_ptr<EditTextObject>>; @@ -726,18 +806,20 @@ class ScOrcusFactory : public orcus::spreadsheet::iface::import_factory css::uno::Reference<css::task::XStatusIndicator> mxStatusIndicator; public: - ScOrcusFactory(ScDocument& rDoc, bool bSkipDefaultStyles=false); - - virtual orcus::spreadsheet::iface::import_sheet* append_sheet( - orcus::spreadsheet::sheet_t sheet_index, std::string_view sheet_name) override; - virtual orcus::spreadsheet::iface::import_sheet* get_sheet(std::string_view sheet_name) override; - virtual orcus::spreadsheet::iface::import_sheet* get_sheet(orcus::spreadsheet::sheet_t sheet_index) override; + ScOrcusFactory(ScDocument& rDoc, bool bSkipDefaultStyles = false); + + virtual orcus::spreadsheet::iface::import_sheet* + append_sheet(orcus::spreadsheet::sheet_t sheet_index, std::string_view sheet_name) override; + virtual orcus::spreadsheet::iface::import_sheet* + get_sheet(std::string_view sheet_name) override; + virtual orcus::spreadsheet::iface::import_sheet* + get_sheet(orcus::spreadsheet::sheet_t sheet_index) override; virtual orcus::spreadsheet::iface::import_global_settings* get_global_settings() override; virtual orcus::spreadsheet::iface::import_shared_strings* get_shared_strings() override; virtual orcus::spreadsheet::iface::import_named_expression* get_named_expression() override; virtual orcus::spreadsheet::iface::import_styles* get_styles() override; - virtual orcus::spreadsheet::iface::import_reference_resolver* get_reference_resolver( - orcus::spreadsheet::formula_ref_context_t cxt) override; + virtual orcus::spreadsheet::iface::import_reference_resolver* + get_reference_resolver(orcus::spreadsheet::formula_ref_context_t cxt) override; virtual void finalize() override; ScDocumentImport& getDoc(); @@ -748,20 +830,20 @@ public: const OUString* getString(size_t nIndex) const; - void pushCellStoreAutoToken( const ScAddress& rPos, const OUString& rVal ); - void pushCellStoreToken( const ScAddress& rPos, uint32_t nStrIndex ); - void pushCellStoreToken( const ScAddress& rPos, double fValue ); - void pushCellStoreToken( - const ScAddress& rPos, const OUString& rFormula, formula::FormulaGrammar::Grammar eGrammar ); - void pushFillDownCellsToken( const ScAddress& rPos, uint32_t nFillSize ); + void pushCellStoreAutoToken(const ScAddress& rPos, const OUString& rVal); + void pushCellStoreToken(const ScAddress& rPos, uint32_t nStrIndex); + void pushCellStoreToken(const ScAddress& rPos, double fValue); + void pushCellStoreToken(const ScAddress& rPos, const OUString& rFormula, + formula::FormulaGrammar::Grammar eGrammar); + void pushFillDownCellsToken(const ScAddress& rPos, uint32_t nFillSize); - void pushSharedFormulaToken( const ScAddress& rPos, uint32_t nIndex ); - void pushMatrixFormulaToken( - const ScAddress& rPos, const OUString& rFormula, formula::FormulaGrammar::Grammar eGrammar, - uint32_t nRowRange, uint32_t nColRange ); + void pushSharedFormulaToken(const ScAddress& rPos, uint32_t nIndex); + void pushMatrixFormulaToken(const ScAddress& rPos, const OUString& rFormula, + formula::FormulaGrammar::Grammar eGrammar, uint32_t nRowRange, + uint32_t nColRange); - void pushFormulaResult( const ScAddress& rPos, double fValue ); - void pushFormulaResult( const ScAddress& rPos, const OUString& rValue ); + void pushFormulaResult(const ScAddress& rPos, double fValue); + void pushFormulaResult(const ScAddress& rPos, const OUString& rValue); void incrementProgress(); diff --git a/sc/source/filter/inc/root.hxx b/sc/source/filter/inc/root.hxx index 0e4697dcd364..d8142761939c 100644 --- a/sc/source/filter/inc/root.hxx +++ b/sc/source/filter/inc/root.hxx @@ -22,9 +22,6 @@ #include "flttypes.hxx" #include <memory> -class ScRangeName; - -class RangeNameBufferWK3; class SharedFormulaBuffer; class ExtNameBuff; class ExtSheetBuffer; diff --git a/sc/source/filter/inc/sharedformulagroups.hxx b/sc/source/filter/inc/sharedformulagroups.hxx index e8b04928596e..05e9520f4219 100644 --- a/sc/source/filter/inc/sharedformulagroups.hxx +++ b/sc/source/filter/inc/sharedformulagroups.hxx @@ -13,7 +13,6 @@ #include <tokenarray.hxx> #include <memory> #include <map> -class ScTokenArray; namespace sc { diff --git a/sc/source/filter/inc/stylesbuffer.hxx b/sc/source/filter/inc/stylesbuffer.hxx index 95ec8b8806ff..224ed4ad92b3 100644 --- a/sc/source/filter/inc/stylesbuffer.hxx +++ b/sc/source/filter/inc/stylesbuffer.hxx @@ -154,6 +154,8 @@ struct FontModel explicit FontModel(); + bool operator==(const FontModel&) const; + void setBiff12Scheme( sal_uInt8 nScheme ); void setBiffHeight( sal_uInt16 nHeight ); void setBiffWeight( sal_uInt16 nWeight ); @@ -279,6 +281,8 @@ struct AlignmentModel explicit AlignmentModel(); + bool operator==(const AlignmentModel&) const = default; + /** Sets horizontal alignment from the passed BIFF data. */ void setBiffHorAlign( sal_uInt8 nHorAlign ); /** Sets vertical alignment from the passed BIFF data. */ @@ -339,6 +343,8 @@ struct ProtectionModel bool mbLocked; /// True = locked against editing. bool mbHidden; /// True = formula is hidden. + bool operator==(const ProtectionModel&) const = default; + explicit ProtectionModel(); }; @@ -374,6 +380,8 @@ public: /** Returns the converted API protection data struct. */ const ApiProtectionData& getApiData() const { return maApiData; } + const ProtectionModel& getModelData() const { return maModel; } + void fillToItemSet( SfxItemSet& rItemSet, bool bSkipPoolDefs = false ) const; private: ProtectionModel maModel; /// Protection model data. @@ -392,6 +400,8 @@ struct BorderLineModel explicit BorderLineModel( bool bDxf ); + bool operator==(const BorderLineModel&) const; + /** Sets the passed BIFF line style. */ void setBiffStyle( sal_Int32 nLineStyle ); }; @@ -408,6 +418,8 @@ struct BorderModel bool mbDiagBLtoTR; /// True = bottom-left to top-right on. explicit BorderModel( bool bDxf ); + + bool operator==(const BorderModel&) const = default; }; /** Contains API attributes of a complete cell border. */ @@ -457,6 +469,8 @@ public: /** Returns the converted API border data struct. */ const ApiBorderData& getApiData() const { return maApiData; } + const BorderModel& getModelData() const { return maModel; } + void fillToItemSet( SfxItemSet& rItemSet, bool bSkipPoolDefs = false ) const; private: @@ -489,6 +503,8 @@ struct PatternFillModel explicit PatternFillModel( bool bDxf ); + bool operator==(const PatternFillModel&) const; + /** Sets the passed BIFF pattern identifier. */ void setBiffPattern( sal_Int32 nPattern ); }; @@ -512,6 +528,8 @@ struct GradientFillModel void readGradient( SequenceInputStream& rStrm ); /** Reads BIFF12 gradient stop settings from a FILL or DXF record. */ void readGradientStop( SequenceInputStream& rStrm, bool bDxf ); + + bool operator==(const GradientFillModel&) const = default; }; /** Contains API fill attributes. */ @@ -561,10 +579,14 @@ public: void fillToItemSet( SfxItemSet& rItemSet, bool bSkipPoolDefs = false ) const; -private: typedef std::shared_ptr< PatternFillModel > PatternModelRef; typedef std::shared_ptr< GradientFillModel > GradientModelRef; + const PatternModelRef & getPatternModel() const { return mxPatternModel; } + const GradientModelRef & getGradientModel() const {return mxGradientModel; } + +private: + PatternModelRef mxPatternModel; GradientModelRef mxGradientModel; ApiSolidFillData maApiData; @@ -664,6 +686,7 @@ typedef std::shared_ptr< Xf > XfRef; class Dxf : public WorkbookHelper { +friend struct CondFormatEquals; public: explicit Dxf( const WorkbookHelper& rHelper ); diff --git a/sc/source/filter/inc/tablecolumnsbuffer.hxx b/sc/source/filter/inc/tablecolumnsbuffer.hxx index f54c2eb5533e..efcfd979b219 100644 --- a/sc/source/filter/inc/tablecolumnsbuffer.hxx +++ b/sc/source/filter/inc/tablecolumnsbuffer.hxx @@ -25,7 +25,6 @@ namespace oox { class AttributeList; } namespace oox { class SequenceInputStream; } -class ScDBData; namespace oox::xls { diff --git a/sc/source/filter/inc/workbookhelper.hxx b/sc/source/filter/inc/workbookhelper.hxx index e76285ca37a2..b6aa24f8d4a1 100644 --- a/sc/source/filter/inc/workbookhelper.hxx +++ b/sc/source/filter/inc/workbookhelper.hxx @@ -36,8 +36,6 @@ namespace com::sun::star { namespace container { class XNameContainer; } namespace sheet { class XDatabaseRange; } namespace sheet { class XSpreadsheet; } - namespace sheet { class XSpreadsheetDocument; } - namespace sheet { struct FormulaToken; } namespace style { class XStyle; } namespace table { class XCellRange; } } @@ -59,7 +57,7 @@ class ScEditEngineDefaulter; class ScDBData; class ScRangeData; class ScModelObj; - +class ScDatabaseRangeObj; namespace oox::xls { enum class FontClassification : sal_uInt8 @@ -232,8 +230,7 @@ public: /** Creates and returns a database range on-the-fly in the Calc document. The range will not be buffered in the global table buffer. @param orName (in/out-parameter) Returns the resulting used name. */ - css::uno::Reference< css::sheet::XDatabaseRange > - createDatabaseRangeObject( + rtl::Reference<ScDatabaseRangeObj> createDatabaseRangeObject( OUString& orName, const ScRange& rRangeAddr ) const; diff --git a/sc/source/filter/inc/xestyle.hxx b/sc/source/filter/inc/xestyle.hxx index fc2e0858be33..a54a1fe827c4 100644 --- a/sc/source/filter/inc/xestyle.hxx +++ b/sc/source/filter/inc/xestyle.hxx @@ -776,7 +776,7 @@ private: DxfContainer maDxf; std::unique_ptr<NfKeywordTable> mpKeywordTable; /// Replacement table. - void fillDxfFrom(SfxItemSet& rItemSet, SvNumberFormatterPtr& xFormatter); + void fillDxfFrom(const SfxItemSet& rItemSet, const SvNumberFormatterPtr& xFormatter); }; diff --git a/sc/source/filter/inc/xetable.hxx b/sc/source/filter/inc/xetable.hxx index ed16140f6d68..4cd006f752ed 100644 --- a/sc/source/filter/inc/xetable.hxx +++ b/sc/source/filter/inc/xetable.hxx @@ -33,8 +33,6 @@ #include <unordered_map> #include <o3tl/sorted_vector.hxx> -class XclExtLst; - /* ============================================================================ Export of cell tables including row and column description. - Managing all used and formatted cells in a sheet. @@ -955,9 +953,6 @@ private: // Cell Table class XclExpNote; -class XclExpMergedcells; -class XclExpHyperlink; -class XclExpDval; /** This class contains the cell contents and more of an entire sheet. diff --git a/sc/source/filter/inc/xlroot.hxx b/sc/source/filter/inc/xlroot.hxx index 6ed01f2ce4c2..b732b6cc57a1 100644 --- a/sc/source/filter/inc/xlroot.hxx +++ b/sc/source/filter/inc/xlroot.hxx @@ -116,7 +116,6 @@ struct XclRootData virtual ~XclRootData(); }; -class SfxObjectShell; class ScModelObj; class OutputDevice; class SvNumberFormatter; diff --git a/sc/source/filter/lotus/op.cxx b/sc/source/filter/lotus/op.cxx index eb2822417ec3..e1c46643bd55 100644 --- a/sc/source/filter/lotus/op.cxx +++ b/sc/source/filter/lotus/op.cxx @@ -179,17 +179,17 @@ void OP_ColumnWidth(LotusContext& rContext, SvStream& r, sal_uInt16 /*n*/) nCol = rContext.rDoc.SanitizeCol(nCol); - sal_uInt16 nBreite; + sal_uInt16 nWidth; if( nWidthSpaces ) // assuming 10cpi character set - nBreite = static_cast<sal_uInt16>( TWIPS_PER_CHAR * nWidthSpaces ); + nWidth = static_cast<sal_uInt16>( TWIPS_PER_CHAR * nWidthSpaces ); else { rContext.rDoc.SetColHidden(nCol, nCol, 0, true); - nBreite = nDefWidth; + nWidth = nDefWidth; } - rContext.rDoc.SetColWidth(nCol, 0, nBreite); + rContext.rDoc.SetColWidth(nCol, 0, nWidth); } void OP_NamedRange(LotusContext& rContext, SvStream& r, sal_uInt16 /*n*/) @@ -471,7 +471,7 @@ void OP_Note123(LotusContext& rContext, SvStream& r, sal_uInt16 n) void OP_HorAlign123(LotusContext& /*rContext*/, sal_uInt8 nAlignPattern, SfxItemSet& rPatternItemSet) { -// pre: Pattern is stored in the last 3 bites of the 21st byte +// pre: Pattern is stored in the last 3 bits of the 21st byte // post: Appropriate Horizontal Alignment is set in rPattern according to the bit pattern. // // LEFT:001, RIGHT:010, CENTER:011, JUSTIFY:110, @@ -504,7 +504,7 @@ void OP_HorAlign123(LotusContext& /*rContext*/, sal_uInt8 nAlignPattern, SfxItem void OP_VerAlign123(LotusContext& /*rContext*/, sal_uInt8 nAlignPattern, SfxItemSet& rPatternItemSet) { -// pre: Pattern is stored in the last 3 bites of the 22nd byte +// pre: Pattern is stored in the last 3 bits of the 22nd byte // post: Appropriate Vertical Alignment is set in rPattern according to the bit pattern. // // TOP:001, MIDDLE:010, DOWN:100, DEFAULT:000 diff --git a/sc/source/filter/oox/SparklineFragment.cxx b/sc/source/filter/oox/SparklineFragment.cxx index ab0733d0efc7..44d2fe7e479e 100644 --- a/sc/source/filter/oox/SparklineFragment.cxx +++ b/sc/source/filter/oox/SparklineFragment.cxx @@ -69,7 +69,7 @@ model::ComplexColor fillComplexColor(const AttributeList& rAttribs, ThemeBuffer } void addColorsToSparklineAttributes(sc::SparklineAttributes& rAttributes, sal_Int32 nElement, - const AttributeList& rAttribs, ThemeBuffer& rThemeBuffer, + const AttributeList& rAttribs, const ThemeBuffer& rThemeBuffer, const GraphicHelper& rHelper) { switch (nElement) diff --git a/sc/source/filter/oox/autofilterbuffer.cxx b/sc/source/filter/oox/autofilterbuffer.cxx index 1d7b7ffb0d70..dcf8da5fdc9d 100644 --- a/sc/source/filter/oox/autofilterbuffer.cxx +++ b/sc/source/filter/oox/autofilterbuffer.cxx @@ -846,7 +846,7 @@ void AutoFilter::finalizeImport( const Reference< XDatabaseRange >& rxDatabaseRa if (!aParam.bUserDef) return; - SCCOLROW nStartPos = aParam.bByRow ? maRange.aStart.Col() : maRange.aStart.Row(); + SCCOLROW nStartPos = aParam.bByRow ? maRange.aStart.Row() : maRange.aStart.Col(); // descending sort - need to enable 1st SortParam slot if (rSorConditionLoaded.mbDescending) assert(aParam.GetSortKeyCount() == DEFSORT); diff --git a/sc/source/filter/oox/commentsbuffer.cxx b/sc/source/filter/oox/commentsbuffer.cxx index 6f650d5cb00e..1f1b0b242fde 100644 --- a/sc/source/filter/oox/commentsbuffer.cxx +++ b/sc/source/filter/oox/commentsbuffer.cxx @@ -156,7 +156,7 @@ namespace std::shared_ptr<RichString> mxText; OUString msAuthorName; - OOXGenerateNoteCaption(std::shared_ptr<RichString>& rText, const OUString& rAuthorName = "") + OOXGenerateNoteCaption(const std::shared_ptr<RichString>& rText, const OUString& rAuthorName = "") : mxText(rText) , msAuthorName(rAuthorName) { @@ -174,9 +174,8 @@ namespace } // insert text and convert text formatting - Reference< XText > xAnnoText( xAnnoShape ); xAnnoShape->addActionLock(); - mxText->convert( xAnnoText ); + mxText->convert( Reference< XText >( xAnnoShape ) ); xAnnoShape->removeActionLock(); } diff --git a/sc/source/filter/oox/condformatbuffer.cxx b/sc/source/filter/oox/condformatbuffer.cxx index d40b16a6e84c..73caf1f648e5 100644 --- a/sc/source/filter/oox/condformatbuffer.cxx +++ b/sc/source/filter/oox/condformatbuffer.cxx @@ -120,7 +120,7 @@ void SetCfvoData( ColorScaleRuleModelEntry* pEntry, const AttributeList& rAttrib if (!aGreaterThanOrEqual.isEmpty()) { if (!aGreaterThanOrEqual.toBoolean()) - pEntry->mbGreaterThanOrEqual = false; + pEntry->meMode = ScConditionMode::Greater; } if (aVal != "\"\"") @@ -331,7 +331,7 @@ ScColorScaleEntry* ConvertToModel( const ColorScaleRuleModelEntry& rEntry, ScDoc pEntry->SetFormula(rEntry.maFormula, *pDoc, rAddr, formula::FormulaGrammar::GRAM_ENGLISH_XL_A1); } - pEntry->SetGreaterThanOrEqual(rEntry.mbGreaterThanOrEqual); + pEntry->SetMode(rEntry.meMode); return pEntry; } @@ -1122,9 +1122,9 @@ void CondFormat::importConditionalFormatting( const AttributeList& rAttribs ) mpFormat = new ScConditionalFormat(0, &getScDocument()); } -CondFormatRuleRef CondFormat::importCfRule( const AttributeList& rAttribs ) +std::unique_ptr<CondFormatRule> CondFormat::importCfRule( const AttributeList& rAttribs ) { - CondFormatRuleRef xRule = createRule(); + std::unique_ptr<CondFormatRule> xRule = createRule(); xRule->importCfRule( rAttribs ); return xRule; } @@ -1140,9 +1140,9 @@ void CondFormat::importCondFormatting( SequenceInputStream& rStrm ) void CondFormat::importCfRule( SequenceInputStream& rStrm ) { - CondFormatRuleRef xRule = createRule(); + std::unique_ptr<CondFormatRule> xRule = createRule(); xRule->importCfRule( rStrm ); - insertRule( xRule ); + insertRule( std::move(xRule) ); } void CondFormat::finalizeImport() @@ -1152,7 +1152,8 @@ void CondFormat::finalizeImport() return; ScDocument& rDoc = getScDocument(); mpFormat->SetRange(maModel.maRanges); - maRules.forEachMem( &CondFormatRule::finalizeImport ); + for (auto & rPair : maRules) + rPair.second->finalizeImport(); if (mpFormat->size() > 0) { @@ -1164,17 +1165,18 @@ void CondFormat::finalizeImport() } } -CondFormatRuleRef CondFormat::createRule() +std::unique_ptr<CondFormatRule> CondFormat::createRule() { - return std::make_shared<CondFormatRule>( *this, mpFormat ); + return std::make_unique<CondFormatRule>( *this, mpFormat ); } -void CondFormat::insertRule( CondFormatRuleRef const & xRule ) +void CondFormat::insertRule( std::unique_ptr<CondFormatRule> xRule ) { - if( xRule && (xRule->getPriority() > 0) ) + if( xRule->getPriority() > 0 ) { + assert(&xRule->getParentCondFormat() == this); OSL_ENSURE( maRules.find( xRule->getPriority() ) == maRules.end(), "CondFormat::insertRule - multiple rules with equal priority" ); - maRules[ xRule->getPriority() ] = xRule; + maRules[ xRule->getPriority() ] = std::move(xRule); } } @@ -1229,34 +1231,10 @@ void CondFormatBuffer::updateImport(const ScDataBarFormatData* pTarget) } } -bool CondFormatBuffer::insertRule(CondFormatRef const & xCondFmt, CondFormatRuleRef const & xRule) -{ - CondFormatRef xFoundFmt; - ScRangeList aRanges = xCondFmt->getRanges(); - - for (auto& rCondFmt : maCondFormats) - { - if (xCondFmt == rCondFmt) - continue; - - if (aRanges == rCondFmt->getRanges()) - { - xFoundFmt = rCondFmt; - break; - } - } - - if (xFoundFmt) - { - xRule->mpFormat = xFoundFmt->mpFormat; - xFoundFmt->insertRule(xRule); - } - - return static_cast<bool>(xFoundFmt); -} - void CondFormatBuffer::finalizeImport() { + deduplicateCondFormats(); + std::unordered_set<size_t> aDoneExtCFs; typedef std::unordered_map<ScRangeList, CondFormat*, ScRangeListHasher> RangeMap; RangeMap aRangeMap; @@ -1281,7 +1259,7 @@ void CondFormatBuffer::finalizeImport() size_t nEntryIdx = 0; for (const auto& rxEntry : rEntries) { - CondFormatRuleRef xRule = rCondFormat.createRule(); + std::unique_ptr<CondFormatRule> xRule = rCondFormat.createRule(); if (ScDataBarFormat *pData = dynamic_cast<ScDataBarFormat*>(rxEntry.get())) updateImport(pData->GetDataBarData()); ScFormatEntry* pNewEntry = rxEntry->Clone(pDoc); @@ -1289,7 +1267,7 @@ void CondFormatBuffer::finalizeImport() if (nPriority == -1) nPriority = mnNonPrioritizedRuleNextPriority++; xRule->setFormatEntry(nPriority, pNewEntry); - rCondFormat.insertRule(xRule); + rCondFormat.insertRule(std::move(xRule)); ++nEntryIdx; } @@ -1321,10 +1299,9 @@ void CondFormatBuffer::finalizeImport() } for( const auto& rxCondFormat : maCondFormats ) - { - if ( rxCondFormat) + if (rxCondFormat) rxCondFormat->finalizeImport(); - } + for ( const auto& rxCfRule : maCfRules ) { if ( rxCfRule ) @@ -1366,6 +1343,204 @@ void CondFormatBuffer::finalizeImport() gnStyleIdx = 0; // Resets <extlst> <cfRule> style index. } +/// Used for deduplicating +struct CondFormatHash +{ + size_t operator()(const CondFormatRef& x) const { return hashCode(*x); } + +private: + static size_t hashCode(const CondFormat& r) + { + std::size_t seed(0); + // note that we deliberately skip the maRanges field, because, if necessary, we will merge + // new entries into that field. + o3tl::hash_combine(seed, r.maModel.mbPivot); + for (const auto & rPair : r.maRules) + o3tl::hash_combine(seed, hashCode(*rPair.second)); + return seed; + } + static size_t hashCode(const CondFormatRule& r) + { + std::size_t seed(0); + o3tl::hash_combine(seed, hashCode(r.getRuleModel())); + return seed; + } + static size_t hashCode(const CondFormatRuleModel& r) + { + std::size_t seed(0); + o3tl::hash_combine(seed, r.maText); + // we skip mnPriority, see comment in CondFormatEquals + o3tl::hash_combine(seed, r.mnType); + o3tl::hash_combine(seed, r.mnOperator); + o3tl::hash_combine(seed, r.mnTimePeriod); + o3tl::hash_combine(seed, r.mnRank); + o3tl::hash_combine(seed, r.mnStdDev); + // o3tl::hash_combine(seed, r.mnDxfId); if I hash this, need to hash the contents + o3tl::hash_combine(seed, r.mbStopIfTrue); + o3tl::hash_combine(seed, r.mbBottom); + o3tl::hash_combine(seed, r.mbPercent); + o3tl::hash_combine(seed, r.mbAboveAverage); + o3tl::hash_combine(seed, r.mbEqualAverage); + return seed; + } +}; + +/// Used for deduplicating +struct CondFormatEquals +{ + const StylesBuffer& mrStyles; + + CondFormatEquals(const StylesBuffer& rStyles) : mrStyles(rStyles) {} + + bool operator()(const CondFormatRef& lhs, const CondFormatRef& rhs) const + { + if (lhs.get() == rhs.get()) + return true; + // note that we deliberately skip the maRanges field, because, if necessary, we will merge + // new entries into that field. + if (lhs->maModel.mbPivot != rhs->maModel.mbPivot) + return false; + auto it1 = lhs->maRules.begin(); + auto it2 = rhs->maRules.begin(); + while (it1 != lhs->maRules.end() && it2 != rhs->maRules.end()) + { + if (!equals(it1->second, it2->second)) + return false; + ++it1; + ++it2; + } + return it1 == lhs->maRules.end() && it2 == rhs->maRules.end(); + } +private: + bool equals(const std::unique_ptr<CondFormatRule>& lhs, const std::unique_ptr<CondFormatRule>& rhs) const + { + if (lhs.get() == rhs.get()) + return true; + if (!equals(lhs->getRuleModel(), rhs->getRuleModel())) + return false; + if (bool(lhs->mpColor) != bool(rhs->mpColor)) + return false; + if (lhs->mpColor) + { + if (lhs->mpColor->getModelEntries() != rhs->mpColor->getModelEntries()) + return false; + if (lhs->mpColor->getCfvo() != rhs->mpColor->getCfvo()) + return false; + if (lhs->mpColor->getCol() != rhs->mpColor->getCol()) + return false; + } + // todo: I'm not bothering to properly check the following fields + // because I ran out of enthusiasm, so we won't detect duplicates if they + // contain data here. + if (lhs->mpDataBar.get() != rhs->mpDataBar.get()) + return false; + if (lhs->mpIconSet.get() != rhs->mpIconSet.get()) + return false; + return true; + } + bool equals(const CondFormatRuleModel& lhs, const CondFormatRuleModel& rhs) const + { + if (lhs.maText != rhs.maText) + return false; + // we skip mnPriority, because that is implicitly compared by the ordering of these objects + if (lhs.mnType != rhs.mnType) + return false; + if (lhs.mnOperator != rhs.mnOperator) + return false; + if (lhs.mnTimePeriod != rhs.mnTimePeriod) + return false; + if (lhs.mnRank != rhs.mnRank) + return false; + if (lhs.mnStdDev != rhs.mnStdDev) + return false; + if (!equalsDxf(lhs.mnDxfId, rhs.mnDxfId)) + return false; + if (lhs.mbStopIfTrue != rhs.mbStopIfTrue) + return false; + if (lhs.mbBottom != rhs.mbBottom) + return false; + if (lhs.mbPercent != rhs.mbPercent) + return false; + if (lhs.mbAboveAverage != rhs.mbAboveAverage) + return false; + if (lhs.mbEqualAverage != rhs.mbEqualAverage) + return false; + return true; + } + bool equalsDxf(sal_Int32 lhsDxfId, sal_Int32 rhsDxfId) const + { + if (lhsDxfId == rhsDxfId) + return true; + DxfRef pLhsDxf = mrStyles.getDxf(lhsDxfId); + DxfRef pRhsDxf = mrStyles.getDxf(rhsDxfId); + if (bool(pLhsDxf) != bool(pRhsDxf)) + return false; + if (pLhsDxf && !equals(*pLhsDxf, *pRhsDxf)) + return false; + return true; + } + static bool equals(const Dxf& lhs, const Dxf& rhs) + { + if (bool(lhs.mxFont) != bool(rhs.mxFont)) + return false; + if (lhs.mxFont && lhs.mxFont->getModel() != rhs.mxFont->getModel()) + return false; + if (bool(lhs.mxNumFmt) != bool(rhs.mxNumFmt)) + return false; + if (lhs.mxNumFmt && lhs.mxNumFmt->getModel() != rhs.mxNumFmt->getModel()) + return false; + if (bool(lhs.mxAlignment) != bool(rhs.mxAlignment)) + return false; + if (lhs.mxAlignment && lhs.mxAlignment->getModel() != rhs.mxAlignment->getModel()) + return false; + if (bool(lhs.mxProtection) != bool(rhs.mxProtection)) + return false; + if (lhs.mxProtection && lhs.mxProtection->getModelData() != rhs.mxProtection->getModelData()) + return false; + if (bool(lhs.mxBorder) != bool(rhs.mxBorder)) + return false; + if (lhs.mxBorder && lhs.mxBorder->getModelData() != rhs.mxBorder->getModelData()) + return false; + if (bool(lhs.mxFill) != bool(rhs.mxFill)) + return false; + if (lhs.mxFill) + { + if (bool(lhs.mxFill->getPatternModel()) != bool(rhs.mxFill->getPatternModel())) + return false; + if (lhs.mxFill->getPatternModel() && *lhs.mxFill->getPatternModel() != *rhs.mxFill->getPatternModel()) + return false; + if (bool(lhs.mxFill->getGradientModel()) != bool(rhs.mxFill->getGradientModel())) + return false; + if (lhs.mxFill->getGradientModel() && *lhs.mxFill->getGradientModel() != *rhs.mxFill->getGradientModel()) + return false; + } + return true; + } +}; + +// Excel will sometimes produce files with 100k of duplicate conditional formatting +// entries, but only 10 unique ones, which will make LO freeze because our ScPatternAttr +// de-duplication is quite expensive. So rather do it here, where it is considerably cheaper. +void CondFormatBuffer::deduplicateCondFormats() +{ + // remove duplicates as we go + std::unordered_set<CondFormatRef, CondFormatHash, CondFormatEquals> aDeduped{5, CondFormatHash(), CondFormatEquals{getStyles()}}; + for( auto it = maCondFormats.begin(); it != maCondFormats.end(); ) + { + auto pair = aDeduped.insert(*it); + // If the insert did not succeed, we have a duplicate, and we need to merge the ranges of this item + // into the existing ranges list. + if (!pair.second) + { + for (const auto & rRange : (*it)->maModel.maRanges) + (*pair.first)->maModel.maRanges.push_back(rRange); + it = maCondFormats.erase(it); + } + else + ++it; + } +} + CondFormatRef CondFormatBuffer::importCondFormatting( SequenceInputStream& rStrm ) { CondFormatRef xCondFmt = createCondFormat(); diff --git a/sc/source/filter/oox/condformatcontext.cxx b/sc/source/filter/oox/condformatcontext.cxx index 5da1f721ffc6..6f3f988d8abe 100644 --- a/sc/source/filter/oox/condformatcontext.cxx +++ b/sc/source/filter/oox/condformatcontext.cxx @@ -29,9 +29,9 @@ namespace oox::xls { using ::oox::core::ContextHandlerRef; -ColorScaleContext::ColorScaleContext( CondFormatContext& rFragment, CondFormatRuleRef xRule ) : +ColorScaleContext::ColorScaleContext( CondFormatContext& rFragment, CondFormatRule& rRule ) : WorksheetContextBase( rFragment ), - mxRule(std::move( xRule )) + mrRule( rRule ) { } @@ -57,17 +57,17 @@ void ColorScaleContext::onStartElement( const AttributeList& rAttribs ) switch( getCurrentElement() ) { case XLS_TOKEN( cfvo ): - mxRule->getColorScale()->importCfvo( rAttribs ); + mrRule.getColorScale()->importCfvo( rAttribs ); break; case XLS_TOKEN( color ): - mxRule->getColorScale()->importColor( rAttribs ); + mrRule.getColorScale()->importColor( rAttribs ); break; } } -DataBarContext::DataBarContext( CondFormatContext& rFragment, CondFormatRuleRef xRule ) : +DataBarContext::DataBarContext( CondFormatContext& rFragment, CondFormatRule& rRule ) : WorksheetContextBase( rFragment ), - mxRule(std::move( xRule )) + mrRule( rRule ) { } @@ -93,13 +93,13 @@ void DataBarContext::onStartElement( const AttributeList& rAttribs ) switch( getCurrentElement() ) { case XLS_TOKEN( dataBar ): - mxRule->getDataBar()->importAttribs( rAttribs ); + mrRule.getDataBar()->importAttribs( rAttribs ); break; case XLS_TOKEN( cfvo ): - mxRule->getDataBar()->importCfvo( rAttribs ); + mrRule.getDataBar()->importCfvo( rAttribs ); break; case XLS_TOKEN( color ): - mxRule->getDataBar()->importColor( rAttribs ); + mrRule.getDataBar()->importColor( rAttribs ); break; } } @@ -181,9 +181,9 @@ ContextHandlerRef CondFormatContext::onCreateContext( sal_Int32 nElement, const if (nElement == XLS_TOKEN( formula )) return this; else if (nElement == XLS_TOKEN( colorScale ) ) - return new ColorScaleContext( *this, mxRule ); + return new ColorScaleContext( *this, *mxRule ); else if (nElement == XLS_TOKEN( dataBar ) ) - return new DataBarContext( *this, mxRule ); + return new DataBarContext( *this, *mxRule ); else if (nElement == XLS_TOKEN( iconSet ) ) return new IconSetContext(*this, mxRule->getIconSet()); else if (nElement == XLS_TOKEN( extLst ) ) @@ -204,12 +204,7 @@ void CondFormatContext::onEndElement() break; case XLS_TOKEN( cfRule ): if (mxCondFmt && mxRule) - { - ScRangeList aRanges = mxCondFmt->getRanges(); - if ((aRanges.size() == 1 && aRanges.GetCellCount() == 1) || - !getCondFormats().insertRule(mxCondFmt, mxRule)) - mxCondFmt->insertRule(mxRule); - } + mxCondFmt->insertRule(std::move(mxRule)); break; } } diff --git a/sc/source/filter/oox/connectionsbuffer.cxx b/sc/source/filter/oox/connectionsbuffer.cxx index 9d8fddaf59e9..6da344c4ceb3 100644 --- a/sc/source/filter/oox/connectionsbuffer.cxx +++ b/sc/source/filter/oox/connectionsbuffer.cxx @@ -322,7 +322,7 @@ void Connection::importExtension(const AttributeList& rAttribs) } css::uno::Sequence<css::uno::Any> Connection::getSequenceOfAny( - css::uno::Reference<css::xml::sax::XFastAttributeList>& xFastAttributeList) + const css::uno::Reference<css::xml::sax::XFastAttributeList>& xFastAttributeList) { css::uno::Sequence<css::xml::FastAttribute> aFast = xFastAttributeList->getFastAttributes(); css::uno::Sequence<css::xml::Attribute> aUnk = xFastAttributeList->getUnknownAttributes(); diff --git a/sc/source/filter/oox/defnamesbuffer.cxx b/sc/source/filter/oox/defnamesbuffer.cxx index 06a6ec114787..78a186f46ffd 100644 --- a/sc/source/filter/oox/defnamesbuffer.cxx +++ b/sc/source/filter/oox/defnamesbuffer.cxx @@ -270,7 +270,12 @@ bool DefinedName::isValid( std::unique_ptr<ScTokenArray> DefinedName::getScTokens( const css::uno::Sequence<css::sheet::ExternalLinkInfo>& rExternalLinks ) { - ScCompiler aCompiler(getScDocument(), ScAddress(0, 0, mnCalcSheet), formula::FormulaGrammar::GRAM_OOXML); + // mnCalcSheet < 0 means global name and results in tab deleted when + // compiling a reference without sheet reference. For a global name it + // doesn't really matter which sheet is the position's default sheet if the + // reference doesn't specify any. tdf#164895 + ScCompiler aCompiler(getScDocument(), ScAddress(0, 0, (mnCalcSheet < 0 ? 0 : mnCalcSheet)), + formula::FormulaGrammar::GRAM_OOXML); aCompiler.SetExternalLinks( rExternalLinks); std::unique_ptr<ScTokenArray> pArray(aCompiler.CompileString(maModel.maFormula)); // Compile the tokens into RPN once to populate information into tokens diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx index 99a5e2ee27c6..d722b75a9837 100644 --- a/sc/source/filter/oox/formulabase.cxx +++ b/sc/source/filter/oox/formulabase.cxx @@ -894,9 +894,12 @@ const FunctionData saFuncTable2021[] = /* FIXME: BIFF?? function identifiers available? Where to obtain? */ const FunctionData saFuncTable2024[] = { - { "COM.MICROSOFT.CHOOSEROWS", "CHOOSEROWS", NOID, NOID, 2, MX, A, { VO }, FuncFlags::MACROCALL_NEW }, + { "COM.MICROSOFT.CHOOSECOLS", "CHOOSECOLS", NOID, NOID, 1, MX, A, { VO }, FuncFlags::MACROCALL_NEW }, + { "COM.MICROSOFT.CHOOSEROWS", "CHOOSEROWS", NOID, NOID, 1, MX, A, { VO }, FuncFlags::MACROCALL_NEW }, { "COM.MICROSOFT.DROP", "DROP", NOID, NOID, 1, 3, A, { VO }, FuncFlags::MACROCALL_NEW }, { "COM.MICROSOFT.EXPAND", "EXPAND", NOID, NOID, 2, 4, A, { VO }, FuncFlags::MACROCALL_NEW }, + { "COM.MICROSOFT.HSTACK", "HSTACK", NOID, NOID, 1, MX, A, { VO }, FuncFlags::MACROCALL_NEW }, + { "COM.MICROSOFT.VSTACK", "VSTACK", NOID, NOID, 1, MX, A, { VO }, FuncFlags::MACROCALL_NEW }, { "COM.MICROSOFT.TAKE", "TAKE", NOID, NOID, 1, 3, A, { VO }, FuncFlags::MACROCALL_NEW }, { "COM.MICROSOFT.TOCOL", "TOCOL", NOID, NOID, 1, 3, A, { VO }, FuncFlags::MACROCALL_NEW }, { "COM.MICROSOFT.TOROW", "TOROW", NOID, NOID, 1, 3, A, { VO }, FuncFlags::MACROCALL_NEW }, diff --git a/sc/source/filter/oox/pivottablebuffer.cxx b/sc/source/filter/oox/pivottablebuffer.cxx index b71652baadc2..995cca5d57eb 100644 --- a/sc/source/filter/oox/pivottablebuffer.cxx +++ b/sc/source/filter/oox/pivottablebuffer.cxx @@ -50,6 +50,7 @@ #include <oox/helper/propertyset.hxx> #include <oox/token/properties.hxx> #include <oox/token/tokens.hxx> +#include <sax/fastattribs.hxx> #include <addressconverter.hxx> #include <biffhelper.hxx> @@ -1285,17 +1286,15 @@ void PivotTable::finalizeImport() return; // global data pilot properties - PropertySet aDescProp(( css::uno::Reference< css::beans::XPropertySet >(mxDPDescriptor) )); - aDescProp.setProperty( PROP_ColumnGrand, maDefModel.mbColGrandTotals ); - aDescProp.setProperty( PROP_RowGrand, maDefModel.mbRowGrandTotals ); - aDescProp.setProperty( PROP_ShowFilterButton, false ); - aDescProp.setProperty( PROP_DrillDownOnDoubleClick, maDefModel.mbEnableDrill ); - - mpDPObject->SetHideHeader(maLocationModel.mnFirstHeaderRow == 0); - if (auto* pSaveData = mpDPObject->GetSaveData()) + { + pSaveData->SetColumnGrand(maDefModel.mbColGrandTotals); + pSaveData->SetRowGrand(maDefModel.mbRowGrandTotals); + pSaveData->SetDrillDown(maDefModel.mbEnableDrill); + pSaveData->SetFilterButton(false); pSaveData->SetExpandCollapse(maDefModel.mbShowDrill); - + } + mpDPObject->SetHideHeader(maLocationModel.mnFirstHeaderRow == 0); // finalize all fields, this finds field names and creates grouping fields finalizeFieldsImport(); diff --git a/sc/source/filter/oox/stylesbuffer.cxx b/sc/source/filter/oox/stylesbuffer.cxx index ab0af4cd2149..c3af8de44034 100644 --- a/sc/source/filter/oox/stylesbuffer.cxx +++ b/sc/source/filter/oox/stylesbuffer.cxx @@ -500,6 +500,37 @@ void FontModel::setBiffEscapement( sal_uInt16 nEscapement ) mnEscapement = STATIC_ARRAY_SELECT( spnEscapes, nEscapement, XML_baseline ); } +bool FontModel::operator==(const FontModel& rhs) const +{ + if (maName != rhs.maName) + return false; + if (maColor != rhs.maColor) + return false; + if (mnScheme != rhs.mnScheme) + return false; + if (mnFamily != rhs.mnFamily) + return false; + if (mnCharSet != rhs.mnCharSet) + return false; + if (mfHeight != rhs.mfHeight) + return false; + if (mnUnderline != rhs.mnUnderline) + return false; + if (mnEscapement != rhs.mnEscapement) + return false; + if (mbBold != rhs.mbBold) + return false; + if (mbItalic != rhs.mbItalic) + return false; + if (mbStrikeout != rhs.mbStrikeout) + return false; + if (mbOutline != rhs.mbOutline) + return false; + if (mbShadow != rhs.mbShadow) + return false; + return true; +} + ApiFontUsedFlags::ApiFontUsedFlags( bool bAllUsed ) : mbNameUsed( bAllUsed ), mbColorUsed( bAllUsed ), @@ -1442,6 +1473,17 @@ void BorderLineModel::setBiffStyle( sal_Int32 nLineStyle ) mnStyle = STATIC_ARRAY_SELECT( spnStyleIds, nLineStyle, XML_none ); } +bool BorderLineModel::operator==(const BorderLineModel& rhs) const +{ + if (maColor != rhs.maColor) + return false; + if (mnStyle != rhs.mnStyle) + return false; + if (mbUsed != rhs.mbUsed) + return false; + return true; +} + BorderModel::BorderModel( bool bDxf ) : maLeft( bDxf ), maRight( bDxf ), @@ -1699,6 +1741,25 @@ void PatternFillModel::setBiffPattern( sal_Int32 nPattern ) mnPattern = STATIC_ARRAY_SELECT( spnPatternIds, nPattern, XML_none ); } +bool PatternFillModel::operator==(const PatternFillModel& rhs) const +{ + if (maPatternColor != rhs.maPatternColor) + return false; + if (maFilterPatternColor != rhs.maFilterPatternColor) + return false; + if (maFillColor != rhs.maFillColor) + return false; + if (mnPattern != rhs.mnPattern) + return false; + if (mbPattColorUsed != rhs.mbPattColorUsed) + return false; + if (mbFillColorUsed != rhs.mbFillColorUsed) + return false; + if (mbPatternUsed != rhs.mbPatternUsed) + return false; + return true; +} + GradientFillModel::GradientFillModel() : mnType( XML_linear ), mfAngle( 0.0 ), diff --git a/sc/source/filter/oox/tablebuffer.cxx b/sc/source/filter/oox/tablebuffer.cxx index d43f32806a8c..132c0ee7e3aa 100644 --- a/sc/source/filter/oox/tablebuffer.cxx +++ b/sc/source/filter/oox/tablebuffer.cxx @@ -33,7 +33,7 @@ #include <addressconverter.hxx> #include <biffhelper.hxx> #include <docuno.hxx> - +#include <datauno.hxx> namespace oox::xls { using namespace ::com::sun::star::sheet; @@ -98,32 +98,29 @@ void Table::finalizeImport() { maDBRangeName = maModel.maDisplayName; - Reference< XDatabaseRange > xDatabaseRange( - createDatabaseRangeObject( maDBRangeName, maModel.maRange ), UNO_SET_THROW); + rtl::Reference<ScDatabaseRangeObj> xDatabaseRange = createDatabaseRangeObject(maDBRangeName, maModel.maRange ); ::css::table::CellRangeAddress aAddressRange = xDatabaseRange->getDataArea(); maDestRange = ScRange( aAddressRange.StartColumn, aAddressRange.StartRow, aAddressRange.Sheet, aAddressRange.EndColumn, aAddressRange.EndRow, aAddressRange.Sheet ); - PropertySet aPropSet( xDatabaseRange ); - // Default HasHeader is true at ScDBData. if (maModel.mnHeaderRows != 1) { SAL_WARN_IF( maModel.mnHeaderRows > 1, "sc.filter", "Table HeaderRows > 1 not supported: " << maModel.mnHeaderRows); if (maModel.mnHeaderRows == 0) - aPropSet.setProperty( PROP_ContainsHeader, false); + xDatabaseRange->setPropertyValue( u"ContainsHeader"_ustr, css::uno::Any(false)); } if (maModel.mnTotalsRows > 0) { SAL_WARN_IF( maModel.mnTotalsRows > 1, "sc.filter", "Table TotalsRows > 1 not supported: " << maModel.mnTotalsRows); - aPropSet.setProperty( PROP_TotalsRow, true); + xDatabaseRange->setPropertyValue( u"TotalsRow"_ustr, css::uno::Any(true)); } // get formula token index of the database range - if( !aPropSet.getProperty( mnTokenIndex, PROP_TokenIndex ) ) + if( !(xDatabaseRange->getPropertyValue(u"TokenIndex"_ustr) >>= mnTokenIndex)) mnTokenIndex = -1; } catch( Exception& ) diff --git a/sc/source/filter/oox/workbookfragment.cxx b/sc/source/filter/oox/workbookfragment.cxx index 805c175f6456..91025369aad2 100644 --- a/sc/source/filter/oox/workbookfragment.cxx +++ b/sc/source/filter/oox/workbookfragment.cxx @@ -63,6 +63,7 @@ #include <vcl/timer.hxx> #include <vcl/weld.hxx> +#include <config_emscripten.h> #include <oox/core/fastparser.hxx> #include <svx/svdpage.hxx> #include <comphelper/threadpool.hxx> @@ -331,6 +332,12 @@ void importSheetFragments( WorkbookFragment& rWorkbookHandler, SheetFragmentVect nSheetsLeft++; } +#if defined EMSCRIPTEN && !HAVE_EMSCRIPTEN_JSPI + // Hack around Application::Yield() deliberately calling std::abort() in the standard (non-JSPI) + // Emscripten case; so instead of yielding (which implicitly releases the SolarMutex), just + // release the SolarMutex so that the WorkerThreads can proceed: + SolarMutexReleaser rel; +#else // coverity[loop_top] - this isn't an infinite loop where nSheetsLeft gets decremented by the above threads while( nSheetsLeft > 0 && !Application::IsQuit()) { @@ -339,6 +346,7 @@ void importSheetFragments( WorkbookFragment& rWorkbookHandler, SheetFragmentVect // bar updating. Application::Yield(); } +#endif rSharedPool.waitUntilDone(pTag); // threads joined in ThreadPool destructor diff --git a/sc/source/filter/oox/workbookhelper.cxx b/sc/source/filter/oox/workbookhelper.cxx index 4ac887c26c40..b124763b4a4d 100644 --- a/sc/source/filter/oox/workbookhelper.cxx +++ b/sc/source/filter/oox/workbookhelper.cxx @@ -31,6 +31,7 @@ #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> #include <com/sun/star/document/XViewDataSupplier.hpp> #include <comphelper/servicehelper.hxx> +#include <comphelper/diagnose_ex.hxx> #include <o3tl/any.hxx> #include <osl/thread.h> #include <osl/diagnose.h> @@ -60,6 +61,7 @@ #include <docsh.hxx> #include <document.hxx> #include <docuno.hxx> +#include <dbdocfun.hxx> #include <rangenam.hxx> #include <tokenarray.hxx> #include <tokenuno.hxx> @@ -159,7 +161,7 @@ public: /** Creates and returns a defined name on the-fly in the correct Calc sheet. */ WorkbookHelper::RangeDataRet createLocalNamedRangeObject(OUString& orName, sal_Int32 nIndex, sal_Int32 nNameFlags, sal_Int32 nTab); /** Creates and returns a database range on-the-fly in the Calc document. */ - Reference< XDatabaseRange > createDatabaseRangeObject( OUString& orName, const ScRange& rRangeAddr ); + rtl::Reference<ScDatabaseRangeObj> createDatabaseRangeObject( OUString& orName, const ScRange& rRangeAddr ); /** Creates and returns an unnamed database range on-the-fly in the Calc document. */ Reference< XDatabaseRange > createUnnamedDatabaseRangeObject( const ScRange& rRangeAddr ); /** Finds the (already existing) database range of the given formula token index. */ @@ -444,31 +446,38 @@ WorkbookHelper::RangeDataRet WorkbookGlobals::createLocalNamedRangeObject( return aScRangeData; } -Reference< XDatabaseRange > WorkbookGlobals::createDatabaseRangeObject( OUString& orName, const ScRange& rRangeAddr ) +rtl::Reference<ScDatabaseRangeObj> WorkbookGlobals::createDatabaseRangeObject( OUString& orName, const ScRange& rRangeAddr ) { // validate cell range ScRange aDestRange = rRangeAddr; bool bValidRange = getAddressConverter().validateCellRange( aDestRange, true, true ); + ScDocShell* pDocSh = getScDocument().GetDocumentShell(); // create database range and insert it into the Calc document - Reference< XDatabaseRange > xDatabaseRange; - if( bValidRange && !orName.isEmpty() ) try + if( bValidRange && !orName.isEmpty() && pDocSh) try { // find an unused name - PropertySet aDocProps(( Reference< css::beans::XPropertySet >(mxDoc) )); - Reference< XDatabaseRanges > xDatabaseRanges( aDocProps.getAnyProperty( PROP_DatabaseRanges ), UNO_QUERY_THROW ); - orName = ContainerHelper::getUnusedName( xDatabaseRanges, orName, '_' ); + OUString aNewName = orName; + sal_Int32 nIndex = -1; + ScDBCollection* pNames = pDocSh->GetDocument().GetDBCollection(); + while (pNames && pNames->getNamedDBs().findByUpperName(ScGlobal::getCharClass().uppercase(aNewName)) != nullptr ) + aNewName = orName + OUStringChar('_') + OUString::number( nIndex++ ); + orName = aNewName; // create the database range CellRangeAddress aApiRange( aDestRange.aStart.Tab(), aDestRange.aStart.Col(), aDestRange.aStart.Row(), aDestRange.aEnd.Col(), aDestRange.aEnd.Row() ); - xDatabaseRanges->addNewByName( orName, aApiRange ); - xDatabaseRange.set( xDatabaseRanges->getByName( orName ), UNO_QUERY ); + ScDBDocFunc aFunc(*pDocSh); + ScRange aNameRange( static_cast<SCCOL>(aApiRange.StartColumn), static_cast<SCROW>(aApiRange.StartRow), aApiRange.Sheet, + static_cast<SCCOL>(aApiRange.EndColumn), static_cast<SCROW>(aApiRange.EndRow), aApiRange.Sheet ); + if(!( aFunc.AddDBRange( orName, aNameRange ) )) + throw RuntimeException(u"Could not add database range"_ustr); + return new ScDatabaseRangeObj(pDocSh, orName); } catch( Exception& ) { + DBG_UNHANDLED_EXCEPTION("sc"); } - OSL_ENSURE( xDatabaseRange.is(), "WorkbookGlobals::createDatabaseRangeObject - cannot create database range" ); - return xDatabaseRange; + return {}; } Reference< XDatabaseRange > WorkbookGlobals::createUnnamedDatabaseRangeObject( const ScRange& rRangeAddr ) @@ -914,7 +923,7 @@ WorkbookHelper::RangeDataRet WorkbookHelper::createLocalNamedRangeObject(OUStrin return mrBookGlob.createLocalNamedRangeObject(orName, nIndex, nNameFlags, nTab); } -Reference< XDatabaseRange > WorkbookHelper::createDatabaseRangeObject( OUString& orName, const ScRange& rRangeAddr ) const +rtl::Reference<ScDatabaseRangeObj> WorkbookHelper::createDatabaseRangeObject( OUString& orName, const ScRange& rRangeAddr ) const { return mrBookGlob.createDatabaseRangeObject( orName, rRangeAddr ); } diff --git a/sc/source/filter/orcus/autofilter.cxx b/sc/source/filter/orcus/autofilter.cxx new file mode 100644 index 000000000000..02f976423162 --- /dev/null +++ b/sc/source/filter/orcus/autofilter.cxx @@ -0,0 +1,295 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <orcus_autofilter.hxx> +#include <orcus_global.hxx> +#include <dbdata.hxx> +#include <globalnames.hxx> +#include <queryparam.hxx> + +#include <svl/sharedstringpool.hxx> + +#include <memory> + +namespace os = orcus::spreadsheet; + +namespace +{ +ScQueryConnect toQueryConnect(os::auto_filter_node_op_t op) +{ + switch (op) + { + case os::auto_filter_node_op_t::op_and: + return SC_AND; + case os::auto_filter_node_op_t::op_or: + return SC_OR; + case os::auto_filter_node_op_t::unspecified:; + } + + throw std::runtime_error("filter node operator type is not specified"); +} + +void setQueryOp(ScQueryEntry& rEntry, os::auto_filter_op_t op) +{ + switch (op) + { + case os::auto_filter_op_t::empty: + rEntry.bDoQuery = true; + rEntry.SetQueryByEmpty(); + break; + case os::auto_filter_op_t::not_empty: + rEntry.bDoQuery = true; + rEntry.SetQueryByNonEmpty(); + break; + case os::auto_filter_op_t::equal: + rEntry.bDoQuery = true; + rEntry.eOp = SC_EQUAL; + break; + case os::auto_filter_op_t::not_equal: + rEntry.bDoQuery = true; + rEntry.eOp = SC_NOT_EQUAL; + break; + case os::auto_filter_op_t::contain: + rEntry.bDoQuery = true; + rEntry.eOp = SC_CONTAINS; + break; + case os::auto_filter_op_t::not_contain: + rEntry.bDoQuery = true; + rEntry.eOp = SC_DOES_NOT_CONTAIN; + break; + case os::auto_filter_op_t::begin_with: + rEntry.bDoQuery = true; + rEntry.eOp = SC_BEGINS_WITH; + break; + case os::auto_filter_op_t::not_begin_with: + rEntry.bDoQuery = true; + rEntry.eOp = SC_DOES_NOT_BEGIN_WITH; + break; + case os::auto_filter_op_t::end_with: + rEntry.bDoQuery = true; + rEntry.eOp = SC_ENDS_WITH; + break; + case os::auto_filter_op_t::not_end_with: + rEntry.bDoQuery = true; + rEntry.eOp = SC_DOES_NOT_END_WITH; + break; + case os::auto_filter_op_t::greater: + rEntry.bDoQuery = true; + rEntry.eOp = SC_GREATER; + break; + case os::auto_filter_op_t::greater_equal: + rEntry.bDoQuery = true; + rEntry.eOp = SC_GREATER_EQUAL; + break; + case os::auto_filter_op_t::less: + rEntry.bDoQuery = true; + rEntry.eOp = SC_LESS; + break; + case os::auto_filter_op_t::less_equal: + rEntry.bDoQuery = true; + rEntry.eOp = SC_LESS_EQUAL; + break; + case os::auto_filter_op_t::top: + rEntry.bDoQuery = true; + rEntry.eOp = SC_TOPVAL; + break; + case os::auto_filter_op_t::bottom: + rEntry.bDoQuery = true; + rEntry.eOp = SC_BOTVAL; + break; + case os::auto_filter_op_t::top_percent: + rEntry.bDoQuery = true; + rEntry.eOp = SC_TOPPERC; + break; + case os::auto_filter_op_t::bottom_percent: + rEntry.bDoQuery = true; + rEntry.eOp = SC_BOTPERC; + break; + case os::auto_filter_op_t::top_percent_range: + case os::auto_filter_op_t::bottom_percent_range: + case os::auto_filter_op_t::unspecified: + rEntry.bDoQuery = false; + break; + } +} +} + +ScOrcusAutoFilterMultiValues::ScOrcusAutoFilterMultiValues(ScDocument& rDoc, + const ScOrcusGlobalSettings& rGS) + : mrDoc(rDoc) + , mrGlobalSettings(rGS) +{ +} + +void ScOrcusAutoFilterMultiValues::add_value(std::string_view value) +{ + OUString aStr(value.data(), value.size(), mrGlobalSettings.getTextEncoding()); + + ScQueryEntry::Item aItem; + aItem.maString = mrDoc.GetSharedStringPool().intern(aStr); + aItem.meType = ScQueryEntry::ByString; + + maEntry.GetQueryItems().push_back(aItem); +} + +void ScOrcusAutoFilterMultiValues::commit() { maCommitFunc(std::move(maEntry)); } + +void ScOrcusAutoFilterMultiValues::reset(commitFuncType func) +{ + maEntry.Clear(); + maEntry.bDoQuery = true; + maCommitFunc = std::move(func); +} + +ScOrcusAutoFilterNode::ScOrcusAutoFilterNode(ScDocument& rDoc, const ScOrcusGlobalSettings& rGS) + : mrDoc(rDoc) + , mrGlobalSettings(rGS) + , maMultiValues(rDoc, rGS) +{ +} + +void ScOrcusAutoFilterNode::append_item(os::col_t field, os::auto_filter_op_t op, double value) +{ + ScQueryEntry aEntry; + aEntry.nField = mnStartCol + field; + aEntry.eConnect = meConn; + setQueryOp(aEntry, op); + aEntry.GetQueryItem().meType = ScQueryEntry::ByValue; + aEntry.GetQueryItem().mfVal = value; + + maEntries.push_back(aEntry); +} + +void ScOrcusAutoFilterNode::append_item(os::col_t field, os::auto_filter_op_t op, + std::string_view value, bool regex) +{ + ScQueryEntry aEntry; + aEntry.nField = mnStartCol + field; + aEntry.eConnect = meConn; + setQueryOp(aEntry, op); + aEntry.GetQueryItem().meType = ScQueryEntry::ByString; + + OUString aStr(value.data(), value.size(), mrGlobalSettings.getTextEncoding()); + aEntry.GetQueryItem().maString = mrDoc.GetSharedStringPool().intern(aStr); + + maEntries.push_back(aEntry); + + if (regex) + mbHasRegex = true; +} + +void ScOrcusAutoFilterNode::append_item(os::col_t field, os::auto_filter_op_t op) +{ + ScQueryEntry aEntry; + aEntry.nField = mnStartCol + field; + aEntry.eConnect = meConn; + setQueryOp(aEntry, op); + + maEntries.push_back(aEntry); +} + +os::iface::import_auto_filter_node* ScOrcusAutoFilterNode::start_node(os::auto_filter_node_op_t op) +{ + auto func = [this](std::vector<ScQueryEntry> aEntries, bool bHasRegex) { + if (aEntries.empty()) + return; + + aEntries[0].eConnect = meConn; + + for (auto& rEntry : aEntries) + maEntries.push_back(std::move(rEntry)); + + if (bHasRegex) + mbHasRegex = true; + }; + + mxChild = std::make_unique<ScOrcusAutoFilterNode>(mrDoc, mrGlobalSettings); + mxChild->reset(mnStartCol, toQueryConnect(op), std::move(func)); + return mxChild.get(); +} + +os::iface::import_auto_filter_multi_values* +ScOrcusAutoFilterNode::start_multi_values(os::col_t field) +{ + auto func = [this, field](ScQueryEntry aEntry) { + aEntry.nField = mnStartCol + field; + maEntries.push_back(std::move(aEntry)); + }; + + maMultiValues.reset(std::move(func)); + return &maMultiValues; +} + +void ScOrcusAutoFilterNode::commit() { maCommitFunc(std::move(maEntries), mbHasRegex); } + +void ScOrcusAutoFilterNode::reset(SCCOL nStartCol, ScQueryConnect eConn, commitFuncType func) +{ + mnStartCol = nStartCol; + meConn = eConn; + + mxChild.reset(); + maEntries.clear(); + maCommitFunc = std::move(func); +} + +ScOrcusAutoFilter::ScOrcusAutoFilter(ScDocumentImport& rDoc, const ScOrcusGlobalSettings& rGS, + SCTAB nTab) + : mrDoc(rDoc) + , maNode(rDoc.getDoc(), rGS) + , mnTab(nTab) + , mnCol1(-1) + , mnCol2(-1) + , mnRow1(-1) + , mnRow2(-1) +{ +} + +ScOrcusAutoFilter::~ScOrcusAutoFilter() = default; + +os::iface::import_auto_filter_node* ScOrcusAutoFilter::start_node(os::auto_filter_node_op_t op) +{ + ScDBData& rData = *mxData; + auto func = [&rData](std::vector<ScQueryEntry> aEntries, bool bHasRegex) { + ScQueryParam aParam; + + if (bHasRegex) + aParam.eSearchType = utl::SearchParam::SearchType::Regexp; + + for (auto& rEntry : aEntries) + aParam.AppendEntry() = std::move(rEntry); + + rData.SetQueryParam(aParam); + }; + + maNode.reset(mnCol1, toQueryConnect(op), std::move(func)); + return &maNode; +} + +void ScOrcusAutoFilter::commit() +{ + auto& rDoc = mrDoc.getDoc(); + rDoc.SetAnonymousDBData(mnTab, std::move(mxData)); + + for (SCCOL nCol = mnCol1; nCol <= mnCol2; ++nCol) + { + auto nFlag = rDoc.GetAttr(nCol, mnRow1, mnTab, ATTR_MERGE_FLAG)->GetValue(); + rDoc.ApplyAttr(nCol, mnRow1, mnTab, ScMergeFlagAttr(nFlag | ScMF::Auto)); + } +} + +void ScOrcusAutoFilter::reset(const os::range_t& range) +{ + mnCol1 = range.first.column; + mnCol2 = range.last.column; + mnRow1 = range.first.row; + mnRow2 = range.last.row; + + mxData = std::make_unique<ScDBData>(STR_DB_LOCAL_NONAME, mnTab, mnCol1, mnRow1, mnCol2, mnRow2); + mxData->SetAutoFilter(true); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/orcus/filterdetect.cxx b/sc/source/filter/orcus/filterdetect.cxx index 0b11bf2dff3e..6d04089e7ee3 100644 --- a/sc/source/filter/orcus/filterdetect.cxx +++ b/sc/source/filter/orcus/filterdetect.cxx @@ -19,32 +19,32 @@ #include <orcus/format_detection.hpp> -namespace com::sun::star::uno { class XComponentContext; } - -namespace { +namespace com::sun::star::uno +{ +class XComponentContext; +} -class OrcusFormatDetect : public ::cppu::WeakImplHelper< - css::document::XExtendedFilterDetection, - css::lang::XServiceInfo > +namespace +{ +class OrcusFormatDetect : public ::cppu::WeakImplHelper<css::document::XExtendedFilterDetection, + css::lang::XServiceInfo> { public: - explicit OrcusFormatDetect(); + explicit OrcusFormatDetect(); virtual OUString SAL_CALL getImplementationName() override; virtual sal_Bool SAL_CALL supportsService(const OUString& rServiceName) override; - virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; + virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override; virtual OUString SAL_CALL - detect( css::uno::Sequence< css::beans::PropertyValue >& rMediaDescSeq ) override; + detect(css::uno::Sequence<css::beans::PropertyValue>& rMediaDescSeq) override; private: }; -OrcusFormatDetect::OrcusFormatDetect() -{ -} +OrcusFormatDetect::OrcusFormatDetect() {} OUString OrcusFormatDetect::getImplementationName() { @@ -58,23 +58,25 @@ sal_Bool OrcusFormatDetect::supportsService(const OUString& rServiceName) css::uno::Sequence<OUString> OrcusFormatDetect::getSupportedServiceNames() { - return {u"com.sun.star.frame.ExtendedTypeDetection"_ustr}; + return { u"com.sun.star.frame.ExtendedTypeDetection"_ustr }; } OUString OrcusFormatDetect::detect(css::uno::Sequence<css::beans::PropertyValue>& rMediaDescSeq) { - utl::MediaDescriptor aMediaDescriptor( rMediaDescSeq ); - bool bAborted = aMediaDescriptor.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_ABORTED, false); + utl::MediaDescriptor aMediaDescriptor(rMediaDescSeq); + bool bAborted + = aMediaDescriptor.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_ABORTED, false); if (bAborted) return OUString(); - css::uno::Reference<css::io::XInputStream> xInputStream(aMediaDescriptor[utl::MediaDescriptor::PROP_INPUTSTREAM], css::uno::UNO_QUERY ); + css::uno::Reference<css::io::XInputStream> xInputStream( + aMediaDescriptor[utl::MediaDescriptor::PROP_INPUTSTREAM], css::uno::UNO_QUERY); SvMemoryStream aContent(xInputStream->available()); static const sal_Int32 nBytes = 4096; css::uno::Sequence<sal_Int8> aSeq(nBytes); bool bEnd = false; - while(!bEnd) + while (!bEnd) { sal_Int32 nReadBytes = xInputStream->readBytes(aSeq, nBytes); bEnd = (nReadBytes != nBytes); @@ -92,18 +94,16 @@ OUString OrcusFormatDetect::detect(css::uno::Sequence<css::beans::PropertyValue> return u"calc_MS_Excel_2003_XML"_ustr; case orcus::format_t::parquet: return u"Apache Parquet"_ustr; - default: - ; + default:; } return OUString(); } - } extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* -com_sun_star_comp_sc_OrcusFormatDetect_get_implementation(css::uno::XComponentContext* , - css::uno::Sequence<css::uno::Any> const &) +com_sun_star_comp_sc_OrcusFormatDetect_get_implementation(css::uno::XComponentContext*, + css::uno::Sequence<css::uno::Any> const&) { return cppu::acquire(new OrcusFormatDetect()); } diff --git a/sc/source/filter/orcus/global.cxx b/sc/source/filter/orcus/global.cxx new file mode 100644 index 000000000000..a486ed8859ad --- /dev/null +++ b/sc/source/filter/orcus/global.cxx @@ -0,0 +1,118 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <orcus_global.hxx> + +#include <frozen/unordered_map.h> + +using namespace com::sun::star; + +namespace os = orcus::spreadsheet; + +formula::FormulaGrammar::Grammar getCalcGrammarFromOrcus(os::formula_grammar_t grammar) +{ + formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_ODFF; + switch (grammar) + { + case orcus::spreadsheet::formula_grammar_t::ods: + eGrammar = formula::FormulaGrammar::GRAM_ODFF; + break; + case orcus::spreadsheet::formula_grammar_t::xlsx: + eGrammar = formula::FormulaGrammar::GRAM_OOXML; + break; + case orcus::spreadsheet::formula_grammar_t::gnumeric: + eGrammar = formula::FormulaGrammar::GRAM_ENGLISH_XL_A1; + break; + case orcus::spreadsheet::formula_grammar_t::xls_xml: + eGrammar = formula::FormulaGrammar::GRAM_ENGLISH_XL_R1C1; + break; + case orcus::spreadsheet::formula_grammar_t::unknown: + break; + } + + return eGrammar; +} + +ScOrcusGlobalSettings::ScOrcusGlobalSettings(ScDocumentImport& rDoc) + : mrDoc(rDoc) + , meCalcGrammar(formula::FormulaGrammar::GRAM_UNSPECIFIED) + , meOrcusGrammar(os::formula_grammar_t::unknown) + , mnTextEncoding(RTL_TEXTENCODING_UTF8) +{ +} + +void ScOrcusGlobalSettings::set_origin_date(int year, int month, int day) +{ + mrDoc.setOriginDate(year, month, day); +} + +void ScOrcusGlobalSettings::set_character_set(orcus::character_set_t cs) +{ + // Keep the entries sorted by the key. + static constexpr auto rules + = frozen::make_unordered_map<orcus::character_set_t, rtl_TextEncoding>({ + { orcus::character_set_t::big5, RTL_TEXTENCODING_BIG5 }, + { orcus::character_set_t::euc_jp, RTL_TEXTENCODING_EUC_JP }, + { orcus::character_set_t::euc_kr, RTL_TEXTENCODING_EUC_KR }, + { orcus::character_set_t::gb2312, RTL_TEXTENCODING_GB_2312 }, + { orcus::character_set_t::gbk, RTL_TEXTENCODING_GBK }, + { orcus::character_set_t::iso_2022_cn, RTL_TEXTENCODING_ISO_2022_CN }, + { orcus::character_set_t::iso_2022_cn_ext, RTL_TEXTENCODING_ISO_2022_CN }, + { orcus::character_set_t::iso_2022_jp, RTL_TEXTENCODING_ISO_2022_JP }, + { orcus::character_set_t::iso_2022_jp_2, RTL_TEXTENCODING_ISO_2022_JP }, + { orcus::character_set_t::iso_8859_1, RTL_TEXTENCODING_ISO_8859_1 }, + { orcus::character_set_t::iso_8859_14, RTL_TEXTENCODING_ISO_8859_14 }, + { orcus::character_set_t::iso_8859_15, RTL_TEXTENCODING_ISO_8859_15 }, + { orcus::character_set_t::iso_8859_1_windows_3_0_latin_1, RTL_TEXTENCODING_ISO_8859_1 }, + { orcus::character_set_t::iso_8859_1_windows_3_1_latin_1, RTL_TEXTENCODING_ISO_8859_1 }, + { orcus::character_set_t::iso_8859_2, RTL_TEXTENCODING_ISO_8859_2 }, + { orcus::character_set_t::iso_8859_2_windows_latin_2, RTL_TEXTENCODING_ISO_8859_2 }, + { orcus::character_set_t::iso_8859_3, RTL_TEXTENCODING_ISO_8859_3 }, + { orcus::character_set_t::iso_8859_4, RTL_TEXTENCODING_ISO_8859_4 }, + { orcus::character_set_t::iso_8859_5, RTL_TEXTENCODING_ISO_8859_5 }, + { orcus::character_set_t::iso_8859_6, RTL_TEXTENCODING_ISO_8859_6 }, + { orcus::character_set_t::iso_8859_6_e, RTL_TEXTENCODING_ISO_8859_6 }, + { orcus::character_set_t::iso_8859_6_i, RTL_TEXTENCODING_ISO_8859_6 }, + { orcus::character_set_t::iso_8859_7, RTL_TEXTENCODING_ISO_8859_7 }, + { orcus::character_set_t::iso_8859_8, RTL_TEXTENCODING_ISO_8859_8 }, + { orcus::character_set_t::iso_8859_8_e, RTL_TEXTENCODING_ISO_8859_8 }, + { orcus::character_set_t::iso_8859_8_i, RTL_TEXTENCODING_ISO_8859_8 }, + { orcus::character_set_t::iso_8859_9, RTL_TEXTENCODING_ISO_8859_9 }, + { orcus::character_set_t::iso_8859_9_windows_latin_5, RTL_TEXTENCODING_ISO_8859_9 }, + { orcus::character_set_t::jis_x0201, RTL_TEXTENCODING_JIS_X_0201 }, + { orcus::character_set_t::jis_x0212_1990, RTL_TEXTENCODING_JIS_X_0212 }, + { orcus::character_set_t::shift_jis, RTL_TEXTENCODING_SHIFT_JIS }, + { orcus::character_set_t::us_ascii, RTL_TEXTENCODING_ASCII_US }, + { orcus::character_set_t::utf_7, RTL_TEXTENCODING_UTF7 }, + { orcus::character_set_t::utf_8, RTL_TEXTENCODING_UTF8 }, + { orcus::character_set_t::windows_1250, RTL_TEXTENCODING_MS_1250 }, + { orcus::character_set_t::windows_1251, RTL_TEXTENCODING_MS_1251 }, + { orcus::character_set_t::windows_1252, RTL_TEXTENCODING_MS_1252 }, + { orcus::character_set_t::windows_1253, RTL_TEXTENCODING_MS_1253 }, + { orcus::character_set_t::windows_1254, RTL_TEXTENCODING_MS_1254 }, + { orcus::character_set_t::windows_1255, RTL_TEXTENCODING_MS_1255 }, + { orcus::character_set_t::windows_1256, RTL_TEXTENCODING_MS_1256 }, + { orcus::character_set_t::windows_1257, RTL_TEXTENCODING_MS_1257 }, + { orcus::character_set_t::windows_1258, RTL_TEXTENCODING_MS_1258 }, + }); + + if (auto it = rules.find(cs); it != rules.end()) + mnTextEncoding = it->second; +} + +void ScOrcusGlobalSettings::set_default_formula_grammar(os::formula_grammar_t grammar) +{ + meCalcGrammar = getCalcGrammarFromOrcus(grammar); + meOrcusGrammar = grammar; +} + +orcus::spreadsheet::formula_grammar_t ScOrcusGlobalSettings::get_default_formula_grammar() const +{ + return meOrcusGrammar; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx index e4b5667643b5..3c5a7da94620 100644 --- a/sc/source/filter/orcus/interface.cxx +++ b/sc/source/filter/orcus/interface.cxx @@ -38,6 +38,7 @@ #include <editeng/crossedoutitem.hxx> #include <editeng/justifyitem.hxx> #include <editeng/eeitem.hxx> +#include <editeng/escapementitem.hxx> #include <svl/sharedstringpool.hxx> #include <svl/numformat.hxx> @@ -56,128 +57,23 @@ #include <unordered_map> #include <frozen/bits/defines.h> #include <frozen/bits/elsa_std.h> -#include <frozen/unordered_map.h> using namespace com::sun::star; namespace os = orcus::spreadsheet; -namespace { - -formula::FormulaGrammar::Grammar getCalcGrammarFromOrcus( os::formula_grammar_t grammar ) +ScOrcusRefResolver::ScOrcusRefResolver(const ScOrcusGlobalSettings& rGS) + : mrGlobalSettings(rGS) { - formula::FormulaGrammar::Grammar eGrammar = formula::FormulaGrammar::GRAM_ODFF; - switch(grammar) - { - case orcus::spreadsheet::formula_grammar_t::ods: - eGrammar = formula::FormulaGrammar::GRAM_ODFF; - break; - case orcus::spreadsheet::formula_grammar_t::xlsx: - eGrammar = formula::FormulaGrammar::GRAM_OOXML; - break; - case orcus::spreadsheet::formula_grammar_t::gnumeric: - eGrammar = formula::FormulaGrammar::GRAM_ENGLISH_XL_A1; - break; - case orcus::spreadsheet::formula_grammar_t::xls_xml: - eGrammar = formula::FormulaGrammar::GRAM_ENGLISH_XL_R1C1; - break; - case orcus::spreadsheet::formula_grammar_t::unknown: - break; - } - - return eGrammar; } -} - -ScOrcusGlobalSettings::ScOrcusGlobalSettings(ScDocumentImport& rDoc) - : mrDoc(rDoc) - , meCalcGrammar(formula::FormulaGrammar::GRAM_UNSPECIFIED) - , meOrcusGrammar(os::formula_grammar_t::unknown) - , mnTextEncoding(RTL_TEXTENCODING_UTF8) -{ -} - -void ScOrcusGlobalSettings::set_origin_date(int year, int month, int day) -{ - mrDoc.setOriginDate(year, month, day); -} - -void ScOrcusGlobalSettings::set_character_set(orcus::character_set_t cs) -{ - // Keep the entries sorted by the key. - static constexpr auto rules = frozen::make_unordered_map<orcus::character_set_t, rtl_TextEncoding>({ - { orcus::character_set_t::big5, RTL_TEXTENCODING_BIG5 }, - { orcus::character_set_t::euc_jp, RTL_TEXTENCODING_EUC_JP }, - { orcus::character_set_t::euc_kr, RTL_TEXTENCODING_EUC_KR }, - { orcus::character_set_t::gb2312, RTL_TEXTENCODING_GB_2312 }, - { orcus::character_set_t::gbk, RTL_TEXTENCODING_GBK }, - { orcus::character_set_t::iso_2022_cn, RTL_TEXTENCODING_ISO_2022_CN }, - { orcus::character_set_t::iso_2022_cn_ext, RTL_TEXTENCODING_ISO_2022_CN }, - { orcus::character_set_t::iso_2022_jp, RTL_TEXTENCODING_ISO_2022_JP }, - { orcus::character_set_t::iso_2022_jp_2, RTL_TEXTENCODING_ISO_2022_JP }, - { orcus::character_set_t::iso_8859_1, RTL_TEXTENCODING_ISO_8859_1 }, - { orcus::character_set_t::iso_8859_14, RTL_TEXTENCODING_ISO_8859_14 }, - { orcus::character_set_t::iso_8859_15, RTL_TEXTENCODING_ISO_8859_15 }, - { orcus::character_set_t::iso_8859_1_windows_3_0_latin_1, RTL_TEXTENCODING_ISO_8859_1 }, - { orcus::character_set_t::iso_8859_1_windows_3_1_latin_1, RTL_TEXTENCODING_ISO_8859_1 }, - { orcus::character_set_t::iso_8859_2, RTL_TEXTENCODING_ISO_8859_2 }, - { orcus::character_set_t::iso_8859_2_windows_latin_2, RTL_TEXTENCODING_ISO_8859_2 }, - { orcus::character_set_t::iso_8859_3, RTL_TEXTENCODING_ISO_8859_3 }, - { orcus::character_set_t::iso_8859_4, RTL_TEXTENCODING_ISO_8859_4 }, - { orcus::character_set_t::iso_8859_5, RTL_TEXTENCODING_ISO_8859_5 }, - { orcus::character_set_t::iso_8859_6, RTL_TEXTENCODING_ISO_8859_6 }, - { orcus::character_set_t::iso_8859_6_e, RTL_TEXTENCODING_ISO_8859_6 }, - { orcus::character_set_t::iso_8859_6_i, RTL_TEXTENCODING_ISO_8859_6 }, - { orcus::character_set_t::iso_8859_7, RTL_TEXTENCODING_ISO_8859_7 }, - { orcus::character_set_t::iso_8859_8, RTL_TEXTENCODING_ISO_8859_8 }, - { orcus::character_set_t::iso_8859_8_e, RTL_TEXTENCODING_ISO_8859_8 }, - { orcus::character_set_t::iso_8859_8_i, RTL_TEXTENCODING_ISO_8859_8 }, - { orcus::character_set_t::iso_8859_9, RTL_TEXTENCODING_ISO_8859_9 }, - { orcus::character_set_t::iso_8859_9_windows_latin_5, RTL_TEXTENCODING_ISO_8859_9 }, - { orcus::character_set_t::jis_x0201, RTL_TEXTENCODING_JIS_X_0201 }, - { orcus::character_set_t::jis_x0212_1990, RTL_TEXTENCODING_JIS_X_0212 }, - { orcus::character_set_t::shift_jis, RTL_TEXTENCODING_SHIFT_JIS }, - { orcus::character_set_t::us_ascii, RTL_TEXTENCODING_ASCII_US }, - { orcus::character_set_t::utf_7, RTL_TEXTENCODING_UTF7 }, - { orcus::character_set_t::utf_8, RTL_TEXTENCODING_UTF8 }, - { orcus::character_set_t::windows_1250, RTL_TEXTENCODING_MS_1250 }, - { orcus::character_set_t::windows_1251, RTL_TEXTENCODING_MS_1251 }, - { orcus::character_set_t::windows_1252, RTL_TEXTENCODING_MS_1252 }, - { orcus::character_set_t::windows_1253, RTL_TEXTENCODING_MS_1253 }, - { orcus::character_set_t::windows_1254, RTL_TEXTENCODING_MS_1254 }, - { orcus::character_set_t::windows_1255, RTL_TEXTENCODING_MS_1255 }, - { orcus::character_set_t::windows_1256, RTL_TEXTENCODING_MS_1256 }, - { orcus::character_set_t::windows_1257, RTL_TEXTENCODING_MS_1257 }, - { orcus::character_set_t::windows_1258, RTL_TEXTENCODING_MS_1258 }, - }); - - if (auto it = rules.find(cs); it != rules.end()) - mnTextEncoding = it->second; -} - -void ScOrcusGlobalSettings::set_default_formula_grammar(os::formula_grammar_t grammar) -{ - meCalcGrammar = getCalcGrammarFromOrcus(grammar); - meOrcusGrammar = grammar; -} - -orcus::spreadsheet::formula_grammar_t ScOrcusGlobalSettings::get_default_formula_grammar() const -{ - return meOrcusGrammar; -} - -ScOrcusRefResolver::ScOrcusRefResolver( const ScOrcusGlobalSettings& rGS ) : - mrGlobalSettings(rGS) {} - os::src_address_t ScOrcusRefResolver::resolve_address(std::string_view address) { OUString aStr(address.data(), address.size(), mrGlobalSettings.getTextEncoding()); ScAddress aAddr; aAddr.Parse(aStr, mrGlobalSettings.getDoc().getDoc(), - formula::FormulaGrammar::extractRefConvention( - mrGlobalSettings.getCalcGrammar())); + formula::FormulaGrammar::extractRefConvention(mrGlobalSettings.getCalcGrammar())); if (!aAddr.IsValid()) { @@ -200,8 +96,7 @@ os::src_range_t ScOrcusRefResolver::resolve_range(std::string_view range) ScRange aRange; aRange.Parse(aStr, mrGlobalSettings.getDoc().getDoc(), - formula::FormulaGrammar::extractRefConvention( - mrGlobalSettings.getCalcGrammar())); + formula::FormulaGrammar::extractRefConvention(mrGlobalSettings.getCalcGrammar())); if (!aRange.IsValid()) { @@ -211,19 +106,23 @@ os::src_range_t ScOrcusRefResolver::resolve_range(std::string_view range) } os::src_range_t ret; - ret.first.sheet = aRange.aStart.Tab(); + ret.first.sheet = aRange.aStart.Tab(); ret.first.column = aRange.aStart.Col(); - ret.first.row = aRange.aStart.Row(); - ret.last.sheet = aRange.aEnd.Tab(); - ret.last.column = aRange.aEnd.Col(); - ret.last.row = aRange.aEnd.Row(); + ret.first.row = aRange.aStart.Row(); + ret.last.sheet = aRange.aEnd.Tab(); + ret.last.column = aRange.aEnd.Col(); + ret.last.row = aRange.aEnd.Row(); return ret; } -ScOrcusNamedExpression::ScOrcusNamedExpression( - ScDocumentImport& rDoc, const ScOrcusGlobalSettings& rGS, SCTAB nTab ) : - mrDoc(rDoc), mrGlobalSettings(rGS), mnTab(nTab) {} +ScOrcusNamedExpression::ScOrcusNamedExpression(ScDocumentImport& rDoc, + const ScOrcusGlobalSettings& rGS, SCTAB nTab) + : mrDoc(rDoc) + , mrGlobalSettings(rGS) + , mnTab(nTab) +{ +} void ScOrcusNamedExpression::reset() { @@ -241,7 +140,8 @@ void ScOrcusNamedExpression::set_base_position(const orcus::spreadsheet::src_add maBasePos.SetRow(pos.row); } -void ScOrcusNamedExpression::set_named_expression(std::string_view name, std::string_view expression) +void ScOrcusNamedExpression::set_named_expression(std::string_view name, + std::string_view expression) { maName = OUString(name.data(), name.size(), mrGlobalSettings.getTextEncoding()); maExpr = OUString(expression.data(), expression.size(), mrGlobalSettings.getTextEncoding()); @@ -254,13 +154,14 @@ void ScOrcusNamedExpression::set_named_range(std::string_view /*name*/, std::str void ScOrcusNamedExpression::commit() { - ScRangeName* pNames = mnTab >= 0 ? mrDoc.getDoc().GetRangeName(mnTab) : mrDoc.getDoc().GetRangeName(); + ScRangeName* pNames + = mnTab >= 0 ? mrDoc.getDoc().GetRangeName(mnTab) : mrDoc.getDoc().GetRangeName(); if (!pNames) return; - ScRangeData* pRange = new ScRangeData( - mrDoc.getDoc(), maName, maExpr, maBasePos, ScRangeData::Type::Name, - mrGlobalSettings.getCalcGrammar()); + ScRangeData* pRange + = new ScRangeData(mrDoc.getDoc(), maName, maExpr, maBasePos, ScRangeData::Type::Name, + mrGlobalSettings.getCalcGrammar()); pNames->insert(pRange, false); @@ -298,7 +199,7 @@ ScOrcusFactory::CellStoreToken::CellStoreToken(const ScAddress& rPos, uint32_t n } ScOrcusFactory::CellStoreToken::CellStoreToken(const ScAddress& rPos, OUString aFormula, - formula::FormulaGrammar::Grammar eGrammar) + formula::FormulaGrammar::Grammar eGrammar) : maStr1(std::move(aFormula)) , mfValue(std::numeric_limits<double>::quiet_NaN()) , maPos(rPos) @@ -309,17 +210,19 @@ ScOrcusFactory::CellStoreToken::CellStoreToken(const ScAddress& rPos, OUString a { } -ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc, bool bSkipDefaultStyles) : - maDoc(rDoc), - maGlobalSettings(maDoc), - maRefResolver(maGlobalSettings), - maSharedStrings(*this), - maNamedExpressions(maDoc, maGlobalSettings), - maStyles(*this, bSkipDefaultStyles), - mnProgress(0) {} +ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc, bool bSkipDefaultStyles) + : maDoc(rDoc) + , maGlobalSettings(maDoc) + , maRefResolver(maGlobalSettings) + , maSharedStrings(*this) + , maNamedExpressions(maDoc, maGlobalSettings) + , maStyles(*this, bSkipDefaultStyles) + , mnProgress(0) +{ +} -orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::append_sheet( - orcus::spreadsheet::sheet_t sheet_index, std::string_view sheet_name) +orcus::spreadsheet::iface::import_sheet* +ScOrcusFactory::append_sheet(orcus::spreadsheet::sheet_t sheet_index, std::string_view sheet_name) { OUString aTabName(sheet_name.data(), sheet_name.size(), maGlobalSettings.getTextEncoding()); @@ -328,7 +231,7 @@ orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::append_sheet( // The calc document initializes with one sheet already present. assert(maDoc.getSheetCount() == 1); maDoc.setSheetName(0, aTabName); - maSheets.push_back(std::make_unique<ScOrcusSheet>(maDoc, 0, *this)); + maSheets.push_back(std::make_unique<ScOrcusSheet>(maDoc, maGlobalSettings, 0, *this)); return maSheets.back().get(); } @@ -336,23 +239,26 @@ orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::append_sheet( return nullptr; SCTAB nTab = maDoc.getSheetCount() - 1; - maSheets.push_back(std::make_unique<ScOrcusSheet>(maDoc, nTab, *this)); + maSheets.push_back(std::make_unique<ScOrcusSheet>(maDoc, maGlobalSettings, nTab, *this)); return maSheets.back().get(); } -namespace { - +namespace +{ class FindSheetByIndex { SCTAB mnTab; + public: - explicit FindSheetByIndex(SCTAB nTab) : mnTab(nTab) {} - bool operator() (const std::unique_ptr<ScOrcusSheet>& rSheet) const + explicit FindSheetByIndex(SCTAB nTab) + : mnTab(nTab) + { + } + bool operator()(const std::unique_ptr<ScOrcusSheet>& rSheet) const { return rSheet->getIndex() == mnTab; } }; - } orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::get_sheet(std::string_view sheet_name) @@ -364,31 +270,32 @@ orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::get_sheet(std::string_v return nullptr; // See if we already have an orcus sheet instance by that index. - std::vector< std::unique_ptr<ScOrcusSheet> >::iterator it = - std::find_if(maSheets.begin(), maSheets.end(), FindSheetByIndex(nTab)); + std::vector<std::unique_ptr<ScOrcusSheet>>::iterator it + = std::find_if(maSheets.begin(), maSheets.end(), FindSheetByIndex(nTab)); if (it != maSheets.end()) // We already have one. Return it. return it->get(); // Create a new orcus sheet instance for this. - maSheets.push_back(std::make_unique<ScOrcusSheet>(maDoc, nTab, *this)); + maSheets.push_back(std::make_unique<ScOrcusSheet>(maDoc, maGlobalSettings, nTab, *this)); return maSheets.back().get(); } -orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::get_sheet(orcus::spreadsheet::sheet_t sheet_index) +orcus::spreadsheet::iface::import_sheet* +ScOrcusFactory::get_sheet(orcus::spreadsheet::sheet_t sheet_index) { SCTAB nTab = static_cast<SCTAB>(sheet_index); // See if we already have an orcus sheet instance by that index. - std::vector< std::unique_ptr<ScOrcusSheet> >::iterator it = - std::find_if(maSheets.begin(), maSheets.end(), FindSheetByIndex(nTab)); + std::vector<std::unique_ptr<ScOrcusSheet>>::iterator it + = std::find_if(maSheets.begin(), maSheets.end(), FindSheetByIndex(nTab)); if (it != maSheets.end()) // We already have one. Return it. return it->get(); // Create a new orcus sheet instance for this. - maSheets.push_back(std::make_unique<ScOrcusSheet>(maDoc, nTab, *this)); + maSheets.push_back(std::make_unique<ScOrcusSheet>(maDoc, maGlobalSettings, nTab, *this)); return maSheets.back().get(); } @@ -407,12 +314,10 @@ orcus::spreadsheet::iface::import_named_expression* ScOrcusFactory::get_named_ex return &maNamedExpressions; } -orcus::spreadsheet::iface::import_styles* ScOrcusFactory::get_styles() -{ - return &maStyles; -} +orcus::spreadsheet::iface::import_styles* ScOrcusFactory::get_styles() { return &maStyles; } -os::iface::import_reference_resolver* ScOrcusFactory::get_reference_resolver(os::formula_ref_context_t cxt) +os::iface::import_reference_resolver* +ScOrcusFactory::get_reference_resolver(os::formula_ref_context_t cxt) { switch (cxt) { @@ -420,6 +325,7 @@ os::iface::import_reference_resolver* ScOrcusFactory::get_reference_resolver(os: return &maRefResolver; case os::formula_ref_context_t::named_expression_base: case os::formula_ref_context_t::named_range: + case os::formula_ref_context_t::table_range: return nullptr; } @@ -428,8 +334,7 @@ os::iface::import_reference_resolver* ScOrcusFactory::get_reference_resolver(os: void ScOrcusFactory::finalize() { - auto toFormulaCell = [this]( const CellStoreToken& rToken ) -> std::unique_ptr<ScFormulaCell> - { + auto toFormulaCell = [this](const CellStoreToken& rToken) -> std::unique_ptr<ScFormulaCell> { const ScOrcusSheet& rSheet = *maSheets.at(rToken.maPos.Tab()); const sc::SharedFormulaGroups& rSFG = rSheet.getSharedFormulaGroups(); const ScTokenArray* pArray = rSFG.get(rToken.mnIndex1); @@ -478,8 +383,7 @@ void ScOrcusFactory::finalize() } case CellStoreToken::Type::Formula: { - maDoc.setFormulaCell( - rToken.maPos, rToken.maStr1, rToken.meGrammar); + maDoc.setFormulaCell(rToken.maPos, rToken.maStr1, rToken.meGrammar); ++nCellCount; break; @@ -487,9 +391,11 @@ void ScOrcusFactory::finalize() case CellStoreToken::Type::FormulaWithResult: { if (std::isfinite(rToken.mfValue)) - maDoc.setFormulaCell(rToken.maPos, rToken.maStr1, rToken.meGrammar, &rToken.mfValue); + maDoc.setFormulaCell(rToken.maPos, rToken.maStr1, rToken.meGrammar, + &rToken.mfValue); else - maDoc.setFormulaCell(rToken.maPos, rToken.maStr1, rToken.meGrammar, rToken.maStr2); + maDoc.setFormulaCell(rToken.maPos, rToken.maStr1, rToken.meGrammar, + rToken.maStr2); ++nCellCount; break; @@ -528,8 +434,8 @@ void ScOrcusFactory::finalize() break; ScRange aRange(rToken.maPos); - aRange.aEnd.IncCol(rToken.mnIndex1-1); - aRange.aEnd.IncRow(rToken.mnIndex2-1); + aRange.aEnd.IncCol(rToken.mnIndex1 - 1); + aRange.aEnd.IncRow(rToken.mnIndex2 - 1); ScCompiler aComp(maDoc.getDoc(), aRange.aStart, rToken.meGrammar); std::unique_ptr<ScTokenArray> pArray(aComp.CompileString(rToken.maStr1)); @@ -547,8 +453,7 @@ void ScOrcusFactory::finalize() maDoc.fillDownCells(rToken.maPos, rToken.mnIndex1); break; } - default: - ; + default:; } if (nCellCount == 100000) @@ -564,10 +469,7 @@ void ScOrcusFactory::finalize() maDoc.finalize(); } -ScDocumentImport& ScOrcusFactory::getDoc() -{ - return maDoc; -} +ScDocumentImport& ScOrcusFactory::getDoc() { return maDoc; } size_t ScOrcusFactory::appendString(const OUString& rStr) { @@ -607,43 +509,43 @@ const OUString* ScOrcusFactory::getString(size_t nIndex) const return &std::get<OUString>(rStr); } -void ScOrcusFactory::pushCellStoreAutoToken( const ScAddress& rPos, const OUString& rVal ) +void ScOrcusFactory::pushCellStoreAutoToken(const ScAddress& rPos, const OUString& rVal) { maCellStoreTokens.emplace_back(rPos, CellStoreToken::Type::Auto); maCellStoreTokens.back().maStr1 = rVal; } -void ScOrcusFactory::pushCellStoreToken( const ScAddress& rPos, uint32_t nStrIndex ) +void ScOrcusFactory::pushCellStoreToken(const ScAddress& rPos, uint32_t nStrIndex) { maCellStoreTokens.emplace_back(rPos, nStrIndex); } -void ScOrcusFactory::pushCellStoreToken( const ScAddress& rPos, double fValue ) +void ScOrcusFactory::pushCellStoreToken(const ScAddress& rPos, double fValue) { maCellStoreTokens.emplace_back(rPos, fValue); } -void ScOrcusFactory::pushCellStoreToken( - const ScAddress& rPos, const OUString& rFormula, formula::FormulaGrammar::Grammar eGrammar ) +void ScOrcusFactory::pushCellStoreToken(const ScAddress& rPos, const OUString& rFormula, + formula::FormulaGrammar::Grammar eGrammar) { maCellStoreTokens.emplace_back(rPos, rFormula, eGrammar); } -void ScOrcusFactory::pushFillDownCellsToken( const ScAddress& rPos, uint32_t nFillSize ) +void ScOrcusFactory::pushFillDownCellsToken(const ScAddress& rPos, uint32_t nFillSize) { maCellStoreTokens.emplace_back(rPos, CellStoreToken::Type::FillDownCells); maCellStoreTokens.back().mnIndex1 = nFillSize; } -void ScOrcusFactory::pushSharedFormulaToken( const ScAddress& rPos, uint32_t nIndex ) +void ScOrcusFactory::pushSharedFormulaToken(const ScAddress& rPos, uint32_t nIndex) { maCellStoreTokens.emplace_back(rPos, CellStoreToken::Type::SharedFormula); maCellStoreTokens.back().mnIndex1 = nIndex; } -void ScOrcusFactory::pushMatrixFormulaToken( - const ScAddress& rPos, const OUString& rFormula, formula::FormulaGrammar::Grammar eGrammar, - uint32_t nRowRange, uint32_t nColRange ) +void ScOrcusFactory::pushMatrixFormulaToken(const ScAddress& rPos, const OUString& rFormula, + formula::FormulaGrammar::Grammar eGrammar, + uint32_t nRowRange, uint32_t nColRange) { maCellStoreTokens.emplace_back(rPos, CellStoreToken::Type::Matrix); CellStoreToken& rT = maCellStoreTokens.back(); @@ -653,7 +555,7 @@ void ScOrcusFactory::pushMatrixFormulaToken( rT.mnIndex2 = nRowRange; } -void ScOrcusFactory::pushFormulaResult( const ScAddress& rPos, double fValue ) +void ScOrcusFactory::pushFormulaResult(const ScAddress& rPos, double fValue) { // Formula result is expected to be pushed immediately following the // formula token it belongs. @@ -679,7 +581,7 @@ void ScOrcusFactory::pushFormulaResult( const ScAddress& rPos, double fValue ) rToken.mfValue = fValue; } -void ScOrcusFactory::pushFormulaResult( const ScAddress& rPos, const OUString& rValue ) +void ScOrcusFactory::pushFormulaResult(const ScAddress& rPos, const OUString& rValue) { // Formula result is expected to be pushed immediately following the // formula token it belongs. @@ -729,26 +631,21 @@ void ScOrcusFactory::setStatusIndicator(const uno::Reference<task::XStatusIndica mxStatusIndicator = rIndicator; } -const ScOrcusGlobalSettings& ScOrcusFactory::getGlobalSettings() const -{ - return maGlobalSettings; -} - -ScOrcusSheetProperties::ScOrcusSheetProperties(SCTAB nTab, ScDocumentImport& rDoc): - mrDoc(rDoc), - mnTab(nTab) -{ -} +const ScOrcusGlobalSettings& ScOrcusFactory::getGlobalSettings() const { return maGlobalSettings; } -ScOrcusSheetProperties::~ScOrcusSheetProperties() +ScOrcusSheetProperties::ScOrcusSheetProperties(SCTAB nTab, ScDocumentImport& rDoc) + : mrDoc(rDoc) + , mnTab(nTab) { } -namespace { +ScOrcusSheetProperties::~ScOrcusSheetProperties() {} +namespace +{ double translateToInternal(double nVal, orcus::length_unit_t unit) { - switch(unit) + switch (unit) { case orcus::length_unit_t::inch: return o3tl::convert(nVal, o3tl::Length::in, o3tl::Length::twip); @@ -769,11 +666,10 @@ double translateToInternal(double nVal, orcus::length_unit_t unit) } return nVal; } - - } -void ScOrcusSheetProperties::set_column_width(os::col_t col, os::col_t col_span, double width, orcus::length_unit_t unit) +void ScOrcusSheetProperties::set_column_width(os::col_t col, os::col_t col_span, double width, + orcus::length_unit_t unit) { double nNewWidth = translateToInternal(width, unit); @@ -787,37 +683,40 @@ void ScOrcusSheetProperties::set_column_hidden(os::col_t col, os::col_t col_span mrDoc.getDoc().SetColHidden(col, col + col_span - 1, mnTab, hidden); } -void ScOrcusSheetProperties::set_row_height(os::row_t row, double height, orcus::length_unit_t unit) +void ScOrcusSheetProperties::set_row_height(os::row_t row, os::row_t row_span, double height, + orcus::length_unit_t unit) { double nNewHeight = translateToInternal(height, unit); - mrDoc.getDoc().SetRowHeightOnly(row, row,mnTab, nNewHeight); + SCROW nStartRow = row; + SCROW nEndRow = row + row_span - 1; + mrDoc.getDoc().SetRowHeightOnly(nStartRow, nEndRow, mnTab, nNewHeight); } -void ScOrcusSheetProperties::set_row_hidden(os::row_t row, bool hidden) +void ScOrcusSheetProperties::set_row_hidden(os::row_t row, os::row_t row_span, bool hidden) { - if (hidden) - mrDoc.getDoc().SetRowHidden(row, row, mnTab, hidden); + SCROW nStartRow = row; + SCROW nEndRow = row + row_span - 1; + mrDoc.getDoc().SetRowHidden(nStartRow, nEndRow, mnTab, hidden); } void ScOrcusSheetProperties::set_merge_cell_range(const orcus::spreadsheet::range_t& range) { - mrDoc.setMergedCells(mnTab, range.first.column, range.first.row, range.last.column, range.last.row); + mrDoc.setMergedCells(mnTab, range.first.column, range.first.row, range.last.column, + range.last.row); } -ScOrcusConditionalFormat::ScOrcusConditionalFormat(SCTAB nTab, ScDocument& rDoc): - mnTab(nTab), - mrDoc(rDoc), - mpCurrentFormat(new ScConditionalFormat(0, &mrDoc)), - meEntryType(ScFormatEntry::Type::Condition) +ScOrcusConditionalFormat::ScOrcusConditionalFormat(SCTAB nTab, ScDocument& rDoc) + : mnTab(nTab) + , mrDoc(rDoc) + , mpCurrentFormat(new ScConditionalFormat(0, &mrDoc)) + , meEntryType(ScFormatEntry::Type::Condition) { } -ScOrcusConditionalFormat::~ScOrcusConditionalFormat() -{ -} +ScOrcusConditionalFormat::~ScOrcusConditionalFormat() {} void ScOrcusConditionalFormat::set_color(os::color_elem_t /*alpha*/, os::color_elem_t /*red*/, - os::color_elem_t /*green*/, os::color_elem_t /*blue*/) + os::color_elem_t /*green*/, os::color_elem_t /*blue*/) { SAL_INFO("sc.orcus.condformat", "set_color"); } @@ -862,15 +761,19 @@ void ScOrcusConditionalFormat::set_databar_axis(os::databar_axis_t /*axis*/) SAL_INFO("sc.orcus.condformat", "set_databar_axis"); } -void ScOrcusConditionalFormat::set_databar_color_positive(os::color_elem_t /*alpha*/, os::color_elem_t /*red*/, - os::color_elem_t /*green*/, os::color_elem_t /*blue*/) +void ScOrcusConditionalFormat::set_databar_color_positive(os::color_elem_t /*alpha*/, + os::color_elem_t /*red*/, + os::color_elem_t /*green*/, + os::color_elem_t /*blue*/) { assert(meEntryType == ScFormatEntry::Type::Databar); SAL_INFO("sc.orcus.condformat", "set_databar_color_positive"); } -void ScOrcusConditionalFormat::set_databar_color_negative(os::color_elem_t /*alpha*/, os::color_elem_t /*red*/, - os::color_elem_t /*green*/, os::color_elem_t /*blue*/) +void ScOrcusConditionalFormat::set_databar_color_negative(os::color_elem_t /*alpha*/, + os::color_elem_t /*red*/, + os::color_elem_t /*green*/, + os::color_elem_t /*blue*/) { assert(meEntryType == ScFormatEntry::Type::Databar); SAL_INFO("sc.orcus.condformat", "set_databar_color_negative"); @@ -917,26 +820,23 @@ void ScOrcusConditionalFormat::set_type(os::conditional_format_t type) case os::conditional_format_t::formula: meEntryType = ScFormatEntry::Type::Condition; // mpCurrentEntry.reset(new ScCondFormatEntry()); - break; + break; case os::conditional_format_t::date: - break; + break; case os::conditional_format_t::colorscale: - break; + break; case os::conditional_format_t::databar: - break; + break; case os::conditional_format_t::iconset: - break; + break; default: SAL_INFO("sc.orcus.condformat", "unknown conditional_format_t value"); - break; + break; } SAL_INFO("sc.orcus.condformat", "set_type"); } -void ScOrcusConditionalFormat::commit_entry() -{ - SAL_INFO("sc.orcus.condformat", "commit_entry"); -} +void ScOrcusConditionalFormat::commit_entry() { SAL_INFO("sc.orcus.condformat", "commit_entry"); } void ScOrcusConditionalFormat::set_range(std::string_view /*range*/) { @@ -944,7 +844,7 @@ void ScOrcusConditionalFormat::set_range(std::string_view /*range*/) } void ScOrcusConditionalFormat::set_range(os::row_t row_start, os::col_t col_start, - os::row_t row_end, os::col_t col_end) + os::row_t row_end, os::col_t col_end) { SAL_INFO("sc.orcus.condformat", "set_range"); ScRange aRange(col_start, row_start, mnTab, col_end, row_end, mnTab); @@ -957,18 +857,19 @@ void ScOrcusConditionalFormat::commit_format() mpCurrentFormat.reset(new ScConditionalFormat(0, &mrDoc)); } -ScOrcusSheet::ScOrcusSheet(ScDocumentImport& rDoc, SCTAB nTab, ScOrcusFactory& rFactory) : - mrDoc(rDoc), - mnTab(nTab), - mrFactory(rFactory), - mrStyles(static_cast<ScOrcusStyles&>(*mrFactory.get_styles())), - maAutoFilter(rFactory.getGlobalSettings()), - maProperties(mnTab, mrDoc), - maConditionalFormat(mnTab, rDoc.getDoc()), - maNamedExpressions(rDoc, rFactory.getGlobalSettings(), nTab), - maFormula(*this), - maArrayFormula(*this), - mnCellCount(0) +ScOrcusSheet::ScOrcusSheet(ScDocumentImport& rDoc, const ScOrcusGlobalSettings& rGS, SCTAB nTab, + ScOrcusFactory& rFactory) + : mrDoc(rDoc) + , mnTab(nTab) + , mrFactory(rFactory) + , mrStyles(static_cast<ScOrcusStyles&>(*mrFactory.get_styles())) + , maProperties(mnTab, mrDoc) + , maConditionalFormat(mnTab, rDoc.getDoc()) + , maNamedExpressions(rDoc, rFactory.getGlobalSettings(), nTab) + , maFormula(*this) + , maArrayFormula(*this) + , maAutoFilter(rDoc, rGS, nTab) + , mnCellCount(0) { } @@ -985,15 +886,17 @@ void ScOrcusFormula::reset() mfResult = 0.0; } -ScOrcusFormula::ScOrcusFormula( ScOrcusSheet& rSheet ) : - mrSheet(rSheet), - mnCol(-1), - mnRow(-1), - meGrammar(formula::FormulaGrammar::GRAM_UNSPECIFIED), - mnSharedFormulaIndex(0), - mbShared(false), - meResType(ResultType::NotSet), - mfResult(0.0) {} +ScOrcusFormula::ScOrcusFormula(ScOrcusSheet& rSheet) + : mrSheet(rSheet) + , mnCol(-1) + , mnRow(-1) + , meGrammar(formula::FormulaGrammar::GRAM_UNSPECIFIED) + , mnSharedFormulaIndex(0) + , mbShared(false) + , meResType(ResultType::NotSet) + , mfResult(0.0) +{ +} ScOrcusFormula::~ScOrcusFormula() {} @@ -1005,7 +908,8 @@ void ScOrcusFormula::set_position(os::row_t row, os::col_t col) void ScOrcusFormula::set_formula(os::formula_grammar_t grammar, std::string_view formula) { - maFormula = OUString(formula.data(), formula.size(), mrSheet.getFactory().getGlobalSettings().getTextEncoding()); + maFormula = OUString(formula.data(), formula.size(), + mrSheet.getFactory().getGlobalSettings().getTextEncoding()); meGrammar = getCalcGrammarFromOrcus(grammar); } @@ -1024,13 +928,11 @@ void ScOrcusFormula::set_result_value(double value) void ScOrcusFormula::set_result_string(std::string_view value) { meResType = ResultType::String; - maResult = OUString(value.data(), value.size(), mrSheet.getFactory().getGlobalSettings().getTextEncoding()); + maResult = OUString(value.data(), value.size(), + mrSheet.getFactory().getGlobalSettings().getTextEncoding()); } -void ScOrcusFormula::set_result_empty() -{ - meResType = ResultType::Empty; -} +void ScOrcusFormula::set_result_empty() { meResType = ResultType::Empty; } void ScOrcusFormula::set_result_bool(bool value) { @@ -1084,8 +986,7 @@ void ScOrcusFormula::commit() case ResultType::Value: rFactory.pushFormulaResult(aPos, mfResult); break; - default: - ; + default:; } mrSheet.cellInserted(); @@ -1102,13 +1003,15 @@ void ScOrcusArrayFormula::reset() meGrammar = formula::FormulaGrammar::GRAM_UNSPECIFIED; } -ScOrcusArrayFormula::ScOrcusArrayFormula( ScOrcusSheet& rSheet ) : - mrSheet(rSheet), - mnCol(-1), - mnRow(-1), - mnColRange(0), - mnRowRange(0), - meGrammar(formula::FormulaGrammar::GRAM_UNSPECIFIED) {} +ScOrcusArrayFormula::ScOrcusArrayFormula(ScOrcusSheet& rSheet) + : mrSheet(rSheet) + , mnCol(-1) + , mnRow(-1) + , mnColRange(0) + , mnRowRange(0) + , meGrammar(formula::FormulaGrammar::GRAM_UNSPECIFIED) +{ +} ScOrcusArrayFormula::~ScOrcusArrayFormula() {} @@ -1124,7 +1027,8 @@ void ScOrcusArrayFormula::set_range(const os::range_t& range) void ScOrcusArrayFormula::set_formula(os::formula_grammar_t grammar, std::string_view formula) { meGrammar = getCalcGrammarFromOrcus(grammar); - maFormula = OUString(formula.data(), formula.size(), mrSheet.getFactory().getGlobalSettings().getTextEncoding()); + maFormula = OUString(formula.data(), formula.size(), + mrSheet.getFactory().getGlobalSettings().getTextEncoding()); } void ScOrcusArrayFormula::set_result_value(os::row_t /*row*/, os::col_t /*col*/, double /*value*/) @@ -1132,7 +1036,8 @@ void ScOrcusArrayFormula::set_result_value(os::row_t /*row*/, os::col_t /*col*/, // TODO : implement result cache for matrix } -void ScOrcusArrayFormula::set_result_string(os::row_t /*row*/, os::col_t /*col*/, std::string_view /*value*/) +void ScOrcusArrayFormula::set_result_string(os::row_t /*row*/, os::col_t /*col*/, + std::string_view /*value*/) { // TODO : implement result cache for matrix } @@ -1164,25 +1069,9 @@ void ScOrcusSheet::cellInserted() } } -ScDocumentImport& ScOrcusSheet::getDoc() -{ - return mrDoc; -} - -os::iface::import_auto_filter* ScOrcusSheet::get_auto_filter() -{ - return &maAutoFilter; -} - -os::iface::import_table* ScOrcusSheet::get_table() -{ - return nullptr; -} +ScDocumentImport& ScOrcusSheet::getDoc() { return mrDoc; } -os::iface::import_sheet_properties* ScOrcusSheet::get_sheet_properties() -{ - return &maProperties; -} +os::iface::import_sheet_properties* ScOrcusSheet::get_sheet_properties() { return &maProperties; } os::iface::import_conditional_format* ScOrcusSheet::get_conditional_format() { @@ -1231,8 +1120,8 @@ void ScOrcusSheet::set_bool(os::row_t row, os::col_t col, bool value) cellInserted(); } -void ScOrcusSheet::set_date_time( - os::row_t row, os::col_t col, int year, int month, int day, int hour, int minute, double second) +void ScOrcusSheet::set_date_time(os::row_t row, os::col_t col, int year, int month, int day, + int hour, int minute, double second) { SvNumberFormatter* pFormatter = mrDoc.getDoc().GetFormatTable(); @@ -1242,11 +1131,9 @@ void ScOrcusSheet::set_date_time( tools::Time aTime(hour, minute, nSec, nNanoSec); tools::Long nDateDiff = aDate - pFormatter->GetNullDate(); - double fTime = - static_cast<double>(aTime.GetNanoSec()) / ::tools::Time::nanoSecPerSec + - aTime.GetSec() + - aTime.GetMin() * ::tools::Time::secondPerMinute + - aTime.GetHour() * ::tools::Time::secondPerHour; + double fTime = static_cast<double>(aTime.GetNanoSec()) / ::tools::Time::nanoSecPerSec + + aTime.GetSec() + aTime.GetMin() * ::tools::Time::secondPerMinute + + aTime.GetHour() * ::tools::Time::secondPerHour; fTime /= DATE_TIME_FACTOR; @@ -1263,8 +1150,8 @@ void ScOrcusSheet::set_format(os::row_t row, os::col_t col, size_t xf_index) mrDoc.getDoc().ApplyPattern(col, row, mnTab, aPattern); } -void ScOrcusSheet::set_format(os::row_t row_start, os::col_t col_start, - os::row_t row_end, os::col_t col_end, size_t xf_index) +void ScOrcusSheet::set_format(os::row_t row_start, os::col_t col_start, os::row_t row_end, + os::col_t col_end, size_t xf_index) { SAL_INFO("sc.orcus.style", "set format range: " << xf_index); ScPatternAttr aPattern(mrDoc.getDoc().getCellAttributeHelper()); @@ -1272,14 +1159,13 @@ void ScOrcusSheet::set_format(os::row_t row_start, os::col_t col_start, mrDoc.getDoc().ApplyPatternAreaTab(col_start, row_start, col_end, row_end, mnTab, aPattern); } -void ScOrcusSheet::set_column_format( - os::col_t col, os::col_t col_span, std::size_t xf_index) +void ScOrcusSheet::set_column_format(os::col_t col, os::col_t col_span, std::size_t xf_index) { ScPatternAttr aPattern(mrDoc.getDoc().getCellAttributeHelper()); mrStyles.applyXfToItemSet(aPattern.GetItemSet(), xf_index); - mrDoc.getDoc().ApplyPatternAreaTab( - col, 0, col + col_span - 1, mrDoc.getDoc().MaxRow(), mnTab, aPattern); + mrDoc.getDoc().ApplyPatternAreaTab(col, 0, col + col_span - 1, mrDoc.getDoc().MaxRow(), mnTab, + aPattern); } void ScOrcusSheet::set_row_format(os::row_t row, std::size_t xf_index) @@ -1287,8 +1173,7 @@ void ScOrcusSheet::set_row_format(os::row_t row, std::size_t xf_index) ScPatternAttr aPattern(mrDoc.getDoc().getCellAttributeHelper()); mrStyles.applyXfToItemSet(aPattern.GetItemSet(), xf_index); - mrDoc.getDoc().ApplyPatternAreaTab( - 0, row, mrDoc.getDoc().MaxCol(), row, mnTab, aPattern); + mrDoc.getDoc().ApplyPatternAreaTab(0, row, mrDoc.getDoc().MaxCol(), row, mnTab, aPattern); } orcus::spreadsheet::range_size_t ScOrcusSheet::get_sheet_size() const @@ -1306,48 +1191,291 @@ void ScOrcusSheet::fill_down_cells(os::row_t row, os::col_t col, os::row_t range cellInserted(); } +os::iface::import_auto_filter* ScOrcusSheet::start_auto_filter(const os::range_t& range) +{ + maAutoFilter.reset(range); + return &maAutoFilter; +} + const sc::SharedFormulaGroups& ScOrcusSheet::getSharedFormulaGroups() const { return maFormulaGroups; } -sc::SharedFormulaGroups& ScOrcusSheet::getSharedFormulaGroups() +sc::SharedFormulaGroups& ScOrcusSheet::getSharedFormulaGroups() { return maFormulaGroups; } + +ScOrcusFactory& ScOrcusSheet::getFactory() { return mrFactory; } + +void ScOrcusStrikethrough::reset() { - return maFormulaGroups; + meStyle.reset(); + meType.reset(); + meWidth.reset(); + meText.reset(); } -ScOrcusFactory& ScOrcusSheet::getFactory() +std::optional<FontStrikeout> ScOrcusStrikethrough::toFontStrikeout() const { - return mrFactory; + std::optional<FontStrikeout> eStrikeout; + + if (meType) + { + switch (*meType) + { + case os::strikethrough_type_t::unknown: + eStrikeout = STRIKEOUT_DONTKNOW; + break; + case os::strikethrough_type_t::none: + eStrikeout = STRIKEOUT_NONE; + break; + case os::strikethrough_type_t::single_type: + eStrikeout = STRIKEOUT_SINGLE; + break; + case os::strikethrough_type_t::double_type: + eStrikeout = STRIKEOUT_DOUBLE; + break; + } + } + + if (meWidth) + { + switch (*meWidth) + { + case os::strikethrough_width_t::bold: + eStrikeout = STRIKEOUT_BOLD; + break; + default:; + } + } + + if (meText) + { + switch (*meText) + { + case os::strikethrough_text_t::slash: + eStrikeout = STRIKEOUT_SLASH; + break; + case os::strikethrough_text_t::cross: + eStrikeout = STRIKEOUT_X; + break; + case os::strikethrough_text_t::unknown: + break; + } + } + + return eStrikeout; } -OUString ScOrcusSharedStrings::toOUString(std::string_view s) +void ScOrcusUnderline::reset() { - return {s.data(), sal_Int32(s.size()), mrFactory.getGlobalSettings().getTextEncoding()}; + meStyle.reset(); + meThickness.reset(); + meSpacing.reset(); + meCount.reset(); } -ScOrcusSharedStrings::ScOrcusSharedStrings(ScOrcusFactory& rFactory) : - mrFactory(rFactory), - mrEditEngine(rFactory.getDoc().getDoc().GetEditEngine()), - maCurFormat(mrEditEngine.GetEmptyItemSet()) +std::optional<FontLineStyle> ScOrcusUnderline::toFontLineStyle() const { - mrEditEngine.Clear(); + std::optional<FontLineStyle> eUnderline; + + if (meStyle) + { + switch (*meStyle) + { + case os::underline_style_t::none: + eUnderline = LINESTYLE_NONE; + break; + case os::underline_style_t::solid: + { + if (meCount) + { + switch (*meCount) + { + case os::underline_count_t::single_count: + eUnderline = LINESTYLE_SINGLE; + break; + case os::underline_count_t::double_count: + eUnderline = LINESTYLE_DOUBLE; + break; + case os::underline_count_t::none: + break; + } + } + else + eUnderline = LINESTYLE_SINGLE; + break; + } + case os::underline_style_t::dotted: + eUnderline = LINESTYLE_DOTTED; + break; + case os::underline_style_t::dash: + eUnderline = LINESTYLE_DASH; + break; + case os::underline_style_t::long_dash: + eUnderline = LINESTYLE_LONGDASH; + break; + case os::underline_style_t::dot_dash: + eUnderline = LINESTYLE_DASHDOT; + break; + case os::underline_style_t::dot_dot_dash: + eUnderline = LINESTYLE_DASHDOTDOT; + break; + case os::underline_style_t::wave: + { + if (meCount) + { + switch (*meCount) + { + case os::underline_count_t::single_count: + eUnderline = LINESTYLE_WAVE; + break; + case os::underline_count_t::double_count: + eUnderline = LINESTYLE_DOUBLEWAVE; + break; + case os::underline_count_t::none: + break; + } + } + else + eUnderline = LINESTYLE_WAVE; + break; + } + } + } + + bool bApplyBold = false; + + if (meThickness) + { + switch (*meThickness) + { + case os::underline_thickness_t::bold: + case os::underline_thickness_t::thick: + bApplyBold = true; + break; + default:; + } + } + + if (bApplyBold) + { + if (eUnderline) + { + switch (*eUnderline) + { + case LINESTYLE_NONE: + case LINESTYLE_SINGLE: + eUnderline = LINESTYLE_BOLD; + break; + case LINESTYLE_DOTTED: + eUnderline = LINESTYLE_BOLDDOTTED; + break; + case LINESTYLE_DASH: + eUnderline = LINESTYLE_BOLDDASH; + break; + case LINESTYLE_LONGDASH: + eUnderline = LINESTYLE_BOLDLONGDASH; + break; + case LINESTYLE_DASHDOT: + eUnderline = LINESTYLE_BOLDDASHDOT; + break; + case LINESTYLE_DASHDOTDOT: + eUnderline = LINESTYLE_BOLDDASHDOTDOT; + break; + case LINESTYLE_WAVE: + eUnderline = LINESTYLE_BOLDWAVE; + break; + default:; + } + } + } + + return eUnderline; } -size_t ScOrcusSharedStrings::append(std::string_view s) +void ScOrcusSegmentStrikethrough::reset(SfxItemSet* pDestFormat) { - return mrFactory.appendString(toOUString(s)); + mpDestFormat = pDestFormat; + maAttrs.reset(); +} + +void ScOrcusSegmentStrikethrough::set_style(os::strikethrough_style_t s) { maAttrs.meStyle = s; } + +void ScOrcusSegmentStrikethrough::set_type(os::strikethrough_type_t s) { maAttrs.meType = s; } + +void ScOrcusSegmentStrikethrough::set_width(os::strikethrough_width_t s) { maAttrs.meWidth = s; } + +void ScOrcusSegmentStrikethrough::set_text(os::strikethrough_text_t s) { maAttrs.meText = s; } + +void ScOrcusSegmentStrikethrough::commit() +{ + auto eStrikeout = maAttrs.toFontStrikeout(); + if (!eStrikeout) + return; + + mpDestFormat->Put(SvxCrossedOutItem(*eStrikeout, EE_CHAR_STRIKEOUT)); +} + +void ScOrcusSegmentUnderline::reset(SfxItemSet* pDestFormat) +{ + mpDestFormat = pDestFormat; + maAttrs.reset(); + maColor.reset(); +} + +void ScOrcusSegmentUnderline::set_style(os::underline_style_t e) { maAttrs.meStyle = e; } + +void ScOrcusSegmentUnderline::set_thickness(os::underline_thickness_t e) +{ + maAttrs.meThickness = e; } -size_t ScOrcusSharedStrings::add(std::string_view s) +void ScOrcusSegmentUnderline::set_spacing(os::underline_spacing_t e) { maAttrs.meSpacing = e; } + +void ScOrcusSegmentUnderline::set_count(os::underline_count_t e) { maAttrs.meCount = e; } + +void ScOrcusSegmentUnderline::set_color(os::color_elem_t alpha, os::color_elem_t red, + os::color_elem_t green, os::color_elem_t blue) { - return mrFactory.addString(toOUString(s)); + maColor = Color(ColorAlpha, alpha, red, green, blue); } -void ScOrcusSharedStrings::set_segment_font(size_t /*font_index*/) +void ScOrcusSegmentUnderline::commit() { + auto eUnderline = maAttrs.toFontLineStyle(); + if (!eUnderline) + return; + + SvxUnderlineItem aItem(*eUnderline, EE_CHAR_UNDERLINE); + + if (maColor) + aItem.SetColor(*maColor); + + mpDestFormat->Put(aItem); } +OUString ScOrcusSharedStrings::toOUString(std::string_view s) +{ + return { s.data(), sal_Int32(s.size()), mrFactory.getGlobalSettings().getTextEncoding() }; +} + +ScOrcusSharedStrings::ScOrcusSharedStrings(ScOrcusFactory& rFactory) + : mrFactory(rFactory) + , mrEditEngine(rFactory.getDoc().getDoc().GetEditEngine()) + , maCurFormat(mrEditEngine.GetEmptyItemSet()) +{ + mrEditEngine.Clear(); +} + +size_t ScOrcusSharedStrings::append(std::string_view s) +{ + return mrFactory.appendString(toOUString(s)); +} + +size_t ScOrcusSharedStrings::add(std::string_view s) { return mrFactory.addString(toOUString(s)); } + +void ScOrcusSharedStrings::set_segment_font(size_t /*font_index*/) {} + void ScOrcusSharedStrings::set_segment_bold(bool b) { FontWeight eWeight = b ? WEIGHT_BOLD : WEIGHT_NORMAL; @@ -1360,16 +1488,23 @@ void ScOrcusSharedStrings::set_segment_italic(bool b) maCurFormat.Put(SvxPostureItem(eItalic, EE_CHAR_ITALIC)); } +void ScOrcusSharedStrings::set_segment_superscript(bool b) +{ + if (b) + maCurFormat.Put(SvxEscapementItem(SvxEscapement::Superscript, EE_CHAR_ESCAPEMENT)); +} + +void ScOrcusSharedStrings::set_segment_subscript(bool b) +{ + if (b) + maCurFormat.Put(SvxEscapementItem(SvxEscapement::Subscript, EE_CHAR_ESCAPEMENT)); +} + void ScOrcusSharedStrings::set_segment_font_name(std::string_view s) { OUString aName = toOUString(s); - maCurFormat.Put( - SvxFontItem( - FAMILY_DONTKNOW, aName, aName, PITCH_DONTKNOW, - mrFactory.getGlobalSettings().getTextEncoding(), - EE_CHAR_FONTINFO - ) - ); + maCurFormat.Put(SvxFontItem(FAMILY_DONTKNOW, aName, aName, PITCH_DONTKNOW, + mrFactory.getGlobalSettings().getTextEncoding(), EE_CHAR_FONTINFO)); } void ScOrcusSharedStrings::set_segment_font_size(double point) @@ -1379,13 +1514,25 @@ void ScOrcusSharedStrings::set_segment_font_size(double point) maCurFormat.Put(SvxFontHeightItem(nMM, 100, EE_CHAR_FONTHEIGHT)); } -void ScOrcusSharedStrings::set_segment_font_color( - os::color_elem_t alpha, os::color_elem_t red, os::color_elem_t green, os::color_elem_t blue) +void ScOrcusSharedStrings::set_segment_font_color(os::color_elem_t alpha, os::color_elem_t red, + os::color_elem_t green, os::color_elem_t blue) { Color aColor(ColorAlpha, alpha, red, green, blue); maCurFormat.Put(SvxColorItem(aColor, EE_CHAR_COLOR)); } +os::iface::import_underline* ScOrcusSharedStrings::start_underline() +{ + maImportUnderline.reset(&maCurFormat); + return &maImportUnderline; +} + +os::iface::import_strikethrough* ScOrcusSharedStrings::start_strikethrough() +{ + maImportStrikethrough.reset(&maCurFormat); + return &maImportStrikethrough; +} + void ScOrcusSharedStrings::append_segment(std::string_view s) { ESelection aSel{ mrEditEngine.GetEnd() }; // end of current text @@ -1400,7 +1547,7 @@ void ScOrcusSharedStrings::append_segment(std::string_view s) size_t ScOrcusSharedStrings::commit_segments() { - for (const auto& [rSel, rFormat] : maFormatSegments) + for (const auto & [ rSel, rFormat ] : maFormatSegments) mrEditEngine.QuickSetAttribs(rFormat, rSel); auto nPos = mrFactory.appendFormattedString(mrEditEngine.CreateTextObject()); @@ -1409,7 +1556,7 @@ size_t ScOrcusSharedStrings::commit_segments() return nPos; } -void ScOrcusFont::applyToItemSet( SfxItemSet& rSet ) const +void ScOrcusFont::applyToItemSet(SfxItemSet& rSet) const { if (mbBold) { @@ -1448,16 +1595,19 @@ void ScOrcusFont::applyToItemSet( SfxItemSet& rSet ) const } if (maColor) - rSet.Put( SvxColorItem(*maColor, ATTR_FONT_COLOR)); + rSet.Put(SvxColorItem(*maColor, ATTR_FONT_COLOR)); if (maName && !maName->isEmpty()) - rSet.Put( SvxFontItem( FAMILY_DONTKNOW, *maName, *maName, PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW, ATTR_FONT )); + rSet.Put(SvxFontItem(FAMILY_DONTKNOW, *maName, *maName, PITCH_DONTKNOW, + RTL_TEXTENCODING_DONTKNOW, ATTR_FONT)); if (maNameAsian && !maNameAsian->isEmpty()) - rSet.Put( SvxFontItem( FAMILY_DONTKNOW, *maNameAsian, *maNameAsian, PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW, ATTR_CJK_FONT )); + rSet.Put(SvxFontItem(FAMILY_DONTKNOW, *maNameAsian, *maNameAsian, PITCH_DONTKNOW, + RTL_TEXTENCODING_DONTKNOW, ATTR_CJK_FONT)); if (maNameComplex && !maNameComplex->isEmpty()) - rSet.Put( SvxFontItem( FAMILY_DONTKNOW, *maNameComplex, *maNameComplex, PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW, ATTR_CTL_FONT )); + rSet.Put(SvxFontItem(FAMILY_DONTKNOW, *maNameComplex, *maNameComplex, PITCH_DONTKNOW, + RTL_TEXTENCODING_DONTKNOW, ATTR_CTL_FONT)); if (mnSize) { @@ -1493,7 +1643,7 @@ void ScOrcusFont::applyToItemSet( SfxItemSet& rSet ) const rSet.Put(SvxCrossedOutItem(*meStrikeout, ATTR_FONT_CROSSEDOUT)); } -void ScOrcusFill::applyToItemSet( SfxItemSet& rSet ) const +void ScOrcusFill::applyToItemSet(SfxItemSet& rSet) const { if (!mePattern || !maFgColor) return; @@ -1502,10 +1652,9 @@ void ScOrcusFill::applyToItemSet( SfxItemSet& rSet ) const rSet.Put(SvxBrushItem(*maFgColor, ATTR_BACKGROUND)); } -void ScOrcusBorder::applyToItemSet( SfxItemSet& rSet ) const +void ScOrcusBorder::applyToItemSet(SfxItemSet& rSet) const { - auto getDirection = [](os::border_direction_t dir) -> SvxBoxItemLine - { + auto getDirection = [](os::border_direction_t dir) -> SvxBoxItemLine { switch (dir) { case os::border_direction_t::right: @@ -1516,8 +1665,7 @@ void ScOrcusBorder::applyToItemSet( SfxItemSet& rSet ) const return SvxBoxItemLine::TOP; case os::border_direction_t::bottom: return SvxBoxItemLine::BOTTOM; - default: - ; + default:; } return SvxBoxItemLine::RIGHT; }; @@ -1529,7 +1677,7 @@ void ScOrcusBorder::applyToItemSet( SfxItemSet& rSet ) const SvxLineItem aDiagonal_TLBR(ATTR_BORDER_TLBR); SvxLineItem aDiagonal_BLTR(ATTR_BORDER_BLTR); - for (const auto& [dir, attrs] : maBorders) + for (const auto & [ dir, attrs ] : maBorders) { SvxBoxItemLine eDir = getDirection(dir); @@ -1564,9 +1712,10 @@ void ScOrcusBorder::applyToItemSet( SfxItemSet& rSet ) const rSet.Put(aBoxItem); } -void ScOrcusProtection::applyToItemSet( SfxItemSet& rSet ) const +void ScOrcusProtection::applyToItemSet(SfxItemSet& rSet) const { - if (!mbLocked.has_value() && !mbHidden.has_value() && !mbPrintContent.has_value() && !mbFormulaHidden.has_value()) + if (!mbLocked.has_value() && !mbHidden.has_value() && !mbPrintContent.has_value() + && !mbFormulaHidden.has_value()) return; bool bLocked = mbLocked.value_or(true); // defaults to true. @@ -1576,7 +1725,7 @@ void ScOrcusProtection::applyToItemSet( SfxItemSet& rSet ) const rSet.Put(ScProtectionAttr(bLocked, bFormulaHidden, bHidden, bPrintContent)); } -void ScOrcusNumberFormat::applyToItemSet( SfxItemSet& rSet, const ScDocument& rDoc ) const +void ScOrcusNumberFormat::applyToItemSet(SfxItemSet& rSet, const ScDocument& rDoc) const { if (!maCode) return; @@ -1584,7 +1733,8 @@ void ScOrcusNumberFormat::applyToItemSet( SfxItemSet& rSet, const ScDocument& rD sal_uInt32 nKey; sal_Int32 nCheckPos; SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); - OUString Code = *maCode; /* <-- Done because the SvNumberFormatter::PutEntry demands a non const NumFormat Code*/ + OUString Code + = *maCode; /* <-- Done because the SvNumberFormatter::PutEntry demands a non const NumFormat Code*/ SvNumFormatType type = SvNumFormatType::ALL; pFormatter->PutEntry(Code, nCheckPos, type, nKey, LANGUAGE_ENGLISH_US); @@ -1592,279 +1742,156 @@ void ScOrcusNumberFormat::applyToItemSet( SfxItemSet& rSet, const ScDocument& rD rSet.Put(SfxUInt32Item(ATTR_VALUE_FORMAT, nKey)); } -ScOrcusXf::ScOrcusXf() : - mnFontId(0), - mnFillId(0), - mnBorderId(0), - mnProtectionId(0), - mnNumberFormatId(0), - mnStyleXf(0), - mbApplyAlignment(false), - mbWrapText(false), - mbShrinkToFit(false), - meHorAlignment(SvxCellHorJustify::Standard), - meVerAlignment(SvxCellVerJustify::Standard), - meHorAlignMethod(SvxCellJustifyMethod::Auto), - meVerAlignMethod(SvxCellJustifyMethod::Auto) +ScOrcusXf::ScOrcusXf() + : mnFontId(0) + , mnFillId(0) + , mnBorderId(0) + , mnProtectionId(0) + , mnNumberFormatId(0) + , mnStyleXf(0) + , mbApplyAlignment(false) + , mbWrapText(false) + , mbShrinkToFit(false) + , meHorAlignment(SvxCellHorJustify::Standard) + , meVerAlignment(SvxCellVerJustify::Standard) + , meHorAlignMethod(SvxCellJustifyMethod::Auto) + , meVerAlignMethod(SvxCellJustifyMethod::Auto) { } -ScOrcusCellStyle::ScOrcusCellStyle() : - maParentName(SC_STYLE_PROG_STANDARD), - mnXFId(0), - mnBuiltInId(0) +ScOrcusCellStyle::ScOrcusCellStyle() + : maParentName(SC_STYLE_PROG_STANDARD) + , mnXFId(0) + , mnBuiltInId(0) { } -ScOrcusImportFontStyle::ScOrcusImportFontStyle( ScOrcusFactory& rFactory, std::vector<ScOrcusFont>& rFonts ) : - mrFactory(rFactory), - mrFonts(rFonts) +void ScOrcusImportFontUnderlineStyle::reset(ScOrcusFont* pDest) { -} + mpDestFont = pDest; -void ScOrcusImportFontStyle::reset() -{ - maCurrentFont = ScOrcusFont(); + maAttrs.reset(); + maColor.reset(); } -void ScOrcusImportFontStyle::set_bold(bool b) -{ - maCurrentFont.mbBold = b; -} +void ScOrcusImportFontUnderlineStyle::set_style(os::underline_style_t e) { maAttrs.meStyle = e; } -void ScOrcusImportFontStyle::set_bold_asian(bool b) +void ScOrcusImportFontUnderlineStyle::set_thickness(os::underline_thickness_t e) { - maCurrentFont.mbBoldAsian = b; + maAttrs.meThickness = e; } -void ScOrcusImportFontStyle::set_bold_complex(bool b) +void ScOrcusImportFontUnderlineStyle::set_spacing(os::underline_spacing_t e) { - maCurrentFont.mbBoldComplex = b; + maAttrs.meSpacing = e; } -void ScOrcusImportFontStyle::set_italic(bool b) -{ - maCurrentFont.mbItalic = b; -} +void ScOrcusImportFontUnderlineStyle::set_count(os::underline_count_t e) { maAttrs.meCount = e; } -void ScOrcusImportFontStyle::set_italic_asian(bool b) +void ScOrcusImportFontUnderlineStyle::set_color(os::color_elem_t alpha, os::color_elem_t red, + os::color_elem_t green, os::color_elem_t blue) { - maCurrentFont.mbItalicAsian = b; + maColor = Color(ColorAlpha, alpha, red, green, blue); } -void ScOrcusImportFontStyle::set_italic_complex(bool b) +void ScOrcusImportFontUnderlineStyle::commit() { - maCurrentFont.mbItalicComplex = b; + mpDestFont->meUnderline = maAttrs.toFontLineStyle(); + mpDestFont->maUnderlineColor = maColor; } -void ScOrcusImportFontStyle::set_name(std::string_view name) +void ScOrcusImportFontStrikethroughStyle::reset(ScOrcusFont* pDest) { - OUString aName(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); - maCurrentFont.maName = aName; + mpDestFont = pDest; + maAttrs.reset(); } -void ScOrcusImportFontStyle::set_name_asian(std::string_view name) +void ScOrcusImportFontStrikethroughStyle::set_style(orcus::spreadsheet::strikethrough_style_t s) { - OUString aName(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); - maCurrentFont.maNameAsian = aName; + maAttrs.meStyle = s; } -void ScOrcusImportFontStyle::set_name_complex(std::string_view name) +void ScOrcusImportFontStrikethroughStyle::set_type(orcus::spreadsheet::strikethrough_type_t s) { - OUString aName(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); - maCurrentFont.maNameComplex = aName; + maAttrs.meType = s; } -void ScOrcusImportFontStyle::set_size(double point) +void ScOrcusImportFontStrikethroughStyle::set_width(orcus::spreadsheet::strikethrough_width_t s) { - maCurrentFont.mnSize = point; + maAttrs.meWidth = s; } -void ScOrcusImportFontStyle::set_size_asian(double point) +void ScOrcusImportFontStrikethroughStyle::set_text(orcus::spreadsheet::strikethrough_text_t s) { - maCurrentFont.mnSizeAsian = point; + maAttrs.meText = s; } -void ScOrcusImportFontStyle::set_size_complex(double point) +void ScOrcusImportFontStrikethroughStyle::commit() { - maCurrentFont.mnSizeComplex = point; + mpDestFont->meStrikeout = maAttrs.toFontStrikeout(); } -void ScOrcusImportFontStyle::set_underline(os::underline_t e) +ScOrcusImportFontStyle::ScOrcusImportFontStyle(ScOrcusFactory& rFactory, + std::vector<ScOrcusFont>& rFonts) + : mrFactory(rFactory) + , mrFonts(rFonts) { - switch(e) - { - case os::underline_t::single_line: - case os::underline_t::single_accounting: - maCurrentFont.meUnderline = LINESTYLE_SINGLE; - break; - case os::underline_t::double_line: - case os::underline_t::double_accounting: - maCurrentFont.meUnderline = LINESTYLE_DOUBLE; - break; - case os::underline_t::none: - maCurrentFont.meUnderline = LINESTYLE_NONE; - break; - case os::underline_t::dotted: - maCurrentFont.meUnderline = LINESTYLE_DOTTED; - break; - case os::underline_t::dash: - maCurrentFont.meUnderline = LINESTYLE_DASH; - break; - case os::underline_t::long_dash: - maCurrentFont.meUnderline = LINESTYLE_LONGDASH; - break; - case os::underline_t::dot_dash: - maCurrentFont.meUnderline = LINESTYLE_DASHDOT; - break; - case os::underline_t::dot_dot_dash: - maCurrentFont.meUnderline = LINESTYLE_DASHDOTDOT; - break; - case os::underline_t::wave: - maCurrentFont.meUnderline = LINESTYLE_WAVE; - break; - default: - ; - } } -void ScOrcusImportFontStyle::set_underline_width(os::underline_width_t e) -{ - if (e == os::underline_width_t::bold || e == os::underline_width_t::thick) - { - if (maCurrentFont.meUnderline) - { - switch (*maCurrentFont.meUnderline) - { - case LINESTYLE_NONE: - case LINESTYLE_SINGLE: - maCurrentFont.meUnderline = LINESTYLE_BOLD; - break; - case LINESTYLE_DOTTED: - maCurrentFont.meUnderline = LINESTYLE_BOLDDOTTED; - break; - case LINESTYLE_DASH: - maCurrentFont.meUnderline = LINESTYLE_BOLDDASH; - break; - case LINESTYLE_LONGDASH: - maCurrentFont.meUnderline = LINESTYLE_BOLDLONGDASH; - break; - case LINESTYLE_DASHDOT: - maCurrentFont.meUnderline = LINESTYLE_BOLDDASHDOT; - break; - case LINESTYLE_DASHDOTDOT: - maCurrentFont.meUnderline = LINESTYLE_BOLDDASHDOTDOT; - break; - case LINESTYLE_WAVE: - maCurrentFont.meUnderline = LINESTYLE_BOLDWAVE; - break; - default: - ; - } - } - else - maCurrentFont.meUnderline = LINESTYLE_BOLD; - } -} +void ScOrcusImportFontStyle::reset() { maCurrentFont = ScOrcusFont(); } -void ScOrcusImportFontStyle::set_underline_mode(os::underline_mode_t /*e*/) -{ -} +void ScOrcusImportFontStyle::set_bold(bool b) { maCurrentFont.mbBold = b; } -void ScOrcusImportFontStyle::set_underline_type(os::underline_type_t e ) -{ - if (e == os::underline_type_t::double_type) - { - if (maCurrentFont.meUnderline) - { - switch (*maCurrentFont.meUnderline) - { - case LINESTYLE_NONE: - case LINESTYLE_SINGLE: - maCurrentFont.meUnderline = LINESTYLE_DOUBLE; - break; - case LINESTYLE_WAVE: - maCurrentFont.meUnderline = LINESTYLE_DOUBLEWAVE; - break; - default: - ; - } - } - else - maCurrentFont.meUnderline = LINESTYLE_DOUBLE; - } -} +void ScOrcusImportFontStyle::set_bold_asian(bool b) { maCurrentFont.mbBoldAsian = b; } + +void ScOrcusImportFontStyle::set_bold_complex(bool b) { maCurrentFont.mbBoldComplex = b; } -void ScOrcusImportFontStyle::set_underline_color( - os::color_elem_t alpha, os::color_elem_t red, os::color_elem_t green, os::color_elem_t blue) +void ScOrcusImportFontStyle::set_italic(bool b) { maCurrentFont.mbItalic = b; } + +void ScOrcusImportFontStyle::set_italic_asian(bool b) { maCurrentFont.mbItalicAsian = b; } + +void ScOrcusImportFontStyle::set_italic_complex(bool b) { maCurrentFont.mbItalicComplex = b; } + +void ScOrcusImportFontStyle::set_name(std::string_view name) { - maCurrentFont.maUnderlineColor = Color(ColorAlpha, alpha, red, green, blue); + OUString aName(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); + maCurrentFont.maName = aName; } -void ScOrcusImportFontStyle::set_color( - os::color_elem_t alpha, os::color_elem_t red, os::color_elem_t green, os::color_elem_t blue) +void ScOrcusImportFontStyle::set_name_asian(std::string_view name) { - maCurrentFont.maColor = Color(ColorAlpha, alpha, red, green, blue); + OUString aName(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); + maCurrentFont.maNameAsian = aName; } -void ScOrcusImportFontStyle::set_strikethrough_style(os::strikethrough_style_t /*s*/) +void ScOrcusImportFontStyle::set_name_complex(std::string_view name) { + OUString aName(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); + maCurrentFont.maNameComplex = aName; } -void ScOrcusImportFontStyle::set_strikethrough_type(os::strikethrough_type_t s) -{ - if (maCurrentFont.meStrikeout) - { - if (*maCurrentFont.meStrikeout == STRIKEOUT_BOLD || - *maCurrentFont.meStrikeout == STRIKEOUT_SLASH || - *maCurrentFont.meStrikeout == STRIKEOUT_X) - return; - } +void ScOrcusImportFontStyle::set_size(double point) { maCurrentFont.mnSize = point; } - switch (s) - { - case os::strikethrough_type_t::unknown: - maCurrentFont.meStrikeout = STRIKEOUT_DONTKNOW; - break; - case os::strikethrough_type_t::none: - maCurrentFont.meStrikeout = STRIKEOUT_NONE; - break; - case os::strikethrough_type_t::single_type: - maCurrentFont.meStrikeout = STRIKEOUT_SINGLE; - break; - case os::strikethrough_type_t::double_type: - maCurrentFont.meStrikeout = STRIKEOUT_DOUBLE; - break; - default: - ; - } +void ScOrcusImportFontStyle::set_size_asian(double point) { maCurrentFont.mnSizeAsian = point; } + +void ScOrcusImportFontStyle::set_size_complex(double point) { maCurrentFont.mnSizeComplex = point; } + +void ScOrcusImportFontStyle::set_color(os::color_elem_t alpha, os::color_elem_t red, + os::color_elem_t green, os::color_elem_t blue) +{ + maCurrentFont.maColor = Color(ColorAlpha, alpha, red, green, blue); } -void ScOrcusImportFontStyle::set_strikethrough_width(os::strikethrough_width_t s) +orcus::spreadsheet::iface::import_underline* ScOrcusImportFontStyle::start_underline() { - switch (s) - { - case os::strikethrough_width_t::bold: - maCurrentFont.meStrikeout = STRIKEOUT_BOLD; - break; - default: - ; - } + maUnderlineImport.reset(&maCurrentFont); + return &maUnderlineImport; } -void ScOrcusImportFontStyle::set_strikethrough_text(os::strikethrough_text_t s) +orcus::spreadsheet::iface::import_strikethrough* ScOrcusImportFontStyle::start_strikethrough() { - switch (s) - { - case os::strikethrough_text_t::slash: - maCurrentFont.meStrikeout = STRIKEOUT_SLASH; - break; - case os::strikethrough_text_t::cross: - maCurrentFont.meStrikeout = STRIKEOUT_X; - break; - default: - ; - } + maStrikeoutImport.reset(&maCurrentFont); + return &maStrikeoutImport; } std::size_t ScOrcusImportFontStyle::commit() @@ -1875,29 +1902,26 @@ std::size_t ScOrcusImportFontStyle::commit() return mrFonts.size() - 1; } -ScOrcusImportFillStyle::ScOrcusImportFillStyle( std::vector<ScOrcusFill>& rFills ) : - mrFills(rFills) +ScOrcusImportFillStyle::ScOrcusImportFillStyle(std::vector<ScOrcusFill>& rFills) + : mrFills(rFills) { } -void ScOrcusImportFillStyle::reset() -{ - maCurrentFill = ScOrcusFill(); -} +void ScOrcusImportFillStyle::reset() { maCurrentFill = ScOrcusFill(); } void ScOrcusImportFillStyle::set_pattern_type(os::fill_pattern_t fp) { maCurrentFill.mePattern = fp; } -void ScOrcusImportFillStyle::set_fg_color( - os::color_elem_t alpha, os::color_elem_t red, os::color_elem_t green, os::color_elem_t blue) +void ScOrcusImportFillStyle::set_fg_color(os::color_elem_t alpha, os::color_elem_t red, + os::color_elem_t green, os::color_elem_t blue) { maCurrentFill.maFgColor = Color(ColorAlpha, alpha, red, green, blue); } -void ScOrcusImportFillStyle::set_bg_color( - os::color_elem_t alpha, os::color_elem_t red, os::color_elem_t green, os::color_elem_t blue) +void ScOrcusImportFillStyle::set_bg_color(os::color_elem_t alpha, os::color_elem_t red, + os::color_elem_t green, os::color_elem_t blue) { maCurrentFill.maBgColor = Color(ColorAlpha, alpha, red, green, blue); } @@ -1910,13 +1934,12 @@ std::size_t ScOrcusImportFillStyle::commit() return mrFills.size() - 1; } -ScOrcusImportBorderStyle::ScOrcusImportBorderStyle( std::vector<ScOrcusBorder>& rBorders ) : - mrBorders(rBorders) +ScOrcusImportBorderStyle::ScOrcusImportBorderStyle(std::vector<ScOrcusBorder>& rBorders) + : mrBorders(rBorders) { } -void ScOrcusImportBorderStyle::set_style( - os::border_direction_t dir, os::border_style_t style) +void ScOrcusImportBorderStyle::set_style(os::border_direction_t dir, os::border_style_t style) { ScOrcusBorder::BorderLine& rBorderLine = maCurrentBorder.maBorders[dir]; @@ -1979,25 +2002,22 @@ void ScOrcusImportBorderStyle::set_style( case os::border_style_t::none: rBorderLine.mnWidth = oox::xls::API_LINE_NONE; break; - default: - ; + default:; } } -void ScOrcusImportBorderStyle::set_color( - os::border_direction_t dir, os::color_elem_t alpha, os::color_elem_t red, - os::color_elem_t green, os::color_elem_t blue) +void ScOrcusImportBorderStyle::set_color(os::border_direction_t dir, os::color_elem_t alpha, + os::color_elem_t red, os::color_elem_t green, + os::color_elem_t blue) { ScOrcusBorder::BorderLine& rBorderLine = maCurrentBorder.maBorders[dir]; rBorderLine.maColor = Color(ColorAlpha, alpha, red, green, blue); } -void ScOrcusImportBorderStyle::reset() -{ - maCurrentBorder = ScOrcusBorder(); -} +void ScOrcusImportBorderStyle::reset() { maCurrentBorder = ScOrcusBorder(); } -void ScOrcusImportBorderStyle::set_width(os::border_direction_t dir, double val, orcus::length_unit_t unit) +void ScOrcusImportBorderStyle::set_width(os::border_direction_t dir, double val, + orcus::length_unit_t unit) { ScOrcusBorder::BorderLine& rBorderLine = maCurrentBorder.maBorders[dir]; rBorderLine.mnWidth = translateToInternal(val, unit); @@ -2011,32 +2031,24 @@ std::size_t ScOrcusImportBorderStyle::commit() return mrBorders.size() - 1; } -ScOrcusImportCellProtection::ScOrcusImportCellProtection( std::vector<ScOrcusProtection>& rProtections ) : - mrProtections(rProtections) +ScOrcusImportCellProtection::ScOrcusImportCellProtection( + std::vector<ScOrcusProtection>& rProtections) + : mrProtections(rProtections) { } -void ScOrcusImportCellProtection::reset() -{ - maCurrentProtection = ScOrcusProtection(); -} +void ScOrcusImportCellProtection::reset() { maCurrentProtection = ScOrcusProtection(); } -void ScOrcusImportCellProtection::set_hidden(bool b) -{ - maCurrentProtection.mbHidden = b; -} +void ScOrcusImportCellProtection::set_hidden(bool b) { maCurrentProtection.mbHidden = b; } -void ScOrcusImportCellProtection::set_locked(bool b) -{ - maCurrentProtection.mbLocked = b; -} +void ScOrcusImportCellProtection::set_locked(bool b) { maCurrentProtection.mbLocked = b; } -void ScOrcusImportCellProtection::set_print_content(bool b ) +void ScOrcusImportCellProtection::set_print_content(bool b) { maCurrentProtection.mbPrintContent = b; } -void ScOrcusImportCellProtection::set_formula_hidden(bool b ) +void ScOrcusImportCellProtection::set_formula_hidden(bool b) { maCurrentProtection.mbFormulaHidden = b; } @@ -2049,19 +2061,16 @@ std::size_t ScOrcusImportCellProtection::commit() return mrProtections.size() - 1; } -ScOrcusImportNumberFormat::ScOrcusImportNumberFormat( ScOrcusFactory& rFactory, std::vector<ScOrcusNumberFormat>& rFormats ) : - mrFactory(rFactory), mrNumberFormats(rFormats) +ScOrcusImportNumberFormat::ScOrcusImportNumberFormat(ScOrcusFactory& rFactory, + std::vector<ScOrcusNumberFormat>& rFormats) + : mrFactory(rFactory) + , mrNumberFormats(rFormats) { } -void ScOrcusImportNumberFormat::reset() -{ - maCurrentFormat = ScOrcusNumberFormat(); -} +void ScOrcusImportNumberFormat::reset() { maCurrentFormat = ScOrcusNumberFormat(); } -void ScOrcusImportNumberFormat::set_identifier(std::size_t /*id*/) -{ -} +void ScOrcusImportNumberFormat::set_identifier(std::size_t /*id*/) {} void ScOrcusImportNumberFormat::set_code(std::string_view s) { @@ -2077,42 +2086,36 @@ std::size_t ScOrcusImportNumberFormat::commit() return mrNumberFormats.size() - 1; } -ScOrucsImportCellStyle::ScOrucsImportCellStyle( - ScOrcusFactory& rFactory, ScOrcusStyles& rStyles, const std::vector<ScOrcusXf>& rXfs ) : - mrFactory(rFactory), - mrStyles(rStyles), - mrXfs(rXfs) +ScOrucsImportCellStyle::ScOrucsImportCellStyle(ScOrcusFactory& rFactory, ScOrcusStyles& rStyles, + const std::vector<ScOrcusXf>& rXfs) + : mrFactory(rFactory) + , mrStyles(rStyles) + , mrXfs(rXfs) { } -void ScOrucsImportCellStyle::reset() -{ - maCurrentStyle = ScOrcusCellStyle(); -} +void ScOrucsImportCellStyle::reset() { maCurrentStyle = ScOrcusCellStyle(); } void ScOrucsImportCellStyle::set_name(std::string_view name) { - maCurrentStyle.maName = OUString(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); + maCurrentStyle.maName + = OUString(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); } void ScOrucsImportCellStyle::set_display_name(std::string_view name) { - maCurrentStyle.maDisplayName = OUString(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); + maCurrentStyle.maDisplayName + = OUString(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); } -void ScOrucsImportCellStyle::set_xf(size_t index) -{ - maCurrentStyle.mnXFId = index; -} +void ScOrucsImportCellStyle::set_xf(size_t index) { maCurrentStyle.mnXFId = index; } -void ScOrucsImportCellStyle::set_builtin(size_t index) -{ - maCurrentStyle.mnBuiltInId = index; -} +void ScOrucsImportCellStyle::set_builtin(size_t index) { maCurrentStyle.mnBuiltInId = index; } void ScOrucsImportCellStyle::set_parent_name(std::string_view name) { - maCurrentStyle.maParentName = OUString(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); + maCurrentStyle.maParentName + = OUString(name.data(), name.size(), mrFactory.getGlobalSettings().getTextEncoding()); } void ScOrucsImportCellStyle::commit() @@ -2130,9 +2133,8 @@ void ScOrucsImportCellStyle::commit() ScStyleSheetPool* pPool = mrFactory.getDoc().getDoc().GetStyleSheetPool(); SfxStyleSheetBase& rBase = pPool->Make(maCurrentStyle.maName, SfxStyleFamily::Para); // Need to convert the parent name to localized UI name, see tdf#139205. - rBase.SetParent( - ScStyleNameConversion::ProgrammaticToDisplayName( - maCurrentStyle.maParentName, SfxStyleFamily::Para)); + rBase.SetParent(ScStyleNameConversion::ProgrammaticToDisplayName(maCurrentStyle.maParentName, + SfxStyleFamily::Para)); SfxItemSet& rSet = rBase.GetItemSet(); const ScOrcusXf& rXf = mrXfs[maCurrentStyle.mnXFId]; @@ -2141,46 +2143,25 @@ void ScOrucsImportCellStyle::commit() maCurrentStyle = ScOrcusCellStyle(); } -void ScOrcusImportXf::reset( std::vector<ScOrcusXf>& rXfs ) +void ScOrcusImportXf::reset(std::vector<ScOrcusXf>& rXfs) { mpXfs = &rXfs; maCurrentXf = ScOrcusXf(); } -void ScOrcusImportXf::set_font(std::size_t index) -{ - maCurrentXf.mnFontId = index; -} +void ScOrcusImportXf::set_font(std::size_t index) { maCurrentXf.mnFontId = index; } -void ScOrcusImportXf::set_fill(std::size_t index) -{ - maCurrentXf.mnFillId = index; -} +void ScOrcusImportXf::set_fill(std::size_t index) { maCurrentXf.mnFillId = index; } -void ScOrcusImportXf::set_border(std::size_t index) -{ - maCurrentXf.mnBorderId = index; -} +void ScOrcusImportXf::set_border(std::size_t index) { maCurrentXf.mnBorderId = index; } -void ScOrcusImportXf::set_protection(std::size_t index) -{ - maCurrentXf.mnProtectionId = index; -} +void ScOrcusImportXf::set_protection(std::size_t index) { maCurrentXf.mnProtectionId = index; } -void ScOrcusImportXf::set_number_format(std::size_t index) -{ - maCurrentXf.mnNumberFormatId = index; -} +void ScOrcusImportXf::set_number_format(std::size_t index) { maCurrentXf.mnNumberFormatId = index; } -void ScOrcusImportXf::set_style_xf(std::size_t index) -{ - maCurrentXf.mnStyleXf = index; -} +void ScOrcusImportXf::set_style_xf(std::size_t index) { maCurrentXf.mnStyleXf = index; } -void ScOrcusImportXf::set_apply_alignment(bool b) -{ - maCurrentXf.mbApplyAlignment = b; -} +void ScOrcusImportXf::set_apply_alignment(bool b) { maCurrentXf.mbApplyAlignment = b; } void ScOrcusImportXf::set_horizontal_alignment(os::hor_alignment_t align) { @@ -2205,8 +2186,7 @@ void ScOrcusImportXf::set_horizontal_alignment(os::hor_alignment_t align) case os::hor_alignment_t::unknown: maCurrentXf.meHorAlignment = SvxCellHorJustify::Standard; break; - default: - ; + default:; } maCurrentXf.mbApplyAlignment = true; } @@ -2234,21 +2214,14 @@ void ScOrcusImportXf::set_vertical_alignment(os::ver_alignment_t align) case os::ver_alignment_t::unknown: maCurrentXf.meVerAlignment = SvxCellVerJustify::Standard; break; - default: - ; + default:; } maCurrentXf.mbApplyAlignment = true; } -void ScOrcusImportXf::set_wrap_text(bool b) -{ - maCurrentXf.mbWrapText = b; -} +void ScOrcusImportXf::set_wrap_text(bool b) { maCurrentXf.mbWrapText = b; } -void ScOrcusImportXf::set_shrink_to_fit(bool b) -{ - maCurrentXf.mbShrinkToFit = b; -} +void ScOrcusImportXf::set_shrink_to_fit(bool b) { maCurrentXf.mbShrinkToFit = b; } std::size_t ScOrcusImportXf::commit() { @@ -2256,15 +2229,14 @@ std::size_t ScOrcusImportXf::commit() return mpXfs->size() - 1; } - -ScOrcusStyles::ScOrcusStyles( ScOrcusFactory& rFactory, bool bSkipDefaultStyles ) : - mrFactory(rFactory), - maFontStyle(rFactory, maFonts), - maFillStyle(maFills), - maBorderStyle(maBorders), - maCellProtection(maProtections), - maNumberFormat(rFactory, maNumberFormats), - maCellStyle(rFactory, *this, maCellStyleXfs) +ScOrcusStyles::ScOrcusStyles(ScOrcusFactory& rFactory, bool bSkipDefaultStyles) + : mrFactory(rFactory) + , maFontStyle(rFactory, maFonts) + , maFillStyle(maFills) + , maBorderStyle(maBorders) + , maCellProtection(maProtections) + , maNumberFormat(rFactory, maNumberFormats) + , maCellStyle(rFactory, *this, maCellStyleXfs) { ScDocument& rDoc = rFactory.getDoc().getDoc(); if (!bSkipDefaultStyles && !rDoc.GetStyleSheetPool()->HasStandardStyles()) @@ -2283,7 +2255,7 @@ std::ostream& operator<<(std::ostream& rStrm, const Color& rColor) } */ -void ScOrcusStyles::applyXfToItemSet( SfxItemSet& rSet, const ScOrcusXf& rXf ) +void ScOrcusStyles::applyXfToItemSet(SfxItemSet& rSet, const ScOrcusXf& rXf) { size_t nFontId = rXf.mnFontId; if (nFontId >= maFonts.size()) @@ -2344,7 +2316,7 @@ void ScOrcusStyles::applyXfToItemSet( SfxItemSet& rSet, const ScOrcusXf& rXf ) rSet.Put(ScShrinkToFitCell(*rXf.mbShrinkToFit)); } -void ScOrcusStyles::applyXfToItemSet( SfxItemSet& rSet, std::size_t xfId ) +void ScOrcusStyles::applyXfToItemSet(SfxItemSet& rSet, std::size_t xfId) { SAL_INFO("sc.orcus.style", "applyXfToitemSet: " << xfId); if (maCellXfs.size() <= xfId) @@ -2413,68 +2385,16 @@ os::iface::import_cell_style* ScOrcusStyles::start_cell_style() return &maCellStyle; } -void ScOrcusStyles::set_font_count(size_t /*n*/) -{ -} - -void ScOrcusStyles::set_fill_count(size_t /*n*/) -{ -} - -void ScOrcusStyles::set_border_count(size_t /*n*/) -{ -} - -void ScOrcusStyles::set_number_format_count(size_t /*n*/) -{ -} +void ScOrcusStyles::set_font_count(size_t /*n*/) {} -void ScOrcusStyles::set_xf_count(os::xf_category_t /*cat*/, size_t /*n*/) -{ -} +void ScOrcusStyles::set_fill_count(size_t /*n*/) {} -void ScOrcusStyles::set_cell_style_count(size_t /*n*/) -{ -} +void ScOrcusStyles::set_border_count(size_t /*n*/) {} -// auto filter import +void ScOrcusStyles::set_number_format_count(size_t /*n*/) {} -ScOrcusAutoFilter::ScOrcusAutoFilter( const ScOrcusGlobalSettings& rGS ) : - mrGlobalSettings(rGS) -{ -} - -ScOrcusAutoFilter::~ScOrcusAutoFilter() -{ -} +void ScOrcusStyles::set_xf_count(os::xf_category_t /*cat*/, size_t /*n*/) {} -void ScOrcusAutoFilter::set_range(const os::range_t& range) -{ - maRange.aStart.SetRow(range.first.row); - maRange.aStart.SetCol(range.first.column); - maRange.aEnd.SetRow(range.last.row); - maRange.aEnd.SetCol(range.last.column); -} - -void ScOrcusAutoFilter::set_column(os::col_t col) -{ - SAL_INFO("sc.orcus.autofilter", "set_column: " << col); -} - -void ScOrcusAutoFilter::append_column_match_value(std::string_view value) -{ - OUString aString(value.data(), value.size(), mrGlobalSettings.getTextEncoding()); - SAL_INFO("sc.orcus.autofilter", "append_column_match_value: " << aString); -} - -void ScOrcusAutoFilter::commit_column() -{ - SAL_INFO("sc.orcus.autofilter", "commit column"); -} - -void ScOrcusAutoFilter::commit() -{ - SAL_INFO("sc.orcus.autofilter", "commit"); -} +void ScOrcusStyles::set_cell_style_count(size_t /*n*/) {} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/orcus/xmlcontext.cxx b/sc/source/filter/orcus/xmlcontext.cxx index 1588fad3424f..8a15a52ad3a4 100644 --- a/sc/source/filter/orcus/xmlcontext.cxx +++ b/sc/source/filter/orcus/xmlcontext.cxx @@ -31,30 +31,36 @@ #include <string> #include <sstream> -namespace com::sun::star::ucb { class XCommandEnvironment; } +namespace com::sun::star::ucb +{ +class XCommandEnvironment; +} #define BUFFER_SIZE 4096 using namespace com::sun::star; -namespace { - +namespace +{ ScOrcusXMLTreeParam::EntryData& setUserDataToEntry(weld::TreeView& rControl, - const weld::TreeIter& rEntry, ScOrcusXMLTreeParam::UserDataStoreType& rStore, ScOrcusXMLTreeParam::EntryType eType) + const weld::TreeIter& rEntry, + ScOrcusXMLTreeParam::UserDataStoreType& rStore, + ScOrcusXMLTreeParam::EntryType eType) { rStore.push_back(std::make_unique<ScOrcusXMLTreeParam::EntryData>(eType)); rControl.set_id(rEntry, weld::toId(rStore.back().get())); return *rStore.back(); } -void setEntityNameToUserData( - ScOrcusXMLTreeParam::EntryData& rEntryData, - const orcus::xml_structure_tree::entity_name& entity, const orcus::xml_structure_tree::walker& walker) +void setEntityNameToUserData(ScOrcusXMLTreeParam::EntryData& rEntryData, + const orcus::xml_structure_tree::entity_name& entity, + const orcus::xml_structure_tree::walker& walker) { rEntryData.mnNamespaceID = walker.get_xmlns_index(entity.ns); } -OUString toString(const orcus::xml_structure_tree::entity_name& entity, const orcus::xml_structure_tree::walker& walker) +OUString toString(const orcus::xml_structure_tree::entity_name& entity, + const orcus::xml_structure_tree::walker& walker) { OUStringBuffer aBuf; if (entity.ns) @@ -68,18 +74,17 @@ OUString toString(const orcus::xml_structure_tree::entity_name& entity, const or return aBuf.makeStringAndClear(); } -void populateTree( - weld::TreeView& rTreeCtrl, orcus::xml_structure_tree::walker& rWalker, - const orcus::xml_structure_tree::entity_name& rElemName, bool bRepeat, - const weld::TreeIter* pParent, ScOrcusXMLTreeParam& rParam) +void populateTree(weld::TreeView& rTreeCtrl, orcus::xml_structure_tree::walker& rWalker, + const orcus::xml_structure_tree::entity_name& rElemName, bool bRepeat, + const weld::TreeIter* pParent, ScOrcusXMLTreeParam& rParam) { OUString sEntry(toString(rElemName, rWalker)); std::unique_ptr<weld::TreeIter> xEntry(rTreeCtrl.make_iterator()); rTreeCtrl.insert(pParent, -1, &sEntry, nullptr, nullptr, nullptr, false, xEntry.get()); rTreeCtrl.set_image(*xEntry, rParam.maImgElementDefault, -1); - ScOrcusXMLTreeParam::EntryData& rEntryData = setUserDataToEntry(rTreeCtrl, - *xEntry, rParam.m_UserDataStore, + ScOrcusXMLTreeParam::EntryData& rEntryData = setUserDataToEntry( + rTreeCtrl, *xEntry, rParam.m_UserDataStore, bRepeat ? ScOrcusXMLTreeParam::ElementRepeat : ScOrcusXMLTreeParam::ElementDefault); setEntityNameToUserData(rEntryData, rElemName, rWalker); @@ -87,7 +92,7 @@ void populateTree( if (bRepeat) { // Recurring elements use different icon. - rTreeCtrl.set_image(*xEntry, rParam.maImgElementRepeat, -1); + rTreeCtrl.set_image(*xEntry, rParam.maImgElementRepeat, -1); } orcus::xml_structure_tree::entity_names_type aNames = rWalker.get_attributes(); @@ -99,8 +104,8 @@ void populateTree( std::unique_ptr<weld::TreeIter> xAttr(rTreeCtrl.make_iterator()); rTreeCtrl.insert(xEntry.get(), -1, &sAttr, nullptr, nullptr, nullptr, false, xAttr.get()); - ScOrcusXMLTreeParam::EntryData& rAttrData = - setUserDataToEntry(rTreeCtrl, *xAttr, rParam.m_UserDataStore, ScOrcusXMLTreeParam::Attribute); + ScOrcusXMLTreeParam::EntryData& rAttrData = setUserDataToEntry( + rTreeCtrl, *xAttr, rParam.m_UserDataStore, ScOrcusXMLTreeParam::Attribute); setEntityNameToUserData(rAttrData, rAttrName, rWalker); rTreeCtrl.set_image(*xAttr, rParam.maImgAttribute, -1); @@ -123,22 +128,21 @@ void populateTree( class TreeUpdateSwitch { weld::TreeView& mrTreeCtrl; + public: - explicit TreeUpdateSwitch(weld::TreeView& rTreeCtrl) : mrTreeCtrl(rTreeCtrl) + explicit TreeUpdateSwitch(weld::TreeView& rTreeCtrl) + : mrTreeCtrl(rTreeCtrl) { mrTreeCtrl.freeze(); } - ~TreeUpdateSwitch() - { - mrTreeCtrl.thaw(); - } + ~TreeUpdateSwitch() { mrTreeCtrl.thaw(); } }; void loadContentFromURL(const OUString& rURL, std::string& rStrm) { - ucbhelper::Content aContent( - rURL, uno::Reference<ucb::XCommandEnvironment>(), comphelper::getProcessComponentContext()); + ucbhelper::Content aContent(rURL, uno::Reference<ucb::XCommandEnvironment>(), + comphelper::getProcessComponentContext()); uno::Reference<io::XInputStream> xStrm = aContent.openStream(); std::ostringstream aStrmBuf; @@ -149,16 +153,18 @@ void loadContentFromURL(const OUString& rURL, std::string& rStrm) nBytesRead = xStrm->readBytes(aBytes, BUFFER_SIZE); const sal_Int8* p = aBytes.getConstArray(); aStrmBuf << std::string(p, p + nBytesRead); - } - while (nBytesRead == BUFFER_SIZE); + } while (nBytesRead == BUFFER_SIZE); rStrm = aStrmBuf.str(); } - } -ScOrcusXMLContextImpl::ScOrcusXMLContextImpl(ScDocument& rDoc, OUString aPath) : - ScOrcusXMLContext(), mrDoc(rDoc), maPath(std::move(aPath)) {} +ScOrcusXMLContextImpl::ScOrcusXMLContextImpl(ScDocument& rDoc, OUString aPath) + : ScOrcusXMLContext() + , mrDoc(rDoc) + , maPath(std::move(aPath)) +{ +} ScOrcusXMLContextImpl::~ScOrcusXMLContextImpl() {} @@ -196,7 +202,7 @@ void ScOrcusXMLContextImpl::loadXMLStructure(weld::TreeView& rTreeCtrl, ScOrcusX SAL_WARN("sc.orcus", "parsing failed with an unknown error " << e.what()); } - rTreeCtrl.all_foreach([&rTreeCtrl](weld::TreeIter& rEntry){ + rTreeCtrl.all_foreach([&rTreeCtrl](weld::TreeIter& rEntry) { rTreeCtrl.expand_row(rEntry); return false; }); @@ -235,10 +241,8 @@ void ScOrcusXMLContextImpl::importXML(const ScOrcusImportXMLParam& rParam) { OUString aTabName; mrDoc.GetName(rLink.maPos.Tab(), aTabName); - filter.set_cell_link( - rLink.maPath, - aTabName.toUtf8(), - rLink.maPos.Row(), rLink.maPos.Col()); + filter.set_cell_link(rLink.maPath, aTabName.toUtf8(), rLink.maPos.Row(), + rLink.maPos.Col()); } // Set range links. @@ -246,23 +250,16 @@ void ScOrcusXMLContextImpl::importXML(const ScOrcusImportXMLParam& rParam) { OUString aTabName; mrDoc.GetName(rLink.maPos.Tab(), aTabName); - filter.start_range( - aTabName.toUtf8(), - rLink.maPos.Row(), rLink.maPos.Col()); + filter.start_range(aTabName.toUtf8(), rLink.maPos.Row(), rLink.maPos.Col()); std::for_each(rLink.maFieldPaths.begin(), rLink.maFieldPaths.end(), - [&filter](const OString& rFieldPath) - { - filter.append_field_link(rFieldPath, std::string_view()); - } - ); - - std::for_each(rLink.maRowGroups.begin(), rLink.maRowGroups.end(), - [&filter] (const OString& rRowGroup) - { - filter.set_range_row_group(rRowGroup); - } - ); + [&filter](const OString& rFieldPath) { + filter.append_field_link(rFieldPath, std::string_view()); + }); + + std::for_each( + rLink.maRowGroups.begin(), rLink.maRowGroups.end(), + [&filter](const OString& rRowGroup) { filter.set_range_row_group(rRowGroup); }); filter.commit_range(); } diff --git a/sc/source/filter/xcl97/xcl97esc.cxx b/sc/source/filter/xcl97/xcl97esc.cxx index b2f81453c667..525ddb1bf44e 100644 --- a/sc/source/filter/xcl97/xcl97esc.cxx +++ b/sc/source/filter/xcl97/xcl97esc.cxx @@ -240,7 +240,11 @@ EscherExHostAppData* XclEscherEx::StartShape( const Reference< XShape >& rxShape SAL_WARN("sc", "XclEscherEx::StartShape, this control can't get the property ControlTypeinMSO!"); } if( nMsCtlType == 2 ) //OCX Form Control + { pCurrXclObj = CreateOCXCtrlObj( rxShape, pChildAnchor ).release(); + if(!pCurrXclObj) // Give a chance to handle control object with XclExpTbxControlObj instead of XclObjAny + pCurrXclObj = CreateTBXCtrlObj( rxShape, pChildAnchor ).release(); + } else //TBX Form Control pCurrXclObj = CreateTBXCtrlObj( rxShape, pChildAnchor ).release(); if( !pCurrXclObj ) diff --git a/sc/source/filter/xcl97/xcl97rec.cxx b/sc/source/filter/xcl97/xcl97rec.cxx index 76b47c43bf10..e07e84c5e39d 100644 --- a/sc/source/filter/xcl97/xcl97rec.cxx +++ b/sc/source/filter/xcl97/xcl97rec.cxx @@ -1304,6 +1304,13 @@ bool ScURLTransformer::isExternalURL(const OUString& rURL) const void XclObjAny::SaveXml( XclExpXmlStream& rStrm ) { + // Return early if unknown shape type, otherwise bogus drawing XML gets written + if (!ShapeExport::IsShapeTypeKnown(mxShape)) + { + SAL_INFO("sc.filter", "unknown shape"); + return; + } + // Do not output any of the detective shapes and validation circles. SdrObject* pObject = SdrObject::getSdrObjectFromXShape(mxShape); if (pObject) diff --git a/sc/source/filter/xml/SparklineGroupsImportContext.hxx b/sc/source/filter/xml/SparklineGroupsImportContext.hxx index 197eca9ca09a..54bbb51fd50f 100644 --- a/sc/source/filter/xml/SparklineGroupsImportContext.hxx +++ b/sc/source/filter/xml/SparklineGroupsImportContext.hxx @@ -16,11 +16,6 @@ #include <rangelst.hxx> #include <docmodel/color/ComplexColor.hxx> -namespace sax_fastparser -{ -class FastAttributeList; -} - namespace sc { class SparklineGroup; diff --git a/sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx b/sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx index e975953517aa..45e113fe0afe 100644 --- a/sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx +++ b/sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx @@ -22,11 +22,6 @@ #include <xmloff/xmltoken.hxx> #include <rtl/ref.hxx> -namespace com::sun::star::text -{ -class XText; -} - class ScChangeAction; class ScChangeTrack; class ScDocument; diff --git a/sc/source/filter/xml/XMLExportDataPilot.cxx b/sc/source/filter/xml/XMLExportDataPilot.cxx index b49bad992a42..4eb7ddefa82c 100644 --- a/sc/source/filter/xml/XMLExportDataPilot.cxx +++ b/sc/source/filter/xml/XMLExportDataPilot.cxx @@ -136,7 +136,7 @@ void ScXMLExportDataPilot::WriteDPCondition(const ScQueryEntry& aQueryEntry, boo SvXMLElementExport aElemC(rExport, XML_NAMESPACE_TABLE, XML_FILTER_CONDITION, true, true); } -void ScXMLExportDataPilot::WriteDPFilter(ScDocument& rDoc, const ScQueryParam& aQueryParam) +void ScXMLExportDataPilot::WriteDPFilter(const ScDocument& rDoc, const ScQueryParam& aQueryParam) { SCSIZE nQueryEntryCount = aQueryParam.GetEntryCount(); if (nQueryEntryCount <= 0) diff --git a/sc/source/filter/xml/XMLExportDataPilot.hxx b/sc/source/filter/xml/XMLExportDataPilot.hxx index 882ebc9c86c6..5c593c07ad55 100644 --- a/sc/source/filter/xml/XMLExportDataPilot.hxx +++ b/sc/source/filter/xml/XMLExportDataPilot.hxx @@ -46,7 +46,7 @@ class ScXMLExportDataPilot static OUString getDPOperatorXML(const ScQueryOp aFilterOperator, const utl::SearchParam::SearchType eSearchType); void WriteDPCondition(const ScQueryEntry& aQueryEntry, bool bIsCaseSensitive, utl::SearchParam::SearchType eSearchType); - void WriteDPFilter(ScDocument& rDoc, const ScQueryParam& aQueryParam); + void WriteDPFilter(const ScDocument& rDoc, const ScQueryParam& aQueryParam); void WriteFieldReference(const ScDPSaveDimension* pDim); void WriteSortInfo(const ScDPSaveDimension* pDim); diff --git a/sc/source/filter/xml/XMLStylesExportHelper.cxx b/sc/source/filter/xml/XMLStylesExportHelper.cxx index 9d81eb609436..b531306f5af8 100644 --- a/sc/source/filter/xml/XMLStylesExportHelper.cxx +++ b/sc/source/filter/xml/XMLStylesExportHelper.cxx @@ -146,7 +146,7 @@ void ScMyValidationsContainer::AddValidation(const uno::Any& aTempAny, } } -OUString ScMyValidationsContainer::GetCondition(ScDocument& rDoc, ScXMLExport& rExport, const ScMyValidation& aValidation) +OUString ScMyValidationsContainer::GetCondition(const ScDocument& rDoc, const ScXMLExport& rExport, const ScMyValidation& aValidation) { /* ATTENTION! Should the condition to not write sheet::ValidationType_ANY * ever be changed, adapt the conditional call of @@ -308,7 +308,7 @@ void ScMyValidationsContainer::WriteMessage(ScXMLExport& rExport, } } -void ScMyValidationsContainer::WriteValidations(ScDocument& rDoc, ScXMLExport& rExport) +void ScMyValidationsContainer::WriteValidations(const ScDocument& rDoc, ScXMLExport& rExport) { if (aValidationVec.empty()) return; @@ -1021,7 +1021,7 @@ sal_Int32 ScRowStyles::GetStyleNameIndex(const sal_Int32 nTable, const sal_Int32 return maCache.mnStyle; StylesType& r = *aTables[nTable]; - if (!r.is_tree_valid()) + if (!r.valid_tree()) r.build_tree(); sal_Int32 nStyle(0); sal_Int32 nStart(0), nEnd(0); diff --git a/sc/source/filter/xml/XMLStylesExportHelper.hxx b/sc/source/filter/xml/XMLStylesExportHelper.hxx index a23c6b393ac5..f94108df7b44 100644 --- a/sc/source/filter/xml/XMLStylesExportHelper.hxx +++ b/sc/source/filter/xml/XMLStylesExportHelper.hxx @@ -68,12 +68,12 @@ public: ~ScMyValidationsContainer(); void AddValidation(const css::uno::Any& aAny, sal_Int32& nValidationIndex); - static OUString GetCondition(ScDocument& rDoc, ScXMLExport& rExport, const ScMyValidation& aValidation); + static OUString GetCondition(const ScDocument& rDoc, const ScXMLExport& rExport, const ScMyValidation& aValidation); static OUString GetBaseCellAddress(const ScDocument* pDoc, const ScAddress& aCell); static void WriteMessage(ScXMLExport& rExport, const OUString& sTitle, const OUString& sMessage, const bool bShowMessage, const bool bIsHelpMessage); - void WriteValidations(ScDocument& rDoc, ScXMLExport& rExport); + void WriteValidations(const ScDocument& rDoc, ScXMLExport& rExport); const OUString& GetValidationName(const sal_Int32 nIndex); }; diff --git a/sc/source/filter/xml/XMLTableMasterPageExport.hxx b/sc/source/filter/xml/XMLTableMasterPageExport.hxx index 2ae7a127e2c3..7f7aec88dc94 100644 --- a/sc/source/filter/xml/XMLTableMasterPageExport.hxx +++ b/sc/source/filter/xml/XMLTableMasterPageExport.hxx @@ -22,10 +22,6 @@ #include <xmloff/xmltoken.hxx> #include <xmloff/XMLTextMasterPageExport.hxx> -namespace com::sun::star { - namespace text { class XText; } -} - namespace com::sun::star::sheet { class XHeaderFooterContent; } class ScXMLExport; diff --git a/sc/source/filter/xml/XMLTableSourceContext.cxx b/sc/source/filter/xml/XMLTableSourceContext.cxx index 9f66f6f4a089..a6a95a1473ec 100644 --- a/sc/source/filter/xml/XMLTableSourceContext.cxx +++ b/sc/source/filter/xml/XMLTableSourceContext.cxx @@ -23,6 +23,7 @@ #include <docsh.hxx> #include "xmlsubti.hxx" #include <tablink.hxx> +#include <cellsuno.hxx> #include <xmloff/xmltoken.hxx> #include <xmloff/xmlnamespace.hxx> #include <sax/tools/converter.hxx> @@ -79,7 +80,7 @@ void SAL_CALL ScXMLTableSourceContext::endFastElement( sal_Int32 /*nElement*/ ) if (sLink.isEmpty()) return; - uno::Reference <sheet::XSheetLinkable> xLinkable (GetScImport().GetTables().GetCurrentXSheet(), uno::UNO_QUERY); + rtl::Reference<ScTableSheetObj> xLinkable (GetScImport().GetTables().GetCurrentXSheet()); ScDocument* pDoc(GetScImport().GetDocument()); if (!(xLinkable.is() && pDoc)) return; diff --git a/sc/source/filter/xml/XMLTrackedChangesContext.cxx b/sc/source/filter/xml/XMLTrackedChangesContext.cxx index 29d0ab99740d..ee30c04ca084 100644 --- a/sc/source/filter/xml/XMLTrackedChangesContext.cxx +++ b/sc/source/filter/xml/XMLTrackedChangesContext.cxx @@ -830,18 +830,14 @@ void ScXMLChangeCellContext::CreateTextPContext(bool bIsNewParagraph) mpEditTextObj = new ScEditEngineTextObj(); mpEditTextObj->GetEditEngine()->SetEditTextObjectPool(pDoc->GetEditPool()); - uno::Reference <text::XText> xText(mpEditTextObj); - if (xText.is()) + uno::Reference<text::XTextCursor> xTextCursor(mpEditTextObj->createTextCursor()); + if (bIsNewParagraph) { - uno::Reference<text::XTextCursor> xTextCursor(xText->createTextCursor()); - if (bIsNewParagraph) - { - xText->setString(sText); - xTextCursor->gotoEnd(false); - xText->insertControlCharacter(xTextCursor, text::ControlCharacter::PARAGRAPH_BREAK, false); - } - GetScImport().GetTextImport()->SetCursor(xTextCursor); + mpEditTextObj->setString(sText); + xTextCursor->gotoEnd(false); + mpEditTextObj->insertControlCharacter(xTextCursor, text::ControlCharacter::PARAGRAPH_BREAK, false); } + GetScImport().GetTextImport()->SetCursor(xTextCursor); } void SAL_CALL ScXMLChangeCellContext::endFastElement( sal_Int32 /*nElement*/ ) diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index 84c0409d1f45..6efbd607a7b1 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -930,18 +930,26 @@ void ScXMLTableRowCellContext::SetAnnotation(const ScAddress& rPos) double fDate; if (rXMLImport.GetMM100UnitConverter().convertDateTime(fDate, mxAnnotationData->maCreateDate)) { - SvNumberFormatter* pNumForm = pDoc->GetFormatTable(); - - // Date string is in format ISO 8601 inside <dc:date> - // i.e: 2024-08-14 or 2024-08-14T23:55:06 or 20240814T235506 - // Time always has prefix 'T' - sal_uInt32 nfIndex = pNumForm->GetFormatIndex( - mxAnnotationData->maCreateDate.indexOf('T') > -1 ? NF_DATETIME_SYS_DDMMYYYY_HHMMSS - : NF_DATE_SYS_DDMMYYYY, - LANGUAGE_SYSTEM); OUString aDate; - const Color* pColor = nullptr; - pNumForm->GetOutputString( fDate, nfIndex, aDate, &pColor ); + if (comphelper::LibreOfficeKit::isActive()) + { + //online handles the date format itself in browser + aDate = mxAnnotationData->maCreateDate; + } + else + { + SvNumberFormatter* pNumForm = pDoc->GetFormatTable(); + + // Date string is in format ISO 8601 inside <dc:date> + // i.e: 2024-08-14 or 2024-08-14T23:55:06 or 20240814T235506 + // Time always has prefix 'T' + sal_uInt32 nfIndex = pNumForm->GetFormatIndex( + mxAnnotationData->maCreateDate.indexOf('T') > -1 ? NF_DATETIME_SYS_DDMMYYYY_HHMMSS + : NF_DATE_SYS_DDMMYYYY, + LANGUAGE_SYSTEM); + const Color* pColor = nullptr; + pNumForm->GetOutputString( fDate, nfIndex, aDate, &pColor ); + } pNote->SetDate( aDate ); } pNote->SetAuthor( mxAnnotationData->maAuthor ); diff --git a/sc/source/filter/xml/xmlcoli.cxx b/sc/source/filter/xml/xmlcoli.cxx index 5114296d9760..7c0944b6bdc7 100644 --- a/sc/source/filter/xml/xmlcoli.cxx +++ b/sc/source/filter/xml/xmlcoli.cxx @@ -21,6 +21,7 @@ #include "xmlimprt.hxx" #include "xmlstyli.hxx" #include <document.hxx> +#include <cellsuno.hxx> #include <docuno.hxx> #include <olinetab.hxx> #include <sheetdata.hxx> @@ -88,7 +89,7 @@ void SAL_CALL ScXMLTableColContext::endFastElement( sal_Int32 /*nElement*/ ) ScDocument* pDoc = rXMLImport.GetDocument(); SCTAB nSheet = rXMLImport.GetTables().GetCurrentSheet(); sal_Int32 nCurrentColumn = rXMLImport.GetTables().GetCurrentColCount(); - uno::Reference<sheet::XSpreadsheet> xSheet(rXMLImport.GetTables().GetCurrentXSheet()); + rtl::Reference<ScTableSheetObj> xSheet(rXMLImport.GetTables().GetCurrentXSheet()); if(pDoc && xSheet.is()) { sal_Int32 nLastColumn(nCurrentColumn + nColCount - 1); @@ -207,7 +208,7 @@ void SAL_CALL ScXMLTableColsContext::endFastElement( sal_Int32 /*nElement*/ ) nHeaderEndCol--; if (nHeaderStartCol <= nHeaderEndCol) { - uno::Reference <sheet::XPrintAreas> xPrintAreas (rXMLImport.GetTables().GetCurrentXSheet(), uno::UNO_QUERY); + rtl::Reference<ScTableSheetObj> xPrintAreas (rXMLImport.GetTables().GetCurrentXSheet()); if (xPrintAreas.is()) { if (!xPrintAreas->getPrintTitleColumns()) diff --git a/sc/source/filter/xml/xmlcondformat.cxx b/sc/source/filter/xml/xmlcondformat.cxx index 4e2164ae00f8..c0cf2ee5b603 100644 --- a/sc/source/filter/xml/xmlcondformat.cxx +++ b/sc/source/filter/xml/xmlcondformat.cxx @@ -909,7 +909,7 @@ ScXMLFormattingEntryContext::ScXMLFormattingEntryContext( ScXMLImport& rImport, { OUString sVal; OUString sType; - bool bGreaterThanOrEqual = true; + ScConditionMode eMode = ScConditionMode::EqGreater; if ( rAttrList.is() ) { @@ -924,7 +924,7 @@ ScXMLFormattingEntryContext::ScXMLFormattingEntryContext( ScXMLImport& rImport, sVal = aIter.toString(); break; case XML_ELEMENT( CALC_EXT, XML_GREATER_EQUAL ): - bGreaterThanOrEqual = aIter.toBoolean(); + eMode = aIter.toBoolean() ? eMode : ScConditionMode::Greater; break; default: break; @@ -938,7 +938,7 @@ ScXMLFormattingEntryContext::ScXMLFormattingEntryContext( ScXMLImport& rImport, pColorScaleEntry = new ScColorScaleEntry(nVal, Color()); setColorEntryType(sType, pColorScaleEntry, sVal, GetScImport()); - pColorScaleEntry->SetGreaterThanOrEqual(bGreaterThanOrEqual); + pColorScaleEntry->SetMode(eMode); } namespace { diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx index e41e3ece60c4..0bef31563dfc 100644 --- a/sc/source/filter/xml/xmlexprt.cxx +++ b/sc/source/filter/xml/xmlexprt.cxx @@ -706,7 +706,7 @@ ScMyAreaLinksContainer ScXMLExport::GetAreaLinks(ScDocument& rDoc) } // core implementation -ScMyDetectiveOpContainer ScXMLExport::GetDetectiveOpList(ScDocument& rDoc) +ScMyDetectiveOpContainer ScXMLExport::GetDetectiveOpList(const ScDocument& rDoc) { ScDetOpList* pOpList(rDoc.GetDetOpList()); if( !pOpList ) @@ -877,7 +877,7 @@ void ScXMLExport::ExportColumns(const sal_Int32 nTable, const ScRange& aColumnHe pGroupColumns->CloseGroups(nColumn - 1); } -void ScXMLExport::ExportExternalRefCacheStyles(ScDocument& rDoc) +void ScXMLExport::ExportExternalRefCacheStyles(const ScDocument& rDoc) { sal_Int32 nEntryIndex = GetCellStylesPropertySetMapper()->FindEntryIndex( "NumberFormat", XML_NAMESPACE_STYLE, u"data-style-name"); @@ -1251,7 +1251,7 @@ const SvxFieldData* toXMLPropertyStates( } -void ScXMLExport::ExportCellTextAutoStyles(ScDocument& rDoc, sal_Int32 nTable) +void ScXMLExport::ExportCellTextAutoStyles(const ScDocument& rDoc, sal_Int32 nTable) { if (!ValidTab(nTable)) return; @@ -1616,7 +1616,7 @@ void ScXMLExport::ExportFormatRanges(ScDocument& rDoc, const sal_Int32 nStartCol } } -void ScXMLExport::GetColumnRowHeader(ScDocument& rDoc, bool& rHasColumnHeader, ScRange& rColumnHeaderRange, +void ScXMLExport::GetColumnRowHeader(const ScDocument& rDoc, bool& rHasColumnHeader, ScRange& rColumnHeaderRange, bool& rHasRowHeader, ScRange& rRowHeaderRange, OUString& rPrintRanges) const { @@ -3047,7 +3047,7 @@ void ScXMLExport::WriteTable(ScDocument& rDoc, sal_Int32 nTable, const uno::Refe namespace { -void writeContent(ScDocument& rDoc, ScXMLExport& rExport, const OUString& rStyleName, +void writeContent(const ScDocument& rDoc, ScXMLExport& rExport, const OUString& rStyleName, const OUString& rContent, const SvxFieldData* pField) { std::unique_ptr<SvXMLElementExport> pElem; @@ -3138,7 +3138,7 @@ void writeContent(ScDocument& rDoc, ScXMLExport& rExport, const OUString& rStyle } void flushParagraph( - ScDocument& rDoc, + const ScDocument& rDoc, ScXMLExport& rExport, std::u16string_view rParaText, rtl::Reference<XMLPropertySetMapper> const & xMapper, rtl::Reference<SvXMLAutoStylePoolP> const & xStylePool, const ScXMLEditAttributeMap& rAttrMap, @@ -3180,7 +3180,7 @@ void flushParagraph( } -void ScXMLExport::WriteCell(ScDocument& rDoc, ScMyCell& aCell, sal_Int32 nEqualCellCount) +void ScXMLExport::WriteCell(ScDocument& rDoc, const ScMyCell& aCell, sal_Int32 nEqualCellCount) { // nEqualCellCount is the number of additional cells SetRepeatAttribute(nEqualCellCount, (aCell.nType != table::CellContentType_EMPTY)); @@ -3341,7 +3341,7 @@ void ScXMLExport::WriteCell(ScDocument& rDoc, ScMyCell& aCell, sal_Int32 nEqualC IncrementProgressBar(false); } -void ScXMLExport::WriteEditCell(ScDocument& rDoc, const EditTextObject* pText) +void ScXMLExport::WriteEditCell(const ScDocument& rDoc, const EditTextObject* pText) { rtl::Reference<XMLPropertySetMapper> xMapper = GetTextParagraphExport()->GetTextPropMapper()->getPropertySetMapper(); rtl::Reference<SvXMLAutoStylePoolP> xStylePool = GetAutoStylePool(); @@ -3412,7 +3412,7 @@ void ScXMLExport::WriteMultiLineFormulaResult(const ScFormulaCell* pCell) Characters(aContent); } -void ScXMLExport::ExportShape(ScDocument& rDoc, const uno::Reference < drawing::XShape >& xShape, awt::Point* pPoint) +void ScXMLExport::ExportShape(const ScDocument& rDoc, const uno::Reference < drawing::XShape >& xShape, awt::Point* pPoint) { uno::Reference < beans::XPropertySet > xShapeProps ( xShape, uno::UNO_QUERY ); bool bIsChart( false ); @@ -3506,7 +3506,7 @@ void ScXMLExport::ExportShape(ScDocument& rDoc, const uno::Reference < drawing:: IncrementProgressBar(false); } -void ScXMLExport::WriteShapes(ScDocument& rDoc, const ScMyCell& rMyCell) +void ScXMLExport::WriteShapes(const ScDocument& rDoc, const ScMyCell& rMyCell) { if( !(rMyCell.bHasShape && !rMyCell.aShapeList.empty()) ) return; @@ -3674,7 +3674,7 @@ void ScXMLExport::WriteShapes(ScDocument& rDoc, const ScMyCell& rMyCell) } } -void ScXMLExport::WriteTableShapes(ScDocument& rDoc) +void ScXMLExport::WriteTableShapes(const ScDocument& rDoc) { ScMyTableShapes* pTableShapes(pSharedData->GetTableShapes()); if (!pTableShapes || (*pTableShapes)[nCurrentTable].empty()) @@ -3832,7 +3832,7 @@ void ScXMLExport::WriteAnnotation(ScDocument& rDoc, const ScMyCell& rMyCell) pCurrentCell = nullptr; } -void ScXMLExport::WriteDetective(ScDocument& rDoc, const ScMyCell& rMyCell) +void ScXMLExport::WriteDetective(const ScDocument& rDoc, const ScMyCell& rMyCell) { if( !(rMyCell.bHasDetectiveObj || rMyCell.bHasDetectiveOp) ) return; @@ -3893,7 +3893,7 @@ bool ScXMLExport::IsEditCell(const ScMyCell& rCell) } //static -bool ScXMLExport::IsCellEqual(ScDocument& rDoc, const ScMyCell& aCell1, const ScMyCell& aCell2) +bool ScXMLExport::IsCellEqual(const ScDocument& rDoc, const ScMyCell& aCell1, const ScMyCell& aCell2) { bool bIsEqual = false; if( !aCell1.bIsMergedBase && !aCell2.bIsMergedBase && @@ -3961,7 +3961,7 @@ bool ScXMLExport::IsCellEqual(ScDocument& rDoc, const ScMyCell& aCell1, const Sc return bIsEqual; } -void ScXMLExport::WriteCalculationSettings(ScDocument& rDoc, const uno::Reference <sheet::XSpreadsheetDocument>& xSpreadDoc) +void ScXMLExport::WriteCalculationSettings(const ScDocument& rDoc, const uno::Reference <sheet::XSpreadsheetDocument>& xSpreadDoc) { uno::Reference<beans::XPropertySet> xPropertySet(xSpreadDoc, uno::UNO_QUERY); if (!xPropertySet.is()) @@ -4103,7 +4103,7 @@ void ScXMLExport::WriteTableSource() } // core implementation -void ScXMLExport::WriteScenario(ScDocument& rDoc) +void ScXMLExport::WriteScenario(const ScDocument& rDoc) { if (!rDoc.IsScenario(static_cast<SCTAB>(nCurrentTable))) return; @@ -4137,7 +4137,7 @@ void ScXMLExport::WriteScenario(ScDocument& rDoc) SvXMLElementExport aElem(*this, XML_NAMESPACE_TABLE, XML_SCENARIO, true, true); } -void ScXMLExport::WriteTheLabelRanges(ScDocument& rDoc, const uno::Reference< sheet::XSpreadsheetDocument >& xSpreadDoc) +void ScXMLExport::WriteTheLabelRanges(const ScDocument& rDoc, const uno::Reference< sheet::XSpreadsheetDocument >& xSpreadDoc) { uno::Reference< beans::XPropertySet > xDocProp( xSpreadDoc, uno::UNO_QUERY ); if( !xDocProp.is() ) return; @@ -4159,7 +4159,7 @@ void ScXMLExport::WriteTheLabelRanges(ScDocument& rDoc, const uno::Reference< sh } } -void ScXMLExport::WriteLabelRanges(ScDocument& rDoc, const uno::Reference< container::XIndexAccess >& xRangesIAccess, bool bColumn) +void ScXMLExport::WriteLabelRanges(const ScDocument& rDoc, const uno::Reference< container::XIndexAccess >& xRangesIAccess, bool bColumn) { if( !xRangesIAccess.is() ) return; @@ -4182,7 +4182,7 @@ void ScXMLExport::WriteLabelRanges(ScDocument& rDoc, const uno::Reference< conta } } -void ScXMLExport::WriteNamedExpressions(ScDocument& rDoc) +void ScXMLExport::WriteNamedExpressions(const ScDocument& rDoc) { ScRangeName* pNamedRanges = rDoc.GetRangeName(); WriteNamedRange(rDoc, pNamedRanges); @@ -4552,7 +4552,7 @@ void ScXMLExport::WriteDataStream(ScDocument& rDoc) SvXMLElementExport aElem(*this, XML_NAMESPACE_CALC_EXT, XML_DATA_STREAM_SOURCE, true, true); } -void ScXMLExport::WriteNamedRange(ScDocument& rDoc, ScRangeName* pRangeName) +void ScXMLExport::WriteNamedRange(const ScDocument& rDoc, ScRangeName* pRangeName) { //write a global or local ScRangeName SvXMLElementExport aElemNEs(*this, XML_NAMESPACE_TABLE, XML_NAMED_EXPRESSIONS, true, true); @@ -4692,7 +4692,7 @@ OUString getDateStringForType(condformat::ScCondFormatDateType eType) } -void ScXMLExport::ExportConditionalFormat(ScDocument& rDoc, SCTAB nTab) +void ScXMLExport::ExportConditionalFormat(const ScDocument& rDoc, SCTAB nTab) { ScConditionalFormatList* pCondFormatList = rDoc.GetCondFormList(nTab); if(!pCondFormatList) @@ -4965,7 +4965,7 @@ void ScXMLExport::ExportConditionalFormat(ScDocument& rDoc, SCTAB nTab) else AddAttribute(XML_NAMESPACE_CALC_EXT, XML_VALUE, OUString::number(it->GetValue())); - if (!it->GetGreaterThanOrEqual()) + if (it->GetMode() != ScConditionMode::EqGreater) AddAttribute(XML_NAMESPACE_CALC_EXT, XML_GREATER_EQUAL, OUString::boolean(false)); AddAttribute(XML_NAMESPACE_CALC_EXT, XML_TYPE, getCondFormatEntryType(*it)); @@ -4985,7 +4985,7 @@ void ScXMLExport::ExportConditionalFormat(ScDocument& rDoc, SCTAB nTab) } } -void ScXMLExport::WriteExternalRefCaches(ScDocument& rDoc) +void ScXMLExport::WriteExternalRefCaches(const ScDocument& rDoc) { ScExternalRefManager* pRefMgr = rDoc.GetExternalRefManager(); pRefMgr->resetSrcFileData(GetOrigFileName()); @@ -5173,7 +5173,7 @@ void ScXMLExport::WriteExternalRefCaches(ScDocument& rDoc) } // core implementation -void ScXMLExport::WriteConsolidation(ScDocument& rDoc) +void ScXMLExport::WriteConsolidation(const ScDocument& rDoc) { const ScConsolidateParam* pCons(rDoc.GetConsolidateDlgData()); if( !pCons ) @@ -5214,7 +5214,7 @@ XMLPageExport* ScXMLExport::CreatePageExport() } //static -void ScXMLExport::GetChangeTrackViewSettings(ScDocument& rDoc, uno::Sequence<beans::PropertyValue>& rProps) +void ScXMLExport::GetChangeTrackViewSettings(const ScDocument& rDoc, uno::Sequence<beans::PropertyValue>& rProps) { ScChangeViewSettings* pViewSettings(rDoc.GetChangeViewSettings()); if (!pViewSettings) @@ -5321,7 +5321,7 @@ void ScXMLExport::GetConfigurationSettings(uno::Sequence<beans::PropertyValue>& } bool bVBACompat = false; - uno::Reference <container::XNameAccess> xCodeNameAccess; + rtl::Reference<XMLCodeNameProvider> xCodeNameAccess; OSL_ENSURE( pDoc, "ScXMLExport::GetConfigurationSettings - no ScDocument!" ); // tdf#71271 - add code names regardless of VBA compatibility mode if (pDoc) @@ -5359,7 +5359,7 @@ void ScXMLExport::GetConfigurationSettings(uno::Sequence<beans::PropertyValue>& if( xCodeNameAccess.is() ) { pProps[nCount].Name = "ScriptConfiguration"; - pProps[nCount].Value <<= xCodeNameAccess; + pProps[nCount].Value <<= uno::Reference<container::XNameAccess>(xCodeNameAccess); ++nCount; } } diff --git a/sc/source/filter/xml/xmlexprt.hxx b/sc/source/filter/xml/xmlexprt.hxx index d7ad2c726187..d6134e2d0171 100644 --- a/sc/source/filter/xml/xmlexprt.hxx +++ b/sc/source/filter/xml/xmlexprt.hxx @@ -33,7 +33,6 @@ namespace com::sun::star { namespace beans { class XPropertySet; } } -namespace com::sun::star::table { class XCellRange; } namespace com::sun::star::sheet { class XSpreadsheet; } namespace com::sun::star::sheet { class XSpreadsheetDocument; } @@ -141,7 +140,7 @@ class ScXMLExport : public SvXMLExport static css::table::CellRangeAddress GetEndAddress(const css::uno::Reference<css::sheet::XSpreadsheet>& xTable); static ScMyAreaLinksContainer GetAreaLinks(ScDocument& rDoc); - ScMyDetectiveOpContainer GetDetectiveOpList(ScDocument& rDoc); + ScMyDetectiveOpContainer GetDetectiveOpList(const ScDocument& rDoc); void WriteSingleColumn(const sal_Int32 nRepeatColumns, const sal_Int32 nStyleIndex, const sal_Int32 nIndex, const bool bIsAutoStyle, const bool bIsVisible); void WriteColumn(const sal_Int32 nColumn, const sal_Int32 nRepeatColumns, @@ -149,8 +148,8 @@ class ScXMLExport : public SvXMLExport void OpenHeaderColumn(); void CloseHeaderColumn(); void ExportColumns(const sal_Int32 nTable, const ScRange& aColumnHeaderRange, const bool bHasColumnHeader); - void ExportExternalRefCacheStyles(ScDocument& rDoc); - void ExportCellTextAutoStyles(ScDocument& rDoc, sal_Int32 nTable); + void ExportExternalRefCacheStyles(const ScDocument& rDoc); + void ExportCellTextAutoStyles(const ScDocument& rDoc, sal_Int32 nTable); void ExportFormatRanges(ScDocument& rDoc, const sal_Int32 nStartCol, const sal_Int32 nStartRow, const sal_Int32 nEndCol, const sal_Int32 nEndRow, const sal_Int32 nSheet); void WriteRowContent(); @@ -163,7 +162,7 @@ class ScXMLExport : public SvXMLExport bool bHidden, bool bFiltered); void OpenRow(const sal_Int32 nTable, const sal_Int32 nStartRow, const sal_Int32 nRepeatRow, ScXMLCachedRowAttrAccess& rRowAttr); void CloseRow(const sal_Int32 nRow); - void GetColumnRowHeader(ScDocument& rDoc, bool& bHasColumnHeader, ScRange& aColumnHeaderRange, + void GetColumnRowHeader(const ScDocument& rDoc, bool& bHasColumnHeader, ScRange& aColumnHeaderRange, bool& bHasRowHeader, ScRange& aRowHeaderRange, OUString& rPrintRanges) const; static void FillFieldGroup(ScOutlineArray* pFields, ScMyOpenCloseColumnRowGroup* pGroups); void FillColumnRowGroups(ScDocument& rDoc); @@ -172,34 +171,34 @@ class ScXMLExport : public SvXMLExport const css::uno::Reference <css::sheet::XSpreadsheet>& xTable); void WriteTable(ScDocument& rDoc, sal_Int32 nTable, const css::uno::Reference< css::sheet::XSpreadsheet>& xTable); - void WriteCell(ScDocument& rDoc, ScMyCell& aCell, sal_Int32 nEqualCellCount); - void WriteEditCell(ScDocument& rDoc, const EditTextObject* pText); + void WriteCell(ScDocument& rDoc, const ScMyCell& aCell, sal_Int32 nEqualCellCount); + void WriteEditCell(const ScDocument& rDoc, const EditTextObject* pText); void WriteMultiLineFormulaResult(const ScFormulaCell* pCell); void WriteAreaLink(const ScMyCell& rMyCell); void WriteAnnotation(ScDocument& rDoc, const ScMyCell& rMyCell); - void WriteDetective(ScDocument& rDoc, const ScMyCell& rMyCell); - void ExportShape(ScDocument& rDoc, const css::uno::Reference < css::drawing::XShape >& xShape, css::awt::Point* pPoint); - void WriteShapes(ScDocument& rDoc, const ScMyCell& rMyCell); - void WriteTableShapes(ScDocument& rDoc); + void WriteDetective(const ScDocument& rDoc, const ScMyCell& rMyCell); + void ExportShape(const ScDocument& rDoc, const css::uno::Reference < css::drawing::XShape >& xShape, css::awt::Point* pPoint); + void WriteShapes(const ScDocument& rDoc, const ScMyCell& rMyCell); + void WriteTableShapes(const ScDocument& rDoc); void SetRepeatAttribute(sal_Int32 nEqualCellCount, bool bIncProgress); static bool IsEditCell(const ScMyCell& rCell); - static bool IsCellEqual(ScDocument& rDoc, const ScMyCell& aCell1, const ScMyCell& aCell2); + static bool IsCellEqual(const ScDocument& rDoc, const ScMyCell& aCell1, const ScMyCell& aCell2); - void WriteCalculationSettings(ScDocument& rDoc, const css::uno::Reference <css::sheet::XSpreadsheetDocument>& xSpreadDoc); + void WriteCalculationSettings(const ScDocument& rDoc, const css::uno::Reference <css::sheet::XSpreadsheetDocument>& xSpreadDoc); void WriteTableSource(); - void WriteScenario(ScDocument& rDoc); // core implementation - void WriteTheLabelRanges(ScDocument& rDoc, const css::uno::Reference< css::sheet::XSpreadsheetDocument >& xSpreadDoc); - void WriteLabelRanges(ScDocument& rDoc, const css::uno::Reference< css::container::XIndexAccess >& xRangesIAccess, bool bColumn); - void WriteNamedExpressions(ScDocument& rDoc); + void WriteScenario(const ScDocument& rDoc); // core implementation + void WriteTheLabelRanges(const ScDocument& rDoc, const css::uno::Reference< css::sheet::XSpreadsheetDocument >& xSpreadDoc); + void WriteLabelRanges(const ScDocument& rDoc, const css::uno::Reference< css::container::XIndexAccess >& xRangesIAccess, bool bColumn); + void WriteNamedExpressions(const ScDocument& rDoc); void WriteExternalDataMapping(ScDocument& rDoc); void WriteExternalDataTransformations(ScDocument& rDoc, const std::vector<std::shared_ptr<sc::DataTransformation>>& rDataTransformations); void WriteDataStream(ScDocument& rDoc); - void WriteNamedRange(ScDocument& rDoc, ScRangeName* pRangeName); + void WriteNamedRange(const ScDocument& rDoc, ScRangeName* pRangeName); void exportSparklineGroups(ScDocument& rDoc, SCTAB nTab); - void ExportConditionalFormat(ScDocument& rDoc, SCTAB nTab); - void WriteExternalRefCaches(ScDocument& rDoc); - void WriteConsolidation(ScDocument& rDoc); // core implementation + void ExportConditionalFormat(const ScDocument& rDoc, SCTAB nTab); + void WriteExternalRefCaches(const ScDocument& rDoc); + void WriteConsolidation(const ScDocument& rDoc); // core implementation void CollectUserDefinedNamespaces(const SfxItemPool* pPool, sal_uInt16 nAttrib); @@ -246,7 +245,7 @@ public: void SetSourceStream( const css::uno::Reference<css::io::XInputStream>& xNewStream ); - static void GetChangeTrackViewSettings(ScDocument& rDoc, css::uno::Sequence<css::beans::PropertyValue>& rProps); + static void GetChangeTrackViewSettings(const ScDocument& rDoc, css::uno::Sequence<css::beans::PropertyValue>& rProps); virtual void GetViewSettings(css::uno::Sequence<css::beans::PropertyValue>& rProps) override; virtual void GetConfigurationSettings(css::uno::Sequence<css::beans::PropertyValue>& rProps) override; diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx index d992fd2c5f84..4e72aa790d76 100644 --- a/sc/source/filter/xml/xmlimprt.cxx +++ b/sc/source/filter/xml/xmlimprt.cxx @@ -809,11 +809,11 @@ sal_Int32 ScXMLImport::SetCurrencySymbol(const sal_Int32 nKey, std::u16string_vi { { ScXMLImport::MutexGuard aGuard(*this); - LocaleDataWrapper aLocaleData( comphelper::getProcessComponentContext(), LanguageTag( aLocale) ); + const LocaleDataWrapper* pLocaleData = LocaleDataWrapper::get( LanguageTag( aLocale) ); sFormatString = "#" + - aLocaleData.getNumThousandSep() + + pLocaleData->getNumThousandSep() + "##0" + - aLocaleData.getNumDecimalSep() + + pLocaleData->getNumDecimalSep() + "00 [$" + rCurrency + "]"; @@ -976,8 +976,7 @@ void ScXMLImport::SetStyleToRanges() if (!sPrevStyleName.isEmpty()) { - uno::Reference <beans::XPropertySet> xProperties (mxSheetCellRanges); - if (xProperties.is()) + if (mxSheetCellRanges.is()) { XMLTableStylesContext *pStyles(static_cast<XMLTableStylesContext *>(GetAutoStyles())); XMLTableStyleContext* pStyle = nullptr; @@ -986,12 +985,12 @@ void ScXMLImport::SetStyleToRanges() XmlStyleFamily::TABLE_CELL, sPrevStyleName, true))); if (pStyle) { - pStyle->FillPropertySet(xProperties); + pStyle->FillPropertySet(mxSheetCellRanges); // here needs to be the cond format import method sal_Int32 nNumberFormat(pStyle->GetNumberFormat()); - SetType(xProperties, nNumberFormat, nPrevCellType, sPrevCurrency); + SetType(mxSheetCellRanges, nNumberFormat, nPrevCellType, sPrevCurrency); - css::uno::Any aAny = xProperties->getPropertyValue(u"FormatID"_ustr); + css::uno::Any aAny = mxSheetCellRanges->getPropertyValue(u"FormatID"_ustr); sal_uInt64 nKey = 0; if ((aAny >>= nKey) && nKey) { @@ -1016,10 +1015,10 @@ void ScXMLImport::SetStyleToRanges() } else { - xProperties->setPropertyValue(SC_UNONAME_CELLSTYL, uno::Any(GetStyleDisplayName( XmlStyleFamily::TABLE_CELL, sPrevStyleName ))); + mxSheetCellRanges->setPropertyValue(SC_UNONAME_CELLSTYL, uno::Any(GetStyleDisplayName( XmlStyleFamily::TABLE_CELL, sPrevStyleName ))); sal_Int32 nNumberFormat(GetStyleNumberFormats()->GetStyleNumberFormat(sPrevStyleName)); bool bInsert(nNumberFormat == -1); - SetType(xProperties, nNumberFormat, nPrevCellType, sPrevCurrency); + SetType(mxSheetCellRanges, nNumberFormat, nPrevCellType, sPrevCurrency); if (bInsert) GetStyleNumberFormats()->AddStyleNumberFormat(sPrevStyleName, nNumberFormat); } diff --git a/sc/source/filter/xml/xmlimprt.hxx b/sc/source/filter/xml/xmlimprt.hxx index 74958aa1398f..d3ae5318ac50 100644 --- a/sc/source/filter/xml/xmlimprt.hxx +++ b/sc/source/filter/xml/xmlimprt.hxx @@ -36,8 +36,6 @@ #include <list> namespace com::sun::star::beans { class XPropertySet; } -namespace com::sun::star::sheet { class XSheetCellRangeContainer; } -namespace com::sun::star::table { struct CellRangeAddress; } namespace com::sun::star::util { class XNumberFormatTypes; } namespace com::sun::star::util { class XNumberFormats; } namespace sax_fastparser { class FastAttributeList; } @@ -49,18 +47,14 @@ class XMLNumberFormatAttributesExportHelper; class ScEditEngineDefaulter; class ScDocumentImport; class ScMyImpDetectiveOpArray; -class SdrPage; class ScModelObj; namespace sc { struct ImportPostProcessData; struct PivotTableSources; -class ScDrawObjData; } -class SvXMLTokenMap; -class XMLShapeImportHelper; class ScXMLChangeTrackingImportHelper; struct ScMyNamedExpression diff --git a/sc/source/filter/xml/xmlrowi.cxx b/sc/source/filter/xml/xmlrowi.cxx index a75b32ac60f6..a9c28a796e39 100644 --- a/sc/source/filter/xml/xmlrowi.cxx +++ b/sc/source/filter/xml/xmlrowi.cxx @@ -23,6 +23,7 @@ #include "xmlstyli.hxx" #include "xmlstyle.hxx" #include <document.hxx> +#include <cellsuno.hxx> #include <docuno.hxx> #include <olinetab.hxx> #include <sheetdata.hxx> @@ -41,8 +42,6 @@ #include <comphelper/servicehelper.hxx> #include <osl/diagnose.h> -constexpr OUStringLiteral SC_ISFILTERED = u"IsFiltered"; - using namespace com::sun::star; using namespace xmloff::token; @@ -153,7 +152,7 @@ void SAL_CALL ScXMLTableRowContext::endFastElement(sal_Int32 /*nElement*/) } SCTAB nSheet = rXMLImport.GetTables().GetCurrentSheet(); sal_Int32 nCurrentRow(rXMLImport.GetTables().GetCurrentRow()); - uno::Reference<sheet::XSpreadsheet> xSheet(rXMLImport.GetTables().GetCurrentXSheet()); + rtl::Reference<ScTableSheetObj> xSheet(rXMLImport.GetTables().GetCurrentXSheet()); if(!xSheet.is()) return; @@ -162,15 +161,11 @@ void SAL_CALL ScXMLTableRowContext::endFastElement(sal_Int32 /*nElement*/) nFirstRow = pDoc->MaxRow(); if (nCurrentRow > pDoc->MaxRow()) nCurrentRow = pDoc->MaxRow(); - uno::Reference <table::XCellRange> xCellRange(xSheet->getCellRangeByPosition(0, nFirstRow, 0, nCurrentRow)); - if (!xCellRange.is()) - return; - - uno::Reference<table::XColumnRowRange> xColumnRowRange (xCellRange, uno::UNO_QUERY); - if (!xColumnRowRange.is()) - return; - uno::Reference <beans::XPropertySet> xRowProperties(xColumnRowRange->getRows(), uno::UNO_QUERY); + // Take the solarmutex here and pass references to places that need the lock - avoids + // the cost of taking and releasing it several times. + SolarMutexGuard aGuard; + rtl::Reference<ScTableRowsObj> xRowProperties(xSheet->getScRowsByPosition(aGuard, 0, nFirstRow, 0, nCurrentRow)); if (!xRowProperties.is()) return; @@ -215,11 +210,9 @@ void SAL_CALL ScXMLTableRowContext::endFastElement(sal_Int32 /*nElement*/) rXMLImport.GetDoc().setRowsVisible(nSheet, nFirstRow, nCurrentRow, false); } if (bFiltered) - xRowProperties->setPropertyValue(SC_ISFILTERED, uno::Any(bFiltered)); + xRowProperties->setPropertyValueIsFiltered(aGuard, bFiltered); - uno::Any any = xRowProperties->getPropertyValue(SC_UNONAME_OHEIGHT); - bool bOptionalHeight = false; - any >>= bOptionalHeight; + bool bOptionalHeight = xRowProperties->getPropertyValueOHeight(aGuard); if (bOptionalHeight) { // Save this row for later height update, only if we have no already optimal row heights @@ -324,7 +317,7 @@ void SAL_CALL ScXMLTableRowsContext::endFastElement(sal_Int32 /*nElement*/) SCROW nHeaderEndRow = rXMLImport.GetTables().GetCurrentRow(); if (nHeaderStartRow <= nHeaderEndRow) { - uno::Reference <sheet::XPrintAreas> xPrintAreas (rXMLImport.GetTables().GetCurrentXSheet(), uno::UNO_QUERY); + rtl::Reference<ScTableSheetObj> xPrintAreas (rXMLImport.GetTables().GetCurrentXSheet()); if (xPrintAreas.is()) { if (!xPrintAreas->getPrintTitleRows()) diff --git a/sc/source/filter/xml/xmlstyli.cxx b/sc/source/filter/xml/xmlstyli.cxx index 3c8bf9805ec8..3e3a218dcb13 100644 --- a/sc/source/filter/xml/xmlstyli.cxx +++ b/sc/source/filter/xml/xmlstyli.cxx @@ -274,7 +274,7 @@ class XMLTableCellPropsContext : public SvXMLPropertySetContext const uno::Reference< xml::sax::XFastAttributeList >& xAttrList, sal_uInt32 nFamily, ::std::vector< XMLPropertyState > &rProps, - const rtl::Reference < SvXMLImportPropertyMapper > &rMap); + SvXMLImportPropertyMapper* pMap); using SvXMLPropertySetContext::createFastChildContext; virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext( @@ -291,9 +291,9 @@ XMLTableCellPropsContext::XMLTableCellPropsContext( const uno::Reference< xml::sax::XFastAttributeList >& xAttrList, sal_uInt32 nFamily, ::std::vector< XMLPropertyState > &rProps, - const rtl::Reference < SvXMLImportPropertyMapper > &rMap) + SvXMLImportPropertyMapper* pMap) : SvXMLPropertySetContext( rImport, nElement, xAttrList, nFamily, - rProps, rMap ) + rProps, pMap ) { } @@ -303,7 +303,7 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > XMLTableCellPropsConte ::std::vector< XMLPropertyState > &rProperties, const XMLPropertyState& rProperty) { - switch (mxMapper->getPropertySetMapper()->GetEntryContextId(rProperty.mnIndex)) + switch (mpMapper->getPropertySetMapper()->GetEntryContextId(rProperty.mnIndex)) { case CTF_COMPLEX_COLOR: { @@ -460,15 +460,15 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > XMLTableStyleContext:: } else if ( nElement == XML_ELEMENT(STYLE, XML_TABLE_CELL_PROPERTIES) ) { - rtl::Reference < SvXMLImportPropertyMapper > xImpPrMap = + SvXMLImportPropertyMapper* pImpPrMap = GetStyles()->GetImportPropertyMapper( GetFamily() ); - if( xImpPrMap.is() ) + if( pImpPrMap ) xContext = new XMLTableCellPropsContext( GetImport(), nElement, xAttrList, XML_TYPE_PROP_TABLE_CELL, GetProperties(), - xImpPrMap ); + pImpPrMap ); } if (!xContext) @@ -577,11 +577,11 @@ XMLPropertyState* XMLTableStyleContext::FindProperty(const sal_Int16 nContextID) { XMLPropertyState* pRet = nullptr; rtl::Reference < XMLPropertySetMapper > xPrMap; - rtl::Reference < SvXMLImportPropertyMapper > xImpPrMap = + SvXMLImportPropertyMapper* pImpPrMap = pStyles->GetImportPropertyMapper( GetFamily() ); - OSL_ENSURE( xImpPrMap.is(), "There is the import prop mapper" ); - if( xImpPrMap.is() ) - xPrMap = xImpPrMap->getPropertySetMapper(); + OSL_ENSURE( pImpPrMap, "There is the import prop mapper" ); + if( pImpPrMap ) + xPrMap = pImpPrMap->getPropertySetMapper(); if( xPrMap.is() ) { auto aIter = std::find_if(GetProperties().begin(), GetProperties().end(), @@ -698,56 +698,56 @@ void XMLTableStylesContext::endFastElement(sal_Int32 ) GetScImport().InsertStyles(); } -rtl::Reference < SvXMLImportPropertyMapper > +SvXMLImportPropertyMapper* XMLTableStylesContext::GetImportPropertyMapper( XmlStyleFamily nFamily ) const { - rtl::Reference < SvXMLImportPropertyMapper > xMapper(SvXMLStylesContext::GetImportPropertyMapper(nFamily)); + SvXMLImportPropertyMapper* pMapper(SvXMLStylesContext::GetImportPropertyMapper(nFamily)); - if (!xMapper.is()) + if (!pMapper) { switch( nFamily ) { case XmlStyleFamily::TABLE_CELL: { - if( !xCellImpPropMapper.is() ) + if( !xCellImpPropMapper ) { const_cast<XMLTableStylesContext *>(this)->xCellImpPropMapper = - new ScXMLCellImportPropertyMapper( GetScImport().GetCellStylesPropertySetMapper(), const_cast<SvXMLImport&>(GetImport()) ); + std::make_unique<ScXMLCellImportPropertyMapper>( GetScImport().GetCellStylesPropertySetMapper(), const_cast<SvXMLImport&>(GetImport()) ); xCellImpPropMapper->ChainImportMapper(XMLTextImportHelper::CreateParaExtPropMapper(const_cast<SvXMLImport&>(GetImport()))); } - xMapper = xCellImpPropMapper; + pMapper = xCellImpPropMapper.get(); } break; case XmlStyleFamily::TABLE_COLUMN: { - if( !xColumnImpPropMapper.is() ) + if( !xColumnImpPropMapper ) const_cast<XMLTableStylesContext *>(this)->xColumnImpPropMapper = - new SvXMLImportPropertyMapper( GetScImport().GetColumnStylesPropertySetMapper(), const_cast<SvXMLImport&>(GetImport()) ); - xMapper = xColumnImpPropMapper; + std::make_unique<SvXMLImportPropertyMapper>( GetScImport().GetColumnStylesPropertySetMapper(), const_cast<SvXMLImport&>(GetImport()) ); + pMapper = xColumnImpPropMapper.get(); } break; case XmlStyleFamily::TABLE_ROW: { - if( !xRowImpPropMapper.is() ) + if( !xRowImpPropMapper ) const_cast<XMLTableStylesContext *>(this)->xRowImpPropMapper = - new ScXMLRowImportPropertyMapper( GetScImport().GetRowStylesPropertySetMapper(), const_cast<SvXMLImport&>(GetImport()) ); - xMapper = xRowImpPropMapper; + std::make_unique<ScXMLRowImportPropertyMapper>( GetScImport().GetRowStylesPropertySetMapper(), const_cast<SvXMLImport&>(GetImport()) ); + pMapper = xRowImpPropMapper.get(); } break; case XmlStyleFamily::TABLE_TABLE: { - if( !xTableImpPropMapper.is() ) + if( !xTableImpPropMapper ) const_cast<XMLTableStylesContext *>(this)->xTableImpPropMapper = - new SvXMLImportPropertyMapper( GetScImport().GetTableStylesPropertySetMapper(), const_cast<SvXMLImport&>(GetImport()) ); - xMapper = xTableImpPropMapper; + std::make_unique<SvXMLImportPropertyMapper>( GetScImport().GetTableStylesPropertySetMapper(), const_cast<SvXMLImport&>(GetImport()) ); + pMapper = xTableImpPropMapper.get(); } break; default: break; } } - return xMapper; + return pMapper; } uno::Reference < XNameContainer > diff --git a/sc/source/filter/xml/xmlstyli.hxx b/sc/source/filter/xml/xmlstyli.hxx index e977b84e0ec6..00749c4496b5 100644 --- a/sc/source/filter/xml/xmlstyli.hxx +++ b/sc/source/filter/xml/xmlstyli.hxx @@ -30,6 +30,7 @@ #include "xmlimprt.hxx" class ScConditionalFormat; +namespace com::sun::star::table { struct CellRangeAddress; } class ScXMLCellImportPropertyMapper : public SvXMLImportPropertyMapper { @@ -125,10 +126,10 @@ class XMLTableStylesContext : public SvXMLStylesContext sal_Int32 nMasterPageNameIndex; bool bAutoStyles; - rtl::Reference < SvXMLImportPropertyMapper > xCellImpPropMapper; - rtl::Reference < SvXMLImportPropertyMapper > xColumnImpPropMapper; - rtl::Reference < SvXMLImportPropertyMapper > xRowImpPropMapper; - rtl::Reference < SvXMLImportPropertyMapper > xTableImpPropMapper; + std::unique_ptr < SvXMLImportPropertyMapper > xCellImpPropMapper; + std::unique_ptr < SvXMLImportPropertyMapper > xColumnImpPropMapper; + std::unique_ptr < SvXMLImportPropertyMapper > xRowImpPropMapper; + std::unique_ptr < SvXMLImportPropertyMapper > xTableImpPropMapper; const ScXMLImport& GetScImport() const { return static_cast<const ScXMLImport&>(GetImport()); } ScXMLImport& GetScImport() { return static_cast<ScXMLImport&>(GetImport()); } @@ -154,7 +155,7 @@ public: virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; - virtual rtl::Reference < SvXMLImportPropertyMapper > GetImportPropertyMapper( + virtual SvXMLImportPropertyMapper* GetImportPropertyMapper( XmlStyleFamily nFamily ) const override; virtual css::uno::Reference< css::container::XNameContainer > GetStylesContainer( XmlStyleFamily nFamily ) const override; diff --git a/sc/source/filter/xml/xmlsubti.cxx b/sc/source/filter/xml/xmlsubti.cxx index 5d09b36456e9..89c2e8d9be17 100644 --- a/sc/source/filter/xml/xmlsubti.cxx +++ b/sc/source/filter/xml/xmlsubti.cxx @@ -22,6 +22,7 @@ #include "xmlimprt.hxx" #include <document.hxx> #include "XMLConverter.hxx" +#include <cellsuno.hxx> #include <docuno.hxx> #include "XMLStylesImportHelper.hxx" #include <sheetdata.hxx> @@ -71,23 +72,18 @@ ScMyTables::~ScMyTables() namespace { -uno::Reference<sheet::XSpreadsheet> getCurrentSheet(const uno::Reference<frame::XModel>& xModel, SCTAB nSheet) +rtl::Reference<ScTableSheetObj> getCurrentSheet(const uno::Reference<frame::XModel>& xModel, SCTAB nSheet) { - uno::Reference<sheet::XSpreadsheet> xSheet; - uno::Reference<sheet::XSpreadsheetDocument> xSpreadDoc(xModel, uno::UNO_QUERY); - if (!xSpreadDoc.is()) + rtl::Reference<ScTableSheetObj> xSheet; + ScModelObj* pSpreadDoc = dynamic_cast<ScModelObj*>(xModel.get()); + if (!pSpreadDoc) return xSheet; - uno::Reference <sheet::XSpreadsheets> xSheets(xSpreadDoc->getSheets()); + rtl::Reference<ScTableSheetsObj> xSheets(pSpreadDoc->getScSheets()); if (!xSheets.is()) return xSheet; - uno::Reference <container::XIndexAccess> xIndex(xSheets, uno::UNO_QUERY); - if (!xIndex.is()) - return xSheet; - - xSheet.set(xIndex->getByIndex(nSheet), uno::UNO_QUERY); - return xSheet; + return xSheets->GetSheetByIndex(nSheet); } } @@ -142,10 +138,6 @@ void ScMyTables::SetTableStyle(const OUString& sStyleName) if ( !xCurrentSheet.is() ) return; - uno::Reference <beans::XPropertySet> xProperties(xCurrentSheet, uno::UNO_QUERY); - if ( !xProperties.is() ) - return; - XMLTableStylesContext *pStyles = static_cast<XMLTableStylesContext *>(rImport.GetAutoStyles()); if ( pStyles ) { @@ -153,7 +145,7 @@ void ScMyTables::SetTableStyle(const OUString& sStyleName) XmlStyleFamily::TABLE_TABLE, sStyleName, true))); if ( pStyle ) { - pStyle->FillPropertySet(xProperties); + pStyle->FillPropertySet(xCurrentSheet); ScSheetSaveData* pSheetData = rImport.GetScModel()->GetSheetSaveData(); pSheetData->AddTableStyle( sStyleName, ScAddress( 0, 0, maCurrentCellPos.Tab() ) ); @@ -231,9 +223,8 @@ uno::Reference< drawing::XDrawPage > const & ScMyTables::GetCurrentXDrawPage() { if( (maCurrentCellPos.Tab() != nCurrentDrawPage) || !xDrawPage.is() ) { - uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier( xCurrentSheet, uno::UNO_QUERY ); - if( xDrawPageSupplier.is() ) - xDrawPage.set(xDrawPageSupplier->getDrawPage()); + if( xCurrentSheet.is() ) + xDrawPage.set(xCurrentSheet->getDrawPage()); nCurrentDrawPage = sal::static_int_cast<sal_Int16>(maCurrentCellPos.Tab()); } return xDrawPage; diff --git a/sc/source/filter/xml/xmlsubti.hxx b/sc/source/filter/xml/xmlsubti.hxx index b5ccc4261600..b4c5ed051352 100644 --- a/sc/source/filter/xml/xmlsubti.hxx +++ b/sc/source/filter/xml/xmlsubti.hxx @@ -24,11 +24,10 @@ #include <rangelst.hxx> namespace com::sun::star::drawing { class XDrawPage; } -namespace com::sun::star::sheet { class XSpreadsheet; } -namespace com::sun::star::table { class XCellRange; } namespace com::sun::star::drawing { class XShapes; } class ScXMLImport; +class ScTableSheetObj; struct ScXMLTabProtectionData { @@ -55,7 +54,7 @@ private: ScMyOLEFixer aFixupOLEs; - css::uno::Reference< css::sheet::XSpreadsheet > xCurrentSheet; + rtl::Reference< ScTableSheetObj > xCurrentSheet; css::uno::Reference< css::drawing::XDrawPage > xDrawPage; css::uno::Reference < css::drawing::XShapes > xShapes; OUString sCurrentSheetName; @@ -87,7 +86,7 @@ public: SCTAB GetCurrentSheet() const { return (maCurrentCellPos.Tab() >= 0) ? maCurrentCellPos.Tab() : 0; } SCCOL GetCurrentColCount() const; SCROW GetCurrentRow() const { return (maCurrentCellPos.Row() >= 0) ? maCurrentCellPos.Row() : 0; } - const css::uno::Reference< css::sheet::XSpreadsheet >& + const rtl::Reference< ScTableSheetObj >& GetCurrentXSheet() const { return xCurrentSheet; } css::uno::Reference< css::drawing::XDrawPage > const & GetCurrentXDrawPage(); diff --git a/sc/source/filter/xml/xmltabi.cxx b/sc/source/filter/xml/xmltabi.cxx index 5010c70b5e11..48849bdd8be9 100644 --- a/sc/source/filter/xml/xmltabi.cxx +++ b/sc/source/filter/xml/xmltabi.cxx @@ -25,6 +25,7 @@ #include "xmlexternaltabi.hxx" #include "xmlnexpi.hxx" #include <document.hxx> +#include <cellsuno.hxx> #include <docuno.hxx> #include <olinetab.hxx> #include "XMLTableShapesContext.hxx" @@ -305,7 +306,7 @@ uno::Reference< xml::sax::XFastContextHandler > SAL_CALL case XML_ELEMENT(OFFICE_EXT, XML_EVENT_LISTENERS): { // use XEventsSupplier interface of the sheet - uno::Reference<document::XEventsSupplier> xSupplier( GetScImport().GetTables().GetCurrentXSheet(), uno::UNO_QUERY ); + uno::Reference<document::XEventsSupplier> xSupplier( GetScImport().GetTables().GetCurrentXSheet() ); pContext = new XMLEventsImportContext( GetImport(), xSupplier ); } break; diff --git a/sc/source/filter/xml/xmlwrap.cxx b/sc/source/filter/xml/xmlwrap.cxx index bf4e055440db..e601675fb1fc 100644 --- a/sc/source/filter/xml/xmlwrap.cxx +++ b/sc/source/filter/xml/xmlwrap.cxx @@ -890,7 +890,6 @@ bool ScXMLImportWrapper::Export(bool bStylesOnly) auto xObjectHelper = SvXMLEmbeddedObjectHelper::Create( xStorage, *pObjSh, SvXMLEmbeddedObjectHelperMode::Write); - uno::Reference<document::XEmbeddedObjectResolver> xObjectResolver(xObjectHelper); // styles export @@ -901,7 +900,7 @@ bool ScXMLImportWrapper::Export(bool bStylesOnly) Any(xGraphicStorageHandler), Any(xStatusIndicator), Any(xWriter), - Any(xObjectResolver) + Any(uno::Reference<document::XEmbeddedObjectResolver>(xObjectHelper)) }; SAL_INFO( "sc.filter", "styles export start" ); @@ -926,7 +925,7 @@ bool ScXMLImportWrapper::Export(bool bStylesOnly) Any(xGraphicStorageHandler), Any(xStatusIndicator), Any(xWriter), - Any(xObjectResolver) + Any(uno::Reference<document::XEmbeddedObjectResolver>(xObjectHelper)) }; SAL_INFO( "sc.filter", "content export start" ); diff --git a/sc/source/ui/Accessibility/AccessibleCell.cxx b/sc/source/ui/Accessibility/AccessibleCell.cxx index dd7f189738b9..35288daa99fc 100644 --- a/sc/source/ui/Accessibility/AccessibleCell.cxx +++ b/sc/source/ui/Accessibility/AccessibleCell.cxx @@ -85,20 +85,13 @@ ScAccessibleCell::~ScAccessibleCell() { if (!ScAccessibleContextBase::IsDefunc() && !rBHelper.bInDispose) { - // increment refcount to prevent double call off dtor + // increment refcount to prevent double call of dtor osl_atomic_increment( &m_refCount ); // call dispose to inform object which have a weak reference to this object dispose(); } } -void ScAccessibleCell::Init() -{ - ScAccessibleCellBase::Init(); - - SetEventSource(this); -} - void SAL_CALL ScAccessibleCell::disposing() { SolarMutexGuard aGuard; @@ -142,7 +135,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessibleCell::getAccessibleAtPoint( void SAL_CALL ScAccessibleCell::grabFocus( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (getAccessibleParent().is() && mpViewShell) { uno::Reference<XAccessibleComponent> xAccessibleComponent(getAccessibleParent()->getAccessibleContext(), uno::UNO_QUERY); @@ -285,7 +278,7 @@ uno::Reference<XAccessibleRelationSet> SAL_CALL ScAccessibleCell::getAccessibleRelationSet() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); rtl::Reference<utl::AccessibleRelationSetHelper> pRelationSet; if (mpAccDoc) pRelationSet = mpAccDoc->GetRelationSet(&maCellAddress); @@ -491,7 +484,7 @@ static OUString ReplaceFourChar(const OUString& oldOUString) .replaceAll(u":", u"\\:"); } -uno::Any SAL_CALL ScAccessibleCell::getExtendedAttributes() +OUString SAL_CALL ScAccessibleCell::getExtendedAttributes() { SolarMutexGuard aGuard; @@ -529,7 +522,7 @@ uno::Any SAL_CALL ScAccessibleCell::getExtendedAttributes() sAttributes += strFor ; } - return uno::Any(sAttributes); + return sAttributes; } // cell has its own ParaIndent property, so when calling character attributes on cell, the ParaIndent should replace the ParaLeftMargin if its value is not zero. diff --git a/sc/source/ui/Accessibility/AccessibleCellBase.cxx b/sc/source/ui/Accessibility/AccessibleCellBase.cxx index ebff91c101e2..8735629c858d 100644 --- a/sc/source/ui/Accessibility/AccessibleCellBase.cxx +++ b/sc/source/ui/Accessibility/AccessibleCellBase.cxx @@ -68,7 +68,7 @@ ScAccessibleCellBase::~ScAccessibleCellBase() bool ScAccessibleCellBase::isVisible() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); // test whether the cell is hidden (column/row - hidden/filtered) bool bVisible(true); if (mpDoc) @@ -87,7 +87,7 @@ bool ScAccessibleCellBase::isVisible() sal_Int32 SAL_CALL ScAccessibleCellBase::getForeground() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); sal_Int32 nColor(0); if (mpDoc) { @@ -126,7 +126,7 @@ sal_Int32 SAL_CALL ScAccessibleCellBase::getForeground() sal_Int32 SAL_CALL ScAccessibleCellBase::getBackground() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); sal_Int32 nColor(0); if (mpDoc) @@ -190,7 +190,7 @@ sal_Int64 ScAccessibleCellBase::getAccessibleIndexInParent() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); return mnIndex; } @@ -214,7 +214,7 @@ uno::Any SAL_CALL ScAccessibleCellBase::getCurrentValue() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); uno::Any aAny; if (mpDoc) { @@ -227,7 +227,7 @@ sal_Bool SAL_CALL ScAccessibleCellBase::setCurrentValue( const uno::Any& aNumber ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); double fValue = 0; bool bResult = false; if((aNumber >>= fValue) && mpDoc && mpDoc->GetDocumentShell()) @@ -294,7 +294,7 @@ bool ScAccessibleCellBase::IsEditable(sal_Int64 nParentStates) OUString ScAccessibleCellBase::GetNote() const { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); OUString sNote; if (mpDoc) { @@ -340,7 +340,7 @@ OUString ScAccessibleCellBase::GetNote() const OUString ScAccessibleCellBase::getShadowAttrs() const { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); table::ShadowFormat aShadowFmt; if (mpDoc) { @@ -420,7 +420,7 @@ OUString ScAccessibleCellBase::getShadowAttrs() const OUString ScAccessibleCellBase::getBorderAttrs() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); table::BorderLine aTopBorder; table::BorderLine aBottomBorder; table::BorderLine aLeftBorder; diff --git a/sc/source/ui/Accessibility/AccessibleContextBase.cxx b/sc/source/ui/Accessibility/AccessibleContextBase.cxx index b121893e2f6c..a0a8c764ce0e 100644 --- a/sc/source/ui/Accessibility/AccessibleContextBase.cxx +++ b/sc/source/ui/Accessibility/AccessibleContextBase.cxx @@ -36,44 +36,11 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::accessibility; -/** - The listener is an internal class to prevent reference-counting cycles and therefore memory leaks. -*/ -typedef cppu::WeakComponentImplHelper< - css::accessibility::XAccessibleEventListener - > ScAccessibleContextBaseEventListenerWeakImpl; -class ScAccessibleContextBase::ScAccessibleContextBaseEventListener : public cppu::BaseMutex, public ScAccessibleContextBaseEventListenerWeakImpl -{ -public: - ScAccessibleContextBaseEventListener(ScAccessibleContextBase& rBase) - : ScAccessibleContextBaseEventListenerWeakImpl(m_aMutex), mrBase(rBase) {} - - using WeakComponentImplHelperBase::disposing; - - ///===== XAccessibleEventListener ======================================== - - virtual void SAL_CALL disposing( const lang::EventObject& rSource ) override - { - SolarMutexGuard aGuard; - if (rSource.Source == mrBase.mxParent) - dispose(); - } - - virtual void SAL_CALL - notifyEvent( - const css::accessibility::AccessibleEventObject& /*aEvent*/ ) override {} -private: - ScAccessibleContextBase& mrBase; -}; - - ScAccessibleContextBase::ScAccessibleContextBase( uno::Reference<XAccessible> xParent, const sal_Int16 aRole) : - ScAccessibleContextBaseWeakImpl(m_aMutex), mxParent(std::move(xParent)), - mnClientId(0), maRole(aRole) { } @@ -82,7 +49,7 @@ ScAccessibleContextBase::~ScAccessibleContextBase() { if (!IsDefunc() && !rBHelper.bInDispose) { - // increment refcount to prevent double call off dtor + // increment refcount to prevent double call of dtor osl_atomic_increment( &m_refCount ); // call dispose to inform object which have a weak reference to this object dispose(); @@ -94,16 +61,6 @@ void ScAccessibleContextBase::Init() // hold reference to make sure that the destructor is not called uno::Reference< XAccessibleContext > xKeepAlive(this); - if (mxParent.is()) - { - uno::Reference< XAccessibleEventBroadcaster > xBroadcaster (mxParent->getAccessibleContext(), uno::UNO_QUERY); - if (xBroadcaster.is()) - { - if (!mxEventListener) - mxEventListener = new ScAccessibleContextBaseEventListener(*this); - xBroadcaster->addAccessibleEventListener(mxEventListener); - } - } msName = createAccessibleName(); msDescription = createAccessibleDescription(); } @@ -111,25 +68,13 @@ void ScAccessibleContextBase::Init() void SAL_CALL ScAccessibleContextBase::disposing() { SolarMutexGuard aGuard; -// CommitDefunc(); not necessary and should not be send, because it cost a lot of time // hold reference to make sure that the destructor is not called uno::Reference< XAccessibleContext > xKeepAlive(this); - if ( mnClientId ) - { - sal_Int32 nTemClientId(mnClientId); - mnClientId = 0; - comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( nTemClientId, *this ); - } + OAccessibleComponentHelper::disposing(); - if (mxParent.is()) - { - uno::Reference< XAccessibleEventBroadcaster > xBroadcaster (mxParent->getAccessibleContext(), uno::UNO_QUERY); - if (xBroadcaster && mxEventListener) - xBroadcaster->removeAccessibleEventListener(mxEventListener); - mxParent = nullptr; - } + mxParent.clear(); } @@ -152,55 +97,26 @@ uno::Reference< XAccessibleContext> SAL_CALL return this; } -//===== XAccessibleComponent ================================================ +// OAccessibleComponentHelper -sal_Bool SAL_CALL ScAccessibleContextBase::containsPoint(const awt::Point& rPoint ) +awt::Rectangle ScAccessibleContextBase::implGetBounds( ) { - SolarMutexGuard aGuard; - IsObjectValid(); - return tools::Rectangle(Point(), GetBoundingBox().GetSize()) - .Contains(vcl::unohelper::ConvertToVCLPoint(rPoint)); -} - -uno::Reference< XAccessible > SAL_CALL ScAccessibleContextBase::getAccessibleAtPoint( - const awt::Point& /* rPoint */ ) -{ - OSL_FAIL("not implemented"); - return uno::Reference<XAccessible>(); -} - -awt::Rectangle SAL_CALL ScAccessibleContextBase::getBounds( ) -{ - SolarMutexGuard aGuard; - IsObjectValid(); return vcl::unohelper::ConvertToAWTRect(GetBoundingBox()); } -awt::Point SAL_CALL ScAccessibleContextBase::getLocation( ) -{ - SolarMutexGuard aGuard; - IsObjectValid(); - return vcl::unohelper::ConvertToAWTPoint(GetBoundingBox().TopLeft()); -} +//===== XAccessibleComponent ================================================ awt::Point SAL_CALL ScAccessibleContextBase::getLocationOnScreen( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); return vcl::unohelper::ConvertToAWTPoint(GetBoundingBoxOnScreen().TopLeft()); } -awt::Size SAL_CALL ScAccessibleContextBase::getSize( ) -{ - SolarMutexGuard aGuard; - IsObjectValid(); - return vcl::unohelper::ConvertToAWTSize(GetBoundingBox().GetSize()); -} - bool ScAccessibleContextBase::isShowing( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); bool bShowing(false); if (mxParent.is()) { @@ -238,55 +154,12 @@ sal_Int32 SAL_CALL ScAccessibleContextBase::getBackground( ) //===== XAccessibleContext ================================================== -sal_Int64 SAL_CALL ScAccessibleContextBase::getAccessibleChildCount() -{ - OSL_FAIL("should be implemented in the abrevated class"); - return 0; -} - -uno::Reference<XAccessible> SAL_CALL - ScAccessibleContextBase::getAccessibleChild(sal_Int64 /* nIndex */) -{ - OSL_FAIL("should be implemented in the abrevated class"); - return uno::Reference<XAccessible>(); -} - uno::Reference<XAccessible> SAL_CALL ScAccessibleContextBase::getAccessibleParent() { return mxParent; } -sal_Int64 SAL_CALL - ScAccessibleContextBase::getAccessibleIndexInParent() -{ - SolarMutexGuard aGuard; - IsObjectValid(); - // Use a simple but slow solution for now. Optimize later. - // Return -1 to indicate that this object's parent does not know about the - // object. - sal_Int64 nIndex(-1); - - // Iterate over all the parent's children and search for this object. - if (mxParent.is()) - { - uno::Reference<XAccessibleContext> xParentContext ( - mxParent->getAccessibleContext()); - if (xParentContext.is()) - { - sal_Int64 nChildCount = xParentContext->getAccessibleChildCount(); - for (sal_Int64 i=0; i<nChildCount; ++i) - { - uno::Reference<XAccessible> xChild (xParentContext->getAccessibleChild (i)); - if (xChild.is() && xChild.get() == this) - nIndex = i; - } - } - } - - return nIndex; -} - sal_Int16 SAL_CALL ScAccessibleContextBase::getAccessibleRole() { @@ -297,22 +170,18 @@ OUString SAL_CALL ScAccessibleContextBase::getAccessibleDescription() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (msDescription.isEmpty()) { OUString sDescription(createAccessibleDescription()); if (msDescription != sDescription) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::DESCRIPTION_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.OldValue <<= msDescription; - aEvent.NewValue <<= sDescription; - + const OUString sOldDescription = msDescription; msDescription = sDescription; - CommitChange(aEvent); + CommitChange(AccessibleEventId::DESCRIPTION_CHANGED, uno::Any(sOldDescription), + uno::Any(sDescription)); } } return msDescription; @@ -322,7 +191,7 @@ OUString SAL_CALL ScAccessibleContextBase::getAccessibleName() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (msName.isEmpty()) { OUString sName(createAccessibleName()); @@ -330,15 +199,10 @@ OUString SAL_CALL if (msName != sName) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::NAME_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.OldValue <<= msName; - aEvent.NewValue <<= sName; - + const OUString sOldName = msName; msName = sName; - CommitChange(aEvent); + CommitChange(AccessibleEventId::NAME_CHANGED, uno::Any(sOldName), uno::Any(sName)); } } return msName; @@ -359,7 +223,7 @@ lang::Locale SAL_CALL ScAccessibleContextBase::getLocale() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (mxParent.is()) { uno::Reference<XAccessibleContext> xParentContext ( @@ -373,48 +237,6 @@ lang::Locale SAL_CALL throw IllegalAccessibleComponentStateException (); } - //===== XAccessibleEventBroadcaster ===================================== - -void SAL_CALL - ScAccessibleContextBase::addAccessibleEventListener( - const uno::Reference<XAccessibleEventListener>& xListener) -{ - if (xListener.is()) - { - SolarMutexGuard aGuard; - IsObjectValid(); - if (!IsDefunc()) - { - if (!mnClientId) - mnClientId = comphelper::AccessibleEventNotifier::registerClient( ); - comphelper::AccessibleEventNotifier::addEventListener( mnClientId, xListener ); - } - } -} - -void SAL_CALL - ScAccessibleContextBase::removeAccessibleEventListener( - const uno::Reference<XAccessibleEventListener>& xListener) -{ - if (!xListener.is()) - return; - - SolarMutexGuard aGuard; - if (IsDefunc() || !mnClientId) - return; - - sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( mnClientId, xListener ); - if ( !nListenerCount ) - { - // no listeners anymore - // -> revoke ourself. This may lead to the notifier thread dying (if we were the last client), - // and at least to us not firing any events anymore, in case somebody calls - // NotifyAccessibleEvent, again - comphelper::AccessibleEventNotifier::revokeClient( mnClientId ); - mnClientId = 0; - } -} - // XServiceInfo OUString SAL_CALL ScAccessibleContextBase::getImplementationName() { @@ -438,58 +260,32 @@ uno::Sequence< OUString> SAL_CALL OUString ScAccessibleContextBase::createAccessibleDescription() { - OSL_FAIL("should be implemented in the abrevated class"); + OSL_FAIL("should be implemented in the abbreviated class"); return OUString(); } OUString ScAccessibleContextBase::createAccessibleName() { - OSL_FAIL("should be implemented in the abrevated class"); + OSL_FAIL("should be implemented in the abbreviated class"); return OUString(); } -void ScAccessibleContextBase::CommitChange(const AccessibleEventObject& rEvent) const -{ - if (mnClientId) - comphelper::AccessibleEventNotifier::addEvent( mnClientId, rEvent ); -} - -void ScAccessibleContextBase::CommitFocusGained() const -{ - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::STATE_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(const_cast<ScAccessibleContextBase*>(this)); - aEvent.NewValue <<= AccessibleStateType::FOCUSED; - - CommitChange(aEvent); -} - -void ScAccessibleContextBase::CommitFocusLost() const +void ScAccessibleContextBase::CommitChange(const sal_Int16 nEventId, const css::uno::Any& rOldValue, + const css::uno::Any& rNewValue, sal_Int32 nIndexHint) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::STATE_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(const_cast<ScAccessibleContextBase*>(this)); - aEvent.OldValue <<= AccessibleStateType::FOCUSED; - - CommitChange(aEvent); + NotifyAccessibleEvent(nEventId, rOldValue, rNewValue, nIndexHint); } -AbsoluteScreenPixelRectangle ScAccessibleContextBase::GetBoundingBoxOnScreen() const +void ScAccessibleContextBase::CommitFocusGained() { - OSL_FAIL("not implemented"); - return AbsoluteScreenPixelRectangle(); -} - -tools::Rectangle ScAccessibleContextBase::GetBoundingBox() const -{ - OSL_FAIL("not implemented"); - return tools::Rectangle(); + CommitChange(AccessibleEventId::STATE_CHANGED, uno::Any(), + uno::Any(AccessibleStateType::FOCUSED)); } -void ScAccessibleContextBase::IsObjectValid() const +void ScAccessibleContextBase::CommitFocusLost() { - if (rBHelper.bDisposed || rBHelper.bInDispose) - throw lang::DisposedException(); + CommitChange(AccessibleEventId::STATE_CHANGED, uno::Any(AccessibleStateType::FOCUSED), + uno::Any()); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/Accessibility/AccessibleDocument.cxx b/sc/source/ui/Accessibility/AccessibleDocument.cxx index 5658ee2a27a9..d1bd67a7686e 100644 --- a/sc/source/ui/Accessibility/AccessibleDocument.cxx +++ b/sc/source/ui/Accessibility/AccessibleDocument.cxx @@ -220,14 +220,14 @@ public: virtual ::accessibility::AccessibleControlShape* GetAccControlShapeFromModel (css::beans::XPropertySet* pSet) override; - virtual css::uno::Reference< css::accessibility::XAccessible> + virtual ::accessibility::AccessibleShape* GetAccessibleCaption (const css::uno::Reference<css::drawing::XShape>& xShape) override; ///===== Internal ======================================================== void SetDrawBroadcaster(); sal_Int32 GetCount() const; - uno::Reference< XAccessible > Get(const ScAccessibleShapeData* pData) const; - uno::Reference< XAccessible > Get(sal_Int32 nIndex) const; + rtl::Reference<::accessibility::AccessibleShape> Get(const ScAccessibleShapeData* pData) const; + rtl::Reference<::accessibility::AccessibleShape> Get(sal_Int32 nIndex) const; uno::Reference< XAccessible > GetAt(const awt::Point& rPoint) const; // gets the index of the shape starting on 0 (without the index of the table) @@ -241,7 +241,8 @@ public: void DeselectAll(); // deselect also the table void SelectAll(); sal_Int32 GetSelectedCount() const; - uno::Reference< XAccessible > GetSelected(sal_Int32 nSelectedChildIndex, bool bTabSelected) const; + rtl::Reference<::accessibility::AccessibleShape> GetSelected(sal_Int32 nSelectedChildIndex, + bool bTabSelected) const; void Deselect(sal_Int32 nChildIndex); SdrPage* GetDrawPage() const; @@ -429,13 +430,10 @@ bool ScChildrenShapes::ReplaceChild (::accessibility::AccessibleShape* pCurrentC if (it != maShapesMap.end() && it->second->pAccShape.is()) { OSL_ENSURE(it->second->pAccShape == pCurrentChild, "wrong child found"); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccessibleDocument); - aEvent.OldValue <<= uno::Reference<XAccessible>(pCurrentChild); - aEvent.IndexHint = -1; - - mpAccessibleDocument->CommitChange(aEvent); // child is gone - event + // child is gone - event + mpAccessibleDocument->CommitChange(AccessibleEventId::CHILD, + uno::Any(uno::Reference<XAccessible>(pCurrentChild)), + uno::Any()); pCurrentChild->dispose(); } @@ -447,13 +445,9 @@ bool ScChildrenShapes::ReplaceChild (::accessibility::AccessibleShape* pCurrentC if (it != maShapesMap.end()) { it->second->pAccShape = pReplacement; - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccessibleDocument); - aEvent.NewValue <<= uno::Reference<XAccessible>(pReplacement); - aEvent.IndexHint = -1; - - mpAccessibleDocument->CommitChange(aEvent); // child is new - event + // child is new - event + mpAccessibleDocument->CommitChange(AccessibleEventId::CHILD, uno::Any(), + uno::Any(uno::Reference<XAccessible>(pReplacement))); bResult = true; } } @@ -479,7 +473,7 @@ bool ScChildrenShapes::ReplaceChild (::accessibility::AccessibleShape* pCurrentC return nullptr; } -css::uno::Reference < css::accessibility::XAccessible > +::accessibility::AccessibleShape* ScChildrenShapes::GetAccessibleCaption (const css::uno::Reference < css::drawing::XShape>& xShape) { GetCount(); // populate @@ -487,10 +481,7 @@ ScChildrenShapes::GetAccessibleCaption (const css::uno::Reference < css::drawing if (it == maShapesMap.end()) return nullptr; ScAccessibleShapeData* pShape = it->second; - css::uno::Reference< css::accessibility::XAccessible > xNewChild( pShape->pAccShape ); - if(xNewChild) - return xNewChild; - return nullptr; + return pShape->pAccShape.get(); } sal_Int32 ScChildrenShapes::GetCount() const @@ -509,7 +500,8 @@ sal_Int32 ScChildrenShapes::GetCount() const return maZOrderedShapes.size(); } -uno::Reference< XAccessible > ScChildrenShapes::Get(const ScAccessibleShapeData* pData) const +rtl::Reference<::accessibility::AccessibleShape> +ScChildrenShapes::Get(const ScAccessibleShapeData* pData) const { if (!pData) return nullptr; @@ -533,7 +525,7 @@ uno::Reference< XAccessible > ScChildrenShapes::Get(const ScAccessibleShapeData* return pData->pAccShape; } -uno::Reference< XAccessible > ScChildrenShapes::Get(sal_Int32 nIndex) const +rtl::Reference<::accessibility::AccessibleShape> ScChildrenShapes::Get(sal_Int32 nIndex) const { if (maZOrderedShapes.size() <= 1) GetCount(); // fill list with filtered shapes (no internal shapes) @@ -793,9 +785,10 @@ sal_Int32 ScChildrenShapes::GetSelectedCount() const return aShapes.size(); } -uno::Reference< XAccessible > ScChildrenShapes::GetSelected(sal_Int32 nSelectedChildIndex, bool bTabSelected) const +rtl::Reference<::accessibility::AccessibleShape> +ScChildrenShapes::GetSelected(sal_Int32 nSelectedChildIndex, bool bTabSelected) const { - uno::Reference< XAccessible > xAccessible; + rtl::Reference<::accessibility::AccessibleShape> xAccessible; if (maZOrderedShapes.size() <= 1) GetCount(); // fill list with shapes @@ -1037,30 +1030,25 @@ bool ScChildrenShapes::FindSelectedShapesChanges(const uno::Reference<drawing::X if( pMarkedObj == pFocusedObj && pUpObj ) { uno::Reference< drawing::XShape > xUpGroupXShape (pUpObj->getUnoShape(), uno::UNO_QUERY); - uno::Reference < XAccessible > xAccGroupShape = + ::accessibility::AccessibleShape* pAccGroupShape = const_cast<ScChildrenShapes*>(this)->GetAccessibleCaption( xUpGroupXShape ); - if( xAccGroupShape.is() ) + if( pAccGroupShape ) { - ::accessibility::AccessibleShape* pAccGroupShape = - static_cast< ::accessibility::AccessibleShape* >(xAccGroupShape.get()); - if( pAccGroupShape ) + sal_Int64 nCount = pAccGroupShape->getAccessibleChildCount(); + for( sal_Int64 i = 0; i < nCount; i++ ) { - sal_Int64 nCount = pAccGroupShape->getAccessibleChildCount(); - for( sal_Int64 i = 0; i < nCount; i++ ) + uno::Reference<XAccessible> xAccShape = pAccGroupShape->getAccessibleChild(i); + if (xAccShape.is()) { - uno::Reference<XAccessible> xAccShape = pAccGroupShape->getAccessibleChild(i); - if (xAccShape.is()) + ::accessibility::AccessibleShape* pChildAccShape = static_cast< ::accessibility::AccessibleShape* >(xAccShape.get()); + uno::Reference< drawing::XShape > xChildShape = pChildAccShape->GetXShape(); + if (xChildShape == xMarkedXShape) + { + pChildAccShape->SetState(AccessibleStateType::FOCUSED); + } + else { - ::accessibility::AccessibleShape* pChildAccShape = static_cast< ::accessibility::AccessibleShape* >(xAccShape.get()); - uno::Reference< drawing::XShape > xChildShape = pChildAccShape->GetXShape(); - if (xChildShape == xMarkedXShape) - { - pChildAccShape->SetState(AccessibleStateType::FOCUSED); - } - else - { - pChildAccShape->ResetState(AccessibleStateType::FOCUSED); - } + pChildAccShape->ResetState(AccessibleStateType::FOCUSED); } } } @@ -1070,38 +1058,27 @@ bool ScChildrenShapes::FindSelectedShapesChanges(const uno::Reference<drawing::X } if (vecSelectedShapeAdd.size() >= 10 ) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN; - aEvent.Source = uno::Reference< XAccessible >(mpAccessibleDocument); - mpAccessibleDocument->CommitChange(aEvent); + mpAccessibleDocument->CommitChange(AccessibleEventId::SELECTION_CHANGED_WITHIN, uno::Any(), + uno::Any()); } else { for (const auto& rpShape : vecSelectedShapeAdd) { - AccessibleEventObject aEvent; + sal_Int16 nEventId; if (bHasSelect) - { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_ADD; - } + nEventId = AccessibleEventId::SELECTION_CHANGED_ADD; else - { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED; - } - aEvent.Source = uno::Reference< XAccessible >(mpAccessibleDocument); - uno::Reference< XAccessible > xChild( rpShape->pAccShape ); - aEvent.NewValue <<= xChild; - mpAccessibleDocument->CommitChange(aEvent); + nEventId = AccessibleEventId::SELECTION_CHANGED; + mpAccessibleDocument->CommitChange( + nEventId, uno::Any(), uno::Any(uno::Reference<XAccessible>(rpShape->pAccShape))); } } for (const auto& rpShape : vecSelectedShapeRemove) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_REMOVE; - aEvent.Source = uno::Reference< XAccessible >(mpAccessibleDocument); - uno::Reference< XAccessible > xChild( rpShape->pAccShape ); - aEvent.NewValue <<= xChild; - mpAccessibleDocument->CommitChange(aEvent); + mpAccessibleDocument->CommitChange( + AccessibleEventId::SELECTION_CHANGED_REMOVE, uno::Any(), + uno::Any(uno::Reference<XAccessible>(rpShape->pAccShape))); } for(ScAccessibleShapeData*& pShapeData : aShapesList) { @@ -1219,13 +1196,9 @@ void ScChildrenShapes::AddShape(const uno::Reference<drawing::XShape>& xShape, b } if (mpAccessibleDocument && bCommitChange) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccessibleDocument); - aEvent.NewValue <<= Get(pShape); - aEvent.IndexHint = -1; - - mpAccessibleDocument->CommitChange(aEvent); // new child - event + // new child - event + mpAccessibleDocument->CommitChange(AccessibleEventId::CHILD, uno::Any(), + uno::Any(uno::Reference<XAccessible>(Get(pShape)))); } } @@ -1241,19 +1214,16 @@ void ScChildrenShapes::RemoveShape(const uno::Reference<drawing::XShape>& xShape { if (mpAccessibleDocument) { - uno::Reference<XAccessible> xOldAccessible (Get(*aItr)); + rtl::Reference<::accessibility::AccessibleShape> xOldAccessible(Get(*aItr)); delete *aItr; maShapesMap.erase((*aItr)->xShape); maZOrderedShapes.erase(aItr); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccessibleDocument); - aEvent.OldValue <<= xOldAccessible; - aEvent.IndexHint = -1; - - mpAccessibleDocument->CommitChange(aEvent); // child is gone - event + // child is gone - event + mpAccessibleDocument->CommitChange( + AccessibleEventId::CHILD, uno::Any(uno::Reference<XAccessible>(xOldAccessible)), + uno::Any()); } else { @@ -1365,7 +1335,7 @@ ScAccessibleDocument::~ScAccessibleDocument() { if (!ScAccessibleContextBase::IsDefunc() && !rBHelper.bInDispose) { - // increment refcount to prevent double call off dtor + // increment refcount to prevent double call of dtor osl_atomic_increment( &m_refCount ); dispose(); } @@ -1443,20 +1413,18 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) auto pFocusGotHint = static_cast<const ScAccGridWinFocusGotHint*>(&rHint); if (pFocusGotHint->GetNewGridWin() == meSplitPos) { - uno::Reference<XAccessible> xAccessible; + rtl::Reference<::accessibility::AccessibleShape> xAccShape; if (mpChildrenShapes) { bool bTabMarked(IsTableSelected()); - xAccessible = mpChildrenShapes->GetSelected(0, bTabMarked); + xAccShape = mpChildrenShapes->GetSelected(0, bTabMarked); } - if( xAccessible.is() ) + if (xAccShape.is()) { uno::Any aNewValue; aNewValue<<=AccessibleStateType::FOCUSED; - static_cast< ::accessibility::AccessibleShape* >(xAccessible.get())-> - CommitChange(AccessibleEventId::STATE_CHANGED, - aNewValue, - uno::Any(), -1 ); + xAccShape->CommitChange(AccessibleEventId::STATE_CHANGED, aNewValue, uno::Any(), + -1); } else { @@ -1480,10 +1448,8 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) // mpChildrenShapes variable. mpChildrenShapes.reset( new ScChildrenShapes( this, mpViewShell, meSplitPos ) ); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::INVALIDATE_ALL_CHILDREN; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - CommitChange(aEvent); // all children changed + // all children changed + CommitChange(AccessibleEventId::INVALIDATE_ALL_CHILDREN, uno::Any(), uno::Any()); if (mpAccessibleSpreadsheet.is()) mpAccessibleSpreadsheet->GotFocus(); @@ -1505,9 +1471,8 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) mpTempAccEdit = new ScAccessibleEditObject(this, rViewData.GetEditView(meSplitPos), mpViewShell->GetWindowByPos(meSplitPos), GetCurrentCellName(), ScResId(STR_ACC_EDITLINE_DESCR), ScAccessibleEditObject::CellInEditMode); - uno::Reference<XAccessible> xAcc = mpTempAccEdit; - AddChild(xAcc, true); + AddChild(uno::Reference<XAccessible>(mpTempAccEdit), true); if (mpAccessibleSpreadsheet.is()) mpAccessibleSpreadsheet->LostFocus(); @@ -1551,11 +1516,7 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) { if (maVisArea.GetSize() != aOldVisArea.GetSize()) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::BOUNDRECT_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - - CommitChange(aEvent); + CommitChange(AccessibleEventId::BOUNDRECT_CHANGED, uno::Any(), uno::Any()); if (mpAccessibleSpreadsheet.is()) mpAccessibleSpreadsheet->BoundingBoxChanged(); @@ -1592,13 +1553,7 @@ void SAL_CALL ScAccessibleDocument::selectionChanged( const lang::EventObject& / bSelectionChanged = true; if (bSelectionChanged) - { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - - CommitChange(aEvent); - } + CommitChange(AccessibleEventId::SELECTION_CHANGED, uno::Any(), uno::Any()); } //===== XInterface ===================================================== @@ -1630,7 +1585,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessibleDocument::getAccessibleAtPoin if (containsPoint(rPoint)) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (mpChildrenShapes) xAccessible = mpChildrenShapes->GetAt(rPoint); if(!xAccessible.is()) @@ -1656,7 +1611,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessibleDocument::getAccessibleAtPoin void SAL_CALL ScAccessibleDocument::grabFocus( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (!getAccessibleParent().is()) return; @@ -1681,7 +1636,7 @@ sal_Int64 SAL_CALL ScAccessibleDocument::getAccessibleChildCount() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); sal_Int64 nCount(1); if (mpChildrenShapes) nCount = mpChildrenShapes->GetCount(); // returns the count of the shapes inclusive the table @@ -1697,7 +1652,7 @@ uno::Reference<XAccessible> SAL_CALL ScAccessibleDocument::getAccessibleChild(sal_Int64 nIndex) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); uno::Reference<XAccessible> xAccessible; if (nIndex >= 0) { @@ -1788,7 +1743,7 @@ void SAL_CALL ScAccessibleDocument::selectAccessibleChild( sal_Int64 nChildIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (!(mpChildrenShapes && mpViewShell)) return; @@ -1817,7 +1772,7 @@ sal_Bool SAL_CALL ScAccessibleDocument::isAccessibleChildSelected( sal_Int64 nChildIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); bool bResult(false); if (mpChildrenShapes) @@ -1849,7 +1804,7 @@ void SAL_CALL ScAccessibleDocument::clearAccessibleSelection( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (mpChildrenShapes) mpChildrenShapes->DeselectAll(); //deselects all (also the table) @@ -1859,7 +1814,7 @@ void SAL_CALL ScAccessibleDocument::selectAllAccessibleChildren( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (mpChildrenShapes) mpChildrenShapes->SelectAll(); @@ -1875,7 +1830,7 @@ sal_Int64 SAL_CALL ScAccessibleDocument::getSelectedAccessibleChildCount( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); sal_Int64 nCount(0); if (mpChildrenShapes) @@ -1894,7 +1849,7 @@ uno::Reference<XAccessible > SAL_CALL ScAccessibleDocument::getSelectedAccessibleChild( sal_Int64 nSelectedChildIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); uno::Reference<XAccessible> xAccessible; if (mpChildrenShapes) { @@ -1921,7 +1876,7 @@ void SAL_CALL ScAccessibleDocument::deselectAccessibleChild( sal_Int64 nChildIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (!(mpChildrenShapes && mpViewShell)) return; @@ -1997,14 +1952,14 @@ tools::Rectangle ScAccessibleDocument::GetVisibleArea_Impl() const tools::Rectangle ScAccessibleDocument::GetVisibleArea() const { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); return maVisArea; } Point ScAccessibleDocument::LogicToPixel (const Point& rPoint) const { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); Point aPoint; ScGridWindow* pWin = static_cast<ScGridWindow*>(mpViewShell->GetWindowByPos(meSplitPos)); if (pWin) @@ -2018,7 +1973,7 @@ Point ScAccessibleDocument::LogicToPixel (const Point& rPoint) const Size ScAccessibleDocument::LogicToPixel (const Size& rSize) const { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); Size aSize; ScGridWindow* pWin = static_cast<ScGridWindow*>(mpViewShell->GetWindowByPos(meSplitPos)); if (pWin) @@ -2046,7 +2001,7 @@ OUString ScAccessibleDocument::createAccessibleName() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); OUString sName = ScResId(STR_ACC_DOC_NAME); sal_Int32 nNumber(sal_Int32(meSplitPos) + 1); sName += OUString::number(nNumber); @@ -2135,12 +2090,8 @@ void ScAccessibleDocument::AddChild(const uno::Reference<XAccessible>& xAcc, boo mxTempAcc = xAcc; if( bFireEvent ) { - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext>(this); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.NewValue <<= mxTempAcc; - aEvent.IndexHint = getAccessibleChildCount() - 1; - CommitChange( aEvent ); + CommitChange(AccessibleEventId::CHILD, uno::Any(), uno::Any(mxTempAcc), + getAccessibleChildCount() - 1); } } } @@ -2153,14 +2104,7 @@ void ScAccessibleDocument::RemoveChild(const uno::Reference<XAccessible>& xAcc, OSL_ENSURE(xAcc.get() == mxTempAcc.get(), "only the same object should be removed"); if( bFireEvent ) - { - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext>(this); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.OldValue <<= mxTempAcc; - aEvent.IndexHint = -1; - CommitChange( aEvent ); - } + CommitChange(AccessibleEventId::CHILD, uno::Any(mxTempAcc), uno::Any()); mxTempAcc = nullptr; } @@ -2191,23 +2135,20 @@ ScAddress ScAccessibleDocument::GetCurCellAddress() const return mpViewShell ? mpViewShell->GetViewData().GetCurPos() : ScAddress(); } -uno::Any SAL_CALL ScAccessibleDocument::getExtendedAttributes() +OUString SAL_CALL ScAccessibleDocument::getExtendedAttributes() { SolarMutexGuard g; - uno::Any anyAttribute; - sal_uInt16 sheetIndex; OUString sSheetName; sheetIndex = getVisibleTable(); if(GetDocument()==nullptr) - return anyAttribute; + return OUString(); GetDocument()->GetName(sheetIndex,sSheetName); OUString sValue = "page-name:" + sSheetName + ";page-number:" + OUString::number(sheetIndex+1) + ";total-pages:" + OUString::number(GetDocument()->GetTableCount()) + ";"; - anyAttribute <<= sValue; - return anyAttribute; + return sValue; } sal_Int32 SAL_CALL ScAccessibleDocument::getForeground( ) @@ -2218,7 +2159,7 @@ sal_Int32 SAL_CALL ScAccessibleDocument::getForeground( ) sal_Int32 SAL_CALL ScAccessibleDocument::getBackground( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); return sal_Int32(ScModule::get()->GetColorConfig().GetColorValue(::svtools::DOCCOLOR).nColor); } diff --git a/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx b/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx index 5ba18208d110..65c2e9b35c56 100644 --- a/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx +++ b/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx @@ -437,13 +437,8 @@ struct ScChildGone { if (mpAccDoc) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccDoc); - aEvent.OldValue <<= xAccessible; - aEvent.IndexHint = -1; - - mpAccDoc->CommitChange(aEvent); // gone child - event + // gone child - event + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(xAccessible), uno::Any()); } } }; @@ -456,13 +451,8 @@ struct ScChildNew { if (mpAccDoc) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccDoc); - aEvent.NewValue <<= xAccessible; - aEvent.IndexHint = -1; - - mpAccDoc->CommitChange(aEvent); // new child - event + // new child - event + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(), uno::Any(xAccessible)); } } }; @@ -721,46 +711,26 @@ void ScShapeChildren::FindChanged(ScShapeChildVec& rOld, ScShapeChildVec& rNew) else if (aNewItr->mxShape.get() < aOldItr->mxShape.get()) { xAcc = GetAccShape(*aNewItr); - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext> (mpAccDoc); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.NewValue <<= xAcc; - aEvent.IndexHint = -1; - mpAccDoc->CommitChange(aEvent); + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(), uno::Any(xAcc)); ++aNewItr; } else { xAcc = GetAccShape(*aOldItr); - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext> (mpAccDoc); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.OldValue <<= xAcc; - aEvent.IndexHint = -1; - mpAccDoc->CommitChange(aEvent); + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(xAcc), uno::Any()); ++aOldItr; } } while (aOldItr != aOldEnd) { xAcc = GetAccShape(*aOldItr); - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext> (mpAccDoc); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.OldValue <<= xAcc; - aEvent.IndexHint = -1; - mpAccDoc->CommitChange(aEvent); + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(xAcc), uno::Any()); ++aOldItr; } while (aNewItr != aNewEnd) { xAcc = GetAccShape(*aNewItr); - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext> (mpAccDoc); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.NewValue <<= xAcc; - aEvent.IndexHint = -1; - mpAccDoc->CommitChange(aEvent); + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(), uno::Any(xAcc)); ++aNewItr; } } @@ -1161,7 +1131,7 @@ ScAccessibleDocumentPagePreview::~ScAccessibleDocumentPagePreview() { if (!ScAccessibleDocumentBase::IsDefunc() && !rBHelper.bInDispose) { - // increment refcount to prevent double call off dtor + // increment refcount to prevent double call of dtor osl_atomic_increment( &m_refCount ); // call dispose to inform object which have a weak reference to this object dispose(); @@ -1171,9 +1141,21 @@ ScAccessibleDocumentPagePreview::~ScAccessibleDocumentPagePreview() void SAL_CALL ScAccessibleDocumentPagePreview::disposing() { SolarMutexGuard aGuard; - mpTable.clear(); - mpHeader.clear(); - mpFooter.clear(); + if (mpTable.is()) + { + mpTable->dispose(); + mpTable.clear(); + } + if (mpHeader) + { + mpHeader->dispose(); + mpHeader.clear(); + } + if (mpFooter) + { + mpFooter->dispose(); + mpFooter.clear(); + } if (mpViewShell) { @@ -1215,15 +1197,8 @@ void ScAccessibleDocumentPagePreview::Notify( SfxBroadcaster& rBC, const SfxHint // only notify if child exist, otherwise it is not necessary if (mpTable.is()) // if there is no table there is nothing to notify, because no one recognizes the change { - { - uno::Reference<XAccessible> xAcc = mpTable; - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.OldValue <<= xAcc; - aEvent.IndexHint = -1; - CommitChange(aEvent); - } + CommitChange(AccessibleEventId::CHILD, uno::Any(uno::Reference<XAccessible>(mpTable)), + uno::Any()); mpTable->dispose(); mpTable.clear(); @@ -1249,15 +1224,8 @@ void ScAccessibleDocumentPagePreview::Notify( SfxBroadcaster& rBC, const SfxHint mpTable = new ScAccessiblePreviewTable( this, mpViewShell, nIndex ); mpTable->Init(); - { - uno::Reference<XAccessible> xAcc = mpTable; - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.NewValue <<= xAcc; - aEvent.IndexHint = -1; - CommitChange(aEvent); - } + CommitChange(AccessibleEventId::CHILD, uno::Any(), + uno::Any(uno::Reference<XAccessible>(mpTable))); } } else if (rHint.GetId() == SfxHintId::ScAccVisAreaChanged) @@ -1271,10 +1239,7 @@ void ScAccessibleDocumentPagePreview::Notify( SfxBroadcaster& rBC, const SfxHint GetShapeChildren()->VisAreaChanged(); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - CommitChange(aEvent); + CommitChange(AccessibleEventId::VISIBLE_DATA_CHANGED, uno::Any(), uno::Any()); } ScAccessibleDocumentBase::Notify(rBC, rHint); } @@ -1287,7 +1252,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessibleDocumentPagePreview::getAcces if (containsPoint(rPoint)) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if ( mpViewShell ) { @@ -1347,7 +1312,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessibleDocumentPagePreview::getAcces void SAL_CALL ScAccessibleDocumentPagePreview::grabFocus() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (getAccessibleParent().is()) { uno::Reference<XAccessibleComponent> xAccessibleComponent(getAccessibleParent()->getAccessibleContext(), uno::UNO_QUERY); @@ -1364,7 +1329,7 @@ void SAL_CALL ScAccessibleDocumentPagePreview::grabFocus() sal_Int64 SAL_CALL ScAccessibleDocumentPagePreview::getAccessibleChildCount() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); sal_Int64 nRet = 0; if ( mpViewShell ) @@ -1379,7 +1344,7 @@ sal_Int64 SAL_CALL ScAccessibleDocumentPagePreview::getAccessibleChildCount() uno::Reference<XAccessible> SAL_CALL ScAccessibleDocumentPagePreview::getAccessibleChild(sal_Int64 nIndex) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); uno::Reference<XAccessible> xAccessible; if ( mpViewShell ) diff --git a/sc/source/ui/Accessibility/AccessibleEditObject.cxx b/sc/source/ui/Accessibility/AccessibleEditObject.cxx index d903b9d43218..cccae7991bf8 100644 --- a/sc/source/ui/Accessibility/AccessibleEditObject.cxx +++ b/sc/source/ui/Accessibility/AccessibleEditObject.cxx @@ -109,7 +109,7 @@ ScAccessibleEditObject::~ScAccessibleEditObject() { if (!ScAccessibleContextBase::IsDefunc() && !rBHelper.bInDispose) { - // increment refcount to prevent double call off dtor + // increment refcount to prevent double call of dtor osl_atomic_increment( &m_refCount ); // call dispose to inform object which have a weak reference to this object dispose(); @@ -173,7 +173,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessibleEditObject::getAccessibleAtPo if (containsPoint(rPoint)) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); CreateTextHelper(); @@ -248,7 +248,7 @@ sal_Int64 SAL_CALL ScAccessibleEditObject::getAccessibleChildCount() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); CreateTextHelper(); return mpTextHelper->GetChildCount(); } @@ -257,7 +257,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessibleEditObject::getAccessibleChild(sal_Int64 nIndex) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); CreateTextHelper(); return mpTextHelper->GetChild(nIndex); } diff --git a/sc/source/ui/Accessibility/AccessiblePageHeader.cxx b/sc/source/ui/Accessibility/AccessiblePageHeader.cxx index dab5f2f89b3c..beb373429475 100644 --- a/sc/source/ui/Accessibility/AccessiblePageHeader.cxx +++ b/sc/source/ui/Accessibility/AccessiblePageHeader.cxx @@ -64,7 +64,7 @@ ScAccessiblePageHeader::~ScAccessiblePageHeader() { if (!ScAccessibleContextBase::IsDefunc() && !rBHelper.bInDispose) { - // increment refcount to prevent double call off dtor + // increment refcount to prevent double call of dtor osl_atomic_increment( &m_refCount ); dispose(); } @@ -107,34 +107,23 @@ void ScAccessiblePageHeader::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) { if (aOldAreas[i].is() && aOldAreas[i]->GetEditTextObject()) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.OldValue <<= uno::Reference<XAccessible>(aOldAreas[i]); - aEvent.IndexHint = -1; - - CommitChange(aEvent); // child gone - event + // child gone - event + CommitChange(AccessibleEventId::CHILD, + uno::Any(uno::Reference<XAccessible>(aOldAreas[i])), uno::Any()); aOldAreas[i]->dispose(); } if (maAreas[i].is() && maAreas[i]->GetEditTextObject()) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.NewValue <<= uno::Reference<XAccessible>(maAreas[i]); - aEvent.IndexHint = -1; - - CommitChange(aEvent); // new child - event + // new child - event + CommitChange(AccessibleEventId::CHILD, uno::Any(), + uno::Any(uno::Reference<XAccessible>(maAreas[i]))); } } } } else if (rHint.GetId() == SfxHintId::ScAccVisAreaChanged) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - CommitChange(aEvent); + CommitChange(AccessibleEventId::VISIBLE_DATA_CHANGED, uno::Any(), uno::Any()); } ScAccessibleContextBase::Notify(rBC, rHint); @@ -149,7 +138,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePageHeader::getAccessibleAtPo if (containsPoint(aPoint)) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); sal_Int64 nCount(getAccessibleChildCount()); // fill the areas @@ -173,7 +162,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePageHeader::getAccessibleAtPo void SAL_CALL ScAccessiblePageHeader::grabFocus() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (getAccessibleParent().is()) { uno::Reference<XAccessibleComponent> xAccessibleComponent(getAccessibleParent()->getAccessibleContext(), uno::UNO_QUERY); @@ -187,7 +176,7 @@ void SAL_CALL ScAccessiblePageHeader::grabFocus() sal_Int64 SAL_CALL ScAccessiblePageHeader::getAccessibleChildCount() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if((mnChildCount < 0) && mpViewShell) { @@ -217,7 +206,7 @@ sal_Int64 SAL_CALL ScAccessiblePageHeader::getAccessibleChildCount() uno::Reference< XAccessible > SAL_CALL ScAccessiblePageHeader::getAccessibleChild( sal_Int64 nIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); uno::Reference<XAccessible> xRet; diff --git a/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx b/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx index 4881e2a8ce60..c807a01661dd 100644 --- a/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx +++ b/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx @@ -60,7 +60,7 @@ ScAccessiblePageHeaderArea::~ScAccessiblePageHeaderArea() { if (!ScAccessibleContextBase::IsDefunc() && !rBHelper.bInDispose) { - // increment refcount to prevent double call off dtor + // increment refcount to prevent double call of dtor osl_atomic_increment( &m_refCount ); dispose(); } @@ -89,10 +89,7 @@ void ScAccessiblePageHeaderArea::Notify( SfxBroadcaster& rBC, const SfxHint& rHi if (mpTextHelper) mpTextHelper->UpdateChildren(); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - CommitChange(aEvent); + CommitChange(AccessibleEventId::VISIBLE_DATA_CHANGED, uno::Any(), uno::Any()); } ScAccessibleContextBase::Notify(rBC, rHint); } @@ -105,7 +102,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePageHeaderArea::getAccessible if (containsPoint(rPoint)) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if(!mpTextHelper) CreateTextHelper(); @@ -122,7 +119,7 @@ sal_Int64 SAL_CALL ScAccessiblePageHeaderArea::getAccessibleChildCount() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (!mpTextHelper) CreateTextHelper(); return mpTextHelper->GetChildCount(); @@ -132,7 +129,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePageHeaderArea::getAccessibleChild(sal_Int64 nIndex) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (!mpTextHelper) CreateTextHelper(); return mpTextHelper->GetChild(nIndex); diff --git a/sc/source/ui/Accessibility/AccessiblePreviewCell.cxx b/sc/source/ui/Accessibility/AccessiblePreviewCell.cxx index c0aefc808cc8..469ecab7ca85 100644 --- a/sc/source/ui/Accessibility/AccessiblePreviewCell.cxx +++ b/sc/source/ui/Accessibility/AccessiblePreviewCell.cxx @@ -55,7 +55,7 @@ ScAccessiblePreviewCell::~ScAccessiblePreviewCell() { if (!ScAccessibleContextBase::IsDefunc() && !rBHelper.bInDispose) { - // increment refcount to prevent double call off dtor + // increment refcount to prevent double call of dtor osl_atomic_increment( &m_refCount ); // call dispose to inform object which have a weak reference to this object dispose(); @@ -95,7 +95,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePreviewCell::getAccessibleAtP if (containsPoint(rPoint)) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if(!mpTextHelper) CreateTextHelper(); @@ -109,7 +109,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePreviewCell::getAccessibleAtP void SAL_CALL ScAccessiblePreviewCell::grabFocus() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (getAccessibleParent().is()) { uno::Reference<XAccessibleComponent> xAccessibleComponent(getAccessibleParent()->getAccessibleContext(), uno::UNO_QUERY); @@ -123,7 +123,7 @@ void SAL_CALL ScAccessiblePreviewCell::grabFocus() sal_Int64 SAL_CALL ScAccessiblePreviewCell::getAccessibleChildCount() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (!mpTextHelper) CreateTextHelper(); return mpTextHelper->GetChildCount(); @@ -132,7 +132,7 @@ sal_Int64 SAL_CALL ScAccessiblePreviewCell::getAccessibleChildCount() uno::Reference< XAccessible > SAL_CALL ScAccessiblePreviewCell::getAccessibleChild(sal_Int64 nIndex) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (!mpTextHelper) CreateTextHelper(); return mpTextHelper->GetChild(nIndex); diff --git a/sc/source/ui/Accessibility/AccessiblePreviewHeaderCell.cxx b/sc/source/ui/Accessibility/AccessiblePreviewHeaderCell.cxx index 670d45ff0cb9..843e61f611e1 100644 --- a/sc/source/ui/Accessibility/AccessiblePreviewHeaderCell.cxx +++ b/sc/source/ui/Accessibility/AccessiblePreviewHeaderCell.cxx @@ -131,7 +131,7 @@ void SAL_CALL ScAccessiblePreviewHeaderCell::release() uno::Any SAL_CALL ScAccessiblePreviewHeaderCell::getCurrentValue() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); double fValue(0.0); if (mbColumnHeader) @@ -151,7 +151,7 @@ sal_Bool SAL_CALL ScAccessiblePreviewHeaderCell::setCurrentValue( const uno::Any uno::Any SAL_CALL ScAccessiblePreviewHeaderCell::getMaximumValue() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); double fValue(0.0); ScDocument& rDoc = mpViewShell->GetDocument(); @@ -181,7 +181,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePreviewHeaderCell::getAccessi if (containsPoint(rPoint)) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if(!mxTextHelper) CreateTextHelper(); @@ -195,7 +195,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePreviewHeaderCell::getAccessi void SAL_CALL ScAccessiblePreviewHeaderCell::grabFocus() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (getAccessibleParent().is()) { uno::Reference<XAccessibleComponent> xAccessibleComponent(getAccessibleParent()->getAccessibleContext(), uno::UNO_QUERY); @@ -209,7 +209,7 @@ void SAL_CALL ScAccessiblePreviewHeaderCell::grabFocus() sal_Int64 SAL_CALL ScAccessiblePreviewHeaderCell::getAccessibleChildCount() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (!mxTextHelper) CreateTextHelper(); return mxTextHelper->GetChildCount(); @@ -218,7 +218,7 @@ sal_Int64 SAL_CALL ScAccessiblePreviewHeaderCell::getAccessibleChildCount() uno::Reference< XAccessible > SAL_CALL ScAccessiblePreviewHeaderCell::getAccessibleChild(sal_Int64 nIndex) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (!mxTextHelper) CreateTextHelper(); return mxTextHelper->GetChild(nIndex); diff --git a/sc/source/ui/Accessibility/AccessiblePreviewTable.cxx b/sc/source/ui/Accessibility/AccessiblePreviewTable.cxx index 5dfc06ca063b..f1c788646736 100644 --- a/sc/source/ui/Accessibility/AccessiblePreviewTable.cxx +++ b/sc/source/ui/Accessibility/AccessiblePreviewTable.cxx @@ -58,7 +58,7 @@ ScAccessiblePreviewTable::~ScAccessiblePreviewTable() { if (!ScAccessibleContextBase::IsDefunc() && !rBHelper.bInDispose) { - // increment refcount to prevent double call off dtor + // increment refcount to prevent double call of dtor osl_atomic_increment( &m_refCount ); dispose(); } @@ -91,10 +91,7 @@ void ScAccessiblePreviewTable::Notify( SfxBroadcaster& rBC, const SfxHint& rHint } else if (nId == SfxHintId::ScAccVisAreaChanged) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - CommitChange(aEvent); + CommitChange(AccessibleEventId::VISIBLE_DATA_CHANGED, uno::Any(), uno::Any()); } ScAccessibleContextBase::Notify(rBC, rHint); @@ -125,7 +122,7 @@ void SAL_CALL ScAccessiblePreviewTable::release() sal_Int32 SAL_CALL ScAccessiblePreviewTable::getAccessibleRowCount() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); FillTableInfo(); @@ -138,7 +135,7 @@ sal_Int32 SAL_CALL ScAccessiblePreviewTable::getAccessibleRowCount() sal_Int32 SAL_CALL ScAccessiblePreviewTable::getAccessibleColumnCount() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); FillTableInfo(); @@ -171,7 +168,7 @@ OUString SAL_CALL ScAccessiblePreviewTable::getAccessibleColumnDescription( sal_ sal_Int32 SAL_CALL ScAccessiblePreviewTable::getAccessibleRowExtentAt( sal_Int32 nRow, sal_Int32 nColumn ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); FillTableInfo(); @@ -202,7 +199,7 @@ sal_Int32 SAL_CALL ScAccessiblePreviewTable::getAccessibleRowExtentAt( sal_Int32 sal_Int32 SAL_CALL ScAccessiblePreviewTable::getAccessibleColumnExtentAt( sal_Int32 nRow, sal_Int32 nColumn ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); FillTableInfo(); @@ -281,7 +278,7 @@ sal_Bool SAL_CALL ScAccessiblePreviewTable::isAccessibleColumnSelected( sal_Int3 uno::Reference< XAccessible > SAL_CALL ScAccessiblePreviewTable::getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); FillTableInfo(); @@ -334,7 +331,7 @@ sal_Bool SAL_CALL ScAccessiblePreviewTable::isAccessibleSelected( sal_Int32 nRow { // in the page preview, there is no selection SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); FillTableInfo(); @@ -348,7 +345,7 @@ sal_Bool SAL_CALL ScAccessiblePreviewTable::isAccessibleSelected( sal_Int32 nRow sal_Int64 SAL_CALL ScAccessiblePreviewTable::getAccessibleIndex( sal_Int32 nRow, sal_Int32 nColumn ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); FillTableInfo(); @@ -363,7 +360,7 @@ sal_Int64 SAL_CALL ScAccessiblePreviewTable::getAccessibleIndex( sal_Int32 nRow, sal_Int32 SAL_CALL ScAccessiblePreviewTable::getAccessibleRow( sal_Int64 nChildIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); FillTableInfo(); @@ -377,7 +374,7 @@ sal_Int32 SAL_CALL ScAccessiblePreviewTable::getAccessibleRow( sal_Int64 nChildI sal_Int32 SAL_CALL ScAccessiblePreviewTable::getAccessibleColumn( sal_Int64 nChildIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); FillTableInfo(); @@ -392,56 +389,55 @@ sal_Int32 SAL_CALL ScAccessiblePreviewTable::getAccessibleColumn( sal_Int64 nChi uno::Reference< XAccessible > SAL_CALL ScAccessiblePreviewTable::getAccessibleAtPoint( const awt::Point& aPoint ) { - uno::Reference<XAccessible> xRet; - if (containsPoint(aPoint)) - { - SolarMutexGuard aGuard; - IsObjectValid(); + if (!containsPoint(aPoint)) + return nullptr; - FillTableInfo(); + SolarMutexGuard aGuard; + ensureAlive(); - if ( mpTableInfo ) - { - SCCOL nCols = mpTableInfo->GetCols(); - SCROW nRows = mpTableInfo->GetRows(); - const ScPreviewColRowInfo* pColInfo = mpTableInfo->GetColInfo(); - const ScPreviewColRowInfo* pRowInfo = mpTableInfo->GetRowInfo(); + FillTableInfo(); - tools::Rectangle aScreenRect(GetBoundingBox()); + if (!mpTableInfo) + return nullptr; - awt::Point aMovedPoint = aPoint; - aMovedPoint.X += aScreenRect.Left(); - aMovedPoint.Y += aScreenRect.Top(); + SCCOL nCols = mpTableInfo->GetCols(); + SCROW nRows = mpTableInfo->GetRows(); + const ScPreviewColRowInfo* pColInfo = mpTableInfo->GetColInfo(); + const ScPreviewColRowInfo* pRowInfo = mpTableInfo->GetRowInfo(); - if ( nCols > 0 && nRows > 0 && aMovedPoint.X >= pColInfo[0].nPixelStart && aMovedPoint.Y >= pRowInfo[0].nPixelStart ) + tools::Rectangle aScreenRect(GetBoundingBox()); + + awt::Point aMovedPoint = aPoint; + aMovedPoint.X += aScreenRect.Left(); + aMovedPoint.Y += aScreenRect.Top(); + + if ( nCols > 0 && nRows > 0 && aMovedPoint.X >= pColInfo[0].nPixelStart && aMovedPoint.Y >= pRowInfo[0].nPixelStart ) + { + SCCOL nColIndex = 0; + while ( nColIndex < nCols && aMovedPoint.X > pColInfo[nColIndex].nPixelEnd ) + ++nColIndex; + SCROW nRowIndex = 0; + while ( nRowIndex < nRows && aMovedPoint.Y > pRowInfo[nRowIndex].nPixelEnd ) + ++nRowIndex; + if ( nColIndex < nCols && nRowIndex < nRows ) + { + try + { + return getAccessibleCellAt( nRowIndex, nColIndex ); + } + catch (uno::Exception&) { - SCCOL nColIndex = 0; - while ( nColIndex < nCols && aMovedPoint.X > pColInfo[nColIndex].nPixelEnd ) - ++nColIndex; - SCROW nRowIndex = 0; - while ( nRowIndex < nRows && aMovedPoint.Y > pRowInfo[nRowIndex].nPixelEnd ) - ++nRowIndex; - if ( nColIndex < nCols && nRowIndex < nRows ) - { - try - { - xRet = getAccessibleCellAt( nRowIndex, nColIndex ); - } - catch (uno::Exception&) - { - } - } } } } - return xRet; + return nullptr; } void SAL_CALL ScAccessiblePreviewTable::grabFocus() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (getAccessibleParent().is()) { uno::Reference<XAccessibleComponent> xAccessibleComponent(getAccessibleParent()->getAccessibleContext(), uno::UNO_QUERY); @@ -455,7 +451,7 @@ void SAL_CALL ScAccessiblePreviewTable::grabFocus() sal_Int64 SAL_CALL ScAccessiblePreviewTable::getAccessibleChildCount() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); FillTableInfo(); @@ -468,7 +464,7 @@ sal_Int64 SAL_CALL ScAccessiblePreviewTable::getAccessibleChildCount() uno::Reference< XAccessible > SAL_CALL ScAccessiblePreviewTable::getAccessibleChild( sal_Int64 nIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); FillTableInfo(); diff --git a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx index 0bad15e85566..b3198242eaf1 100644 --- a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx +++ b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx @@ -329,35 +329,26 @@ void ScAccessibleSpreadsheet::CompleteSelectionChanged(bool bNewState) } mpMarkedRanges.reset(); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::STATE_CHANGED; + uno::Any aOldValue; + uno::Any aNewValue; if (bNewState) - aEvent.NewValue <<= AccessibleStateType::SELECTED; + aNewValue <<= AccessibleStateType::SELECTED; else - aEvent.OldValue <<= AccessibleStateType::SELECTED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - - CommitChange(aEvent); + aOldValue <<= AccessibleStateType::SELECTED; + CommitChange(AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue); } void ScAccessibleSpreadsheet::LostFocus() { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.OldValue <<= uno::Reference<XAccessible>(mpAccCell); - - CommitChange(aEvent); - + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, + uno::Any(uno::Reference<XAccessible>(mpAccCell)), uno::Any()); CommitFocusLost(); } void ScAccessibleSpreadsheet::GotFocus() { CommitFocusGained(); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); + uno::Reference< XAccessible > xNew; if (IsFormulaMode()) { @@ -384,27 +375,18 @@ void ScAccessibleSpreadsheet::GotFocus() return ; } } - aEvent.NewValue <<= xNew; - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, uno::Any(), uno::Any(xNew)); } void ScAccessibleSpreadsheet::BoundingBoxChanged() { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::BOUNDRECT_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - - CommitChange(aEvent); + CommitChange(AccessibleEventId::BOUNDRECT_CHANGED, uno::Any(), uno::Any()); } void ScAccessibleSpreadsheet::VisAreaChanged() { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - - CommitChange(aEvent); + CommitChange(AccessibleEventId::VISIBLE_DATA_CHANGED, uno::Any(), uno::Any()); } //===== SfxListener ===================================================== @@ -477,13 +459,8 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint } CommitTableModelChange(nFirstRow, nFirstCol, nLastRow, nLastCol, nId); - - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.NewValue <<= uno::Reference<XAccessible>(mpAccCell); - - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, uno::Any(), + uno::Any(uno::Reference<XAccessible>(mpAccCell))); } } } @@ -511,18 +488,16 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint } m_bFormulaLastMode = m_bFormulaMode; - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference< XAccessible >(this); ScAddress aNewCell = rViewData.GetCurPos(); if(aNewCell.Tab() != maActiveCell.Tab()) { - aEvent.EventId = AccessibleEventId::PAGE_CHANGED; auto pAccParent = getAccessibleParent(); ScAccessibleDocument *pAccDoc = static_cast<ScAccessibleDocument*>(pAccParent.get()); if(pAccDoc) { - pAccDoc->CommitChange(aEvent); + pAccDoc->CommitChange(AccessibleEventId::PAGE_CHANGED, uno::Any(), + uno::Any()); } } bool bNewPosCell = (aNewCell != maActiveCell) || mpViewShell->GetForceFocusOnCurCell(); // #i123629# @@ -540,16 +515,14 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint // sal_Bool bNewCellSelected = isAccessibleSelected(aNewCell.Row(), aNewCell.Col()); sal_uInt16 nTab = rViewData.GetTabNo(); const ScRange& aMarkRange = refScMarkData.GetMarkArea(); - aEvent.OldValue.clear(); ScDocument* pDoc= GetDocument(mpViewShell); //Mark All if ( !bNewPosCellFocus && (bNewMarked || bIsMark || bIsMultMark ) && aMarkRange == ScRange( 0,0,nTab, pDoc->MaxCol(),pDoc->MaxRow(),nTab ) ) { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN; - aEvent.NewValue.clear(); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_WITHIN, uno::Any(), + uno::Any()); return ; } if (!mpMarkedRanges) @@ -578,11 +551,8 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint !aMarkRange.Contains(m_aLastWithInMarkRange) && aMarkRange.Intersects(m_aLastWithInMarkRange); if( !bSelSmaller ) - { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN; - aEvent.NewValue.clear(); - CommitChange(aEvent); - } + CommitChange(AccessibleEventId::SELECTION_CHANGED_WITHIN, uno::Any(), + uno::Any()); m_aLastWithInMarkRange = aMarkRange; } return ; @@ -597,25 +567,22 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint { CommitFocusCell(aNewCell); } - uno::Reference< XAccessible > xChild ; + rtl::Reference< ScAccessibleCell > xChild ; if (bNewPosCellFocus) { - xChild = mpAccCell.get(); + xChild = mpAccCell; } else { mpAccCell = GetAccessibleCellAt(aNewCell.Row(),aNewCell.Col()); - xChild = mpAccCell.get(); + xChild = mpAccCell; maActiveCell = aNewCell; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS; - aEvent.NewValue <<= xChild; - aEvent.OldValue <<= uno::Reference< XAccessible >(); - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS, + uno::Any(), uno::Any(uno::Reference<XAccessible>(xChild))); } - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED; - aEvent.NewValue <<= xChild; - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED, uno::Any(), + uno::Any(uno::Reference<XAccessible>(xChild))); OSL_ASSERT(m_mapSelectionSend.count(aNewCell) == 0 ); m_mapSelectionSend.emplace(aNewCell,xChild); @@ -637,24 +604,22 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint std::vector<ScMyAddress> vecNew; if(CalcScRangeListDifferenceMax(mpMarkedRanges.get(), &m_LastMarkedRanges,10,vecNew)) { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN; - aEvent.NewValue.clear(); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_WITHIN, uno::Any(), + uno::Any()); } else { for(const auto& rAddr : vecNew) { - uno::Reference< XAccessible > xChild = getAccessibleCellAt(rAddr.Row(),rAddr.Col()); + rtl::Reference< ScAccessibleCell > xChild = GetAccessibleCellAt(rAddr.Row(),rAddr.Col()); if (!(bNewPosCellFocus && rAddr == aNewCell) ) { - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS; - aEvent.NewValue <<= xChild; - CommitChange(aEvent); + CommitChange( + AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS, + uno::Any(), uno::Any(uno::Reference<XAccessible>(xChild))); } - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_ADD; - aEvent.NewValue <<= xChild; - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_ADD, uno::Any(), + uno::Any(uno::Reference<XAccessible>(xChild))); m_mapSelectionSend.emplace(rAddr,xChild); } } @@ -685,18 +650,17 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint OUString valStr(pScDoc->GetString(aNewCell.Col(),aNewCell.Row(),aNewCell.Tab())); if(mpAccCell.is() && m_strCurCellValue != valStr) { - AccessibleEventObject aTextChangedEvent; - (void)comphelper::OCommonAccessibleText::implInitTextChangedEvent(m_strCurCellValue, valStr, - aTextChangedEvent.OldValue, - aTextChangedEvent.NewValue); - aTextChangedEvent.EventId = AccessibleEventId::TEXT_CHANGED; - mpAccCell->CommitChange(aTextChangedEvent); + uno::Any aOldValue; + uno::Any aNewValue; + (void)comphelper::OCommonAccessibleText::implInitTextChangedEvent( + m_strCurCellValue, valStr, aOldValue, aNewValue); + mpAccCell->CommitChange(AccessibleEventId::TEXT_CHANGED, aOldValue, + aNewValue); if (pScDoc->HasValueData(maActiveCell)) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VALUE_CHANGED; - mpAccCell->CommitChange(aEvent); + mpAccCell->CommitChange(AccessibleEventId::VALUE_CHANGED, + uno::Any(), uno::Any()); } m_strCurCellValue = valStr; @@ -705,15 +669,12 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint pScDoc->GetName( maActiveCell.Tab(), tabName ); if( m_strOldTabName != tabName ) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::NAME_CHANGED; OUString sOldName(ScResId(STR_ACC_TABLE_NAME)); sOldName = sOldName.replaceFirst("%1", m_strOldTabName); - aEvent.OldValue <<= sOldName; OUString sNewName(ScResId(STR_ACC_TABLE_NAME)); sNewName = sNewName.replaceFirst("%1", tabName); - aEvent.NewValue <<= sNewName; - CommitChange( aEvent ); + CommitChange(AccessibleEventId::NAME_CHANGED, uno::Any(sOldName), + uno::Any(sNewName)); m_strOldTabName = tabName; } } @@ -745,8 +706,6 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint void ScAccessibleSpreadsheet::RemoveSelection(const ScMarkData &refScMarkData) { - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference< XAccessible >(this); MAP_ADDR_XACC::iterator miRemove = m_mapSelectionSend.begin(); while (miRemove != m_mapSelectionSend.end()) { @@ -756,9 +715,8 @@ void ScAccessibleSpreadsheet::RemoveSelection(const ScMarkData &refScMarkData) ++miRemove; continue; } - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_REMOVE; - aEvent.NewValue <<= miRemove->second; - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_REMOVE, uno::Any(), + uno::Any(uno::Reference<XAccessible>(miRemove->second))); miRemove = m_mapSelectionSend.erase(miRemove); } } @@ -786,37 +744,31 @@ void ScAccessibleSpreadsheet::CommitFocusCell(const ScAddress &aNewCell) OUString valStr(pScDoc->GetString(aOldActiveCell.Col(),aOldActiveCell.Row(),aOldActiveCell.Tab())); if(m_strCurCellValue != valStr) { - AccessibleEventObject aTextChangedEvent; - (void)comphelper::OCommonAccessibleText::implInitTextChangedEvent(m_strCurCellValue, valStr, - aTextChangedEvent.OldValue, - aTextChangedEvent.NewValue); - aTextChangedEvent.EventId = AccessibleEventId::TEXT_CHANGED; - mpAccCell->CommitChange(aTextChangedEvent); + uno::Any aOldValue; + uno::Any aNewValue; + (void)comphelper::OCommonAccessibleText::implInitTextChangedEvent( + m_strCurCellValue, valStr, aOldValue, aNewValue); + mpAccCell->CommitChange(AccessibleEventId::TEXT_CHANGED, aOldValue, aNewValue); if (pScDoc->HasValueData(maActiveCell)) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VALUE_CHANGED; - mpAccCell->CommitChange(aEvent); + mpAccCell->CommitChange(AccessibleEventId::VALUE_CHANGED, uno::Any(), uno::Any()); } m_strCurCellValue = valStr; } } - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.Source = uno::Reference< XAccessible >(this); - aEvent.OldValue <<= uno::Reference<XAccessible>(mpAccCell); + uno::Reference<XAccessible> xOldCell = mpAccCell; mpAccCell.clear(); mpAccCell = GetAccessibleCellAt(aNewCell.Row(), aNewCell.Col()); - aEvent.NewValue <<= uno::Reference<XAccessible>(mpAccCell); maActiveCell = aNewCell; if (pScDoc) { m_strCurCellValue = pScDoc->GetString(maActiveCell.Col(),maActiveCell.Row(),maActiveCell.Tab()); } - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, uno::Any(xOldCell), + uno::Any(uno::Reference<XAccessible>(mpAccCell))); } //===== XAccessibleTable ================================================ @@ -824,7 +776,7 @@ void ScAccessibleSpreadsheet::CommitFocusCell(const ScAddress &aNewCell) uno::Reference< XAccessibleTable > SAL_CALL ScAccessibleSpreadsheet::getAccessibleRowHeaders( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); uno::Reference< XAccessibleTable > xAccessibleTable; if( mpDoc && mbIsSpreadsheet ) { @@ -843,7 +795,7 @@ uno::Reference< XAccessibleTable > SAL_CALL ScAccessibleSpreadsheet::getAccessib uno::Reference< XAccessibleTable > SAL_CALL ScAccessibleSpreadsheet::getAccessibleColumnHeaders( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); uno::Reference< XAccessibleTable > xAccessibleTable; if( mpDoc && mbIsSpreadsheet ) { @@ -862,7 +814,7 @@ uno::Reference< XAccessibleTable > SAL_CALL ScAccessibleSpreadsheet::getAccessib uno::Sequence< sal_Int32 > SAL_CALL ScAccessibleSpreadsheet::getSelectedAccessibleRows( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); uno::Sequence<sal_Int32> aSequence; if (IsFormulaMode()) { @@ -892,7 +844,7 @@ uno::Sequence< sal_Int32 > SAL_CALL ScAccessibleSpreadsheet::getSelectedAccessib uno::Sequence< sal_Int32 > SAL_CALL ScAccessibleSpreadsheet::getSelectedAccessibleColumns( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); uno::Sequence<sal_Int32> aSequence; if (IsFormulaMode() || !mpViewShell) return aSequence; @@ -916,7 +868,7 @@ uno::Sequence< sal_Int32 > SAL_CALL ScAccessibleSpreadsheet::getSelectedAccessib sal_Bool SAL_CALL ScAccessibleSpreadsheet::isAccessibleRowSelected( sal_Int32 nRow ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (IsFormulaMode()) { return false; @@ -937,7 +889,7 @@ sal_Bool SAL_CALL ScAccessibleSpreadsheet::isAccessibleRowSelected( sal_Int32 nR sal_Bool SAL_CALL ScAccessibleSpreadsheet::isAccessibleColumnSelected( sal_Int32 nColumn ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (IsFormulaMode()) { @@ -1003,7 +955,7 @@ rtl::Reference<ScAccessibleCell> ScAccessibleSpreadsheet::GetAccessibleCellAt(sa uno::Reference< XAccessible > SAL_CALL ScAccessibleSpreadsheet::getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (!IsFormulaMode()) { if (nRow > (maRange.aEnd.Row() - maRange.aStart.Row()) || @@ -1019,7 +971,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessibleSpreadsheet::getAccessibleCel sal_Bool SAL_CALL ScAccessibleSpreadsheet::isAccessibleSelected( sal_Int32 nRow, sal_Int32 nColumn ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (IsFormulaMode()) { @@ -1047,7 +999,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessibleSpreadsheet::getAccessibleAtP if (containsPoint(rPoint)) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (mpViewShell) { SCCOL nX; @@ -1083,7 +1035,7 @@ sal_Int32 SAL_CALL ScAccessibleSpreadsheet::getForeground( ) sal_Int32 SAL_CALL ScAccessibleSpreadsheet::getBackground( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); return sal_Int32(ScModule::get()->GetColorConfig().GetColorValue(::svtools::DOCCOLOR).nColor); } @@ -1138,7 +1090,7 @@ sal_Int64 SAL_CALL ScAccessibleSpreadsheet::getAccessibleStateSet() void SAL_CALL ScAccessibleSpreadsheet::selectAccessibleChild( sal_Int64 nChildIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (nChildIndex < 0 || nChildIndex >= getAccessibleChildCount()) throw lang::IndexOutOfBoundsException(); @@ -1155,7 +1107,7 @@ void SAL_CALL ScAccessibleSpreadsheet::clearAccessibleSelection( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (mpViewShell && !IsFormulaMode()) mpViewShell->Unmark(); } @@ -1163,7 +1115,7 @@ void SAL_CALL void SAL_CALL ScAccessibleSpreadsheet::selectAllAccessibleChildren( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (!mpViewShell) return; @@ -1184,7 +1136,7 @@ sal_Int64 SAL_CALL ScAccessibleSpreadsheet::getSelectedAccessibleChildCount( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); sal_Int64 nResult(0); if (mpViewShell) { @@ -1211,7 +1163,7 @@ uno::Reference<XAccessible > SAL_CALL ScAccessibleSpreadsheet::getSelectedAccessibleChild( sal_Int64 nSelectedChildIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); uno::Reference < XAccessible > xAccessible; if (IsFormulaMode()) { @@ -1247,7 +1199,7 @@ uno::Reference<XAccessible > SAL_CALL void SAL_CALL ScAccessibleSpreadsheet::deselectAccessibleChild( sal_Int64 nChildIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (nChildIndex < 0 || nChildIndex >= getAccessibleChildCount()) throw lang::IndexOutOfBoundsException(); @@ -1364,16 +1316,6 @@ uno::Sequence<sal_Int8> SAL_CALL return css::uno::Sequence<sal_Int8>(); } -///===== XAccessibleEventBroadcaster ===================================== - -void SAL_CALL ScAccessibleSpreadsheet::addAccessibleEventListener(const uno::Reference<XAccessibleEventListener>& xListener) -{ - SolarMutexGuard aGuard; - IsObjectValid(); - ScAccessibleTableBase::addAccessibleEventListener(xListener); - -} - //==== internal ========================================================= AbsoluteScreenPixelRectangle ScAccessibleSpreadsheet::GetBoundingBoxOnScreen() const @@ -1541,11 +1483,8 @@ void ScAccessibleSpreadsheet::FireFirstCellFocus() return ; } mbIsFocusSend = true; - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.Source = uno::Reference< XAccessible >(this); - aEvent.NewValue <<= getAccessibleCellAt(maActiveCell.Row(), maActiveCell.Col()); - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, uno::Any(), + uno::Any(getAccessibleCellAt(maActiveCell.Row(), maActiveCell.Col()))); } void ScAccessibleSpreadsheet::NotifyRefMode() @@ -1571,19 +1510,16 @@ void ScAccessibleSpreadsheet::NotifyRefMode() m_nMinY = std::min(nRefStartY,nRefEndY); m_nMaxY = std::max(nRefStartY,nRefEndY); RemoveFormulaSelection(); - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference< XAccessible >(this); - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.OldValue <<= uno::Reference<XAccessible>(m_pAccFormulaCell); + uno::Reference<XAccessible> xOldFormulaCell = m_pAccFormulaCell; m_pAccFormulaCell = GetAccessibleCellAt(aFormulaAddr.Row(), aFormulaAddr.Col()); - uno::Reference< XAccessible > xNew = m_pAccFormulaCell; - aEvent.NewValue <<= xNew; - CommitChange(aEvent); + rtl::Reference< ScAccessibleCell > xNew = m_pAccFormulaCell; + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, uno::Any(xOldFormulaCell), + uno::Any(uno::Reference<XAccessible>(xNew))); + if (nRefStartX == nRefEndX && nRefStartY == nRefEndY) {//Selection Single - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED; - aEvent.NewValue <<= xNew; - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED, uno::Any(xOldFormulaCell), + uno::Any(uno::Reference<XAccessible>(xNew))); m_mapFormulaSelectionSend.emplace(aFormulaAddr,xNew); m_vecFormulaLastMyAddr.clear(); m_vecFormulaLastMyAddr.emplace_back(aFormulaAddr); @@ -1609,29 +1545,26 @@ void ScAccessibleSpreadsheet::NotifyRefMode() int nNewSize = vecNew.size(); if ( nNewSize > 10 ) { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN; - aEvent.NewValue.clear(); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_WITHIN, uno::Any(), uno::Any()); } else { for(const auto& rAddr : vecNew) { - uno::Reference< XAccessible > xChild; + rtl::Reference< ScAccessibleCell > xChild; if (rAddr == aFormulaAddr) { - xChild = m_pAccFormulaCell.get(); + xChild = m_pAccFormulaCell; } else { - xChild = getAccessibleCellAt(rAddr.Row(),rAddr.Col()); - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS; - aEvent.NewValue <<= xChild; - CommitChange(aEvent); + xChild = GetAccessibleCellAt(rAddr.Row(),rAddr.Col()); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS, + uno::Any(xOldFormulaCell), + uno::Any(uno::Reference<XAccessible>(xChild))); } - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_ADD; - aEvent.NewValue <<= xChild; - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_ADD, uno::Any(), + uno::Any(uno::Reference<XAccessible>(xChild))); m_mapFormulaSelectionSend.emplace(rAddr,xChild); } } @@ -1643,9 +1576,7 @@ void ScAccessibleSpreadsheet::NotifyRefMode() void ScAccessibleSpreadsheet::RemoveFormulaSelection(bool bRemoveAll ) { - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference< XAccessible >(this); - MAP_ADDR_XACC::iterator miRemove = m_mapFormulaSelectionSend.begin(); + auto miRemove = m_mapFormulaSelectionSend.begin(); while (miRemove != m_mapFormulaSelectionSend.end()) { if( !bRemoveAll && IsScAddrFormulaSel(miRemove->first) ) @@ -1653,9 +1584,8 @@ void ScAccessibleSpreadsheet::RemoveFormulaSelection(bool bRemoveAll ) ++miRemove; continue; } - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_REMOVE; - aEvent.NewValue <<= miRemove->second; - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_REMOVE, uno::Any(), + uno::Any(uno::Reference<XAccessible>(miRemove->second))); miRemove = m_mapFormulaSelectionSend.erase(miRemove); } } diff --git a/sc/source/ui/Accessibility/AccessibleTableBase.cxx b/sc/source/ui/Accessibility/AccessibleTableBase.cxx index 993370ccc5a8..6ad24f61a706 100644 --- a/sc/source/ui/Accessibility/AccessibleTableBase.cxx +++ b/sc/source/ui/Accessibility/AccessibleTableBase.cxx @@ -91,14 +91,14 @@ void SAL_CALL ScAccessibleTableBase::release() sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleRowCount( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); return maRange.aEnd.Row() - maRange.aStart.Row() + 1; } sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleColumnCount( ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); return maRange.aEnd.Col() - maRange.aStart.Col() + 1; } @@ -127,7 +127,7 @@ OUString SAL_CALL ScAccessibleTableBase::getAccessibleColumnDescription( sal_Int sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleRowExtentAt( sal_Int32 nRow, sal_Int32 nColumn ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if ((nColumn > (maRange.aEnd.Col() - maRange.aStart.Col())) || (nColumn < 0) || (nRow > (maRange.aEnd.Row() - maRange.aStart.Row())) || (nRow < 0)) @@ -160,7 +160,7 @@ sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleRowExtentAt( sal_Int32 nR sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleColumnExtentAt( sal_Int32 nRow, sal_Int32 nColumn ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if ((nColumn > (maRange.aEnd.Col() - maRange.aStart.Col())) || (nColumn < 0) || (nRow > (maRange.aEnd.Row() - maRange.aStart.Row())) || (nRow < 0)) @@ -266,7 +266,7 @@ sal_Bool SAL_CALL ScAccessibleTableBase::isAccessibleSelected( sal_Int32 /* nRow sal_Int64 SAL_CALL ScAccessibleTableBase::getAccessibleIndex( sal_Int32 nRow, sal_Int32 nColumn ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (nRow > (maRange.aEnd.Row() - maRange.aStart.Row()) || nRow < 0 || @@ -282,7 +282,7 @@ sal_Int64 SAL_CALL ScAccessibleTableBase::getAccessibleIndex( sal_Int32 nRow, sa sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleRow( sal_Int64 nChildIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (nChildIndex >= getAccessibleChildCount() || nChildIndex < 0) throw lang::IndexOutOfBoundsException(); @@ -293,7 +293,7 @@ sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleRow( sal_Int64 nChildInde sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleColumn( sal_Int64 nChildIndex ) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (nChildIndex >= getAccessibleChildCount() || nChildIndex < 0) throw lang::IndexOutOfBoundsException(); @@ -306,7 +306,7 @@ sal_Int32 SAL_CALL ScAccessibleTableBase::getAccessibleColumn( sal_Int64 nChildI sal_Int64 SAL_CALL ScAccessibleTableBase::getAccessibleChildCount() { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); // FIXME: representing rows & columns this way is a plain and simple madness. // this needs a radical re-think. @@ -321,7 +321,7 @@ uno::Reference< XAccessible > SAL_CALL ScAccessibleTableBase::getAccessibleChild(sal_Int64 nIndex) { SolarMutexGuard aGuard; - IsObjectValid(); + ensureAlive(); if (nIndex >= getAccessibleChildCount() || nIndex < 0) throw lang::IndexOutOfBoundsException(); @@ -355,13 +355,13 @@ OUString ScAccessibleTableBase::createAccessibleName() uno::Reference<XAccessibleRelationSet> SAL_CALL ScAccessibleTableBase::getAccessibleRelationSet() { - OSL_FAIL("should be implemented in the abrevated class"); + OSL_FAIL("should be implemented in the abbreviated class"); return uno::Reference<XAccessibleRelationSet>(); } sal_Int64 SAL_CALL ScAccessibleTableBase::getAccessibleStateSet() { - OSL_FAIL("should be implemented in the abrevated class"); + OSL_FAIL("should be implemented in the abbreviated class"); return 0; } @@ -435,12 +435,7 @@ void ScAccessibleTableBase::CommitTableModelChange(sal_Int32 nStartRow, sal_Int3 aModelChange.LastColumn = nEndCol; aModelChange.Type = nId; - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::TABLE_MODEL_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.NewValue <<= aModelChange; - - CommitChange(aEvent); + CommitChange(AccessibleEventId::TABLE_MODEL_CHANGED, uno::Any(), uno::Any(aModelChange)); } sal_Bool SAL_CALL ScAccessibleTableBase::selectRow( sal_Int32 ) diff --git a/sc/source/ui/Accessibility/AccessibleText.cxx b/sc/source/ui/Accessibility/AccessibleText.cxx index cea5fd635b7a..3df9a2d0bcbb 100644 --- a/sc/source/ui/Accessibility/AccessibleText.cxx +++ b/sc/source/ui/Accessibility/AccessibleText.cxx @@ -1143,15 +1143,15 @@ SvxTextForwarder* ScAccessibleHeaderTextData::GetTextForwarder() pCellAttributeDefault = &pTmp->getDefaultCellAttribute(); } - auto pDefaults = std::make_unique<SfxItemSet>(pHdrEngine->GetEmptyItemSet()); - pCellAttributeDefault->FillEditItemSet(pDefaults.get()); + SfxItemSet aDefaults(pHdrEngine->GetEmptyItemSet()); + pCellAttributeDefault->FillEditItemSet(&aDefaults); // FillEditItemSet adjusts font height to 1/100th mm, // but for header/footer twips is needed, as in the PatternAttr: - pDefaults->Put( pCellAttributeDefault->GetItem(ATTR_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT) ); - pDefaults->Put( pCellAttributeDefault->GetItem(ATTR_CJK_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CJK) ); - pDefaults->Put( pCellAttributeDefault->GetItem(ATTR_CTL_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CTL) ); - pDefaults->Put( SvxAdjustItem( meAdjust, EE_PARA_JUST ) ); - pHdrEngine->SetDefaults(std::move(pDefaults)); + aDefaults.Put( pCellAttributeDefault->GetItem(ATTR_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT) ); + aDefaults.Put( pCellAttributeDefault->GetItem(ATTR_CJK_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CJK) ); + aDefaults.Put( pCellAttributeDefault->GetItem(ATTR_CTL_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CTL) ); + aDefaults.Put( SvxAdjustItem( meAdjust, EE_PARA_JUST ) ); + pHdrEngine->SetDefaults(std::move(aDefaults)); ScHeaderFieldData aData; if (mpViewShell) diff --git a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx index 2c68f18255b7..96a324c7fad8 100644 --- a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx @@ -187,78 +187,68 @@ void ScRandomNumberGeneratorDialog::SelectGeneratorAndGenerateNumbers() case DIST_UNIFORM: { std::uniform_real_distribution<> distribution(parameter1, parameter2); - auto rng = std::bind(distribution, seed); - GenerateNumbers(rng, STR_DISTRIBUTION_UNIFORM_REAL, aDecimalPlaces); + GenerateNumbers(distribution, seed, STR_DISTRIBUTION_UNIFORM_REAL, aDecimalPlaces); break; } case DIST_UNIFORM_INTEGER: { std::uniform_int_distribution<sal_Int64> distribution(parameterInteger1, parameterInteger2); - auto rng = std::bind(distribution, seed); - GenerateNumbers(rng, STR_DISTRIBUTION_UNIFORM_INTEGER, aDecimalPlaces); + GenerateNumbers(distribution, seed, STR_DISTRIBUTION_UNIFORM_INTEGER, aDecimalPlaces); break; } case DIST_NORMAL: { std::normal_distribution<> distribution(parameter1, parameter2); - auto rng = std::bind(distribution, seed); - GenerateNumbers(rng, STR_DISTRIBUTION_NORMAL, aDecimalPlaces); + GenerateNumbers(distribution, seed, STR_DISTRIBUTION_NORMAL, aDecimalPlaces); break; } case DIST_CAUCHY: { std::cauchy_distribution<> distribution(parameter1); - auto rng = std::bind(distribution, seed); - GenerateNumbers(rng, STR_DISTRIBUTION_CAUCHY, aDecimalPlaces); + GenerateNumbers(distribution, seed, STR_DISTRIBUTION_CAUCHY, aDecimalPlaces); break; } case DIST_BERNOULLI: { std::bernoulli_distribution distribution(parameter1); - auto rng = std::bind(distribution, seed); - GenerateNumbers(rng, STR_DISTRIBUTION_BERNOULLI, aDecimalPlaces); + GenerateNumbers(distribution, seed, STR_DISTRIBUTION_BERNOULLI, aDecimalPlaces); break; } case DIST_BINOMIAL: { std::binomial_distribution<> distribution(parameterInteger2, parameter1); - auto rng = std::bind(distribution, seed); - GenerateNumbers(rng, STR_DISTRIBUTION_BINOMIAL, aDecimalPlaces); + GenerateNumbers(distribution, seed, STR_DISTRIBUTION_BINOMIAL, aDecimalPlaces); break; } case DIST_CHI_SQUARED: { std::chi_squared_distribution<> distribution(parameter1); - auto rng = std::bind(distribution, seed); - GenerateNumbers(rng, STR_DISTRIBUTION_CHI_SQUARED, aDecimalPlaces); + GenerateNumbers(distribution, seed, STR_DISTRIBUTION_CHI_SQUARED, aDecimalPlaces); break; } case DIST_GEOMETRIC: { std::geometric_distribution<> distribution(parameter1); - auto rng = std::bind(distribution, seed); - GenerateNumbers(rng, STR_DISTRIBUTION_GEOMETRIC, aDecimalPlaces); + GenerateNumbers(distribution, seed, STR_DISTRIBUTION_GEOMETRIC, aDecimalPlaces); break; } case DIST_NEGATIVE_BINOMIAL: { std::negative_binomial_distribution<> distribution(parameterInteger2, parameter1); - auto rng = std::bind(distribution, seed); - GenerateNumbers(rng, STR_DISTRIBUTION_NEGATIVE_BINOMIAL, aDecimalPlaces); + GenerateNumbers(distribution, seed, STR_DISTRIBUTION_NEGATIVE_BINOMIAL, aDecimalPlaces); break; } case DIST_POISSON: { std::poisson_distribution<> distribution(parameter1); - auto rng = std::bind(distribution, seed); - GenerateNumbers(rng, STR_DISTRIBUTION_POISSON, aDecimalPlaces); + GenerateNumbers(distribution, seed, STR_DISTRIBUTION_POISSON, aDecimalPlaces); break; } } } -template<class RNG> -void ScRandomNumberGeneratorDialog::GenerateNumbers(RNG& randomGenerator, TranslateId pDistributionStringId, std::optional<sal_Int8> aDecimalPlaces) +template<class DIST> +void ScRandomNumberGeneratorDialog::GenerateNumbers(DIST& distribution, std::mt19937& seed, TranslateId pDistributionStringId, std::optional<sal_Int8> aDecimalPlaces) { OUString aUndo = ScResId(STR_UNDO_DISTRIBUTION_TEMPLATE); OUString aDistributionName = ScResId(pDistributionStringId); @@ -289,9 +279,9 @@ void ScRandomNumberGeneratorDialog::GenerateNumbers(RNG& randomGenerator, Transl { if (aDecimalPlaces) - aVals.push_back(rtl::math::round(randomGenerator(), *aDecimalPlaces)); + aVals.push_back(rtl::math::round(distribution(seed), *aDecimalPlaces)); else - aVals.push_back(randomGenerator()); + aVals.push_back(distribution(seed)); } pDocShell->GetDocFunc().SetValueCells(aPos, aVals, true); diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx index e778d27886c0..e1be37a897d7 100644 --- a/sc/source/ui/app/inputhdl.cxx +++ b/sc/source/ui/app/inputhdl.cxx @@ -47,6 +47,7 @@ #include <sfx2/printer.hxx> #include <svl/numformat.hxx> #include <svl/zforlist.hxx> +#include <svtools/langtab.hxx> #include <unotools/localedatawrapper.hxx> #include <unotools/charclass.hxx> #include <utility> @@ -1822,7 +1823,7 @@ void ScInputHandler::LOKPasteFunctionData(const OUString& rFunctionName) } } -void ScTabViewShell::LOKSendFormulabarUpdate(EditView* pActiveView, +void ScTabViewShell::LOKSendFormulabarUpdate(const EditView* pActiveView, const OUString& rText, const ESelection& rSelection) { @@ -1858,6 +1859,18 @@ void ScTabViewShell::LOKSendFormulabarUpdate(EditView* pActiveView, maSendFormulabarUpdate.m_aText = rText; maSendFormulabarUpdate.m_aSelection = aSelection; maSendFormulabarUpdate.m_nTimeStamp = now; + + ScViewData& rViewData = this->GetViewData(); + const ScDocument& rDoc = rViewData.GetDocShell()->GetDocument(); + const ScPatternAttr* pPattern = rDoc.GetPattern(rViewData.GetCurX(), rViewData.GetCurY(), rViewData.GetRefTabNo()); + + if (pPattern) + { + SvNumberFormatter* pFormatter = rDoc.GetFormatTable(); + sal_uInt32 nFormat = pPattern->GetNumberFormat( pFormatter ); + maSendFormulabarUpdate.m_separator = pFormatter->GetFormatDecimalSep(nFormat); + } + maSendFormulabarUpdate.Send(); } @@ -1867,6 +1880,7 @@ void ScTabViewShell::SendFormulabarUpdate::Send() (*pData)["action_type"_ostr] = "setText"; (*pData)["text"_ostr] = m_aText; (*pData)["selection"_ostr] = m_aSelection; + (*pData)["separator"_ostr] = m_separator; OUString sWindowId = OUString::number(m_nShellId) + "formulabar"; jsdialog::SendAction(sWindowId, u"sc_input_window"_ustr, std::move(pData)); } @@ -2840,8 +2854,12 @@ void ScInputHandler::DataChanged( bool bFromTopNotify, bool bSetModified ) if (bUpdateKit) { UpdateActiveView(); + if (pActiveView) + { + pActiveView->ShowCursor(); // Send show cursor command after registering the view. aSel = pActiveView->GetSelection(); + } OUString aText = ScEditUtil::GetMultilineString(*mpEditEngine); pActiveViewSh->libreOfficeKitViewCallback(LOK_CALLBACK_CELL_FORMULA, aText.toUtf8()); @@ -3457,8 +3475,14 @@ void ScInputHandler::EnterHandler2(ScEnterMode nBlockMode, bool bForget, OUStrin ScInputStatusItem aItemCorrected(FID_INPUTLINE_STATUS, aCursorPos, aCursorPos, aCursorPos, aString, pObject.get()); + + sc::MisspellRangeResult aMisspellRangeResult; if ( !aMisspellRanges.empty() ) - aItemCorrected.SetMisspellRanges(&aMisspellRanges); + { + aMisspellRangeResult.meCellLang = mpEditEngine->GetDefaultLanguage(); + aMisspellRangeResult.mpRanges = &aMisspellRanges; + aItemCorrected.SetMisspellRanges(aMisspellRangeResult); + } aArgs[0] = &aItemCorrected; rBindings.Execute(nId, aArgs); diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx index 9ee7648a7a3c..d170f1fdb821 100644 --- a/sc/source/ui/app/inputwin.cxx +++ b/sc/source/ui/app/inputwin.cxx @@ -1553,14 +1553,14 @@ void ScTextWnd::InitEditEngine() UpdateAutoCorrFlag(); { - auto pSet = std::make_unique<SfxItemSet>( m_xEditEngine->GetEmptyItemSet() ); - EditEngine::SetFontInfoInItemSet( *pSet, aTextFont ); - lcl_ExtendEditFontAttribs( *pSet ); + SfxItemSet aSet( m_xEditEngine->GetEmptyItemSet() ); + EditEngine::SetFontInfoInItemSet( aSet, aTextFont ); + lcl_ExtendEditFontAttribs( aSet ); // turn off script spacing to match DrawText output - pSet->Put( SvxScriptSpaceItem( false, EE_PARA_ASIANCJKSPACING ) ); + aSet.Put( SvxScriptSpaceItem( false, EE_PARA_ASIANCJKSPACING ) ); if ( bIsRTL ) - lcl_ModifyRTLDefaults( *pSet ); - static_cast<ScEditEngineDefaulter*>(m_xEditEngine.get())->SetDefaults( std::move(pSet) ); + lcl_ModifyRTLDefaults( aSet ); + static_cast<ScEditEngineDefaulter*>(m_xEditEngine.get())->SetDefaults( std::move(aSet) ); } // If the Cell contains URLFields, they need to be taken over into the entry row, @@ -2117,12 +2117,12 @@ void ScTextWnd::MakeDialogEditView() m_xEditEngine->SetWordDelimiters( m_xEditEngine->GetWordDelimiters() + "=" ); m_xEditEngine->SetPaperSize( Size( bIsRTL ? USHRT_MAX : THESIZE, 300 ) ); - auto pSet = std::make_unique<SfxItemSet>( m_xEditEngine->GetEmptyItemSet() ); - EditEngine::SetFontInfoInItemSet( *pSet, aTextFont ); - lcl_ExtendEditFontAttribs( *pSet ); + SfxItemSet aSet( m_xEditEngine->GetEmptyItemSet() ); + EditEngine::SetFontInfoInItemSet( aSet, aTextFont ); + lcl_ExtendEditFontAttribs( aSet ); if ( bIsRTL ) - lcl_ModifyRTLDefaults( *pSet ); - static_cast<ScEditEngineDefaulter*>(m_xEditEngine.get())->SetDefaults( std::move(pSet) ); + lcl_ModifyRTLDefaults( aSet ); + static_cast<ScEditEngineDefaulter*>(m_xEditEngine.get())->SetDefaults( std::move(aSet) ); m_xEditEngine->SetUpdateLayout( bPrevUpdateLayout ); m_xEditView = std::make_unique<EditView>(m_xEditEngine.get(), nullptr); diff --git a/sc/source/ui/app/msgpool.cxx b/sc/source/ui/app/msgpool.cxx index 4675dc285ea0..5dd25412bfce 100644 --- a/sc/source/ui/app/msgpool.cxx +++ b/sc/source/ui/app/msgpool.cxx @@ -32,7 +32,7 @@ static ItemInfoPackage& getItemInfoPackageScMessage() // m_nWhich, m_pItem, m_nSlotID, m_nItemInfoFlags { SCITEM_STRING, new SfxStringItem(SCITEM_STRING, OUString() ), 0, SFX_ITEMINFOFLAG_NONE }, { SCITEM_SEARCHDATA, new SvxSearchItem(SCITEM_SEARCHDATA ), 0, SFX_ITEMINFOFLAG_NONE }, - { SCITEM_SORTDATA, new ScSortItem(SCITEM_SORTDATA, nullptr ), SID_SORT, SFX_ITEMINFOFLAG_NONE }, + { SCITEM_SORTDATA, new ScSortItem(SCITEM_SORTDATA, nullptr, nullptr), SID_SORT, SFX_ITEMINFOFLAG_NONE }, { SCITEM_QUERYDATA, new ScQueryItem(SCITEM_QUERYDATA, nullptr, nullptr ), SID_QUERY, SFX_ITEMINFOFLAG_NONE }, { SCITEM_SUBTDATA, new ScSubTotalItem(SCITEM_SUBTDATA, nullptr, nullptr ), SID_SUBTOTALS, SFX_ITEMINFOFLAG_NONE }, { SCITEM_CONSOLIDATEDATA, new ScConsolidateItem(SCITEM_CONSOLIDATEDATA, nullptr ), SID_CONSOLIDATE, SFX_ITEMINFOFLAG_NONE }, diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx index 84238486fa6b..e27ba3cd98f9 100644 --- a/sc/source/ui/app/scmod.cxx +++ b/sc/source/ui/app/scmod.cxx @@ -143,6 +143,7 @@ ScModule::ScModule( SfxObjectFactory* pFact ) : ErrCodeArea::Sc, GetResLocale()) ); + m_aIdleTimer.SetPriority(TaskPriority::DEFAULT_IDLE); m_aIdleTimer.SetTimeout(SC_IDLE_MIN); m_aIdleTimer.SetInvokeHandler( LINK( this, ScModule, IdleHandler ) ); m_aIdleTimer.Start(); @@ -237,7 +238,7 @@ void ScModule::ConfigurationChanged(utl::ConfigurationBroadcaster* p, Configurat } // if nothing changed, and the hint was OnlyCurrentDocumentColorScheme we can skip invalidate - const bool bSkipInvalidate = bUnchanged && eHints == ConfigurationHints::OnlyCurrentDocumentColorScheme; + const bool bSkipInvalidate = bKit ||(bUnchanged && eHints == ConfigurationHints::OnlyCurrentDocumentColorScheme); if (!bSkipInvalidate) { pViewSh->PaintGrid(); @@ -566,7 +567,7 @@ void ScModule::GetState( SfxItemSet& rSet ) rSet.Put( SfxUInt32Item( nWhich, GetAppOptions().GetStatusFunc() ) ); break; case SID_ATTR_METRIC: - rSet.Put( SfxUInt16Item( nWhich, sal::static_int_cast<sal_uInt16>(GetAppOptions().GetAppMetric()) ) ); + rSet.Put(SfxUInt16Item(nWhich, sal::static_int_cast<sal_uInt16>(GetMetric()))); break; case SID_AUTOSPELL_CHECK: rSet.Put( SfxBoolItem( nWhich, pTabViewShell->IsAutoSpell()) ); @@ -933,6 +934,13 @@ SvtUserOptions& ScModule::GetUserOptions() return *m_pUserOptions; } +FieldUnit ScModule::GetMetric() +{ + if (comphelper::LibreOfficeKit::isActive()) + return SfxModule::GetFieldUnit(); + return GetAppOptions().GetAppMetric(); +} + LanguageType ScModule::GetOptDigitLanguage() { SvtCTLOptions::TextNumerals eNumerals = SvtCTLOptions::GetCTLTextNumerals(); @@ -2344,7 +2352,7 @@ bool ScModule::HasThesaurusLanguage( LanguageType nLang ) return bHasLang; } -std::optional<SfxStyleFamilies> ScModule::CreateStyleFamilies() +SfxStyleFamilies ScModule::CreateStyleFamilies() { SfxStyleFamilies aStyleFamilies; std::locale resLocale = ScModule::get()->GetResLocale(); diff --git a/sc/source/ui/app/transobj.cxx b/sc/source/ui/app/transobj.cxx index 16a93d557461..afa196082728 100644 --- a/sc/source/ui/app/transobj.cxx +++ b/sc/source/ui/app/transobj.cxx @@ -108,7 +108,7 @@ void ScTransferObj::PaintToDev( OutputDevice* pDev, ScDocument& rDoc, double nPr aViewData.SetScreen( rBlock.aStart.Col(), rBlock.aStart.Row(), rBlock.aEnd.Col(), rBlock.aEnd.Row() ); - ScPrintFunc::DrawToDev( rDoc, pDev, nPrintFactor, aBound, &aViewData, false/*bMetaFile*/ ); + ScPrintFunc::DrawToDev( rDoc, pDev, nPrintFactor, aBound, aViewData, false/*bMetaFile*/ ); } ScTransferObj::ScTransferObj( const std::shared_ptr<ScDocument>& pClipDoc, TransferableObjectDescriptor aDesc ) : diff --git a/sc/source/ui/app/uiitems.cxx b/sc/source/ui/app/uiitems.cxx index bddd0c689aea..cde899879ae2 100644 --- a/sc/source/ui/app/uiitems.cxx +++ b/sc/source/ui/app/uiitems.cxx @@ -38,8 +38,7 @@ ScInputStatusItem::ScInputStatusItem( aStartPos ( rStartPos ), aEndPos ( rEndPos ), aString (std::move( _aString )), - pEditData ( pData ? pData->Clone() : nullptr ), - mpMisspellRanges(nullptr) + pEditData ( pData ? pData->Clone() : nullptr ) { } @@ -50,7 +49,7 @@ ScInputStatusItem::ScInputStatusItem( const ScInputStatusItem& rItem ) : aEndPos ( rItem.aEndPos ), aString ( rItem.aString ), pEditData ( rItem.pEditData ? rItem.pEditData->Clone() : nullptr ), - mpMisspellRanges(rItem.mpMisspellRanges) + maMisspellRanges(rItem.maMisspellRanges) { } @@ -74,9 +73,9 @@ ScInputStatusItem* ScInputStatusItem::Clone( SfxItemPool * ) const return new ScInputStatusItem( *this ); } -void ScInputStatusItem::SetMisspellRanges( const std::vector<editeng::MisspellRanges>* pRanges ) +void ScInputStatusItem::SetMisspellRanges( const sc::MisspellRangeResult& rRanges ) { - mpMisspellRanges = pRanges; + maMisspellRanges = rRanges; } // ScPaintHint was moved to hints.cxx @@ -132,14 +131,6 @@ ScSortItem::ScSortItem( sal_uInt16 nWhichP, if ( pSortData ) theSortData = *pSortData; } -ScSortItem::ScSortItem( sal_uInt16 nWhichP, - const ScSortParam* pSortData ) : - SfxPoolItem ( nWhichP ), - pViewData ( nullptr ) -{ - if ( pSortData ) theSortData = *pSortData; -} - bool ScSortItem::operator==( const SfxPoolItem& rItem ) const { assert(SfxPoolItem::operator==(rItem)); @@ -178,18 +169,6 @@ ScQueryItem::ScQueryItem( sal_uInt16 nWhichP, mpQueryData.reset(new ScQueryParam); } -ScQueryItem::ScQueryItem( sal_uInt16 nWhichP, - const ScQueryParam* pQueryData ) : - SfxPoolItem ( nWhichP ), - pViewData ( nullptr ), - bIsAdvanced ( false ) -{ - if (pQueryData) - mpQueryData.reset(new ScQueryParam(*pQueryData)); - else - mpQueryData.reset(new ScQueryParam); -} - ScQueryItem::ScQueryItem( const ScQueryItem& rItem ) : SfxPoolItem ( rItem ), mpQueryData(new ScQueryParam(*rItem.mpQueryData)), diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx b/sc/source/ui/attrdlg/scdlgfact.cxx index 2dc64da32d5f..637c9ae58d78 100644 --- a/sc/source/ui/attrdlg/scdlgfact.cxx +++ b/sc/source/ui/attrdlg/scdlgfact.cxx @@ -131,7 +131,6 @@ public: LanguageType GetLanguageType() const override { return m_pDlg->getLanguageType(); } bool IsDateConversionSet() const override { return m_pDlg->isDateConversionSet(); } bool IsScientificConversionSet() const override { return m_pDlg->isScientificConversionSet(); } - bool IsKeepAskingSet() const override { return m_pDlg->isKeepAskingSet(); } }; } diff --git a/sc/source/ui/condformat/condformatdlg.cxx b/sc/source/ui/condformat/condformatdlg.cxx index c38a8c7e06ea..bb5dbc325335 100644 --- a/sc/source/ui/condformat/condformatdlg.cxx +++ b/sc/source/ui/condformat/condformatdlg.cxx @@ -421,15 +421,15 @@ static bool isLOKMobilePhone() } ScCondFormatDlg::ScCondFormatDlg(SfxBindings* pB, SfxChildWindow* pCW, - weld::Window* pParent, ScViewData* pViewData, + weld::Window* pParent, ScViewData& rViewData, const std::shared_ptr<ScCondFormatDlgData>& rItem) : ScAnyRefDlgController(pB, pCW, pParent, isLOKMobilePhone()?u"modules/scalc/ui/conditionalformatdialogmobile.ui"_ustr:u"modules/scalc/ui/conditionalformatdialog.ui"_ustr, u"ConditionalFormatDialog"_ustr) - , mpViewData(pViewData) + , mrViewData(rViewData) // previous version based on SfxPoolItem used SfxPoolItem::Clone here, so make a copy // using copy constructor - , mpDlgItem(std::make_shared<ScCondFormatDlgData>(*rItem)) + , mpDlgData(std::make_shared<ScCondFormatDlgData>(*rItem)) , mpLastEdit(nullptr) , mxBtnOk(m_xBuilder->weld_button(u"ok"_ustr)) , mxBtnAdd(m_xBuilder->weld_button(u"add"_ustr)) @@ -440,22 +440,22 @@ ScCondFormatDlg::ScCondFormatDlg(SfxBindings* pB, SfxChildWindow* pCW, , mxFtRange(m_xBuilder->weld_label(u"ftassign"_ustr)) , mxEdRange(new formula::RefEdit(m_xBuilder->weld_entry(u"edassign"_ustr))) , mxRbRange(new formula::RefButton(m_xBuilder->weld_button(u"rbassign"_ustr))) - , mxCondFormList(new ScCondFormatList(this, mpViewData->GetDocument(), m_xBuilder->weld_scrolled_window(u"listwindow"_ustr), + , mxCondFormList(new ScCondFormatList(this, mrViewData.GetDocument(), m_xBuilder->weld_scrolled_window(u"listwindow"_ustr), m_xBuilder->weld_grid(u"list"_ustr))) { mxEdRange->SetReferences(this, mxFtRange.get()); mxRbRange->SetReferences(this, mxEdRange.get()); ScConditionalFormat* pFormat = nullptr; - mnKey = mpDlgItem->GetIndex(); - if (mpDlgItem->IsManaged() && mpDlgItem->GetConditionalFormatList()) + mnKey = mpDlgData->GetIndex(); + if (mpDlgData->IsManaged() && mpDlgData->GetConditionalFormatList()) { - pFormat = mpDlgItem->GetConditionalFormatList()->GetFormat(mnKey); + pFormat = mpDlgData->GetConditionalFormatList()->GetFormat(mnKey); } - else if (!mpDlgItem->IsManaged()) + else if (!mpDlgData->IsManaged()) { - ScDocument& rDoc = mpViewData->GetDocument(); - pFormat = rDoc.GetCondFormList(mpViewData->GetTabNo())->GetFormat ( mnKey ); + ScDocument& rDoc = mrViewData.GetDocument(); + pFormat = rDoc.GetCondFormList(mrViewData.GetTabNo())->GetFormat ( mnKey ); } ScRangeList aRange; @@ -466,17 +466,17 @@ ScCondFormatDlg::ScCondFormatDlg(SfxBindings* pB, SfxChildWindow* pCW, else { // this is for adding a new entry - mpViewData->GetMarkData().FillRangeListWithMarks(&aRange, false); + mrViewData.GetMarkData().FillRangeListWithMarks(&aRange, false); if(aRange.empty()) { - ScAddress aPos(mpViewData->GetCurX(), mpViewData->GetCurY(), mpViewData->GetTabNo()); + ScAddress aPos(mrViewData.GetCurX(), mrViewData.GetCurY(), mrViewData.GetTabNo()); aRange.push_back(ScRange(aPos)); } mnKey = 0; } maPos = aRange.GetTopLeftCorner(); - mxCondFormList->init(pFormat, aRange, maPos, mpDlgItem->GetDialogType()); + mxCondFormList->init(pFormat, aRange, maPos, mpDlgData->GetDialogType()); mxBtnOk->connect_clicked(LINK(this, ScCondFormatDlg, BtnPressedHdl ) ); mxBtnAdd->connect_clicked( LINK( mxCondFormList.get(), ScCondFormatList, AddBtnHdl ) ); @@ -488,7 +488,7 @@ ScCondFormatDlg::ScCondFormatDlg(SfxBindings* pB, SfxChildWindow* pCW, mxEdRange->SetGetFocusHdl( LINK( this, ScCondFormatDlg, RangeGetFocusHdl ) ); OUString aRangeString; - const ScDocument& rDoc = pViewData->GetDocument(); + const ScDocument& rDoc = rViewData.GetDocument(); aRange.Format(aRangeString, ScRefFlags::VALID, rDoc, rDoc.GetAddressConvention()); mxEdRange->SetText(aRangeString); @@ -561,7 +561,7 @@ void ScCondFormatDlg::SetReference(const ScRange& rRef, ScDocument&) else nFlags = ScRefFlags::RANGE_ABS; - const ScDocument& rDoc = mpViewData->GetDocument(); + const ScDocument& rDoc = mrViewData.GetDocument(); OUString aRefStr(rRef.Format(rDoc, nFlags, ScAddress::Details(rDoc.GetAddressConvention(), 0, 0))); if (pEdit != mxEdRange.get()) @@ -584,8 +584,8 @@ std::unique_ptr<ScConditionalFormat> ScCondFormatDlg::GetConditionalFormat() con return nullptr; ScRangeList aRange; - ScRefFlags nFlags = aRange.Parse(aRangeStr, mpViewData->GetDocument(), - mpViewData->GetDocument().GetAddressConvention(), maPos.Tab()); + ScRefFlags nFlags = aRange.Parse(aRangeStr, mrViewData.GetDocument(), + mrViewData.GetDocument().GetAddressConvention(), maPos.Tab()); mxCondFormList->SetRange(aRange); std::unique_ptr<ScConditionalFormat> pFormat = mxCondFormList->GetConditionalFormat(); @@ -615,21 +615,21 @@ void ScCondFormatDlg::OkPressed() { std::unique_ptr<ScConditionalFormat> pFormat = GetConditionalFormat(); - if (!mpDlgItem->IsManaged()) + if (!mpDlgData->IsManaged()) { if(pFormat) { auto& rRangeList = pFormat->GetRange(); - mpViewData->GetDocShell()->GetDocFunc().ReplaceConditionalFormat(mnKey, + mrViewData.GetDocShell()->GetDocFunc().ReplaceConditionalFormat(mnKey, std::move(pFormat), maPos.Tab(), rRangeList); } else - mpViewData->GetDocShell()->GetDocFunc().ReplaceConditionalFormat(mnKey, + mrViewData.GetDocShell()->GetDocFunc().ReplaceConditionalFormat(mnKey, nullptr, maPos.Tab(), ScRangeList()); } else { - ScConditionalFormatList* pList = mpDlgItem->GetConditionalFormatList(); + ScConditionalFormatList* pList = mpDlgData->GetConditionalFormatList(); sal_uInt32 nKey = mnKey; if (mnKey == 0) { @@ -643,8 +643,10 @@ void ScCondFormatDlg::OkPressed() pList->InsertNew(std::move(pFormat)); } - mpViewData->GetViewShell()->setScCondFormatDlgItem(mpDlgItem); + // provide needed DialogData + mrViewData.GetViewShell()->setScCondFormatDlgData(mpDlgData); SetDispatcherLock( false ); + // Queue message to open Conditional Format Manager Dialog GetBindings().GetDispatcher()->Execute( SID_OPENDLG_CONDFRMT_MANAGER, SfxCallMode::ASYNCHRON ); @@ -656,10 +658,12 @@ void ScCondFormatDlg::OkPressed() // void ScCondFormatDlg::CancelPressed() { - if ( mpDlgItem->IsManaged() ) + if ( mpDlgData->IsManaged() ) { - mpViewData->GetViewShell()->setScCondFormatDlgItem(mpDlgItem); + // provide needed DialogData + mrViewData.GetViewShell()->setScCondFormatDlgData(mpDlgData); SetDispatcherLock( false ); + // Queue message to open Conditional Format Manager Dialog GetBindings().GetDispatcher()->Execute( SID_OPENDLG_CONDFRMT_MANAGER, SfxCallMode::ASYNCHRON ); @@ -685,8 +689,8 @@ IMPL_LINK(ScCondFormatDlg, EdRangeModifyHdl, formula::RefEdit&, rEdit, void) { OUString aRangeStr = rEdit.GetText(); ScRangeList aRange; - ScRefFlags nFlags = aRange.Parse(aRangeStr, mpViewData->GetDocument(), - mpViewData->GetDocument().GetAddressConvention()); + ScRefFlags nFlags = aRange.Parse(aRangeStr, mrViewData.GetDocument(), + mrViewData.GetDocument().GetAddressConvention()); if(nFlags & ScRefFlags::VALID) { rEdit.GetWidget()->set_message_type(weld::EntryMessageType::Normal); diff --git a/sc/source/ui/condformat/condformatdlgentry.cxx b/sc/source/ui/condformat/condformatdlgentry.cxx index b9594afd9adc..52c59da89c3d 100644 --- a/sc/source/ui/condformat/condformatdlgentry.cxx +++ b/sc/source/ui/condformat/condformatdlgentry.cxx @@ -1337,9 +1337,9 @@ protected: private: std::unique_ptr<weld::Container> mxGrid; std::unique_ptr<weld::Image> mxImgIcon; - std::unique_ptr<weld::Label> mxFtEntry; std::unique_ptr<weld::Entry> mxEdEntry; std::unique_ptr<weld::ComboBox> mxLbEntryType; + std::unique_ptr<weld::ComboBox> mxConditionMode; weld::Grid* mpParentGrid; public: @@ -1355,25 +1355,38 @@ public: } ScColorScaleEntry* CreateEntry(ScDocument& rDoc, const ScAddress& rPos) const; - - void SetFirstEntry(); }; ScIconSetFrmtDataEntry::ScIconSetFrmtDataEntry(weld::Grid* pParent, ScIconSetType eType, const ScDocument& rDoc, sal_Int32 i, const ScColorScaleEntry* pEntry) : mxBuilder(Application::CreateBuilder(pParent, u"modules/scalc/ui/conditionaliconset.ui"_ustr)) , mxGrid(mxBuilder->weld_container(u"ConditionalIconSet"_ustr)) , mxImgIcon(mxBuilder->weld_image(u"icon"_ustr)) - , mxFtEntry(mxBuilder->weld_label("label")) , mxEdEntry(mxBuilder->weld_entry(u"entry"_ustr)) , mxLbEntryType(mxBuilder->weld_combo_box(u"listbox"_ustr)) + , mxConditionMode(mxBuilder->weld_combo_box("conditionMode")) , mpParentGrid(pParent) { + mxEdEntry->set_buildable_name(mxEdEntry->get_buildable_name() + OUString::number(i)); + mxLbEntryType->set_buildable_name(mxLbEntryType->get_buildable_name() + OUString::number(i)); + mxImgIcon->set_from_icon_name(ScIconSetFormat::getIconName(eType, i)); if(pEntry) { - // tdf#162948: Use ">" instead of ">=". Add some spaces to keep the alignment - if (!pEntry->GetGreaterThanOrEqual()) - mxFtEntry->set_label(" > "); + switch (pEntry->GetMode()) + { + case ScConditionMode::Equal: + case ScConditionMode::Less: + case ScConditionMode::Greater: + case ScConditionMode::EqLess: + case ScConditionMode::EqGreater: + case ScConditionMode::NotEqual: + mxConditionMode->set_active(static_cast<int>(pEntry->GetMode())); + break; + default: + assert(false + && "ScIconSetFrmtDataEntry::ScIconSetFrmtDataEntry: Invalid condition mode"); + } + switch(pEntry->GetType()) { case COLORSCALE_VALUE: @@ -1399,6 +1412,7 @@ ScIconSetFrmtDataEntry::ScIconSetFrmtDataEntry(weld::Grid* pParent, ScIconSetTyp else { mxLbEntryType->set_active(1); + mxConditionMode->set_active(0); } } @@ -1409,7 +1423,8 @@ ScIconSetFrmtDataEntry::~ScIconSetFrmtDataEntry() ScColorScaleEntry* ScIconSetFrmtDataEntry::CreateEntry(ScDocument& rDoc, const ScAddress& rPos) const { - sal_Int32 nPos = mxLbEntryType->get_active(); + sal_Int32 nTypePos = mxLbEntryType->get_active(); + sal_Int32 nModePos = mxConditionMode->get_active(); OUString aText = mxEdEntry->get_text(); ScColorScaleEntry* pEntry = new ScColorScaleEntry(); @@ -1419,7 +1434,7 @@ ScColorScaleEntry* ScIconSetFrmtDataEntry::CreateEntry(ScDocument& rDoc, const S (void)pNumberFormatter->IsNumberFormat(aText, nIndex, nVal); pEntry->SetValue(nVal); - switch(nPos) + switch(nTypePos) { case 0: pEntry->SetType(COLORSCALE_VALUE); @@ -1438,18 +1453,10 @@ ScColorScaleEntry* ScIconSetFrmtDataEntry::CreateEntry(ScDocument& rDoc, const S assert(false); } + pEntry->SetMode(static_cast<ScConditionMode>(nModePos)); return pEntry; } -void ScIconSetFrmtDataEntry::SetFirstEntry() -{ - mxEdEntry->hide(); - mxLbEntryType->hide(); - mxFtEntry->hide(); - mxEdEntry->set_text("0"); - mxLbEntryType->set_active(1); -} - ScIconSetFrmtEntry::ScIconSetFrmtEntry(ScCondFormatList* pParent, ScDocument& rDoc, const ScAddress& rPos, const ScIconSetFormat* pFormat) : ScCondFrmtEntry(pParent, rDoc, rPos) , mxLbColorFormat(mxBuilder->weld_combo_box(u"colorformat"_ustr)) @@ -1476,7 +1483,6 @@ ScIconSetFrmtEntry::ScIconSetFrmtEntry(ScCondFormatList* pParent, ScDocument& rD mxIconParent.get(), eType, rDoc, i, pIconSetFormatData->m_Entries[i].get())); maEntries[i]->set_grid_top_attach(i); } - maEntries[0]->SetFirstEntry(); } else IconSetTypeHdl(*mxLbIconSetType); @@ -1510,7 +1516,6 @@ IMPL_LINK_NOARG( ScIconSetFrmtEntry, IconSetTypeHdl, weld::ComboBox&, void ) maEntries[i]->set_grid_top_attach(i); maEntries[i]->Show(); } - maEntries[0]->SetFirstEntry(); } OUString ScIconSetFrmtEntry::GetExpressionString() diff --git a/sc/source/ui/condformat/condformateasydlg.cxx b/sc/source/ui/condformat/condformateasydlg.cxx index 71ae8745df53..c98c0201487c 100644 --- a/sc/source/ui/condformat/condformateasydlg.cxx +++ b/sc/source/ui/condformat/condformateasydlg.cxx @@ -52,12 +52,12 @@ void ConditionalFormatEasyDialog::SetDescription(std::u16string_view rCondition) ConditionalFormatEasyDialog::ConditionalFormatEasyDialog(SfxBindings* pBindings, SfxChildWindow* pChildWindow, weld::Window* pParent, - ScViewData* pViewData) + ScViewData& rViewData) : ScAnyRefDlgController(pBindings, pChildWindow, pParent, u"modules/scalc/ui/conditionaleasydialog.ui"_ustr, u"CondFormatEasyDlg"_ustr) - , mpViewData(pViewData) - , mrDocument(mpViewData->GetDocument()) + , mrViewData(rViewData) + , mrDocument(mrViewData.GetDocument()) , mxNumberEntry(m_xBuilder->weld_entry(u"entryNumber"_ustr)) , mxNumberEntry2(m_xBuilder->weld_entry(u"entryNumber2"_ustr)) , mxAllInputs(m_xBuilder->weld_container(u"allInputs"_ustr)) @@ -70,7 +70,7 @@ ConditionalFormatEasyDialog::ConditionalFormatEasyDialog(SfxBindings* pBindings, { mxButtonRangeEdit->SetReferences(this, mxRangeEntry.get()); const ScConditionMode* pCurrentMode - = pViewData->GetDocument().GetEasyConditionalFormatDialogData(); + = rViewData.GetDocument().GetEasyConditionalFormatDialogData(); if (!pCurrentMode) { SAL_WARN( @@ -179,10 +179,10 @@ ConditionalFormatEasyDialog::ConditionalFormatEasyDialog(SfxBindings* pBindings, mxButtonCancel->connect_clicked(LINK(this, ConditionalFormatEasyDialog, ButtonPressed)); ScRangeList aRange; - mpViewData->GetMarkData().FillRangeListWithMarks(&aRange, false); + mrViewData.GetMarkData().FillRangeListWithMarks(&aRange, false); if (aRange.empty()) { - ScAddress aPosition(mpViewData->GetCurX(), mpViewData->GetCurY(), mpViewData->GetTabNo()); + ScAddress aPosition(mrViewData.GetCurX(), mrViewData.GetCurY(), mrViewData.GetTabNo()); aRange.push_back(ScRange(aPosition)); } maPosition = aRange.GetTopLeftCorner(); @@ -213,7 +213,7 @@ void ConditionalFormatEasyDialog::SetReference(const ScRange& rRange, ScDocument RefInputStart(pEdit); ScRefFlags nFlags = ScRefFlags::RANGE_ABS; - const ScDocument& rDoc = mpViewData->GetDocument(); + const ScDocument& rDoc = mrViewData.GetDocument(); OUString sRange( rRange.Format(rDoc, nFlags, ScAddress::Details(mrDocument.GetAddressConvention(), 0, 0))); pEdit->SetRefString(sRange); @@ -263,14 +263,14 @@ IMPL_LINK(ConditionalFormatEasyDialog, ButtonPressed, weld::Button&, rButton, vo ScRangeList aRange; ScRefFlags nFlags - = aRange.Parse(mxRangeEntry->GetText(), mpViewData->GetDocument(), - mpViewData->GetDocument().GetAddressConvention(), maPosition.Tab()); + = aRange.Parse(mxRangeEntry->GetText(), mrViewData.GetDocument(), + mrViewData.GetDocument().GetAddressConvention(), maPosition.Tab()); if ((nFlags & ScRefFlags::VALID) && !aRange.empty()) { pFormat->AddEntry(pEntry.release()); pFormat->SetRange(aRange); auto& rRangeList = pFormat->GetRange(); - mpViewData->GetDocShell()->GetDocFunc().ReplaceConditionalFormat( + mrViewData.GetDocShell()->GetDocFunc().ReplaceConditionalFormat( 0, std::move(pFormat), maPosition.Tab(), rRangeList); } m_xDialog->response(RET_OK); diff --git a/sc/source/ui/dataprovider/csvdataprovider.cxx b/sc/source/ui/dataprovider/csvdataprovider.cxx index 11051aab3f92..8c91aacf2ec5 100644 --- a/sc/source/ui/dataprovider/csvdataprovider.cxx +++ b/sc/source/ui/dataprovider/csvdataprovider.cxx @@ -10,6 +10,7 @@ #include <dataprovider.hxx> #include <datatransformation.hxx> #include <datamapper.hxx> +#include <exception> #include <stringutil.hxx> #include <tools/stream.hxx> @@ -72,6 +73,7 @@ CSVFetchThread::CSVFetchThread( , mbTerminate(false) , maDataTransformations(std::move(rDataTransformations)) , maImportFinishedHdl(std::move(aImportFinishedHdl)) + , mbIsParseError(false) { maConfig.delimiters.push_back(','); maConfig.text_qualifier = '"'; @@ -105,7 +107,18 @@ void CSVFetchThread::execute() CSVHandler aHdl(&mrDocument); orcus::csv_parser<CSVHandler> parser(aBuffer, aHdl, maConfig); - parser.parse(); + + try + { + parser.parse(); + } + catch(const orcus::parse_error&) + { + mbIsParseError = true; + mpLastException = std::current_exception(); + RequestTerminate(); + return; + } for (const auto& itr : maDataTransformations) { @@ -146,6 +159,14 @@ void CSVDataProvider::Import() { SolarMutexReleaser aReleaser; mxCSVFetchThread->join(); + + // tdf#165658 An exception may have happened during the parsing of the file. + // Since parsing happens in a separate thread, here we need to check if + // something wrong happened and then rethrow the exception + if (mxCSVFetchThread->IsParseError()) + { + std::rethrow_exception(mxCSVFetchThread->GetLastException()); + } } } diff --git a/sc/source/ui/dataprovider/dataprovider.cxx b/sc/source/ui/dataprovider/dataprovider.cxx index dced70cca0bd..296ca0ee2722 100644 --- a/sc/source/ui/dataprovider/dataprovider.cxx +++ b/sc/source/ui/dataprovider/dataprovider.cxx @@ -298,17 +298,6 @@ std::shared_ptr<DataProvider> DataProviderFactory::getDataProvider(ScDocument* p return std::shared_ptr<DataProvider>(); } -std::vector<OUString> DataProviderFactory::getDataProviders() -{ - std::vector<OUString> aDataProviders; - aDataProviders.emplace_back("org.libreoffice.calc.csv"); - aDataProviders.emplace_back("org.libreoffice.calc.html"); - aDataProviders.emplace_back("org.libreoffice.calc.xml"); - aDataProviders.emplace_back("org.libreoffice.calc.sql"); - - return aDataProviders; -} - } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/dbgui/PivotLayoutDialog.cxx b/sc/source/ui/dbgui/PivotLayoutDialog.cxx index 675eb9313c95..d91343f925f9 100644 --- a/sc/source/ui/dbgui/PivotLayoutDialog.cxx +++ b/sc/source/ui/dbgui/PivotLayoutDialog.cxx @@ -71,12 +71,12 @@ ScRange lclGetRangeForNamedRange(OUString const & aName, const ScDocument& rDocu ScPivotLayoutDialog::ScPivotLayoutDialog( SfxBindings* pSfxBindings, SfxChildWindow* pChildWindow, weld::Window* pParent, - ScViewData* pViewData, const ScDPObject* pPivotTableObject, bool bNewPivotTable) + ScViewData& rViewData, const ScDPObject* pPivotTableObject, bool bNewPivotTable) : ScAnyRefDlgController(pSfxBindings, pChildWindow, pParent, u"modules/scalc/ui/pivottablelayoutdialog.ui"_ustr, u"PivotTableLayout"_ustr) , maPivotTableObject(*pPivotTableObject) , mpPreviouslyFocusedListBox(nullptr) - , mpViewData(pViewData) - , mrDocument(pViewData->GetDocument()) + , mrViewData(rViewData) + , mrDocument(rViewData.GetDocument()) , mbNewPivotTable(bNewPivotTable) , maAddressDetails(mrDocument.GetAddressConvention(), 0, 0) , mbDialogLostFocus(false) @@ -481,7 +481,7 @@ void ScPivotLayoutDialog::ApplyChanges() sal_uInt16 nWhichPivot = ScModule::get()->GetPool().GetWhichIDFromSlotID(SID_PIVOT_TABLE); ScPivotItem aPivotItem(nWhichPivot, &aSaveData, &aDestinationRange, bToNewSheet); - mpViewData->GetViewShell()->SetDialogDPObject(std::make_unique<ScDPObject>(maPivotTableObject)); + mrViewData.GetViewShell()->SetDialogDPObject(std::make_unique<ScDPObject>(maPivotTableObject)); SfxDispatcher* pDispatcher = GetBindings().GetDispatcher(); @@ -506,9 +506,9 @@ void ScPivotLayoutDialog::ApplyChanges() } if (pDPObj) { - ScDBDocFunc aFunc( *(mpViewData->GetDocShell() )); + ScDBDocFunc aFunc( *(mrViewData.GetDocShell() )); aFunc.RemovePivotTable( *pDPObj, true, false); - mpViewData->GetView()->CursorPosChanged(); + mrViewData.GetView()->CursorPosChanged(); } } return; diff --git a/sc/source/ui/dbgui/csvgrid.cxx b/sc/source/ui/dbgui/csvgrid.cxx index 1066a7deb281..7e7375a964fc 100644 --- a/sc/source/ui/dbgui/csvgrid.cxx +++ b/sc/source/ui/dbgui/csvgrid.cxx @@ -285,37 +285,37 @@ void ScCsvGrid::InitFonts() ::GetDefaultFonts( aLatinItem, aAsianItem, aComplexItem ); // create item set for defaults - auto pDefSet = std::make_unique<SfxItemSet>(mpEditEngine->GetEmptyItemSet()); - EditEngine::SetFontInfoInItemSet(*pDefSet, maMonoFont); - pDefSet->Put(aAsianItem); - pDefSet->Put(aComplexItem); + SfxItemSet aDefSet(mpEditEngine->GetEmptyItemSet()); + EditEngine::SetFontInfoInItemSet(aDefSet, maMonoFont); + aDefSet.Put(aAsianItem); + aDefSet.Put(aComplexItem); // set Asian/Complex font size to height of character in Latin font sal_uLong nFontHt = static_cast< sal_uLong >( maMonoFont.GetFontSize().Height() ); - pDefSet->Put(SvxFontHeightItem(nFontHt, 100, EE_CHAR_FONTHEIGHT_CJK)); - pDefSet->Put(SvxFontHeightItem(nFontHt, 100, EE_CHAR_FONTHEIGHT_CTL)); + aDefSet.Put(SvxFontHeightItem(nFontHt, 100, EE_CHAR_FONTHEIGHT_CJK)); + aDefSet.Put(SvxFontHeightItem(nFontHt, 100, EE_CHAR_FONTHEIGHT_CTL)); // copy other items from default font - const SfxPoolItem& rWeightItem = pDefSet->Get(EE_CHAR_WEIGHT); + const SfxPoolItem& rWeightItem = aDefSet.Get(EE_CHAR_WEIGHT); std::unique_ptr<SfxPoolItem> pNewItem(rWeightItem.Clone()); pNewItem->SetWhich(EE_CHAR_WEIGHT_CJK); - pDefSet->Put(*pNewItem); + aDefSet.Put(*pNewItem); pNewItem->SetWhich(EE_CHAR_WEIGHT_CTL); - pDefSet->Put(*pNewItem); - const SfxPoolItem& rItalicItem = pDefSet->Get(EE_CHAR_ITALIC); + aDefSet.Put(*pNewItem); + const SfxPoolItem& rItalicItem = aDefSet.Get(EE_CHAR_ITALIC); pNewItem.reset(rItalicItem.Clone()); pNewItem->SetWhich(EE_CHAR_ITALIC_CJK); - pDefSet->Put(*pNewItem); + aDefSet.Put(*pNewItem); pNewItem->SetWhich(EE_CHAR_ITALIC_CTL); - pDefSet->Put(*pNewItem); - const SfxPoolItem& rLangItem = pDefSet->Get(EE_CHAR_LANGUAGE); + aDefSet.Put(*pNewItem); + const SfxPoolItem& rLangItem = aDefSet.Get(EE_CHAR_LANGUAGE); pNewItem.reset(rLangItem.Clone()); pNewItem->SetWhich(EE_CHAR_LANGUAGE_CJK); - pDefSet->Put(*pNewItem); + aDefSet.Put(*pNewItem); pNewItem->SetWhich(EE_CHAR_LANGUAGE_CTL); - pDefSet->Put(*pNewItem); + aDefSet.Put(*pNewItem); - mpEditEngine->SetDefaults(std::move(pDefSet)); + mpEditEngine->SetDefaults(std::move(aDefSet)); InvalidateGfx(); } diff --git a/sc/source/ui/dbgui/filtdlg.cxx b/sc/source/ui/dbgui/filtdlg.cxx index 0470d00e9291..c3c8f15b2a05 100644 --- a/sc/source/ui/dbgui/filtdlg.cxx +++ b/sc/source/ui/dbgui/filtdlg.cxx @@ -726,7 +726,7 @@ ScQueryItem* ScFilterDlg::GetOutputItem() // only set the three - reset everything else - pOutItem.reset( new ScQueryItem( nWhichQuery, &theParam ) ); + pOutItem.reset( new ScQueryItem( nWhichQuery, pViewData, &theParam ) ); return pOutItem.get(); } @@ -1160,8 +1160,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void) UpdateColorList(4); } - auto aEntry = theQueryData.GetEntry(nQ); - aEntry.eOp = op; + theQueryData.GetEntry(nQ).eOp = op; } else if (&rLb == m_xLbColor1.get() || &rLb == m_xLbColor2.get() || &rLb == m_xLbColor3.get() || &rLb == m_xLbColor4.get()) diff --git a/sc/source/ui/dbgui/pfiltdlg.cxx b/sc/source/ui/dbgui/pfiltdlg.cxx index 3da6b50ebe52..47a2c729d262 100644 --- a/sc/source/ui/dbgui/pfiltdlg.cxx +++ b/sc/source/ui/dbgui/pfiltdlg.cxx @@ -368,7 +368,7 @@ const ScQueryItem& ScPivotFilterDlg::GetOutputItem() theParam.bCaseSens = m_xBtnCase->get_active(); theParam.eSearchType = m_xBtnRegExp->get_active() ? utl::SearchParam::SearchType::Regexp : utl::SearchParam::SearchType::Normal; - pOutItem.reset( new ScQueryItem( nWhichQuery, &theParam ) ); + pOutItem.reset( new ScQueryItem( nWhichQuery, pViewData, &theParam ) ); return *pOutItem; } diff --git a/sc/source/ui/dbgui/scuiasciiopt.cxx b/sc/source/ui/dbgui/scuiasciiopt.cxx index c44bf2ad222d..a81d568bdeb2 100644 --- a/sc/source/ui/dbgui/scuiasciiopt.cxx +++ b/sc/source/ui/dbgui/scuiasciiopt.cxx @@ -43,6 +43,7 @@ #include <unicode/ucsdet.h> #include <sfx2/objsh.hxx> #include <svx/txenctab.hxx> +#include <unotools/filteroptions_settings.hxx> #include <unotools/viewoptions.hxx> //! TODO make dynamic @@ -373,6 +374,7 @@ ScImportAsciiDlg::ScImportAsciiDlg(weld::Window* pParent, std::u16string_view aD , mxLbType(m_xBuilder->weld_combo_box(u"columntype"_ustr)) , mxAltTitle(m_xBuilder->weld_label(u"textalttitle"_ustr)) , mxTableBox(new ScCsvTableBox(*m_xBuilder)) + , mxCkbAlwaysShowOnImport(m_xBuilder->weld_check_button(u"alwaysshowonimport"_ustr)) { SvtViewOptions aDlgOpt(EViewType::Dialog, "TextImportCsvDialog"); if (aDlgOpt.Exists()) @@ -390,6 +392,9 @@ ScImportAsciiDlg::ScImportAsciiDlg(weld::Window* pParent, std::u16string_view aD aName += OUString::Concat(" - [") + aDatName + "]"; m_xDialog->set_title(aName); } + mxCkbAlwaysShowOnImport->show(); + mxCkbAlwaysShowOnImport->set_active( + utl::isShowFilterOptionsDialog(SC_TEXT_CSV_FILTER_NAME)); break; default: break; @@ -453,8 +458,6 @@ ScImportAsciiDlg::ScImportAsciiDlg(weld::Window* pParent, std::u16string_view aD mxRbSeparated->set_active(true); else mxRbDetectSep->set_active(true); - if (nFromRow != 1) - mxNfRow->set_value(nFromRow); // Clipboard is always Unicode, else rely on default/config. rtl_TextEncoding ePreselectUnicode = (meCall == SC_IMPORTFILE ? @@ -482,8 +485,6 @@ ScImportAsciiDlg::ScImportAsciiDlg(weld::Window* pParent, std::u16string_view aD // Get Separators from the dialog (empty are set from default) maFieldSeparators = GetActiveSeparators(); - mxNfRow->connect_value_changed( LINK( this, ScImportAsciiDlg, FirstRowHdl ) ); - // *** Separator characters *** lcl_FillCombo( *mxCbTextSep, SCSTR_TEXTSEP, mcTextSep ); mxCbTextSep->set_entry_text(sTextSeparators); @@ -557,6 +558,14 @@ ScImportAsciiDlg::ScImportAsciiDlg(weld::Window* pParent, std::u16string_view aD mxTableBox->GetGrid().Execute( CSVCMD_NEWCELLTEXTS ); + if (nFromRow != 1) + { + mxNfRow->set_value(nFromRow); + // tdf#163638 - show visual indicator for from rows + mxTableBox->GetGrid().Execute(CSVCMD_SETFIRSTIMPORTLINE, nFromRow - 1); + } + mxNfRow->connect_value_changed(LINK(this, ScImportAsciiDlg, FirstRowHdl)); + if (meCall == SC_TEXTTOCOLUMNS) { mxFtCharSet->set_sensitive(false); @@ -689,6 +698,18 @@ void ScImportAsciiDlg::GetOptions( ScAsciiOptions& rOpt ) void ScImportAsciiDlg::SaveParameters() { + if (mxCkbAlwaysShowOnImport->get_visible()) + { + bool value(mxCkbAlwaysShowOnImport->get_active()); + if (value != utl::isShowFilterOptionsDialog(SC_TEXT_CSV_FILTER_NAME)) + { + auto pChange(comphelper::ConfigurationChanges::create()); + auto xFilterDialogSettings( + utl::getSettingsForFilterOptions(SC_TEXT_CSV_FILTER_NAME, pChange)); + xFilterDialogSettings->setPropertyValue(u"show"_ustr, Any(value)); + pChange->commit(); + } + } lcl_SaveSeparators( GetSeparators(), mxCbTextSep->get_active_text(), mxCkbAsOnce->get_active(), mxCkbQuotedAsText->get_active(), mxCkbDetectNumber->get_active(), mxCkbDetectScientificNumber->get_active(), mxRbFixed->get_active() ? FIXED : (mxRbDetectSep->get_active() ? DETECT_SEPARATOR : SEPARATOR), diff --git a/sc/source/ui/dbgui/sfiltdlg.cxx b/sc/source/ui/dbgui/sfiltdlg.cxx index 33c1955e6e0d..e0527121ce89 100644 --- a/sc/source/ui/dbgui/sfiltdlg.cxx +++ b/sc/source/ui/dbgui/sfiltdlg.cxx @@ -236,7 +236,7 @@ void ScSpecialFilterDlg::SetActive() ScQueryItem* ScSpecialFilterDlg::GetOutputItem( const ScQueryParam& rParam, const ScRange& rSource ) { - pOutItem.reset(new ScQueryItem( nWhichQuery, &rParam )); + pOutItem.reset(new ScQueryItem( nWhichQuery, pViewData, &rParam )); pOutItem->SetAdvancedQuerySource( &rSource ); return pOutItem.get(); } diff --git a/sc/source/ui/dbgui/textimportoptions.cxx b/sc/source/ui/dbgui/textimportoptions.cxx index b91f8eb6d1bd..84521cb216f3 100644 --- a/sc/source/ui/dbgui/textimportoptions.cxx +++ b/sc/source/ui/dbgui/textimportoptions.cxx @@ -32,7 +32,6 @@ ScTextImportOptionsDlg::ScTextImportOptionsDlg(weld::Window* pParent) , m_xRbCustom(m_xBuilder->weld_radio_button(u"custom"_ustr)) , m_xCkbConvertDate(m_xBuilder->weld_check_button(u"convertdata"_ustr)) , m_xCkbConvertScientific(m_xBuilder->weld_check_button(u"convertscientificnotation"_ustr)) - , m_xCkbKeepAsking(m_xBuilder->weld_check_button(u"keepasking"_ustr)) , m_xLbCustomLang(new SvxLanguageBox(m_xBuilder->weld_combo_box(u"lang"_ustr))) { init(); @@ -60,11 +59,6 @@ bool ScTextImportOptionsDlg::isScientificConversionSet() const return m_xCkbConvertScientific->get_active(); } -bool ScTextImportOptionsDlg::isKeepAskingSet() const -{ - return m_xCkbKeepAsking->get_active(); -} - void ScTextImportOptionsDlg::init() { m_xBtnOk->connect_clicked(LINK(this, ScTextImportOptionsDlg, OKHdl)); diff --git a/sc/source/ui/dbgui/tpsort.cxx b/sc/source/ui/dbgui/tpsort.cxx index 91a7a25d3630..44b3e020e726 100644 --- a/sc/source/ui/dbgui/tpsort.cxx +++ b/sc/source/ui/dbgui/tpsort.cxx @@ -675,7 +675,7 @@ bool ScTabPageSortOptions::FillItemSet( SfxItemSet* rArgSet ) } aNewSortData.aCollatorAlgorithm = sAlg; - rArgSet->Put( ScSortItem( SCITEM_SORTDATA, &aNewSortData ) ); + rArgSet->Put( ScSortItem( SCITEM_SORTDATA, pViewData, &aNewSortData ) ); return true; } diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index 9b5413cd1c17..62873862e11d 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -5857,6 +5857,15 @@ bool ScDocFunc::InsertSparklines(ScRange const& rDataRange, ScRange const& rSpar pUndoInsertSparkline->Redo(); rDocShell.GetUndoManager()->AddUndoAction(std::move(pUndoInsertSparkline)); + ScDocument& rDoc = rDocShell.GetDocument(); + if (rSparklineRange.aStart == rSparklineRange.aEnd + && rDoc.HasAttrib(rSparklineRange, HasAttrFlags::Merged)) + { + ScRange aExtendMergeRange(rSparklineRange); + rDoc.ExtendMerge(aExtendMergeRange); + rDocShell.PostPaint(aExtendMergeRange, PaintPartFlags::Grid); + } + return true; } diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx index 1756c5d2b3ca..eee54aacb342 100644 --- a/sc/source/ui/docshell/docsh.cxx +++ b/sc/source/ui/docshell/docsh.cxx @@ -3394,7 +3394,7 @@ void ScDocShellModificator::SetDocumentModified() } } -bool ScDocShell::IsChangeRecording() const +bool ScDocShell::IsChangeRecording(SfxViewShell* /*pViewShell*/, bool /*bRecordAllViews*/) const { ScChangeTrack* pChangeTrack = m_pDocument->GetChangeTrack(); return pChangeTrack != nullptr; @@ -3409,7 +3409,7 @@ bool ScDocShell::HasChangeRecordProtection() const return bRes; } -void ScDocShell::SetChangeRecording( bool bActivate, bool /*bLockAllViews*/ ) +void ScDocShell::SetChangeRecording( bool bActivate, bool /*bLockAllViews*/, SfxRedlineRecordingMode /*eRedlineRecordingMode*/) { bool bOldChangeRecording = IsChangeRecording(); diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx index a00bf023c74c..3a8a8bb3044c 100644 --- a/sc/source/ui/docshell/docsh4.cxx +++ b/sc/source/ui/docshell/docsh4.cxx @@ -36,6 +36,7 @@ #include <basic/sberrors.hxx> #include <svtools/sfxecode.hxx> #include <svx/ofaitem.hxx> +#include <svx/svdograf.hxx> #include <svl/stritem.hxx> #include <svl/whiter.hxx> #include <vcl/stdtext.hxx> @@ -955,7 +956,7 @@ void ScDocShell::Execute( SfxRequest& rReq ) } weld::Window* pWin = GetActiveDialogParent(); - ScShareDocumentDlg aDlg(pWin, pViewData); + ScShareDocumentDlg aDlg(pWin, *pViewData); if (aDlg.run() == RET_OK) { bool bSetShared = aDlg.IsShareDocumentChecked(); @@ -1362,6 +1363,26 @@ void ScDocShell::Execute( SfxRequest& rReq ) PostPaintGridAll(); } break; + case SID_PROTECTPOS: + case SID_PROTECTSIZE: + { + ScTabViewShell* pViewShell = GetBestViewShell(); + if (!pViewShell) + return; + ScDrawView* pScDrawView = pViewShell->GetViewData().GetScDrawView(); + if (!pScDrawView) + return; + + const SdrMarkList& rMarkList = pScDrawView->GetMarkedObjectList(); + assert ( rMarkList.GetMarkCount() == 1 ); + + SdrObject* pGraphicObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + if (nSlot == SID_PROTECTSIZE) + pGraphicObj->SetResizeProtect(!pGraphicObj->IsResizeProtect()); + else + pGraphicObj->SetMoveProtect(!pGraphicObj->IsMoveProtect()); + } + break; default: { // small (?) hack -> forwarding of the slots to TabViewShell @@ -2345,7 +2366,37 @@ void ScDocShell::GetState( SfxItemSet &rSet ) rSet.Put(SfxStringItem(nWhich, sLanguage)); } break; + case SID_PROTECTPOS: + case SID_PROTECTSIZE: + { + ScViewData* pViewData = GetViewData(); + if (pViewData) + { + const ScDrawView* pDrView = pViewData->GetScDrawView(); + const SdrMarkList& rMarkList = pDrView->GetMarkedObjectList(); + if ( rMarkList.GetMarkCount() == 1 ) + { + const SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + const SdrObjKind nSdrObjKind = pObj->GetObjIdentifier(); + if ( nSdrObjKind == SdrObjKind::Graphic ) + { + if (nWhich == SID_PROTECTSIZE) + { + rSet.Put(SfxBoolItem(nWhich, pObj->IsResizeProtect())); + if (pObj->IsMoveProtect()) + rSet.DisableItem( nWhich ); + } + else + rSet.Put(SfxBoolItem(nWhich, pObj->IsMoveProtect())); + + break; + } + } + } + rSet.DisableItem( nWhich ); + } + break; default: { } @@ -2371,7 +2422,7 @@ void ScDocShell::Draw( OutputDevice* pDev, const JobSetup & /* rSetup */, sal_uI aTmpData.SetTabNo(nVisTab); SnapVisArea( aBoundRect ); aTmpData.SetScreen( aBoundRect ); - ScPrintFunc::DrawToDev( *m_pDocument, pDev, 1.0, aBoundRect, &aTmpData, true ); + ScPrintFunc::DrawToDev( *m_pDocument, pDev, 1.0, aBoundRect, aTmpData, true ); } else { @@ -2383,7 +2434,7 @@ void ScDocShell::Draw( OutputDevice* pDev, const JobSetup & /* rSetup */, sal_uI if ( aNewArea != aOldArea && (m_pDocument->GetPosLeft() > 0 || m_pDocument->GetPosTop() > 0) ) SfxObjectShell::SetVisArea( aNewArea ); aTmpData.SetScreen( aNewArea ); - ScPrintFunc::DrawToDev( *m_pDocument, pDev, 1.0, aNewArea, &aTmpData, true ); + ScPrintFunc::DrawToDev( *m_pDocument, pDev, 1.0, aNewArea, aTmpData, true ); } pDev->SetLayoutMode( nOldLayoutMode ); diff --git a/sc/source/ui/docshell/docsh5.cxx b/sc/source/ui/docshell/docsh5.cxx index aa1269aa70b0..924ef33f1333 100644 --- a/sc/source/ui/docshell/docsh5.cxx +++ b/sc/source/ui/docshell/docsh5.cxx @@ -508,7 +508,7 @@ static OUString lcl_GetAreaName( ScDocument* pDoc, const ScArea* pArea ) return aName; } -static ScDBData* getUndoData(ScDBData* pDestData) +static ScDBData* getUndoData(const ScDBData* pDestData) { if (!pDestData) return nullptr; diff --git a/sc/source/ui/docshell/docsh6.cxx b/sc/source/ui/docshell/docsh6.cxx index a453d51793f0..8e57289a6706 100644 --- a/sc/source/ui/docshell/docsh6.cxx +++ b/sc/source/ui/docshell/docsh6.cxx @@ -434,7 +434,10 @@ void ScDocShell::SetFormulaOptions( const ScFormulaOptions& rOpt, bool bForLoadi * once, for the very first document, empty or loaded. */ static bool bInitOnce = true; - if (!bForLoading || bInitOnce) + // LOKit may need to juggle different symbols lists for different users so a + // single load is not enough, otherwise the wrong separators may be expected + // for the users locale + if (!bForLoading || bInitOnce || comphelper::LibreOfficeKit::isActive()) { bool bForceInit = bInitOnce; bInitOnce = false; @@ -491,6 +494,7 @@ void ScDocShell::CheckConfigOptions() // One of arg separators conflicts with the current decimal // separator. Reset them to default. ScFormulaOptions aNew = rOpt; + aNew.GetCalcConfig().MergeDocumentSpecific(m_pDocument->GetCalcConfig()); aNew.ResetFormulaSeparators(); SetFormulaOptions(aNew); pScMod->SetFormulaOptions(aNew); diff --git a/sc/source/ui/drawfunc/drawsh.cxx b/sc/source/ui/drawfunc/drawsh.cxx index f679b031f3a5..e466ba00b4f7 100644 --- a/sc/source/ui/drawfunc/drawsh.cxx +++ b/sc/source/ui/drawfunc/drawsh.cxx @@ -47,6 +47,8 @@ #include <scslots.hxx> #include <userdat.hxx> +#include <scmod.hxx> +#include <appoptio.hxx> #include <svl/macitem.hxx> #include <sfx2/evntconf.hxx> #include <sfx2/viewsh.hxx> @@ -411,7 +413,15 @@ void ScDrawShell::ExecDrawAttr( SfxRequest& rReq ) pView->SetAttrToMarked(*pNewArgs, false); rReq.Done(); break; - + case SID_CLICK_CHANGE_ROTATION: + { + ScModule* pScMod = ScModule::get(); + ScAppOptions aNewOpts( pScMod->GetAppOptions() ); + aNewOpts.SetClickChangeRotation(!aNewOpts.IsClickChangeRotation()); + pScMod->SetAppOptions(aNewOpts); + rReq.Done(); + } + break; default: break; } diff --git a/sc/source/ui/drawfunc/drawsh2.cxx b/sc/source/ui/drawfunc/drawsh2.cxx index 04a27dbfd35c..579b55a63f23 100644 --- a/sc/source/ui/drawfunc/drawsh2.cxx +++ b/sc/source/ui/drawfunc/drawsh2.cxx @@ -45,6 +45,8 @@ #include <drwlayer.hxx> #include <drtxtob.hxx> #include <gridwin.hxx> +#include <scmod.hxx> +#include <appoptio.hxx> #include <svx/svdoole2.hxx> #include <svx/xflgrit.hxx> #include <comphelper/lok.hxx> @@ -92,6 +94,8 @@ void ScDrawShell::GetState( SfxItemSet& rSet ) // Conditions / Toggles rSet.Put( SfxBoolItem( SID_OBJECT_ROTATE, eMode == SdrDragMode::Rotate ) ); rSet.Put( SfxBoolItem( SID_OBJECT_MIRROR, eMode == SdrDragMode::Mirror ) ); rSet.Put( SfxBoolItem( SID_BEZIER_EDIT, !pView->IsFrameDragSingles() ) ); + rSet.Put(SfxBoolItem(SID_CLICK_CHANGE_ROTATION, + ScModule::get()->GetAppOptions().IsClickChangeRotation())); sal_uInt16 nFWId = ScGetFontWorkId(); SfxViewFrame& rViewFrm = rViewData.GetViewShell()->GetViewFrame(); diff --git a/sc/source/ui/drawfunc/drawsh5.cxx b/sc/source/ui/drawfunc/drawsh5.cxx index 58b3f3538da6..28452b09dd38 100644 --- a/sc/source/ui/drawfunc/drawsh5.cxx +++ b/sc/source/ui/drawfunc/drawsh5.cxx @@ -417,21 +417,7 @@ void ScDrawShell::ExecDrawFunc( SfxRequest& rReq ) break; case SID_OBJECT_ROTATE: - { - SdrDragMode eMode; - if (pView->GetDragMode() == SdrDragMode::Rotate) - eMode = SdrDragMode::Move; - else - eMode = SdrDragMode::Rotate; - pView->SetDragMode( eMode ); - rBindings.Invalidate( SID_OBJECT_ROTATE ); - rBindings.Invalidate( SID_OBJECT_MIRROR ); - if (eMode == SdrDragMode::Rotate && !pView->IsFrameDragSingles()) - { - pView->SetFrameDragSingles(); - rBindings.Invalidate( SID_BEZIER_EDIT ); - } - } + rViewData.GetViewShell()->SwitchRotateMode(); break; case SID_OBJECT_MIRROR: { diff --git a/sc/source/ui/drawfunc/drtxtob.cxx b/sc/source/ui/drawfunc/drtxtob.cxx index d5d00a2f04bd..d31a1a392654 100644 --- a/sc/source/ui/drawfunc/drtxtob.cxx +++ b/sc/source/ui/drawfunc/drtxtob.cxx @@ -228,8 +228,8 @@ void ScDrawTextObjectBar::Execute( SfxRequest &rReq ) const OUString& aFontName(pFontItem->GetValue()); vcl::Font aFont(aFontName, Size(1,1)); // Size only because of CTOR aNewItem = std::make_shared<SvxFontItem>( - aFont.GetFamilyType(), aFont.GetFamilyName(), - aFont.GetStyleName(), aFont.GetPitch(), + aFont.GetFamilyTypeMaybeAskConfig(), aFont.GetFamilyName(), + aFont.GetStyleName(), aFont.GetPitchMaybeAskConfig(), aFont.GetCharSet(), ATTR_FONT); } else diff --git a/sc/source/ui/drawfunc/drtxtob1.cxx b/sc/source/ui/drawfunc/drtxtob1.cxx index 10974d1e5be2..69cab28cfc6f 100644 --- a/sc/source/ui/drawfunc/drtxtob1.cxx +++ b/sc/source/ui/drawfunc/drtxtob1.cxx @@ -64,9 +64,8 @@ bool ScDrawTextObjectBar::ExecuteParaDlg( const SfxItemSet& rArgs, SfxItemSet& rOutSet ) { SfxItemPool* pArgPool = rArgs.GetPool(); - SfxItemSetFixed< - EE_ITEMS_START, EE_ITEMS_END, - SID_ATTR_PARA_PAGEBREAK, SID_ATTR_PARA_WIDOWS> aNewAttr(*pArgPool); + SfxItemSet aNewAttr(SfxItemSet::makeFixedSfxItemSet<EE_ITEMS_START, EE_ITEMS_END, + SID_ATTR_PARA_PAGEBREAK, SID_ATTR_PARA_WIDOWS>(*pArgPool)); aNewAttr.Put( rArgs ); // Values have been taken over once to show the dialog. diff --git a/sc/source/ui/drawfunc/fuins2.cxx b/sc/source/ui/drawfunc/fuins2.cxx index cc373117bfa2..12594eb7379b 100644 --- a/sc/source/ui/drawfunc/fuins2.cxx +++ b/sc/source/ui/drawfunc/fuins2.cxx @@ -137,7 +137,7 @@ void lcl_ChartInit(const uno::Reference <embed::XEmbeddedObject>& xObj, ScViewDa } else { - xDataProvider.set(new ScChart2DataProvider(&rScDoc)); + xDataProvider = new ScChart2DataProvider(&rScDoc); } xReceiver->attachDataProvider(xDataProvider); diff --git a/sc/source/ui/drawfunc/fupoor.cxx b/sc/source/ui/drawfunc/fupoor.cxx index 93b0e47ce010..1c1aecbb4b2a 100644 --- a/sc/source/ui/drawfunc/fupoor.cxx +++ b/sc/source/ui/drawfunc/fupoor.cxx @@ -43,7 +43,8 @@ FuPoor::FuPoor(ScTabViewShell& rViewSh, vcl::Window* pWin, ScDrawView* pViewP, aDragTimer("sc FuPoor aDragTimer"), bIsInDragMode(false), // remember MouseButton state - mnCode(0) + mnCode(0), + mbSelectionHasChanged(false) { aScrollTimer.SetInvokeHandler( LINK(this, FuPoor, ScrollHdl) ); aScrollTimer.SetTimeout(SELENG_AUTOREPEAT_INTERVAL); diff --git a/sc/source/ui/inc/AccessibleCell.hxx b/sc/source/ui/inc/AccessibleCell.hxx index f5c3f8d2821f..69764db893b5 100644 --- a/sc/source/ui/inc/AccessibleCell.hxx +++ b/sc/source/ui/inc/AccessibleCell.hxx @@ -28,7 +28,6 @@ #include <editeng/AccessibleStaticTextBase.hxx> #include <comphelper/uno3.hxx> -namespace com::sun::star::accessibility { class XAccessibleRelationSet; } namespace utl { class AccessibleRelationSetHelper; } class ScTabViewShell; @@ -66,8 +65,6 @@ private: ScSplitPos eSplitPos, ScAccessibleDocument* pAccDoc); - virtual void Init() override; - using ScAccessibleCellBase::disposing; virtual void SAL_CALL disposing() override; @@ -132,7 +129,7 @@ public: virtual css::uno::Sequence< OUString> SAL_CALL getSupportedServiceNames() override; - virtual css::uno::Any SAL_CALL getExtendedAttributes() override; + virtual OUString SAL_CALL getExtendedAttributes() override; // Override this method to handle cell's ParaIndent attribute specially. virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getCharacterAttributes( sal_Int32 nIndex, const css::uno::Sequence< OUString >& aRequestedAttributes ) override; diff --git a/sc/source/ui/inc/AccessibleContextBase.hxx b/sc/source/ui/inc/AccessibleContextBase.hxx index d683dee6c2d2..526727e4a242 100644 --- a/sc/source/ui/inc/AccessibleContextBase.hxx +++ b/sc/source/ui/inc/AccessibleContextBase.hxx @@ -25,35 +25,21 @@ #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp> #include <com/sun/star/uno/Reference.hxx> #include <com/sun/star/lang/XServiceInfo.hpp> +#include <comphelper/accessiblecomponenthelper.hxx> +#include <cppuhelper/implbase.hxx> #include <cppuhelper/interfacecontainer.h> #include <svl/lstner.hxx> -#include <cppuhelper/basemutex.hxx> -#include <cppuhelper/compbase.hxx> -#include <cppuhelper/implbase1.hxx> #include <rtl/ref.hxx> namespace tools { class Rectangle; } class AbsoluteScreenPixelRectangle; -/** @descr - This base class provides an implementation of the - <code>AccessibleContext</code> service. -*/ -typedef cppu::WeakComponentImplHelper< - css::accessibility::XAccessible, - css::accessibility::XAccessibleComponent, - css::accessibility::XAccessibleContext, - css::accessibility::XAccessibleEventBroadcaster, - css::lang::XServiceInfo - > ScAccessibleContextBaseWeakImpl; - class ScAccessibleContextBase - : public cppu::BaseMutex, - public ScAccessibleContextBaseWeakImpl, - public SfxListener + : public cppu::ImplInheritanceHelper<comphelper::OAccessibleComponentHelper, + css::accessibility::XAccessible, css::lang::XServiceInfo>, + public SfxListener { -class ScAccessibleContextBaseEventListener; public: //===== internal ======================================================== @@ -83,23 +69,13 @@ public: virtual css::uno::Reference< css::accessibility::XAccessibleContext> SAL_CALL getAccessibleContext() override; - ///===== XAccessibleComponent ============================================ - - virtual sal_Bool SAL_CALL containsPoint( - const css::awt::Point& rPoint ) override; - - virtual css::uno::Reference< css::accessibility::XAccessible > - SAL_CALL getAccessibleAtPoint( - const css::awt::Point& rPoint ) override; - - virtual css::awt::Rectangle SAL_CALL getBounds( ) override; + // OAccessibleComponentHelper + virtual css::awt::Rectangle implGetBounds() override; - virtual css::awt::Point SAL_CALL getLocation( ) override; + ///===== XAccessibleComponent ============================================ virtual css::awt::Point SAL_CALL getLocationOnScreen( ) override; - virtual css::awt::Size SAL_CALL getSize( ) override; - virtual void SAL_CALL grabFocus( ) override; virtual sal_Int32 SAL_CALL getForeground( ) override; @@ -108,21 +84,10 @@ public: ///===== XAccessibleContext ============================================== - /// Return the number of currently visible children. - virtual sal_Int64 SAL_CALL getAccessibleChildCount() override; - - /// Return the specified child or NULL if index is invalid. - virtual css::uno::Reference< css::accessibility::XAccessible> SAL_CALL - getAccessibleChild(sal_Int64 nIndex) override; - /// Return a reference to the parent. virtual css::uno::Reference< css::accessibility::XAccessible> SAL_CALL getAccessibleParent() override; - /// Return this objects index among the parents children. - virtual sal_Int64 SAL_CALL - getAccessibleIndexInParent() override; - /// Return this object's role. virtual sal_Int16 SAL_CALL getAccessibleRole() override; @@ -148,20 +113,6 @@ public: virtual css::lang::Locale SAL_CALL getLocale() override; - ///===== XAccessibleEventBroadcaster ===================================== - - /** Add listener that is informed of future changes of name, - description and so on events. - */ - virtual void SAL_CALL - addAccessibleEventListener( - const css::uno::Reference<css::accessibility::XAccessibleEventListener>& xListener) override; - - // Remove an existing event listener. - virtual void SAL_CALL - removeAccessibleEventListener( - const css::uno::Reference<css::accessibility::XAccessibleEventListener>& xListener) override; - ///===== XServiceInfo ==================================================== /** Returns an identifier for the implementation of this object. @@ -196,17 +147,17 @@ protected: /// Return the object's current bounding box relative to the desktop. /// /// @throws css::uno::RuntimeException - virtual AbsoluteScreenPixelRectangle GetBoundingBoxOnScreen() const; + virtual AbsoluteScreenPixelRectangle GetBoundingBoxOnScreen() const = 0; /// Return the object's current bounding box relative to the parent object. /// /// @throws css::uno::RuntimeException - virtual tools::Rectangle GetBoundingBox() const; + virtual tools::Rectangle GetBoundingBox() const = 0; public: - /// Calls all Listener to tell they the change. - void - CommitChange(const css::accessibility::AccessibleEventObject& rEvent) const; + /// Calls all listeners to notify them about the change. + void CommitChange(const sal_Int16 nEventId, const css::uno::Any& rOldValue, + const css::uno::Any& rNewValue, sal_Int32 nIndexHint = -1); /// Use this method to set initial Name without notification void SetName(const OUString& rName) { msName = rName; } @@ -218,16 +169,13 @@ public: protected: /// Calls all FocusListener to tell they that the focus is gained. - void CommitFocusGained() const; + void CommitFocusGained(); /// Calls all FocusListener to tell they that the focus is lost. - void CommitFocusLost() const; + void CommitFocusLost(); bool IsDefunc() const { return rBHelper.bDisposed; } - /// @throws css::lang::DisposedException - void IsObjectValid() const; - /// Reference to the parent object. css::uno::Reference<css::accessibility::XAccessible> mxParent; @@ -243,14 +191,9 @@ private: */ OUString msName; - /// client id in the AccessibleEventNotifier queue - sal_uInt32 mnClientId; - /** This is the role of this object. */ sal_Int16 maRole; - - rtl::Reference<ScAccessibleContextBaseEventListener> mxEventListener; }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/inc/AccessibleDocument.hxx b/sc/source/ui/inc/AccessibleDocument.hxx index eec10141a7bd..7ef7882efa79 100644 --- a/sc/source/ui/inc/AccessibleDocument.hxx +++ b/sc/source/ui/inc/AccessibleDocument.hxx @@ -112,7 +112,7 @@ public: virtual OUString SAL_CALL getAccessibleName() override; - virtual css::uno::Any SAL_CALL getExtendedAttributes() override ; + virtual OUString SAL_CALL getExtendedAttributes() override ; ///===== XAccessibleSelection =========================================== virtual void SAL_CALL diff --git a/sc/source/ui/inc/AccessibleSpreadsheet.hxx b/sc/source/ui/inc/AccessibleSpreadsheet.hxx index 49c9f1c27946..d1d906dda622 100644 --- a/sc/source/ui/inc/AccessibleSpreadsheet.hxx +++ b/sc/source/ui/inc/AccessibleSpreadsheet.hxx @@ -198,15 +198,6 @@ private: virtual css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() override; - ///===== XAccessibleEventBroadcaster ===================================== - - /** Add listener that is informed of future changes of name, - description and so on events. - */ - virtual void SAL_CALL - addAccessibleEventListener( - const css::uno::Reference<css::accessibility::XAccessibleEventListener>& xListener) override; - //===== XAccessibleTableSelection ============================================ virtual sal_Bool SAL_CALL selectRow( sal_Int32 row ) override; @@ -251,7 +242,7 @@ private: bool mbIsSpreadsheet; bool mbDelIns; bool mbIsFocusSend; - typedef std::map<ScMyAddress,css::uno::Reference< css::accessibility::XAccessible > > + typedef std::map<ScMyAddress, rtl::Reference<ScAccessibleCell> > MAP_ADDR_XACC; MAP_ADDR_XACC m_mapSelectionSend; bool m_bFormulaMode; diff --git a/sc/source/ui/inc/PivotLayoutDialog.hxx b/sc/source/ui/inc/PivotLayoutDialog.hxx index c2923ce34ae2..d995e3bfb13a 100644 --- a/sc/source/ui/inc/PivotLayoutDialog.hxx +++ b/sc/source/ui/inc/PivotLayoutDialog.hxx @@ -39,7 +39,7 @@ public: ScPivotLayoutTreeListBase* mpPreviouslyFocusedListBox; private: - ScViewData* mpViewData; + ScViewData& mrViewData; ScDocument& mrDocument; bool mbNewPivotTable; @@ -114,7 +114,7 @@ private: public: ScPivotLayoutDialog(SfxBindings* pSfxBindings, SfxChildWindow* pChildWindow, weld::Window* pParent, - ScViewData* pViewData, const ScDPObject* pPivotTableObject, bool bCreateNewPivotTable); + ScViewData& rViewData, const ScDPObject* pPivotTableObject, bool bCreateNewPivotTable); virtual ~ScPivotLayoutDialog() override; virtual void SetReference(const ScRange& rReferenceRange, ScDocument& rDocument) override; diff --git a/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx b/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx index 0f890fc79936..770620bed3a8 100644 --- a/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx +++ b/sc/source/ui/inc/RandomNumberGeneratorDialog.hxx @@ -60,9 +60,8 @@ private: void Init(); void GetRangeFromSelection(); - template<class RNG> - - void GenerateNumbers(RNG& randomGenerator, TranslateId pDistributionStringId, const std::optional<sal_Int8> aDecimalPlaces); + template<class DIST> + void GenerateNumbers(DIST& distribution, std::mt19937& seed, TranslateId pDistributionStringId, const std::optional<sal_Int8> aDecimalPlaces); void SelectGeneratorAndGenerateNumbers(); diff --git a/sc/source/ui/inc/SparklineDataRangeDialog.hxx b/sc/source/ui/inc/SparklineDataRangeDialog.hxx index 32d3ed035c71..99a9ba4ac3f5 100644 --- a/sc/source/ui/inc/SparklineDataRangeDialog.hxx +++ b/sc/source/ui/inc/SparklineDataRangeDialog.hxx @@ -16,8 +16,6 @@ #include <SparklineGroup.hxx> #include <SparklineAttributes.hxx> -class ColorListBox; - namespace sc { /** Dialog to change input data range for a sparkline */ diff --git a/sc/source/ui/inc/anyrefdg.hxx b/sc/source/ui/inc/anyrefdg.hxx index ad3feac803a6..8d422e66add3 100644 --- a/sc/source/ui/inc/anyrefdg.hxx +++ b/sc/source/ui/inc/anyrefdg.hxx @@ -26,7 +26,6 @@ #include <memory> -class SfxObjectShell; class ScDocument; class ScRangeList; class ScCompiler; diff --git a/sc/source/ui/inc/areasdlg.hxx b/sc/source/ui/inc/areasdlg.hxx index be4d778d4ec8..b7372a5faf73 100644 --- a/sc/source/ui/inc/areasdlg.hxx +++ b/sc/source/ui/inc/areasdlg.hxx @@ -29,7 +29,7 @@ class SfxStringItem; class ScPrintAreasDlg : public ScAnyRefDlgController { public: - ScPrintAreasDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pParent); + ScPrintAreasDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pParent, ScViewData& rData); virtual ~ScPrintAreasDlg() override; virtual void SetReference( const ScRange& rRef, ScDocument& rDoc ) override; @@ -43,8 +43,8 @@ public: private: bool bDlgLostFocus; - ScDocument* pDoc; - ScViewData* pViewData; + ScViewData& rViewData; + ScDocument& rDoc; SCTAB nCurTab; formula::RefEdit* m_pRefInputEdit; diff --git a/sc/source/ui/inc/autostyl.hxx b/sc/source/ui/inc/autostyl.hxx index 891455cc82bb..3f7e12a5fdc8 100644 --- a/sc/source/ui/inc/autostyl.hxx +++ b/sc/source/ui/inc/autostyl.hxx @@ -28,7 +28,6 @@ #include <vcl/idle.hxx> class ScDocShell; -class ScRange; struct ScAutoStyleData { diff --git a/sc/source/ui/inc/checklistmenu.hxx b/sc/source/ui/inc/checklistmenu.hxx index 558ef9f47e37..952bf9ee5902 100644 --- a/sc/source/ui/inc/checklistmenu.hxx +++ b/sc/source/ui/inc/checklistmenu.hxx @@ -18,9 +18,7 @@ #include <map> #include <set> -class ScCheckListMenuControl; class ScViewData; -struct ScCheckListMember; struct ImplSVEvent; struct ScCheckListMember @@ -49,7 +47,6 @@ struct ScCheckListMember std::unique_ptr<weld::TreeIter> mxParent; }; -class ScCheckListMenuWindow; class ScListSubMenuControl; /** diff --git a/sc/source/ui/inc/condformatdlg.hxx b/sc/source/ui/inc/condformatdlg.hxx index 9edd0716d941..b35651ed3a01 100644 --- a/sc/source/ui/inc/condformatdlg.hxx +++ b/sc/source/ui/inc/condformatdlg.hxx @@ -81,9 +81,9 @@ private: sal_uInt32 mnKey; ScAddress maPos; - ScViewData* mpViewData; + ScViewData& mrViewData; - std::shared_ptr<ScCondFormatDlgData> mpDlgItem; + std::shared_ptr<ScCondFormatDlgData> mpDlgData; OUString msBaseTitle; @@ -109,7 +109,7 @@ protected: public: ScCondFormatDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pWindow, - ScViewData* pViewData, const std::shared_ptr<ScCondFormatDlgData>& rItem); + ScViewData& rViewData, const std::shared_ptr<ScCondFormatDlgData>& rItem); virtual ~ScCondFormatDlg() override; std::unique_ptr<ScConditionalFormat> GetConditionalFormat() const; diff --git a/sc/source/ui/inc/condformateasydlg.hxx b/sc/source/ui/inc/condformateasydlg.hxx index 933d2e51e207..2ffed223c7a5 100644 --- a/sc/source/ui/inc/condformateasydlg.hxx +++ b/sc/source/ui/inc/condformateasydlg.hxx @@ -14,15 +14,13 @@ #include <conditio.hxx> class ScViewData; -class ScConditionalFormat; -class ScTabViewShell; namespace sc { class ConditionalFormatEasyDialog : public ScAnyRefDlgController, public SfxListener { public: - ConditionalFormatEasyDialog(SfxBindings*, SfxChildWindow*, weld::Window*, ScViewData*); + ConditionalFormatEasyDialog(SfxBindings*, SfxChildWindow*, weld::Window*, ScViewData&); virtual ~ConditionalFormatEasyDialog() override; virtual void SetReference(const ScRange&, ScDocument&) override; @@ -36,7 +34,7 @@ public: private: void SetDescription(std::u16string_view rCondition); - ScViewData* mpViewData; + ScViewData& mrViewData; ScDocument& mrDocument; ScConditionMode meMode; ScAddress maPosition; diff --git a/sc/source/ui/inc/condformatuno.hxx b/sc/source/ui/inc/condformatuno.hxx index 16b971a538f8..589ced0bca01 100644 --- a/sc/source/ui/inc/condformatuno.hxx +++ b/sc/source/ui/inc/condformatuno.hxx @@ -36,8 +36,6 @@ class ScCondDateFormatEntry; using namespace com::sun::star; -namespace com::sun::star::sheet { class XSheetCellRanges; } - class ScCondFormatsObj : public cppu::WeakImplHelper<css::sheet::XConditionalFormats>, public SfxListener { diff --git a/sc/source/ui/inc/consdlg.hxx b/sc/source/ui/inc/consdlg.hxx index 140472cbbaf4..b7261e7a206f 100644 --- a/sc/source/ui/inc/consdlg.hxx +++ b/sc/source/ui/inc/consdlg.hxx @@ -24,7 +24,6 @@ class ScViewData; class ScDocument; -class ScRangeUtil; class ScAreaData; class ScConsolidateDlg : public ScAnyRefDlgController diff --git a/sc/source/ui/inc/csvcontrol.hxx b/sc/source/ui/inc/csvcontrol.hxx index 778f02edc983..9a2bea44e93c 100644 --- a/sc/source/ui/inc/csvcontrol.hxx +++ b/sc/source/ui/inc/csvcontrol.hxx @@ -27,8 +27,6 @@ #include <vcl/customweld.hxx> #include "AccessibleCsvControl.hxx" -namespace com::sun::star::accessibility { class XAccessible; } - /** Minimum character count for a column in separators mode. */ const sal_Int32 CSV_MINCOLWIDTH = 8; /** Maximum length of a cell string. */ diff --git a/sc/source/ui/inc/csvgrid.hxx b/sc/source/ui/inc/csvgrid.hxx index 683070b04eb7..49bb6d492cd3 100644 --- a/sc/source/ui/inc/csvgrid.hxx +++ b/sc/source/ui/inc/csvgrid.hxx @@ -32,7 +32,6 @@ namespace svtools { class ColorConfig; } class EditEngine; class ScAsciiOptions; -class ScAccessibleCsvControl; class ScCsvTableBox; const sal_uInt32 CSV_COLUMN_INVALID = CSV_VEC_NOTFOUND; diff --git a/sc/source/ui/inc/csvruler.hxx b/sc/source/ui/inc/csvruler.hxx index 5173f0d20002..730d5ac186b3 100644 --- a/sc/source/ui/inc/csvruler.hxx +++ b/sc/source/ui/inc/csvruler.hxx @@ -24,7 +24,6 @@ #include <vcl/virdev.hxx> -class ScAccessibleCsvControl; class ScCsvTableBox; /** A ruler control for the CSV import dialog. Supports setting and moving diff --git a/sc/source/ui/inc/dataprovider.hxx b/sc/source/ui/inc/dataprovider.hxx index 680bf3819390..4234f8df2267 100644 --- a/sc/source/ui/inc/dataprovider.hxx +++ b/sc/source/ui/inc/dataprovider.hxx @@ -46,6 +46,9 @@ class CSVFetchThread : public salhelper::Thread std::function<void()> maImportFinishedHdl; + std::exception_ptr mpLastException; + bool mbIsParseError; + public: CSVFetchThread(ScDocument& rDoc, OUString , std::function<void()> aImportFinishedHdl, @@ -56,6 +59,8 @@ public: bool IsRequestedTerminate(); void Terminate(); void EndThread(); + bool IsParseError() { return mbIsParseError; } + auto GetLastException() { return mpLastException; } virtual void execute() override; }; @@ -141,7 +146,6 @@ public: static std::shared_ptr<DataProvider> getDataProvider(ScDocument* pDoc, sc::ExternalDataSource& rDataSource); - static std::vector<OUString> getDataProviders(); }; } diff --git a/sc/source/ui/inc/dataproviderdlg.hxx b/sc/source/ui/inc/dataproviderdlg.hxx index 127b6361abbd..40db1fc12cda 100644 --- a/sc/source/ui/inc/dataproviderdlg.hxx +++ b/sc/source/ui/inc/dataproviderdlg.hxx @@ -94,6 +94,7 @@ public: sc::ExternalDataSource getDataSource(ScDocument* pDoc); + void clearTablePreview(); void import(ScDocument& rDoc, bool bInternal = false); }; diff --git a/sc/source/ui/inc/dbdocfun.hxx b/sc/source/ui/inc/dbdocfun.hxx index 780e523b5193..cabfab1526dc 100644 --- a/sc/source/ui/inc/dbdocfun.hxx +++ b/sc/source/ui/inc/dbdocfun.hxx @@ -69,7 +69,7 @@ public: void DoSubTotals( SCTAB nTab, const ScSubTotalParam& rParam, bool bRecord, bool bApi ); - bool AddDBRange( const OUString& rName, const ScRange& rRange ); + SC_DLLPUBLIC bool AddDBRange( const OUString& rName, const ScRange& rRange ); bool DeleteDBRange( const OUString& rName ); bool RenameDBRange( const OUString& rOld, const OUString& rNew ); void ModifyDBData( const ScDBData& rNewData ); // Name unveraendert diff --git a/sc/source/ui/inc/dbfunc.hxx b/sc/source/ui/inc/dbfunc.hxx index 9d9f5481121d..f04c7b6d0a0e 100644 --- a/sc/source/ui/inc/dbfunc.hxx +++ b/sc/source/ui/inc/dbfunc.hxx @@ -36,7 +36,7 @@ class SAL_DLLPUBLIC_RTTI ScDBFunc : public ScViewFunc private: void GetSelectedMemberList(ScDPUniqueStringSet& rEntries, tools::Long& rDimension); static void ModifiedAutoFilter(ScDocShell* pDocSh); - static void ApplyAutoFilter(ScDocShell* pDocSh, ScViewData* pViewData, ScDBData* pDBData, + static void ApplyAutoFilter(ScDocShell* pDocSh, ScViewData& rViewData, ScDBData* pDBData, SCROW nRow, SCTAB nTab, const ScQueryParam& aParam); DECL_STATIC_LINK(ScDBFunc, InstallLOKNotifierHdl, void*, vcl::ILibreOfficeKitNotifier*); @@ -58,6 +58,7 @@ public: void ToggleAutoFilter(); void HideAutoFilter(); + void ClearAutoFilter(); void RepeatDB( bool bRecord = true ); diff --git a/sc/source/ui/inc/docsh.hxx b/sc/source/ui/inc/docsh.hxx index 046cf75ea3a3..6c909028205c 100644 --- a/sc/source/ui/inc/docsh.hxx +++ b/sc/source/ui/inc/docsh.hxx @@ -40,7 +40,6 @@ class ScRefreshTimerProtector; class ScEditEngineDefaulter; -class SfxStyleSheetBasePool; class SfxStyleSheetHint; class INetURLObject; @@ -425,9 +424,9 @@ public: // password protection for Calc (derived from SfxObjectShell) // see also: FID_CHG_RECORD, SID_CHG_PROTECT - virtual bool IsChangeRecording() const override; + virtual bool IsChangeRecording(SfxViewShell* pViewShell = nullptr, bool bRecordAllViews = true) const override; virtual bool HasChangeRecordProtection() const override; - virtual void SetChangeRecording( bool bActivate, bool bLockAllViews = false ) override; + virtual void SetChangeRecording( bool bActivate, bool bLockAllViews = false, SfxRedlineRecordingMode eRedlineRecordingMode = SfxRedlineRecordingMode::ViewAgnostic) override; virtual void SetProtectionPassword( const OUString &rPassword ) override; virtual bool GetProtectionHash( /*out*/ css::uno::Sequence< sal_Int8 > &rPasswordHash ) override; @@ -505,7 +504,7 @@ namespace HelperNotifyChanges return false; } - inline bool getMustPropagateChangesModel(ScModelObj* pModelObj) + inline bool getMustPropagateChangesModel(const ScModelObj* pModelObj) { return pModelObj && pModelObj->HasChangesListeners(); } diff --git a/sc/source/ui/inc/drawview.hxx b/sc/source/ui/inc/drawview.hxx index 816a3428aacf..fb7ec43c4948 100644 --- a/sc/source/ui/inc/drawview.hxx +++ b/sc/source/ui/inc/drawview.hxx @@ -28,7 +28,6 @@ namespace com::sun::star::datatransfer { class XTransferable; } class ScDocument; class ScViewData; class ScDrawObjData; -class SdrUndoManager; class ScDrawView final : public FmFormView { diff --git a/sc/source/ui/inc/foptmgr.hxx b/sc/source/ui/inc/foptmgr.hxx index 661feac98fb2..580563183a2f 100644 --- a/sc/source/ui/inc/foptmgr.hxx +++ b/sc/source/ui/inc/foptmgr.hxx @@ -24,7 +24,6 @@ namespace formula { class RefButton; - class RefButton; class RefEdit; } struct ScQueryParam; diff --git a/sc/source/ui/inc/fupoor.hxx b/sc/source/ui/inc/fupoor.hxx index 6f226776b03f..79e1bf86db33 100644 --- a/sc/source/ui/inc/fupoor.hxx +++ b/sc/source/ui/inc/fupoor.hxx @@ -60,7 +60,7 @@ protected: // of own MouseEvents (like in ScrollHdl) private: sal_uInt16 mnCode; - + bool mbSelectionHasChanged; public: FuPoor(ScTabViewShell& rViewSh, vcl::Window* pWin, ScDrawView* pView, SdrModel* pDoc, const SfxRequest& rReq); @@ -96,6 +96,10 @@ public: // Create default drawing objects via keyboard virtual rtl::Reference<SdrObject> CreateDefaultObject(const sal_uInt16 nID, const tools::Rectangle& rRectangle); + void ResetSelectionHasChanged() {mbSelectionHasChanged = false;} + void SetSelectionHasChanged() {mbSelectionHasChanged = true;} + bool HasSelectionChanged() {return mbSelectionHasChanged;} + protected: static void ImpForceQuadratic(tools::Rectangle& rRect); diff --git a/sc/source/ui/inc/gridwin.hxx b/sc/source/ui/inc/gridwin.hxx index f456712b616f..4ca1f2337aaa 100644 --- a/sc/source/ui/inc/gridwin.hxx +++ b/sc/source/ui/inc/gridwin.hxx @@ -33,11 +33,8 @@ #include <vector> -namespace editeng { - struct MisspellRanges; -} - namespace sc { + struct MisspellRangeResult; class SpellCheckContext; } @@ -211,6 +208,8 @@ class SAL_DLLPUBLIC_RTTI ScGridWindow : public vcl::DocWindow, public DropTarget ScAddress aAutoMarkPos; ScAddress aListValPos; + Point aDrawSelectionPos; + tools::Rectangle aInvertRect; RfCorner aRFSelectedCorned; @@ -361,9 +360,7 @@ public: virtual void dispose() override; virtual void KeyInput(const KeyEvent& rKEvt) override; - // #i70788# flush and get overlay rtl::Reference<sdr::overlay::OverlayManager> getOverlayManager() const; - void flushOverlayManager(); virtual OUString GetSurroundingText() const override; virtual Selection GetSurroundingTextSelection() const override; @@ -478,8 +475,8 @@ public: void SetAutoSpellContext( const std::shared_ptr<sc::SpellCheckContext> &ctx ); void ResetAutoSpell(); void ResetAutoSpellForContentChange(); - void SetAutoSpellData( SCCOL nPosX, SCROW nPosY, const std::vector<editeng::MisspellRanges>* pRanges ); - const std::vector<editeng::MisspellRanges>* GetAutoSpellData( SCCOL nPosX, SCROW nPosY ); + void SetAutoSpellData( SCCOL nPosX, SCROW nPosY, const sc::MisspellRangeResult& rRangeResult ); + sc::MisspellRangeResult GetAutoSpellData( SCCOL nPosX, SCROW nPosY ); bool InsideVisibleRange( SCCOL nPosX, SCROW nPosY ); void UpdateSparklineGroupOverlay(); @@ -509,6 +506,7 @@ public: /// notify this view with new positions for other view's cursors (after zoom) void updateKitOtherCursors() const; void updateOtherKitSelections() const; + void resetCachedViewGridOffsets() const; void notifyKitCellFollowJump() const; diff --git a/sc/source/ui/inc/inputhdl.hxx b/sc/source/ui/inc/inputhdl.hxx index 0b68ed14c6b6..26d03efd39b6 100644 --- a/sc/source/ui/inc/inputhdl.hxx +++ b/sc/source/ui/inc/inputhdl.hxx @@ -50,7 +50,6 @@ class CommandEvent; class VclWindowEvent; namespace vcl { class Window; } struct ReferenceMark; -struct ESelection; // ScInputHandler diff --git a/sc/source/ui/inc/inputwin.hxx b/sc/source/ui/inc/inputwin.hxx index 93c0611cf384..4f72230fad34 100644 --- a/sc/source/ui/inc/inputwin.hxx +++ b/sc/source/ui/inc/inputwin.hxx @@ -32,17 +32,13 @@ #include <formula/opcode.hxx> #include <svx/weldeditview.hxx> -namespace com::sun::star::accessibility { class XAccessible; } - class EditView; class ScAccessibleEditLineTextData; class ScAccessibleEditObject; -class ScEditEngineDefaulter; class ScTextWndGroup; class ScInputBarGroup; class ScInputHandler; class ScTabViewShell; -struct EENotify; class ScTextWndBase { diff --git a/sc/source/ui/inc/navipi.hxx b/sc/source/ui/inc/navipi.hxx index e251a3b47e1d..eed18028ec67 100644 --- a/sc/source/ui/inc/navipi.hxx +++ b/sc/source/ui/inc/navipi.hxx @@ -31,9 +31,7 @@ class SfxPoolItem; class ScTabViewShell; class ScViewData; -class ScScenarioWindow; class ScNavigatorControllerItem; -class ScNavigatorDlg; class ScNavigatorSettings; #define SC_DROPMODE_URL 0 @@ -131,8 +129,8 @@ private: DECL_LINK(ToolBoxSelectHdl, const OUString&, void); DECL_LINK(ToolBoxDropdownClickHdl, const OUString&, void); DECL_LINK(MenuSelectHdl, const OUString&, void); - DECL_LINK(FormatRowOutputHdl, weld::SpinButton&, void); - DECL_LINK(ParseRowInputHdl, int*, bool); + DECL_STATIC_LINK(ScNavigatorDlg, FormatRowOutputHdl, sal_Int64, OUString); + DECL_LINK(ParseRowInputHdl, const OUString&, std::optional<int>); void UpdateButtons(); void SetCurrentCell( SCCOL nCol, SCROW Row ); diff --git a/sc/source/ui/inc/olinewin.hxx b/sc/source/ui/inc/olinewin.hxx index 7f99ae662436..eade172add48 100644 --- a/sc/source/ui/inc/olinewin.hxx +++ b/sc/source/ui/inc/olinewin.hxx @@ -58,7 +58,7 @@ public: ScOutlineWindow( vcl::Window* pParent, ScOutlineMode eMode, - ScViewData* pViewData, + ScViewData& rViewData, ScSplitPos eWhich ); virtual ~ScOutlineWindow() override; virtual void dispose() override; diff --git a/sc/source/ui/inc/output.hxx b/sc/source/ui/inc/output.hxx index d3d51f52fcc4..3c6ebf6cf765 100644 --- a/sc/source/ui/inc/output.hxx +++ b/sc/source/ui/inc/output.hxx @@ -21,6 +21,7 @@ #include <address.hxx> #include <cellvalue.hxx> +#include <spellcheckcontext.hxx> #include <tools/color.hxx> #include <tools/fract.hxx> #include <tools/gen.hxx> @@ -153,7 +154,7 @@ private: const SfxItemSet* mpOldCondSet; const SfxItemSet* mpOldPreviewFontSet; RowInfo* mpThisRowInfo; - const std::vector<editeng::MisspellRanges>* mpMisspellRanges; + sc::MisspellRangeResult maMisspellRanges; explicit DrawEditParam(const ScPatternAttr* pPattern, const SfxItemSet* pCondSet, bool bCellIsValue); diff --git a/sc/source/ui/inc/printfun.hxx b/sc/source/ui/inc/printfun.hxx index 04c1019e0f80..736b09def508 100644 --- a/sc/source/ui/inc/printfun.hxx +++ b/sc/source/ui/inc/printfun.hxx @@ -338,7 +338,7 @@ public: ~ScPrintFunc(); static void DrawToDev( ScDocument& rDoc, OutputDevice* pDev, double nPrintFactor, - const tools::Rectangle& rBound, ScViewData* pViewData, bool bMetaFile ); + const tools::Rectangle& rBound, ScViewData& rViewData, bool bMetaFile ); void SetDrawView( FmFormView* pNew ); diff --git a/sc/source/ui/inc/scuiasciiopt.hxx b/sc/source/ui/inc/scuiasciiopt.hxx index 5b19b8c4d3ee..3c4d9057f92a 100644 --- a/sc/source/ui/inc/scuiasciiopt.hxx +++ b/sc/source/ui/inc/scuiasciiopt.hxx @@ -84,6 +84,7 @@ class ScImportAsciiDlg : public weld::GenericDialogController std::unique_ptr<weld::Label> mxAltTitle; std::unique_ptr<ScCsvTableBox> mxTableBox; + std::unique_ptr<weld::CheckButton> mxCkbAlwaysShowOnImport; public: ScImportAsciiDlg( diff --git a/sc/source/ui/inc/select.hxx b/sc/source/ui/inc/select.hxx index 299463afddd2..0e996042cb0d 100644 --- a/sc/source/ui/inc/select.hxx +++ b/sc/source/ui/inc/select.hxx @@ -40,7 +40,7 @@ public: class ScViewFunctionSet : public FunctionSet // View (Gridwin / keyboard) { private: - ScViewData* m_pViewData; + ScViewData& m_rViewData; ScViewSelectionEngine* m_pEngine; bool m_bAnchor; @@ -53,7 +53,7 @@ private: bool bLeftScroll, bool bTopScroll, bool bRightScroll, bool bBottomScroll ); public: - ScViewFunctionSet( ScViewData* pNewViewData ); + ScViewFunctionSet( ScViewData& rViewData ); void SetSelectionEngine( ScViewSelectionEngine* pSelEngine ); @@ -75,7 +75,7 @@ public: class ScHeaderFunctionSet : public FunctionSet // Column / row headers { private: - ScViewData* pViewData; + ScViewData& rViewData; bool bColumn; // Col- / Rowbar ScSplitPos eWhich; @@ -83,7 +83,7 @@ private: SCCOLROW nCursorPos; public: - ScHeaderFunctionSet( ScViewData* pNewViewData ); + ScHeaderFunctionSet( ScViewData& rData ); void SetColumn( bool bSet ); void SetWhich( ScSplitPos eNew ); diff --git a/sc/source/ui/inc/sharedocdlg.hxx b/sc/source/ui/inc/sharedocdlg.hxx index d6dcc4810d86..ba83b1787b84 100644 --- a/sc/source/ui/inc/sharedocdlg.hxx +++ b/sc/source/ui/inc/sharedocdlg.hxx @@ -42,7 +42,7 @@ private: DECL_LINK(SizeAllocated, const Size&, void); public: - ScShareDocumentDlg(weld::Window* pParent, const ScViewData* pViewData); + ScShareDocumentDlg(weld::Window* pParent, ScViewData& rViewData); virtual ~ScShareDocumentDlg() override; bool IsShareDocumentChecked() const; diff --git a/sc/source/ui/inc/simpref.hxx b/sc/source/ui/inc/simpref.hxx index 0286aa6cf06b..3e96ef0285c9 100644 --- a/sc/source/ui/inc/simpref.hxx +++ b/sc/source/ui/inc/simpref.hxx @@ -21,8 +21,6 @@ #include "anyrefdg.hxx" -class ScDocument; - class ScSimpleRefDlg: public ScAnyRefDlgController { private: diff --git a/sc/source/ui/inc/tabcont.hxx b/sc/source/ui/inc/tabcont.hxx index 6a12c1d073af..c66ee9607c54 100644 --- a/sc/source/ui/inc/tabcont.hxx +++ b/sc/source/ui/inc/tabcont.hxx @@ -31,7 +31,7 @@ class ScViewData; class ScTabControl : public TabBar, public DropTargetHelper, public DragSourceHelper { private: - ScViewData* pViewData; + ScViewData& rViewData; sal_uInt16 nMouseClickPageId; /// Last page ID after mouse button down/up sal_uInt16 nSelPageIdByMouse; /// Selected page ID, if selected with mouse bool bErrorShown; @@ -62,7 +62,7 @@ protected: virtual void AddTabClick() override; public: - ScTabControl( vcl::Window* pParent, ScViewData* pData ); + ScTabControl( vcl::Window* pParent, ScViewData& rData ); virtual void dispose() override; virtual ~ScTabControl() override; diff --git a/sc/source/ui/inc/tabsplit.hxx b/sc/source/ui/inc/tabsplit.hxx index ce09efddc260..035de1cb32bd 100644 --- a/sc/source/ui/inc/tabsplit.hxx +++ b/sc/source/ui/inc/tabsplit.hxx @@ -26,7 +26,7 @@ class ScViewData; class ScTabSplitter : public Splitter { private: - const ScViewData *const pViewData; + ScViewData& rViewData; bool bFixed; protected: @@ -34,7 +34,7 @@ protected: public: ScTabSplitter( vcl::Window* pParent, WinBits nWinStyle, - const ScViewData* pData ); + ScViewData& rData ); virtual ~ScTabSplitter() override; void SetFixed(bool bSet); diff --git a/sc/source/ui/inc/tabview.hxx b/sc/source/ui/inc/tabview.hxx index 51dd31c7ab63..69f87b16f737 100644 --- a/sc/source/ui/inc/tabview.hxx +++ b/sc/source/ui/inc/tabview.hxx @@ -31,10 +31,6 @@ #include "gridwin.hxx" #include "drawview.hxx" -namespace editeng { - struct MisspellRanges; -} - class ScEditEngineDefaulter; class ScOutlineWindow; class ScRowBar; @@ -46,7 +42,6 @@ class SvBorder; class FuPoor; class Splitter; class ScTabSplitter; -class SdrView; class SdrObject; class ScPageBreakData; class SdrHdlList; @@ -66,14 +61,14 @@ enum HeaderType class ScCornerButton : public vcl::Window { private: - ScViewData* pViewData; + ScViewData& rViewData; protected: virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override; virtual void Resize() override; virtual void MouseButtonDown( const MouseEvent& rMEvt ) override; public: - ScCornerButton( vcl::Window* pParent, ScViewData* pData ); + ScCornerButton( vcl::Window* pParent, ScViewData& pData ); virtual ~ScCornerButton() override; virtual void StateChanged( StateChangedType nType ) override; @@ -370,7 +365,7 @@ public: */ void TabChanged( bool bSameTabButMoved = false ); void SetZoom( const Fraction& rNewX, const Fraction& rNewY, bool bAll ); - SC_DLLPUBLIC void RefreshZoom(); + SC_DLLPUBLIC void RefreshZoom(bool bRecalcScale = true); void SetPagebreakMode( bool bSet ); void UpdateLayerLocks(); @@ -622,7 +617,7 @@ public: void EnableAutoSpell( bool bEnable ); void ResetAutoSpell(); void ResetAutoSpellForContentChange(); - void SetAutoSpellData( SCCOL nPosX, SCROW nPosY, const std::vector<editeng::MisspellRanges>* pRanges ); + void SetAutoSpellData( SCCOL nPosX, SCROW nPosY, const sc::MisspellRangeResult& rRangeResult ); /// @see ScModelObj::getRowColumnHeaders(). void getRowColumnHeaders(const tools::Rectangle& rRectangle, tools::JsonWriter& rJsonWriter); /// @see ScModelObj::getSheetGeometryData() @@ -638,6 +633,8 @@ public: SCCOL GetLOKEndHeaderCol() const { return mnLOKEndHeaderCol; } void SyncGridWindowMapModeFromDrawMapMode(); + + void SwitchRotateMode(); }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/inc/tabvwsh.hxx b/sc/source/ui/inc/tabvwsh.hxx index 842474dd7af7..a1bc6e6b95f7 100644 --- a/sc/source/ui/inc/tabvwsh.hxx +++ b/sc/source/ui/inc/tabvwsh.hxx @@ -48,7 +48,6 @@ class AbstractScMoveTableDlg; class AbstractScTabBgColorDlg; class AbstractScStringInputDlg; class ScStyleSaveData; -class ScArea; class ScAuditingShell; class ScDrawShell; class ScDrawTextObjectBar; @@ -64,7 +63,6 @@ class ScChartShell; class ScPageBreakShell; class ScDPObject; class ScNavigatorSettings; -class ScRangeName; class ScDrawTransferObj; class ScCondFormatDlgData; class ScDispatchProviderInterceptor; @@ -75,8 +73,6 @@ struct ScHeaderFieldData; namespace editeng { class SvxBorderLine; } -namespace com::sun::star::frame { class XDispatchProviderInterceptor; } - namespace svx { class ExtrusionBar; class FontworkBar; @@ -110,6 +106,7 @@ private: OUString m_aText; OUString m_aSelection; sal_uInt64 m_nShellId; + OUString m_separator; std::chrono::steady_clock::time_point m_nTimeStamp; SendFormulabarUpdate() @@ -197,7 +194,8 @@ private: OUString maScope; std::unique_ptr<ScDragData> m_pDragData; - std::shared_ptr<ScCondFormatDlgData> m_pScCondFormatDlgItem; + // temporary data for exchange in the used multi-dialog structure + std::shared_ptr<ScCondFormatDlgData> m_pScCondFormatDlgData; // Chart insert wizard's mark to make sure it undoes the correct thing in LOK case UndoStackMark m_InsertWizardUndoMark = MARK_INVALID; @@ -268,7 +266,7 @@ public: SC_DLLPUBLIC bool IsRefInputMode() const; void ExecuteInputDirect(); - void HandleDuplicateRecords(css::uno::Reference<css::sheet::XSpreadsheet> ActiveSheet, + void HandleDuplicateRecords(const css::uno::Reference<css::sheet::XSpreadsheet>& ActiveSheet, const css::table::CellRangeAddress& aRange, bool bRemove, bool bIncludesHeaders, bool bDuplicateRows, const std::vector<int>& rSelectedEntries); @@ -450,7 +448,7 @@ public: /// is equal to nCurrentTabIndex static void notifyAllViewsSheetGeomInvalidation(const SfxViewShell* pForViewShell, bool bColumns, bool bRows, bool bSizes, bool bHidden, bool bFiltered, bool bGroups, SCTAB nCurrentTabIndex); - void LOKSendFormulabarUpdate(EditView* pEditView, const OUString& rText, const ESelection& rSelection); + void LOKSendFormulabarUpdate(const EditView* pEditView, const OUString& rText, const ESelection& rSelection); css::uno::Reference<css::drawing::XShapes> getSelectedXShapes(); SC_DLLPUBLIC static css::uno::Reference<css::datatransfer::XTransferable2> GetClipData(vcl::Window* pWin); @@ -469,8 +467,8 @@ public: void SetMoveKeepEdit(bool value) { bMoveKeepEdit = value; }; bool GetMoveKeepEdit() { return bMoveKeepEdit; }; - void setScCondFormatDlgItem(const std::shared_ptr<ScCondFormatDlgData>& rItem) { m_pScCondFormatDlgItem = rItem; } - const std::shared_ptr<ScCondFormatDlgData>& getScCondFormatDlgItem() const { return m_pScCondFormatDlgItem; } + void setScCondFormatDlgData(const std::shared_ptr<ScCondFormatDlgData>& rItem) { m_pScCondFormatDlgData = rItem; } + const std::shared_ptr<ScCondFormatDlgData>& getScCondFormatDlgData() const { return m_pScCondFormatDlgData; } void SetInsertWizardUndoMark(); diff --git a/sc/source/ui/inc/textimportoptions.hxx b/sc/source/ui/inc/textimportoptions.hxx index 7a2cfb6df589..b12b58a26990 100644 --- a/sc/source/ui/inc/textimportoptions.hxx +++ b/sc/source/ui/inc/textimportoptions.hxx @@ -33,7 +33,6 @@ public: LanguageType getLanguageType() const; bool isDateConversionSet() const; bool isScientificConversionSet() const; - bool isKeepAskingSet() const; private: void init(); @@ -44,7 +43,6 @@ private: std::unique_ptr<weld::RadioButton> m_xRbCustom; std::unique_ptr<weld::CheckButton> m_xCkbConvertDate; std::unique_ptr<weld::CheckButton> m_xCkbConvertScientific; - std::unique_ptr<weld::CheckButton> m_xCkbKeepAsking; std::unique_ptr<SvxLanguageBox> m_xLbCustomLang; DECL_LINK(OKHdl, weld::Button&, void); diff --git a/sc/source/ui/inc/tphfedit.hxx b/sc/source/ui/inc/tphfedit.hxx index 4247f2ad9807..4685d0c3c8b1 100644 --- a/sc/source/ui/inc/tphfedit.hxx +++ b/sc/source/ui/inc/tphfedit.hxx @@ -27,10 +27,7 @@ #include <functional> -namespace com::sun::star::accessibility { class XAccessible; } - class ScPatternAttr; -class EditView; class EditTextObject; class SvxFieldItem; class ScAccessibleEditObject; diff --git a/sc/source/ui/inc/transobj.hxx b/sc/source/ui/inc/transobj.hxx index 8813bf5b40d2..4ad4a93be7f7 100644 --- a/sc/source/ui/inc/transobj.hxx +++ b/sc/source/ui/inc/transobj.hxx @@ -31,12 +31,6 @@ class ScMarkData; enum class ScDragSrc; class ScCellRangesBase; -namespace com::sun::star { - namespace sheet { - class XSheetCellRanges; - } -} - class SAL_DLLPUBLIC_RTTI ScTransferObj : public TransferDataContainer { private: diff --git a/sc/source/ui/inc/uiitems.hxx b/sc/source/ui/inc/uiitems.hxx index dcab506e64b6..5ea756dd409b 100644 --- a/sc/source/ui/inc/uiitems.hxx +++ b/sc/source/ui/inc/uiitems.hxx @@ -21,6 +21,7 @@ #include <scdllapi.h> #include <sortparam.hxx> +#include <spellcheckcontext.hxx> #include <subtotalparam.hxx> #include <paramisc.hxx> #include <svl/poolitem.hxx> @@ -28,10 +29,6 @@ #include <memory> #include <vector> -namespace editeng { - struct MisspellRanges; -} - class ScEditEngineDefaulter; class EditTextObject; class ScViewData; @@ -47,7 +44,7 @@ class ScInputStatusItem : public SfxPoolItem ScAddress aEndPos; OUString aString; std::unique_ptr<EditTextObject> pEditData; - const std::vector<editeng::MisspellRanges>* mpMisspellRanges; + sc::MisspellRangeResult maMisspellRanges; public: @@ -69,8 +66,8 @@ public: const OUString& GetString() const { return aString; } const EditTextObject* GetEditData() const { return pEditData.get(); } - void SetMisspellRanges( const std::vector<editeng::MisspellRanges>* pRanges ); - const std::vector<editeng::MisspellRanges>* GetMisspellRanges() const { return mpMisspellRanges;} + void SetMisspellRanges( const sc::MisspellRangeResult& rRanges ); + const sc::MisspellRangeResult& GetMisspellRanges() const { return maMisspellRanges;} }; #define SC_TAB_INSERTED 1 @@ -132,8 +129,6 @@ public: ScSortItem( sal_uInt16 nWhich, ScViewData* ptrViewData, const ScSortParam* pSortData ); - ScSortItem( sal_uInt16 nWhich, - const ScSortParam* pSortData ); virtual bool operator==( const SfxPoolItem& ) const override; virtual ScSortItem* Clone( SfxItemPool *pPool = nullptr ) const override; @@ -154,8 +149,6 @@ public: ScQueryItem( sal_uInt16 nWhich, ScViewData* ptrViewData, const ScQueryParam* pQueryData ); - ScQueryItem( sal_uInt16 nWhich, - const ScQueryParam* pQueryData ); ScQueryItem( const ScQueryItem& rItem ); virtual ~ScQueryItem() override; diff --git a/sc/source/ui/inc/uiobject.hxx b/sc/source/ui/inc/uiobject.hxx index 4545c50e79e2..44bb72d8648f 100644 --- a/sc/source/ui/inc/uiobject.hxx +++ b/sc/source/ui/inc/uiobject.hxx @@ -11,7 +11,6 @@ #include <memory> #include <vcl/uitest/uiobject.hxx> -class ScGridWindow; class ScDBFunc; class ScDrawView; class ScTabViewShell; diff --git a/sc/source/ui/inc/undo/UndoDeleteSparkline.hxx b/sc/source/ui/inc/undo/UndoDeleteSparkline.hxx index 97fcd77d9507..f0b0b5f6ec2a 100644 --- a/sc/source/ui/inc/undo/UndoDeleteSparkline.hxx +++ b/sc/source/ui/inc/undo/UndoDeleteSparkline.hxx @@ -17,7 +17,6 @@ namespace sc { class SparklineGroup; -struct SparklineData; /** Undo action for deleting a Sparkline */ class UndoDeleteSparkline : public ScSimpleUndo diff --git a/sc/source/ui/inc/undo/UndoEditSparkline.hxx b/sc/source/ui/inc/undo/UndoEditSparkline.hxx index 78bd096bc9c3..26b312b14f80 100644 --- a/sc/source/ui/inc/undo/UndoEditSparkline.hxx +++ b/sc/source/ui/inc/undo/UndoEditSparkline.hxx @@ -18,7 +18,6 @@ namespace sc { class Sparkline; -struct SparklineData; /** Undo action for editing a Sparkline */ class UndoEditSparkline : public ScSimpleUndo diff --git a/sc/source/ui/inc/undoblk.hxx b/sc/source/ui/inc/undoblk.hxx index 8c8805b3dce8..c64218c06571 100644 --- a/sc/source/ui/inc/undoblk.hxx +++ b/sc/source/ui/inc/undoblk.hxx @@ -29,7 +29,6 @@ class ScDocShell; class ScOutlineTable; -class ScPatternAttr; class SvxSearchItem; class SdrUndoAction; class ScEditDataArray; @@ -633,7 +632,7 @@ public: private: ScDocumentUniquePtr createUndoRedoData(); - void DoChange(ScDocument* pDoc); + void DoChange(const ScDocument* pDoc); SCTAB mnTab; ScDocumentUniquePtr mpUndoDoc; ScDocumentUniquePtr mpRedoDoc; diff --git a/sc/source/ui/inc/undocell.hxx b/sc/source/ui/inc/undocell.hxx index 1bceeb3af5fb..0d2b0767cacf 100644 --- a/sc/source/ui/inc/undocell.hxx +++ b/sc/source/ui/inc/undocell.hxx @@ -29,7 +29,6 @@ #include <memory> class ScDocShell; -class ScPatternAttr; class ScRangeName; class ScFormulaCell; diff --git a/sc/source/ui/inc/viewdata.hxx b/sc/source/ui/inc/viewdata.hxx index 7c79bb91d65f..12ecc42b061f 100644 --- a/sc/source/ui/inc/viewdata.hxx +++ b/sc/source/ui/inc/viewdata.hxx @@ -98,7 +98,6 @@ namespace o3tl { } class ScDocFunc; -class ScDocument; class ScDBFunc; class ScTabViewShell; class ScDrawView; @@ -113,7 +112,6 @@ class SfxDispatcher; class ScPatternAttr; class ScExtDocOptions; class ScViewData; -class ScMarkData; class ScGridWindow; class ScSizeDeviceProvider; @@ -704,7 +702,7 @@ public: SCROW & rPosY, SCROW nStartRow, double nPPTY, const ScDocument * pDoc, SCTAB nTabNo ); - void setupSizeDeviceProviderForColWidth(ScSizeDeviceProvider& rProv, Fraction& rZoomX, Fraction& rZoomY, double& rPPTX, double &rPPTY); + void setupSizeDeviceProviderForColWidth(const ScSizeDeviceProvider& rProv, Fraction& rZoomX, Fraction& rZoomY, double& rPPTX, double &rPPTY); }; inline tools::Long ScViewData::ToPixel( sal_uInt16 nTwips, double nFactor ) diff --git a/sc/source/ui/inc/viewfunc.hxx b/sc/source/ui/inc/viewfunc.hxx index fed6b7fcf592..36cbb20853e8 100644 --- a/sc/source/ui/inc/viewfunc.hxx +++ b/sc/source/ui/inc/viewfunc.hxx @@ -127,8 +127,8 @@ public: void FillTab( InsertDeleteFlags nFlags, ScPasteFunc nFunction, bool bSkipEmpty, bool bAsLink ); - SC_DLLPUBLIC void PasteFromSystem(); - SC_DLLPUBLIC bool PasteFromSystem( SotClipboardFormatId nFormatId, bool bApi = false ); + SC_DLLPUBLIC void PasteFromSystem(bool useSavedPrefs = false); + SC_DLLPUBLIC bool PasteFromSystem( SotClipboardFormatId nFormatId, bool bApi = false, bool useSavedPrefs = false ); void PasteFromTransferable( const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable ); @@ -143,7 +143,7 @@ public: bool PasteDataFormat( SotClipboardFormatId nFormatId, const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable, SCCOL nPosX, SCROW nPosY, const Point* pLogicPos, - bool bLink = false, bool bAllowDialogs = false ); + bool bLink = false, bool bAllowDialogs = false, bool useSavedPrefs = false ); bool PasteFile( const Point&, const OUString&, bool bLink ); bool PasteObject( const Point&, const css::uno::Reference < css::embed::XEmbeddedObject >&, const Size*, const Graphic* = nullptr, const OUString& = OUString(), sal_Int64 nAspect = css::embed::Aspects::MSOLE_CONTENT ); @@ -339,7 +339,8 @@ public: SCROW nEndRow , SCCOL nEndCol , std::vector<std::unique_ptr<ScDataFormFragment>>& rEdits, sal_uInt16 aColLength); - void UpdateSelectionArea( const ScMarkData& rSel, ScPatternAttr* pAttr = nullptr ); + void UpdateSelectionArea(const ScMarkData& rSel, ScPatternAttr* pAttr = nullptr, + bool adjustHeight = true); void OnLOKInsertDeleteColumn(SCCOL nStartCol, tools::Long nOffset); void OnLOKInsertDeleteRow(SCROW nStartRow, tools::Long nOffset); @@ -376,11 +377,11 @@ private: bool PasteDataFormatSource( SotClipboardFormatId nFormatId, SCCOL nPosX, SCROW nPosY, bool bAllowDialogs, - TransferableDataHelper& rDataHelper, Point& rPos); + const TransferableDataHelper& rDataHelper, const Point& rPos); bool PasteDataFormatFormattedText( SotClipboardFormatId nFormatId, const css::uno::Reference< css::datatransfer::XTransferable >& rxTransferable, SCCOL nPosX, SCROW nPosY, - bool bAllowDialogs, TransferableDataHelper& rDataHelper ); + bool bAllowDialogs, const TransferableDataHelper& rDataHelper, bool useSavedPrefs = false ); sal_uInt16 GetOptimalColWidth( SCCOL nCol, SCTAB nTab, bool bFormula ); diff --git a/sc/source/ui/inc/viewutil.hxx b/sc/source/ui/inc/viewutil.hxx index 41367e6722f4..9d66b07f873b 100644 --- a/sc/source/ui/inc/viewutil.hxx +++ b/sc/source/ui/inc/viewutil.hxx @@ -26,7 +26,6 @@ class SfxItemSet; class SfxBindings; class SvxFontItem; class SfxViewShell; -class SfxViewFrame; class ScChangeAction; class ScChangeViewSettings; class ScDocument; diff --git a/sc/source/ui/inc/xmlsourcedlg.hxx b/sc/source/ui/inc/xmlsourcedlg.hxx index 3d45d27a824d..bc639d4a47f3 100644 --- a/sc/source/ui/inc/xmlsourcedlg.hxx +++ b/sc/source/ui/inc/xmlsourcedlg.hxx @@ -16,7 +16,6 @@ #include <memory> class ScDocument; -class ScRange; class ScOrcusXMLContext; struct CustomCompare diff --git a/sc/source/ui/miscdlgs/dataproviderdlg.cxx b/sc/source/ui/miscdlgs/dataproviderdlg.cxx index 114da63c897c..7d4e851c48ab 100644 --- a/sc/source/ui/miscdlgs/dataproviderdlg.cxx +++ b/sc/source/ui/miscdlgs/dataproviderdlg.cxx @@ -8,6 +8,8 @@ */ #include <dataproviderdlg.hxx> +#include <scresid.hxx> +#include <globstr.hrc> #include <document.hxx> #include <dataprovider.hxx> @@ -76,27 +78,6 @@ ScDataTransformationBaseControl::~ScDataTransformationBaseControl() namespace { -struct MenuData -{ - const char* aTransformationName; - std::function<void(ScDataProviderDlg*)> maCallback; -}; - -MenuData aTransformationData[] = { - { "Delete Column", &ScDataProviderDlg::deleteColumn }, - { "Delete Row", &ScDataProviderDlg::deleteRowTransformation}, - { "Swap Rows", &ScDataProviderDlg::swapRowsTransformation}, - { "Split Column", &ScDataProviderDlg::splitColumn }, - { "Merge Columns", &ScDataProviderDlg::mergeColumns }, - { "Text Transformation", &ScDataProviderDlg::textTransformation }, - { "Sort Columns", &ScDataProviderDlg::sortTransformation }, - { "Aggregate Functions", &ScDataProviderDlg::aggregateFunction}, - { "Number Transformations", &ScDataProviderDlg::numberTransformation }, - { "Replace Null Transformations", &ScDataProviderDlg::replaceNullTransformation }, - { "Date & Time Transformations", &ScDataProviderDlg::dateTimeTransformation }, - { "Find Replace Transformation", &ScDataProviderDlg::findReplaceTransformation} -}; - class ScDeleteColumnTransformationControl : public ScDataTransformationBaseControl { private: @@ -802,21 +783,10 @@ ScDataProviderDlg::ScDataProviderDlg(weld::Window* pParent, std::shared_ptr<ScDo mxDBRanges->append_text(rNamedDB->GetName()); } - for (const auto& i : aTransformationData) - { - mxTransformationBox->append_text(OUString::createFromAscii(i.aTransformationName)); - } - pDBData = new ScDBData(u"data"_ustr, 0, 0, 0, mxDoc->MaxCol(), mxDoc->MaxRow()); bool bSuccess = mxDoc->GetDBCollection()->getNamedDBs().insert(std::unique_ptr<ScDBData>(pDBData)); SAL_WARN_IF(!bSuccess, "sc", "temporary warning"); - auto aDataProvider = sc::DataProviderFactory::getDataProviders(); - for (const auto& rDataProvider : aDataProvider) - { - mxProviderList->append_text(rDataProvider); - } - mxOKBtn->connect_clicked(LINK(this, ScDataProviderDlg, ApplyQuitHdl)); mxCancelBtn->connect_clicked(LINK(this, ScDataProviderDlg, CancelQuitHdl)); mxAddTransformationBtn->connect_clicked(LINK(this, ScDataProviderDlg, TransformationListHdl)); @@ -861,16 +831,26 @@ IMPL_LINK_NOARG(ScDataProviderDlg, CancelQuitHdl, weld::Button&, void) IMPL_LINK_NOARG(ScDataProviderDlg, TransformationListHdl, weld::Button&, void) { - OUString transformation_string = mxTransformationBox->get_active_text(); - for (auto& i: aTransformationData) - { - if (transformation_string == OUString::createFromAscii(i.aTransformationName)) - { - i.maCallback(this); - maIdle.Start(); - return; - } - } + static std::function<void(ScDataProviderDlg*)> aTransformationOp[12]{ + &ScDataProviderDlg::deleteColumn, + &ScDataProviderDlg::deleteRowTransformation, + &ScDataProviderDlg::swapRowsTransformation, + &ScDataProviderDlg::splitColumn, + &ScDataProviderDlg::mergeColumns, + &ScDataProviderDlg::textTransformation, + &ScDataProviderDlg::sortTransformation, + &ScDataProviderDlg::aggregateFunction, + &ScDataProviderDlg::numberTransformation, + &ScDataProviderDlg::replaceNullTransformation, + &ScDataProviderDlg::dateTimeTransformation, + &ScDataProviderDlg::findReplaceTransformation + }; + OUString rId = mxTransformationBox->get_active_id(); + int nPos = mxTransformationBox->find_id(rId); + + aTransformationOp[nPos](this); + maIdle.Start(); + return; } IMPL_LINK_NOARG(ScDataProviderDlg, ProviderSelectHdl, weld::ComboBox&, void) @@ -891,6 +871,7 @@ IMPL_LINK_NOARG(ScDataProviderDlg, URLEditHdl, weld::Entry&, void) IMPL_LINK_NOARG(ScDataProviderDlg, ApplyBtnHdl, weld::Button&, void) { updateApplyBtn(true); + clearTablePreview(); import(*mxDoc, true); } @@ -913,16 +894,15 @@ IMPL_LINK_NOARG(ScDataProviderDlg, TransformationSelectHdl, weld::ComboBox&, voi sc::ExternalDataSource ScDataProviderDlg::getDataSource(ScDocument* pDoc) { - sc::ExternalDataSource aSource(mxEditURL->get_text(), mxProviderList->get_active_text(), pDoc); + sc::ExternalDataSource aSource(mxEditURL->get_text(), mxProviderList->get_active_id(), pDoc); - OUString aID = mxEditID->get_text(); - aSource.setID(aID); + aSource.setID(mxProviderList->get_active_id()); return aSource; } void ScDataProviderDlg::isValid() { - bool bValid = !mxProviderList->get_active_text().isEmpty(); + bool bValid = !mxProviderList->get_active_id().isEmpty(); bValid &= !mxEditURL->get_text().isEmpty(); updateApplyBtn(bValid); } @@ -942,13 +922,13 @@ void ScDataProviderDlg::updateApplyBtn(bool bValidConfig) void ScDataProviderDlg::deleteColumn() { - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScDeleteColumnTransformationControl>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation)); } void ScDataProviderDlg::splitColumn() { - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScSplitColumnTransformationControl>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation)); } @@ -957,61 +937,61 @@ void ScDataProviderDlg::mergeColumns() SCCOL nStartCol = -1; SCCOL nEndCol = -1; mxTable->getColRange(nStartCol, nEndCol); - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScMergeColumnTransformationControl>(mxDoc.get(), mxTransformationList.get(), nStartCol, nEndCol, mnIndex++, adeleteTransformation)); } void ScDataProviderDlg::textTransformation() { - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScColumnTextTransformation>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation)); } void ScDataProviderDlg::sortTransformation() { - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScSortTransformationControl>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation)); } void ScDataProviderDlg::aggregateFunction() { - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScAggregateFunction>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation)); } void ScDataProviderDlg::numberTransformation() { - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScNumberTransformation>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation)); } void ScDataProviderDlg::replaceNullTransformation() { - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScReplaceNullTransformation>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation)); } void ScDataProviderDlg::dateTimeTransformation() { - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScDateTimeTransformation>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation)); } void ScDataProviderDlg::findReplaceTransformation() { - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList, this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScFindReplaceTransformation>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation)); } void ScDataProviderDlg::deleteRowTransformation() { - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList, this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScDeleteRowTransformation>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation)); } void ScDataProviderDlg::swapRowsTransformation() { - std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList, this, std::placeholders::_1); + auto adeleteTransformation = [this](sal_uInt32 nIndex) {deletefromList(nIndex);}; maControls.emplace_back(std::make_unique<ScSwapRowsTransformation>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation)); } @@ -1027,6 +1007,16 @@ bool hasDBName(const OUString& rName, ScDBCollection* pDBCollection) } +// tdf#165502 Clear the contents of the temporary ScDocument in mxDoc and adds a sheet to +// store the data to be previewed. This is needed if the newly imported content is smaller +// than the previously shown content +void ScDataProviderDlg::clearTablePreview() +{ + mxDoc->Clear(); + // The name "test" below is just a dummy name for the tab that will hold the data + mxDoc->InsertTab(0, u"test"_ustr); +} + void ScDataProviderDlg::import(ScDocument& rDoc, bool bInternal) { sc::ExternalDataSource aSource = getDataSource(&rDoc); @@ -1045,7 +1035,19 @@ void ScDataProviderDlg::import(ScDocument& rDoc, bool bInternal) return; rDoc.GetExternalDataMapper().insertDataSource(aSource); } - aSource.refresh(&rDoc, true); + + try + { + aSource.refresh(&rDoc, true); + } + catch(const orcus::parse_error&) + { + std::unique_ptr<weld::MessageDialog> xMsgBox(Application::CreateMessageDialog(m_xDialog.get(), + VclMessageType::Error, VclButtonsType::Close, + ScResId(STD_ERR_CSV_PARSE))); + xMsgBox->run(); + } + mxTable->Invalidate(); } diff --git a/sc/source/ui/miscdlgs/duplicaterecordsdlg.cxx b/sc/source/ui/miscdlgs/duplicaterecordsdlg.cxx index 0817d3a75914..c9881b209973 100644 --- a/sc/source/ui/miscdlgs/duplicaterecordsdlg.cxx +++ b/sc/source/ui/miscdlgs/duplicaterecordsdlg.cxx @@ -40,7 +40,7 @@ ScDuplicateRecordsDlg::ScDuplicateRecordsDlg(weld::Window* pParent, , m_xRadioRemove(m_xBuilder->weld_radio_button("remove")) , m_xCheckList(m_xBuilder->weld_tree_view("checklist")) , m_xAllChkBtn(m_xBuilder->weld_check_button("allcheckbtn")) - , m_xOkBtn(m_xBuilder->weld_button("okbtn")) + , m_xOkBtn(m_xBuilder->weld_button("ok")) , mrCellData(rData) , mrRange(rRange) , mrViewData(rViewData) @@ -133,7 +133,6 @@ void ScDuplicateRecordsDlg::InsertEntry(const OUString& rTxt, bool bToggle) const int nRow = m_xCheckList->n_children() - 1; m_xCheckList->set_toggle(nRow, bToggle ? TRISTATE_TRUE : TRISTATE_FALSE); m_xCheckList->set_text(nRow, rTxt, 0); - m_xCheckList->set_sensitive(m_xAllChkBtn->get_state() != TRISTATE_TRUE); } void ScDuplicateRecordsDlg::Init() @@ -171,7 +170,7 @@ void ScDuplicateRecordsDlg::Init() !officecfg::Office::Calc::Misc::HandleDuplicateRecords::RemoveRecords::get()); SetDialogLabels(); - m_xAllChkBtn->set_state(TRISTATE_FALSE); + m_xAllChkBtn->set_state(TRISTATE_TRUE); SetDialogData(true); } @@ -200,13 +199,18 @@ IMPL_LINK_NOARG(ScDuplicateRecordsDlg, RecordsChkHdl, const weld::TreeView::iter if (nRet == nTotalCount) m_xAllChkBtn->set_state(TRISTATE_TRUE); - else + else if (nRet == 0) m_xAllChkBtn->set_state(TRISTATE_FALSE); + else + m_xAllChkBtn->set_state(TRISTATE_INDET); } IMPL_LINK_NOARG(ScDuplicateRecordsDlg, AllCheckBtnHdl, weld::Toggleable&, void) { - SetDialogData(true); + if (m_xAllChkBtn->get_state() == TRISTATE_TRUE) + SetDialogData(true); + else + SetDialogData(false); } IMPL_LINK_NOARG(ScDuplicateRecordsDlg, OkHdl, weld::Button&, void) diff --git a/sc/source/ui/miscdlgs/sharedocdlg.cxx b/sc/source/ui/miscdlgs/sharedocdlg.cxx index 34044fa4f87d..072e83562707 100644 --- a/sc/source/ui/miscdlgs/sharedocdlg.cxx +++ b/sc/source/ui/miscdlgs/sharedocdlg.cxx @@ -49,20 +49,17 @@ IMPL_LINK(ScShareDocumentDlg, SizeAllocated, const Size&, rSize, void) } -ScShareDocumentDlg::ScShareDocumentDlg(weld::Window* pParent, const ScViewData* pViewData) +ScShareDocumentDlg::ScShareDocumentDlg(weld::Window* pParent, ScViewData& rViewData) : GenericDialogController(pParent, u"modules/scalc/ui/sharedocumentdlg.ui"_ustr, u"ShareDocumentDialog"_ustr) , m_aStrNoUserData(ScResId(STR_NO_USER_DATA_AVAILABLE)) , m_aStrUnknownUser(ScResId(STR_UNKNOWN_USER_CONFLICT)) , m_aStrExclusiveAccess(ScResId(STR_EXCLUSIVE_ACCESS)) - , mpDocShell(nullptr) + , mpDocShell(rViewData.GetDocShell()) , m_xCbShare(m_xBuilder->weld_check_button(u"share"_ustr)) , m_xFtWarning(m_xBuilder->weld_label(u"warning"_ustr)) , m_xLbUsers(m_xBuilder->weld_tree_view(u"users"_ustr)) { - - OSL_ENSURE( pViewData, "ScShareDocumentDlg CTOR: mpViewData is null!" ); - mpDocShell = ( pViewData ? pViewData->GetDocShell() : nullptr ); OSL_ENSURE( mpDocShell, "ScShareDocumentDlg CTOR: mpDocShell is null!" ); std::vector<int> aWidths diff --git a/sc/source/ui/navipi/navipi.cxx b/sc/source/ui/navipi/navipi.cxx index d75d7088e81c..dd3727ac8fc6 100644 --- a/sc/source/ui/navipi/navipi.cxx +++ b/sc/source/ui/navipi/navipi.cxx @@ -75,76 +75,56 @@ void ScNavigatorDlg::ReleaseFocus() namespace { - SCCOL NumToAlpha(const ScSheetLimits& rSheetLimits, SCCOL nColNo, OUString& rStr) + SCCOL NumToAlpha(const ScSheetLimits& rSheetLimits, SCCOL nColNo) { if ( nColNo > SCNAV_MAXCOL(rSheetLimits) ) nColNo = SCNAV_MAXCOL(rSheetLimits); else if ( nColNo < 1 ) nColNo = 1; - ::ScColToAlpha( rStr, nColNo - 1); - return nColNo; } - SCCOL AlphaToNum(const ScDocument& rDoc, OUString& rStr) + SCCOL AlphaToNum(const ScDocument& rDoc, const OUString& rStr) { SCCOL nColumn = 0; if ( CharClass::isAsciiAlpha( rStr) ) { - rStr = rStr.toAsciiUpperCase(); + const OUString aUpperCaseStr = rStr.toAsciiUpperCase(); - if (::AlphaToCol( rDoc, nColumn, rStr)) + if (::AlphaToCol( rDoc, nColumn, aUpperCaseStr)) ++nColumn; - if ( (rStr.getLength() > SCNAV_COLLETTERS(rDoc.GetSheetLimits())) || + if ( (aUpperCaseStr.getLength() > SCNAV_COLLETTERS(rDoc.GetSheetLimits())) || (nColumn > SCNAV_MAXCOL(rDoc.GetSheetLimits())) ) { nColumn = SCNAV_MAXCOL(rDoc.GetSheetLimits()); - NumToAlpha( rDoc.GetSheetLimits(), nColumn, rStr ); } } - else - rStr.clear(); - - return nColumn; - } - - SCCOL NumStrToAlpha(const ScSheetLimits& rSheetLimits, OUString& rStr) - { - SCCOL nColumn = 0; - - if ( CharClass::isAsciiNumeric(rStr) ) - nColumn = NumToAlpha( rSheetLimits, static_cast<SCCOL>(rStr.toInt32()), rStr ); - else - rStr.clear(); return nColumn; } } -IMPL_LINK(ScNavigatorDlg, ParseRowInputHdl, int*, result, bool) +IMPL_LINK(ScNavigatorDlg, ParseRowInputHdl, const OUString&, rStrCol, std::optional<int>) { SCCOL nCol(0); - OUString aStrCol = m_xEdCol->get_text(); - - if (!aStrCol.isEmpty()) + if (!rStrCol.isEmpty()) { if (ScViewData* pData = GetViewData()) { ScDocument& rDoc = pData->GetDocument(); - if ( CharClass::isAsciiNumeric(aStrCol) ) - nCol = NumStrToAlpha( rDoc.GetSheetLimits(), aStrCol ); + if ( CharClass::isAsciiNumeric(rStrCol) ) + nCol = NumToAlpha(rDoc.GetSheetLimits(), static_cast<SCCOL>(rStrCol.toInt32())); else - nCol = AlphaToNum( rDoc, aStrCol ); + nCol = AlphaToNum( rDoc, rStrCol ); } } - *result = nCol; - return true; + return std::optional<int>(nCol); } IMPL_LINK_NOARG(ScNavigatorDlg, ExecuteColHdl, weld::Entry&, bool) @@ -160,11 +140,9 @@ IMPL_LINK_NOARG(ScNavigatorDlg, ExecuteColHdl, weld::Entry&, bool) return true; } -IMPL_LINK_NOARG(ScNavigatorDlg, FormatRowOutputHdl, weld::SpinButton&, void) +IMPL_STATIC_LINK(ScNavigatorDlg, FormatRowOutputHdl, sal_Int64, nValue, OUString) { - OUString aStr; - ::ScColToAlpha(aStr, m_xEdCol->get_value() - 1); - m_xEdCol->set_text(aStr); + return ::ScColToAlpha(nValue - 1); } IMPL_LINK_NOARG(ScNavigatorDlg, ExecuteRowHdl, weld::Entry&, bool) @@ -365,8 +343,8 @@ ScNavigatorDlg::ScNavigatorDlg(SfxBindings* pB, weld::Widget* pParent, SfxNaviga m_xEdRow->connect_activate(LINK(this, ScNavigatorDlg, ExecuteRowHdl)); m_xEdCol->connect_activate(LINK(this, ScNavigatorDlg, ExecuteColHdl)); - m_xEdCol->connect_output(LINK(this, ScNavigatorDlg, FormatRowOutputHdl)); - m_xEdCol->connect_input(LINK(this, ScNavigatorDlg, ParseRowInputHdl)); + m_xEdCol->set_value_formatter(LINK(this, ScNavigatorDlg, FormatRowOutputHdl)); + m_xEdCol->set_text_parser(LINK(this, ScNavigatorDlg, ParseRowInputHdl)); m_xTbxCmd1->connect_clicked(LINK(this, ScNavigatorDlg, ToolBoxSelectHdl)); m_xTbxCmd2->connect_clicked(LINK(this, ScNavigatorDlg, ToolBoxSelectHdl)); diff --git a/sc/source/ui/pagedlg/areasdlg.cxx b/sc/source/ui/pagedlg/areasdlg.cxx index 57a93d4cd5f3..c9f38f784f7c 100644 --- a/sc/source/ui/pagedlg/areasdlg.cxx +++ b/sc/source/ui/pagedlg/areasdlg.cxx @@ -94,12 +94,12 @@ static void printAddressFlags(ScRefFlags nFlag) #endif -ScPrintAreasDlg::ScPrintAreasDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pParent) +ScPrintAreasDlg::ScPrintAreasDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pParent, ScViewData& rData) : ScAnyRefDlgController(pB, pCW, pParent, u"modules/scalc/ui/printareasdialog.ui"_ustr, u"PrintAreasDialog"_ustr) , bDlgLostFocus(false) - , pDoc(nullptr) - , pViewData(nullptr) - , nCurTab(0) + , rViewData(rData) + , rDoc(rViewData.GetDocument()) + , nCurTab(rViewData.GetTabNo()) , m_xLbPrintArea(m_xBuilder->weld_combo_box(u"lbprintarea"_ustr)) , m_xEdPrintArea(new formula::RefEdit(m_xBuilder->weld_entry(u"edprintarea"_ustr))) , m_xRbPrintArea(new formula::RefButton(m_xBuilder->weld_button(u"rbprintarea"_ustr))) @@ -128,18 +128,6 @@ ScPrintAreasDlg::ScPrintAreasDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Win m_xEdRepeatCol->SetReferences(this, m_xColFrameFT.get()); m_xRbRepeatCol->SetReferences(this, m_xEdRepeatCol.get()); - ScTabViewShell* pScViewSh = dynamic_cast<ScTabViewShell*>( SfxViewShell::Current() ); - ScDocShell* pScDocSh = dynamic_cast<ScDocShell*>(SfxObjectShell::Current()); - assert(pScDocSh && "Current DocumentShell not found :-("); - - pDoc = &pScDocSh->GetDocument(); - - if ( pScViewSh ) - { - pViewData = &pScViewSh->GetViewData(); - nCurTab = pViewData->GetTabNo(); - } - Impl_Reset(); //@BugID 54702 Enable/Disable only in base class @@ -172,11 +160,11 @@ void ScPrintAreasDlg::SetReference( const ScRange& rRef, ScDocument& /* rDoc */ RefInputStart( m_pRefInputEdit ); OUString aStr; - const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention(); + const formula::FormulaGrammar::AddressConvention eConv = rDoc.GetAddressConvention(); if (m_xEdPrintArea.get() == m_pRefInputEdit) { - aStr = rRef.Format(*pDoc, ScRefFlags::RANGE_ABS, eConv); + aStr = rRef.Format(rDoc, ScRefFlags::RANGE_ABS, eConv); OUString aVal = m_xEdPrintArea->GetText(); Selection aSel = m_xEdPrintArea->GetSelection(); aSel.Normalize(); @@ -188,7 +176,7 @@ void ScPrintAreasDlg::SetReference( const ScRange& rRef, ScDocument& /* rDoc */ else { bool bRow = ( m_xEdRepeatRow.get() == m_pRefInputEdit ); - lcl_GetRepeatRangeString(rRef, *pDoc, bRow, aStr); + lcl_GetRepeatRangeString(rRef, rDoc, bRow, aStr); m_pRefInputEdit->SetRefString( aStr ); } Impl_ModifyHdl( *m_pRefInputEdit ); @@ -235,8 +223,8 @@ void ScPrintAreasDlg::SetActive() void ScPrintAreasDlg::Impl_Reset() { OUString aStrRange; - std::optional<ScRange> oRepeatColRange = pDoc->GetRepeatColRange( nCurTab ); - std::optional<ScRange> oRepeatRowRange = pDoc->GetRepeatRowRange( nCurTab ); + std::optional<ScRange> oRepeatColRange = rDoc.GetRepeatColRange( nCurTab ); + std::optional<ScRange> oRepeatRowRange = rDoc.GetRepeatRowRange( nCurTab ); m_xEdPrintArea->SetModifyHdl (LINK( this, ScPrintAreasDlg, Impl_ModifyHdl)); m_xEdRepeatRow->SetModifyHdl (LINK( this, ScPrintAreasDlg, Impl_ModifyHdl)); @@ -258,35 +246,35 @@ void ScPrintAreasDlg::Impl_Reset() // printing area aStrRange.clear(); - const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention(); + const formula::FormulaGrammar::AddressConvention eConv = rDoc.GetAddressConvention(); const sal_Unicode sep = ScCompiler::GetNativeSymbolChar(ocSep); - sal_uInt16 nRangeCount = pDoc->GetPrintRangeCount( nCurTab ); + sal_uInt16 nRangeCount = rDoc.GetPrintRangeCount( nCurTab ); for (sal_uInt16 i=0; i<nRangeCount; i++) { - const ScRange* pPrintRange = pDoc->GetPrintRange( nCurTab, i ); + const ScRange* pPrintRange = rDoc.GetPrintRange( nCurTab, i ); if (pPrintRange) { if ( !aStrRange.isEmpty() ) aStrRange += OUStringChar(sep); - aStrRange += pPrintRange->Format(*pDoc, ScRefFlags::RANGE_ABS, eConv); + aStrRange += pPrintRange->Format(rDoc, ScRefFlags::RANGE_ABS, eConv); } } m_xEdPrintArea->SetText( aStrRange ); // repeat row - lcl_GetRepeatRangeString(oRepeatRowRange, *pDoc, true, aStrRange); + lcl_GetRepeatRangeString(oRepeatRowRange, rDoc, true, aStrRange); m_xEdRepeatRow->SetText( aStrRange ); // repeat column - lcl_GetRepeatRangeString(oRepeatColRange, *pDoc, false, aStrRange); + lcl_GetRepeatRangeString(oRepeatColRange, rDoc, false, aStrRange); m_xEdRepeatCol->SetText( aStrRange ); Impl_ModifyHdl( *m_xEdPrintArea ); Impl_ModifyHdl( *m_xEdRepeatRow ); Impl_ModifyHdl( *m_xEdRepeatCol ); - if( pDoc->IsPrintEntireSheet( nCurTab ) ) + if( rDoc.IsPrintEntireSheet( nCurTab ) ) m_xLbPrintArea->set_active(SC_AREASDLG_PR_ENTIRE); m_xEdPrintArea->SaveValue(); // save for FillItemSet(): @@ -302,9 +290,9 @@ bool ScPrintAreasDlg::Impl_GetItem( const formula::RefEdit* pEd, SfxStringItem& if ( !aRangeStr.isEmpty() && m_xEdPrintArea.get() != pEd ) { ScRange aRange; - const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention(); - lcl_CheckRepeatString(aRangeStr, *pDoc, m_xEdRepeatRow.get() == pEd, &aRange); - aRangeStr = aRange.Format(*pDoc, ScRefFlags::RANGE_ABS, eConv); + const formula::FormulaGrammar::AddressConvention eConv = rDoc.GetAddressConvention(); + lcl_CheckRepeatString(aRangeStr, rDoc, m_xEdRepeatRow.get() == pEd, &aRange); + aRangeStr = aRange.Format(rDoc, ScRefFlags::RANGE_ABS, eConv); } rItem.SetValue( aRangeStr ); @@ -324,7 +312,7 @@ bool ScPrintAreasDlg::Impl_CheckRefStrings() { const ScRefFlags nValidAddr = ScRefFlags::VALID | ScRefFlags::ROW_VALID | ScRefFlags::COL_VALID; const ScRefFlags nValidRange = nValidAddr | ScRefFlags::ROW2_VALID | ScRefFlags::COL2_VALID; - const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention(); + const formula::FormulaGrammar::AddressConvention eConv = rDoc.GetAddressConvention(); const sal_Unicode sep = ScCompiler::GetNativeSymbolChar(ocSep); ScAddress aAddr; @@ -332,10 +320,10 @@ bool ScPrintAreasDlg::Impl_CheckRefStrings() for ( sal_Int32 nIdx = 0; nIdx >= 0; ) { const OUString aOne = aStrPrintArea.getToken(0, sep, nIdx); - ScRefFlags nResult = aRange.Parse( aOne, *pDoc, eConv ); + ScRefFlags nResult = aRange.Parse( aOne, rDoc, eConv ); if ((nResult & nValidRange) != nValidRange) { - ScRefFlags nAddrResult = aAddr.Parse( aOne, *pDoc, eConv ); + ScRefFlags nAddrResult = aAddr.Parse( aOne, rDoc, eConv ); if ((nAddrResult & nValidAddr) != nValidAddr) { bPrintAreaOk = false; @@ -347,11 +335,11 @@ bool ScPrintAreasDlg::Impl_CheckRefStrings() bool bRepeatRowOk = aStrRepeatRow.isEmpty(); if ( !bRepeatRowOk ) - bRepeatRowOk = lcl_CheckRepeatString(aStrRepeatRow, *pDoc, true, nullptr); + bRepeatRowOk = lcl_CheckRepeatString(aStrRepeatRow, rDoc, true, nullptr); bool bRepeatColOk = aStrRepeatCol.isEmpty(); if ( !bRepeatColOk ) - bRepeatColOk = lcl_CheckRepeatString(aStrRepeatCol, *pDoc, false, nullptr); + bRepeatColOk = lcl_CheckRepeatString(aStrRepeatCol, rDoc, false, nullptr); // error messages @@ -385,25 +373,24 @@ void ScPrintAreasDlg::Impl_FillLists() OUString aStrRange; bool bSimple = true; - if ( pViewData ) - bSimple = (pViewData->GetSimpleArea( aRange ) == SC_MARK_SIMPLE); + bSimple = (rViewData.GetSimpleArea( aRange ) == SC_MARK_SIMPLE); - formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention(); + formula::FormulaGrammar::AddressConvention eConv = rDoc.GetAddressConvention(); if ( bSimple ) - aStrRange = aRange.Format(*pDoc, ScRefFlags::RANGE_ABS, eConv); + aStrRange = aRange.Format(rDoc, ScRefFlags::RANGE_ABS, eConv); else { ScRangeListRef aList( new ScRangeList ); - pViewData->GetMarkData().FillRangeListWithMarks( aList.get(), false ); - aList->Format(aStrRange, ScRefFlags::RANGE_ABS, *pDoc, eConv); + rViewData.GetMarkData().FillRangeListWithMarks( aList.get(), false ); + aList->Format(aStrRange, ScRefFlags::RANGE_ABS, rDoc, eConv); } m_xLbPrintArea->set_id(SC_AREASDLG_PR_SELECT, aStrRange); // Get ranges and remember in ListBoxen - ScRangeName* pRangeNames = pDoc->GetRangeName(); + ScRangeName* pRangeNames = rDoc.GetRangeName(); if (!pRangeNames || pRangeNames->empty()) // No range names to process. @@ -418,23 +405,23 @@ void ScPrintAreasDlg::Impl_FillLists() OUString aName = rEntry.second->GetName(); OUString aSymbol = rEntry.second->GetSymbol(); - if (aRange.ParseAny(aSymbol, *pDoc, eConv) & ScRefFlags::VALID) + if (aRange.ParseAny(aSymbol, rDoc, eConv) & ScRefFlags::VALID) { if (rEntry.second->HasType(ScRangeData::Type::PrintArea)) { - aSymbol = aRange.Format(*pDoc, ScRefFlags::RANGE_ABS, eConv); + aSymbol = aRange.Format(rDoc, ScRefFlags::RANGE_ABS, eConv); m_xLbPrintArea->append(aSymbol, aName); } if (rEntry.second->HasType(ScRangeData::Type::RowHeader)) { - lcl_GetRepeatRangeString(aRange, *pDoc, true, aSymbol); + lcl_GetRepeatRangeString(aRange, rDoc, true, aSymbol); m_xLbRepeatRow->append(aSymbol, aName); } if (rEntry.second->HasType(ScRangeData::Type::ColHeader)) { - lcl_GetRepeatRangeString(aRange, *pDoc, false, aSymbol); + lcl_GetRepeatRangeString(aRange, rDoc, false, aSymbol); m_xLbRepeatCol->append(aSymbol, aName); } } @@ -459,7 +446,7 @@ IMPL_LINK(ScPrintAreasDlg, Impl_BtnHdl, weld::Button&, rBtn, void) bool bEntireSheet = (m_xLbPrintArea->get_active() == SC_AREASDLG_PR_ENTIRE); SfxBoolItem aEntireSheet( FN_PARAM_4, bEntireSheet ); - bool bDataChanged = bEntireSheet != pDoc->IsPrintEntireSheet( nCurTab ); + bool bDataChanged = bEntireSheet != rDoc.IsPrintEntireSheet( nCurTab ); if( !bEntireSheet ) { // if new list box selection is not "Entire sheet", get the edit field contents diff --git a/sc/source/ui/pagedlg/tphfedit.cxx b/sc/source/ui/pagedlg/tphfedit.cxx index 617f2208a9f9..5a98e65dd3fd 100644 --- a/sc/source/ui/pagedlg/tphfedit.cxx +++ b/sc/source/ui/pagedlg/tphfedit.cxx @@ -144,23 +144,23 @@ std::unique_ptr<EditTextObject> ScEditWindow::CreateTextObject() void ScEditWindow::SetFont( const ScPatternAttr& rPattern ) { - auto pSet = std::make_unique<SfxItemSet>( m_xEditEngine->GetEmptyItemSet() ); - rPattern.FillEditItemSet( pSet.get() ); + SfxItemSet aSet( m_xEditEngine->GetEmptyItemSet() ); + rPattern.FillEditItemSet( &aSet ); // FillEditItemSet adjusts font height to 1/100th mm, // but for header/footer twips is needed, as in the PatternAttr: - pSet->Put( rPattern.GetItem(ATTR_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT) ); - pSet->Put( rPattern.GetItem(ATTR_CJK_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CJK) ); - pSet->Put( rPattern.GetItem(ATTR_CTL_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CTL) ); + aSet.Put( rPattern.GetItem(ATTR_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT) ); + aSet.Put( rPattern.GetItem(ATTR_CJK_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CJK) ); + aSet.Put( rPattern.GetItem(ATTR_CTL_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CTL) ); // font color used, suitable header/footer background color set in ScEditWindow::SetDrawingArea Color aFgColor = svtools::ColorConfig().GetColorValue(svtools::FONTCOLOR, false).nColor; if (aFgColor == COL_AUTO) { Color aBgColor = svtools::ColorConfig().GetColorValue(svtools::DOCCOLOR).nColor; aFgColor = aBgColor.IsDark() ? COL_WHITE : COL_BLACK; } - pSet->Put(SvxColorItem(aFgColor, EE_CHAR_COLOR)); + aSet.Put(SvxColorItem(aFgColor, EE_CHAR_COLOR)); if (mbRTL) - pSet->Put( SvxAdjustItem( SvxAdjust::Right, EE_PARA_JUST ) ); - GetEditEngine()->SetDefaults( std::move(pSet) ); + aSet.Put( SvxAdjustItem( SvxAdjust::Right, EE_PARA_JUST ) ); + GetEditEngine()->SetDefaults( std::move(aSet) ); } void ScEditWindow::SetText( const EditTextObject& rTextObject ) diff --git a/sc/source/ui/undo/UndoInsertSparkline.cxx b/sc/source/ui/undo/UndoInsertSparkline.cxx index 708f3d746f91..ee2dfe2ba312 100644 --- a/sc/source/ui/undo/UndoInsertSparkline.cxx +++ b/sc/source/ui/undo/UndoInsertSparkline.cxx @@ -39,10 +39,19 @@ void UndoInsertSparkline::Undo() for (auto const& rSparklineData : maSparklineDataVector) { rDocument.DeleteSparkline(rSparklineData.maPosition); - aRanges.push_back(ScRange(rSparklineData.maPosition)); + + ScRange aCurrRange(rSparklineData.maPosition); + + if (aCurrRange.aStart == aCurrRange.aEnd + && rDocument.HasAttrib(aCurrRange, HasAttrFlags::Merged)) + { + rDocument.ExtendMerge(aCurrRange); + } + + aRanges.push_back(aCurrRange); } - pDocShell->PostPaint(aRanges, PaintPartFlags::All); + pDocShell->PostPaint(aRanges, PaintPartFlags::All, SC_PF_TESTMERGE); EndUndo(); } @@ -57,10 +66,19 @@ void UndoInsertSparkline::Redo() { auto* pCreated = rDocument.CreateSparkline(rSparklineData.maPosition, mpSparklineGroup); pCreated->setInputRange(rSparklineData.maData); - aRanges.push_back(ScRange(rSparklineData.maPosition)); + + ScRange aCurrRange(rSparklineData.maPosition); + + if (aCurrRange.aStart == aCurrRange.aEnd + && rDocument.HasAttrib(aCurrRange, HasAttrFlags::Merged)) + { + rDocument.ExtendMerge(aCurrRange); + } + + aRanges.push_back(aCurrRange); } - pDocShell->PostPaint(aRanges, PaintPartFlags::All); + pDocShell->PostPaint(aRanges, PaintPartFlags::All, SC_PF_TESTMERGE); EndRedo(); } diff --git a/sc/source/ui/undo/undoblk.cxx b/sc/source/ui/undo/undoblk.cxx index f5b3124c8795..3b844b9509d0 100644 --- a/sc/source/ui/undo/undoblk.cxx +++ b/sc/source/ui/undo/undoblk.cxx @@ -1645,7 +1645,7 @@ void ScUndoConditionalFormat::Redo() DoChange(mpRedoDoc.get()); } -void ScUndoConditionalFormat::DoChange(ScDocument* pSrcDoc) +void ScUndoConditionalFormat::DoChange(const ScDocument* pSrcDoc) { ScDocument& rDoc = pDocShell->GetDocument(); diff --git a/sc/source/ui/unoobj/PivotTableDataProvider.cxx b/sc/source/ui/unoobj/PivotTableDataProvider.cxx index cbd7ebbecda5..0083cbdeabf8 100644 --- a/sc/source/ui/unoobj/PivotTableDataProvider.cxx +++ b/sc/source/ui/unoobj/PivotTableDataProvider.cxx @@ -575,27 +575,23 @@ void PivotTableDataProvider::collectPivotTableData() m_bNeedsUpdate = false; } -uno::Reference<chart2::data::XDataSequence> +rtl::Reference<PivotTableDataSequence> PivotTableDataProvider::assignValuesToDataSequence(size_t nIndex) { - uno::Reference<chart2::data::XDataSequence> xDataSequence; if (nIndex >= m_aDataRowVector.size()) - return xDataSequence; + return nullptr; OUString sDataID = lcl_identifierForData(nIndex); std::vector<ValueAndFormat> const & rRowOfData = m_aDataRowVector[nIndex]; rtl::Reference<PivotTableDataSequence> pSequence(new PivotTableDataSequence(m_pDocument, sDataID, std::vector(rRowOfData))); pSequence->setRole(u"values-y"_ustr); - xDataSequence = pSequence; - return xDataSequence; + return pSequence; } -uno::Reference<chart2::data::XDataSequence> +rtl::Reference<PivotTableDataSequence> PivotTableDataProvider::assignLabelsToDataSequence(size_t nIndex) { - uno::Reference<chart2::data::XDataSequence> xDataSequence; - OUString sLabelID = lcl_identifierForLabel(nIndex); OUStringBuffer aLabel; @@ -626,26 +622,21 @@ PivotTableDataProvider::assignLabelsToDataSequence(size_t nIndex) rtl::Reference<PivotTableDataSequence> pSequence(new PivotTableDataSequence(m_pDocument, std::move(sLabelID), std::move(aLabelVector))); pSequence->setRole(u"values-y"_ustr); - xDataSequence = pSequence; - return xDataSequence; + return pSequence; } -css::uno::Reference<css::chart2::data::XDataSequence> +rtl::Reference<PivotTableDataSequence> PivotTableDataProvider::assignFirstCategoriesToDataSequence() { - uno::Reference<chart2::data::XDataSequence> xDataSequence; - if (m_aCategoriesColumnOrientation.empty()) - return xDataSequence; + return nullptr; std::vector<ValueAndFormat> const & rCategories = m_aCategoriesColumnOrientation.back(); rtl::Reference<PivotTableDataSequence> pSequence(new PivotTableDataSequence(m_pDocument, lcl_identifierForCategories(), std::vector(rCategories))); pSequence->setRole(u"categories"_ustr); - xDataSequence = pSequence; - - return xDataSequence; + return pSequence; } uno::Reference<chart2::data::XDataSource> diff --git a/sc/source/ui/unoobj/TablePivotCharts.cxx b/sc/source/ui/unoobj/TablePivotCharts.cxx index c08c5aa78bc4..688d872ef864 100644 --- a/sc/source/ui/unoobj/TablePivotCharts.cxx +++ b/sc/source/ui/unoobj/TablePivotCharts.cxx @@ -128,8 +128,6 @@ void SAL_CALL TablePivotCharts::addNewByName(OUString const & rName, rtl::Reference<sc::PivotTableDataProvider> pPivotTableDataProvider(new sc::PivotTableDataProvider(rDoc)); pPivotTableDataProvider->setPivotTableName(rDataPilotName); - uno::Reference<chart2::data::XDataProvider> xDataProvider(pPivotTableDataProvider); - uno::Reference<chart2::data::XDataReceiver> xReceiver; if (xObject.is()) @@ -137,7 +135,7 @@ void SAL_CALL TablePivotCharts::addNewByName(OUString const & rName, if (xReceiver.is()) { - xReceiver->attachDataProvider(xDataProvider); + xReceiver->attachDataProvider(uno::Reference<chart2::data::XDataProvider>(pPivotTableDataProvider)); uno::Reference<util::XNumberFormatsSupplier> xNumberFormatsSupplier(cppu::getXWeak(m_pDocShell->GetModel()), uno::UNO_QUERY); xReceiver->attachNumberFormatsSupplier(xNumberFormatsSupplier); diff --git a/sc/source/ui/unoobj/afmtuno.cxx b/sc/source/ui/unoobj/afmtuno.cxx index bd1776fd0760..696fc32815c8 100644 --- a/sc/source/ui/unoobj/afmtuno.cxx +++ b/sc/source/ui/unoobj/afmtuno.cxx @@ -275,10 +275,10 @@ sal_Int32 SAL_CALL ScAutoFormatsObj::getCount() uno::Any SAL_CALL ScAutoFormatsObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference< container::XNamed > xFormat(GetObjectByIndex_Impl(static_cast<sal_uInt16>(nIndex))); + rtl::Reference< ScAutoFormatObj > xFormat(GetObjectByIndex_Impl(static_cast<sal_uInt16>(nIndex))); if (!xFormat.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xFormat); + return uno::Any(uno::Reference< container::XNamed >(xFormat)); } uno::Type SAL_CALL ScAutoFormatsObj::getElementType() @@ -297,10 +297,10 @@ sal_Bool SAL_CALL ScAutoFormatsObj::hasElements() uno::Any SAL_CALL ScAutoFormatsObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - uno::Reference< container::XNamed > xFormat(GetObjectByName_Impl(aName)); + rtl::Reference< ScAutoFormatObj > xFormat(GetObjectByName_Impl(aName)); if (!xFormat.is()) throw container::NoSuchElementException(); - return uno::Any(xFormat); + return uno::Any(uno::Reference< container::XNamed >(xFormat)); } uno::Sequence<OUString> SAL_CALL ScAutoFormatsObj::getElementNames() diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index 5bacf8a856b8..a7818ad31b9e 100644 --- a/sc/source/ui/unoobj/cellsuno.cxx +++ b/sc/source/ui/unoobj/cellsuno.cxx @@ -4398,11 +4398,11 @@ sal_Int32 SAL_CALL ScCellRangesObj::getCount() uno::Any SAL_CALL ScCellRangesObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<table::XCellRange> xRange(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScCellRangeObj> xRange(GetObjectByIndex_Impl(nIndex)); if (!xRange.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xRange); + return uno::Any(uno::Reference<table::XCellRange>(xRange)); } @@ -4508,6 +4508,12 @@ uno::Reference<table::XCell> SAL_CALL ScCellRangeObj::getCellByPosition( uno::Reference<table::XCellRange> SAL_CALL ScCellRangeObj::getCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom ) { + return getScCellRangeByPosition(nLeft, nTop, nRight, nBottom); +} + +rtl::Reference<ScCellRangeObj> ScCellRangeObj::getScCellRangeByPosition( + sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom ) +{ SolarMutexGuard aGuard; ScDocShell* pDocSh = GetDocShell(); @@ -4533,6 +4539,33 @@ uno::Reference<table::XCellRange> SAL_CALL ScCellRangeObj::getCellRangeByPositio throw lang::IndexOutOfBoundsException(); } +rtl::Reference<ScTableRowsObj> ScCellRangeObj::getScRowsByPosition(SolarMutexGuard& /*rGuard*/, + sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom ) +{ + ScDocShell* pDocSh = GetDocShell(); + if (!pDocSh) + throw uno::RuntimeException(); + + if ( nLeft >= 0 && nTop >= 0 && nRight >= 0 && nBottom >= 0 ) + { + sal_Int32 nStartX = aRange.aStart.Col() + nLeft; + sal_Int32 nStartY = aRange.aStart.Row() + nTop; + sal_Int32 nEndX = aRange.aStart.Col() + nRight; + sal_Int32 nEndY = aRange.aStart.Row() + nBottom; + + if ( nStartX <= nEndX && nEndX <= aRange.aEnd.Col() && + nStartY <= nEndY && nEndY <= aRange.aEnd.Row() ) + { + ScRange aNew( static_cast<SCCOL>(nStartX), static_cast<SCROW>(nStartY), aRange.aStart.Tab(), + static_cast<SCCOL>(nEndX), static_cast<SCROW>(nEndY), aRange.aEnd.Tab() ); + return new ScTableRowsObj( pDocSh, aNew.aStart.Tab(), + aNew.aStart.Row(), aNew.aEnd.Row() ); + } + } + + throw lang::IndexOutOfBoundsException(); +} + uno::Reference<table::XCellRange> SAL_CALL ScCellRangeObj::getCellRangeByName( const OUString& aName ) { @@ -4605,6 +4638,11 @@ uno::Reference<table::XTableColumns> SAL_CALL ScCellRangeObj::getColumns() uno::Reference<table::XTableRows> SAL_CALL ScCellRangeObj::getRows() { + return getScRows(); +} + +rtl::Reference<ScTableRowsObj> ScCellRangeObj::getScRows() +{ SolarMutexGuard aGuard; ScDocShell* pDocSh = GetDocShell(); if (pDocSh) @@ -8575,11 +8613,11 @@ uno::Any SAL_CALL ScCellFormatsObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<table::XCellRange> xRange(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScCellRangeObj> xRange(GetObjectByIndex_Impl(nIndex)); if (!xRange.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xRange); + return uno::Any(uno::Reference<table::XCellRange>(xRange)); } diff --git a/sc/source/ui/unoobj/chartuno.cxx b/sc/source/ui/unoobj/chartuno.cxx index c0d88b031789..1e61358bf429 100644 --- a/sc/source/ui/unoobj/chartuno.cxx +++ b/sc/source/ui/unoobj/chartuno.cxx @@ -325,11 +325,11 @@ sal_Int32 SAL_CALL ScChartsObj::getCount() uno::Any SAL_CALL ScChartsObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<table::XTableChart> xChart(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScChartObj> xChart(GetObjectByIndex_Impl(nIndex)); if (!xChart.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xChart); + return uno::Any(uno::Reference<table::XTableChart>(xChart)); } uno::Type SAL_CALL ScChartsObj::getElementType() @@ -346,11 +346,11 @@ sal_Bool SAL_CALL ScChartsObj::hasElements() uno::Any SAL_CALL ScChartsObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - uno::Reference<table::XTableChart> xChart(GetObjectByName_Impl(aName)); + rtl::Reference<ScChartObj> xChart(GetObjectByName_Impl(aName)); if (!xChart.is()) throw container::NoSuchElementException(); - return uno::Any(xChart); + return uno::Any(uno::Reference<table::XTableChart>(xChart)); } uno::Sequence<OUString> SAL_CALL ScChartsObj::getElementNames() diff --git a/sc/source/ui/unoobj/dapiuno.cxx b/sc/source/ui/unoobj/dapiuno.cxx index e8ace63308bd..a1d59b5faa87 100644 --- a/sc/source/ui/unoobj/dapiuno.cxx +++ b/sc/source/ui/unoobj/dapiuno.cxx @@ -490,10 +490,10 @@ sal_Int32 SAL_CALL ScDataPilotTablesObj::getCount() Any SAL_CALL ScDataPilotTablesObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - Reference<XDataPilotTable2> xTable(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScDataPilotTableObj> xTable(GetObjectByIndex_Impl(nIndex)); if (!xTable.is()) throw IndexOutOfBoundsException(); - return Any( xTable ); + return Any( Reference<XDataPilotTable2>(xTable) ); } uno::Type SAL_CALL ScDataPilotTablesObj::getElementType() @@ -512,10 +512,10 @@ sal_Bool SAL_CALL ScDataPilotTablesObj::hasElements() Any SAL_CALL ScDataPilotTablesObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - Reference<XDataPilotTable2> xTable(GetObjectByName_Impl(aName)); + rtl::Reference<ScDataPilotTableObj> xTable(GetObjectByName_Impl(aName)); if (!xTable.is()) throw NoSuchElementException(); - return Any( xTable ); + return Any( Reference<XDataPilotTable2>(xTable) ); } Sequence<OUString> SAL_CALL ScDataPilotTablesObj::getElementNames() @@ -1559,10 +1559,10 @@ sal_Int32 SAL_CALL ScDataPilotFieldsObj::getCount() Any SAL_CALL ScDataPilotFieldsObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - Reference< XPropertySet > xField( GetObjectByIndex_Impl( nIndex ) ); + rtl::Reference< ScDataPilotFieldObj > xField( GetObjectByIndex_Impl( nIndex ) ); if (!xField.is()) throw IndexOutOfBoundsException(); - return Any( xField ); + return Any( Reference< XPropertySet >(xField) ); } // XElementAccess @@ -1583,10 +1583,10 @@ sal_Bool SAL_CALL ScDataPilotFieldsObj::hasElements() Any SAL_CALL ScDataPilotFieldsObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - Reference<XPropertySet> xField(GetObjectByName_Impl(aName)); + rtl::Reference<ScDataPilotFieldObj> xField(GetObjectByName_Impl(aName)); if (!xField.is()) throw NoSuchElementException(); - return Any( xField ); + return Any( Reference<XPropertySet>(xField) ); } Sequence<OUString> SAL_CALL ScDataPilotFieldsObj::getElementNames() diff --git a/sc/source/ui/unoobj/datauno.cxx b/sc/source/ui/unoobj/datauno.cxx index 99cb53d48222..5a8e16395f3c 100644 --- a/sc/source/ui/unoobj/datauno.cxx +++ b/sc/source/ui/unoobj/datauno.cxx @@ -587,11 +587,11 @@ sal_Int32 SAL_CALL ScSubTotalDescriptorBase::getCount() uno::Any SAL_CALL ScSubTotalDescriptorBase::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XSubTotalField> xField(GetObjectByIndex_Impl(static_cast<sal_uInt16>(nIndex))); + rtl::Reference<ScSubTotalFieldObj> xField(GetObjectByIndex_Impl(static_cast<sal_uInt16>(nIndex))); if (!xField.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xField); + return uno::Any(uno::Reference<sheet::XSubTotalField>(xField)); } uno::Type SAL_CALL ScSubTotalDescriptorBase::getElementType() @@ -2187,11 +2187,11 @@ uno::Any SAL_CALL ScDatabaseRangesObj::getByIndex( sal_Int32 nIndex ) if (nIndex < 0) throw lang::IndexOutOfBoundsException(); - uno::Reference<sheet::XDatabaseRange> xRange(GetObjectByIndex_Impl(static_cast<size_t>(nIndex))); + rtl::Reference<ScDatabaseRangeObj> xRange(GetObjectByIndex_Impl(static_cast<size_t>(nIndex))); if (!xRange.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xRange); + return uno::Any(uno::Reference<sheet::XDatabaseRange>(xRange)); } uno::Type SAL_CALL ScDatabaseRangesObj::getElementType() @@ -2210,11 +2210,11 @@ sal_Bool SAL_CALL ScDatabaseRangesObj::hasElements() uno::Any SAL_CALL ScDatabaseRangesObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XDatabaseRange> xRange(GetObjectByName_Impl(aName)); + rtl::Reference<ScDatabaseRangeObj> xRange(GetObjectByName_Impl(aName)); if (!xRange.is()) throw container::NoSuchElementException(); - return uno::Any(xRange); + return uno::Any(uno::Reference<sheet::XDatabaseRange>(xRange)); } uno::Sequence<OUString> SAL_CALL ScDatabaseRangesObj::getElementNames() diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index 06e8f47a6b9c..3b8927d84d11 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -503,7 +503,7 @@ void ScModelObj::RepaintRange( const ScRangeList& rRange ) pDocShell->PostPaint(rRange, PaintPartFlags::Grid, SC_PF_TESTMERGE); } -static OString getTabViewRenderState(ScTabViewShell& rTabViewShell) +static OString getTabViewRenderState(const ScTabViewShell& rTabViewShell) { OStringBuffer aState; const ScViewRenderingOptions& rViewRenderingOptions = rTabViewShell.GetViewRenderingData(); @@ -1103,8 +1103,11 @@ void ScModelObj::setClientZoom(int nTilePixelWidth_, int nTilePixelHeight_, int pHdl->SetRefScale(pViewData->GetZoomX(), pViewData->GetZoomY()); // refresh our view's take on other view's cursors & selections - pViewData->GetActiveWin()->updateKitOtherCursors(); - pViewData->GetActiveWin()->updateOtherKitSelections(); + ScGridWindow* pGridWindow = pViewData->GetActiveWin(); + pGridWindow->UpdateEditViewPos(); + pGridWindow->updateKitOtherCursors(); + pGridWindow->updateOtherKitSelections(); + pGridWindow->resetCachedViewGridOffsets(); if (ScDrawView* pDrawView = pViewData->GetScDrawView()) pDrawView->resetGridOffsetsForAllSdrPageViews(); @@ -1527,6 +1530,11 @@ void ScModelObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) uno::Reference<sheet::XSpreadsheets> SAL_CALL ScModelObj::getSheets() { + return getScSheets(); +} + +rtl::Reference<ScTableSheetsObj> ScModelObj::getScSheets() +{ SolarMutexGuard aGuard; if (pDocShell) return new ScTableSheetsObj(pDocShell); @@ -1862,7 +1870,6 @@ sal_Int32 SAL_CALL ScModelObj::getRendererCount(const uno::Any& aSelection, return 0; Size aPrintPageSize; - bool bPrintAreaReset = false; bool bPrintPageLandscape = false; bool bUsePrintDialogSetting = false; Printer* pPrinter = lcl_GetPrinter(rOptions); @@ -1874,16 +1881,13 @@ sal_Int32 SAL_CALL ScModelObj::getRendererCount(const uno::Any& aSelection, bPrintPageLandscape = (pPrinter->GetOrientation() == Orientation::Landscape); aPrintPageSize = lcl_GetPrintPageSize(pPrinter->GetPrintPageSize()); } - else // reset the print area created by the Print Dialog to the page style's print area. - bPrintAreaReset = pPrinter->IsPrintAreaReset(); } // The same ScPrintFuncCache object in pPrintFuncCache is used as long as // the same selection is used (aStatus) and the document isn't changed // (pPrintFuncCache is cleared in Notify handler) - if (!pPrintFuncCache || !pPrintFuncCache->IsSameSelection(aStatus) || bUsePrintDialogSetting - || bPrintAreaReset) + if (!pPrintFuncCache || !pPrintFuncCache->IsSameSelection(aStatus) || bUsePrintDialogSetting) { pPrintFuncCache.reset(new ScPrintFuncCache(pDocShell, aMark, std::move(aStatus), aPrintPageSize, bPrintPageLandscape, bUsePrintDialogSetting)); @@ -2371,7 +2375,7 @@ static void lcl_PDFExportBookmarkHelper(OutputDevice* pDev, ScDocument& rDoc, } static void lcl_SetMediaScreen(const uno::Reference<drawing::XShape>& xMediaShape, - const OutputDevice* pDev, tools::Rectangle& aRect, + const OutputDevice* pDev, const tools::Rectangle& aRect, sal_Int32 nPageNumb) { OUString sMediaURL; @@ -2685,7 +2689,7 @@ void SAL_CALL ScModelObj::render( sal_Int32 nSelRenderer, const uno::Any& aSelec // The bMetaFile argument maybe could be // pDev->GetConnectMetaFile() != nullptr // but for some yet unknown reason does not draw cell content if true. - ScPrintFunc::DrawToDev( rDoc, pDev, nPrintFactor, aBound, &aViewData, false /*bMetaFile*/ ); + ScPrintFunc::DrawToDev( rDoc, pDev, nPrintFactor, aBound, aViewData, false /*bMetaFile*/ ); return; } @@ -2783,6 +2787,19 @@ void SAL_CALL ScModelObj::render( sal_Int32 nSelRenderer, const uno::Any& aSelec (void)pPrintFunc->DoPrint( aPage, nTabStart, nDisplayStart, true, nullptr ); + if (pPrinter) + { + // reset the print area created by the Print Dialog to the page style's print area + if (pPrinter->IsUsePrintDialogSetting()) + { + bUsePrintDialogSetting = false; + if (m_pPrintState && m_pPrintState->nPrintTab == nTab && !pSelRange) + pPrintFunc.reset(new ScPrintFunc(pDev, pDocShell, *m_pPrintState, + &aStatus.GetOptions(), aPrintPageSize, + bPrintPageLandscape, bUsePrintDialogSetting)); + } + } + vcl::PDFExtOutDevData* pPDFData = dynamic_cast<vcl::PDFExtOutDevData*>(pDev->GetExtOutDevData()); if (pPDFData && pPDFData->GetIsExportTaggedPDF() && bIsLastPage) { @@ -4173,7 +4190,7 @@ void ScTableSheetsObj::Notify( SfxBroadcaster&, const SfxHint& rHint ) // XSpreadsheets -rtl::Reference<ScTableSheetObj> ScTableSheetsObj::GetObjectByIndex_Impl(sal_Int32 nIndex) const +rtl::Reference<ScTableSheetObj> ScTableSheetsObj::GetSheetByIndex(sal_Int32 nIndex) const { if ( pDocShell && nIndex >= 0 && nIndex < pDocShell->GetDocument().GetTableCount() ) return new ScTableSheetObj( pDocShell, static_cast<SCTAB>(nIndex) ); @@ -4392,7 +4409,7 @@ sal_Int32 ScTableSheetsObj::importSheet( uno::Reference< table::XCell > SAL_CALL ScTableSheetsObj::getCellByPosition( sal_Int32 nColumn, sal_Int32 nRow, sal_Int32 nSheet ) { SolarMutexGuard aGuard; - rtl::Reference<ScTableSheetObj> xSheet = GetObjectByIndex_Impl(static_cast<sal_uInt16>(nSheet)); + rtl::Reference<ScTableSheetObj> xSheet = GetSheetByIndex(static_cast<sal_uInt16>(nSheet)); if (! xSheet.is()) throw lang::IndexOutOfBoundsException(); @@ -4402,7 +4419,7 @@ uno::Reference< table::XCell > SAL_CALL ScTableSheetsObj::getCellByPosition( sal uno::Reference< table::XCellRange > SAL_CALL ScTableSheetsObj::getCellRangeByPosition( sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom, sal_Int32 nSheet ) { SolarMutexGuard aGuard; - rtl::Reference<ScTableSheetObj> xSheet = GetObjectByIndex_Impl(static_cast<sal_uInt16>(nSheet)); + rtl::Reference<ScTableSheetObj> xSheet = GetSheetByIndex(static_cast<sal_uInt16>(nSheet)); if (! xSheet.is()) throw lang::IndexOutOfBoundsException(); @@ -4455,11 +4472,11 @@ sal_Int32 SAL_CALL ScTableSheetsObj::getCount() uno::Any SAL_CALL ScTableSheetsObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XSpreadsheet> xSheet(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScTableSheetObj> xSheet(GetSheetByIndex(nIndex)); if (!xSheet.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xSheet); + return uno::Any(uno::Reference<sheet::XSpreadsheet>(xSheet)); // return uno::Any(); } @@ -4480,11 +4497,11 @@ sal_Bool SAL_CALL ScTableSheetsObj::hasElements() uno::Any SAL_CALL ScTableSheetsObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XSpreadsheet> xSheet(GetObjectByName_Impl(aName)); + rtl::Reference<ScTableSheetObj> xSheet(GetObjectByName_Impl(aName)); if (!xSheet.is()) throw container::NoSuchElementException(); - return uno::Any(xSheet); + return uno::Any(uno::Reference<sheet::XSpreadsheet>(xSheet)); } uno::Sequence<OUString> SAL_CALL ScTableSheetsObj::getElementNames() @@ -4626,11 +4643,11 @@ sal_Int32 SAL_CALL ScTableColumnsObj::getCount() uno::Any SAL_CALL ScTableColumnsObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<table::XCellRange> xColumn(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScTableColumnObj> xColumn(GetObjectByIndex_Impl(nIndex)); if (!xColumn.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xColumn); + return uno::Any(uno::Reference<table::XCellRange>(xColumn)); } @@ -4648,11 +4665,11 @@ sal_Bool SAL_CALL ScTableColumnsObj::hasElements() uno::Any SAL_CALL ScTableColumnsObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - uno::Reference<table::XCellRange> xColumn(GetObjectByName_Impl(aName)); + rtl::Reference<ScTableColumnObj> xColumn(GetObjectByName_Impl(aName)); if (!xColumn.is()) throw container::NoSuchElementException(); - return uno::Any(xColumn); + return uno::Any(uno::Reference<table::XCellRange>(xColumn)); } uno::Sequence<OUString> SAL_CALL ScTableColumnsObj::getElementNames() @@ -4868,11 +4885,11 @@ sal_Int32 SAL_CALL ScTableRowsObj::getCount() uno::Any SAL_CALL ScTableRowsObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<table::XCellRange> xRow(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScTableRowObj> xRow(GetObjectByIndex_Impl(nIndex)); if (!xRow.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xRow); + return uno::Any(uno::Reference<table::XCellRange>(xRow)); } uno::Type SAL_CALL ScTableRowsObj::getElementType() @@ -4991,6 +5008,13 @@ void SAL_CALL ScTableRowsObj::setPropertyValue( } } +void ScTableRowsObj::setPropertyValueIsFiltered(SolarMutexGuard& /*rGuard*/, bool b ) +{ + ScDocument& rDoc = pDocShell->GetDocument(); + //! undo etc. + rDoc.SetRowFiltered(nStartRow, nEndRow, nTab, b); +} + uno::Any SAL_CALL ScTableRowsObj::getPropertyValue( const OUString& aPropertyName ) { SolarMutexGuard aGuard; @@ -5047,6 +5071,12 @@ uno::Any SAL_CALL ScTableRowsObj::getPropertyValue( const OUString& aPropertyNam return aAny; } +bool ScTableRowsObj::getPropertyValueOHeight( SolarMutexGuard& /*rGuard*/ ) +{ + ScDocument& rDoc = pDocShell->GetDocument(); + return !(rDoc.GetRowFlags( nStartRow, nTab ) & CRFlags::ManualSize); +} + SC_IMPL_DUMMY_PROPERTY_LISTENER( ScTableRowsObj ) ScSpreadsheetSettingsObj::~ScSpreadsheetSettingsObj() @@ -5177,11 +5207,11 @@ sal_Int32 SAL_CALL ScAnnotationsObj::getCount() uno::Any SAL_CALL ScAnnotationsObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XSheetAnnotation> xAnnotation(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScAnnotationObj> xAnnotation(GetObjectByIndex_Impl(nIndex)); if (!xAnnotation.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xAnnotation); + return uno::Any(uno::Reference<sheet::XSheetAnnotation>(xAnnotation)); } uno::Type SAL_CALL ScAnnotationsObj::getElementType() @@ -5331,11 +5361,11 @@ sal_Int32 SAL_CALL ScScenariosObj::getCount() uno::Any SAL_CALL ScScenariosObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XScenario> xScen(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScTableSheetObj> xScen(GetObjectByIndex_Impl(nIndex)); if (!xScen.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xScen); + return uno::Any(uno::Reference<sheet::XScenario>(xScen)); } uno::Type SAL_CALL ScScenariosObj::getElementType() @@ -5352,11 +5382,11 @@ sal_Bool SAL_CALL ScScenariosObj::hasElements() uno::Any SAL_CALL ScScenariosObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XScenario> xScen(GetObjectByName_Impl(aName)); + rtl::Reference<ScTableSheetObj> xScen(GetObjectByName_Impl(aName)); if (!xScen.is()) throw container::NoSuchElementException(); - return uno::Any(xScen); + return uno::Any(uno::Reference<sheet::XScenario>(xScen)); } uno::Sequence<OUString> SAL_CALL ScScenariosObj::getElementNames() diff --git a/sc/source/ui/unoobj/fielduno.cxx b/sc/source/ui/unoobj/fielduno.cxx index 110b9ddc2ddd..6e6e06fa7453 100644 --- a/sc/source/ui/unoobj/fielduno.cxx +++ b/sc/source/ui/unoobj/fielduno.cxx @@ -285,7 +285,7 @@ ScCellFieldsObj::~ScCellFieldsObj() mpEditSource.reset(); } - // increment refcount to prevent double call off dtor + // increment refcount to prevent double call of dtor osl_atomic_increment( &m_refCount ); std::unique_lock g(aMutex); @@ -1165,7 +1165,7 @@ uno::Reference<text::XTextRange> SAL_CALL ScEditFieldObj::getAnchor() uno::Reference<beans::XPropertySetInfo> SAL_CALL ScEditFieldObj::getPropertySetInfo() { SolarMutexGuard aGuard; - uno::Reference<beans::XPropertySetInfo> aRef = pPropSet->getPropertySetInfo(); + rtl::Reference<SfxItemPropertySetInfo> aRef = pPropSet->getPropertySetInfo(); return aRef; } diff --git a/sc/source/ui/unoobj/filtuno.cxx b/sc/source/ui/unoobj/filtuno.cxx index 575d66147b64..0bb3db3453f8 100644 --- a/sc/source/ui/unoobj/filtuno.cxx +++ b/sc/source/ui/unoobj/filtuno.cxx @@ -20,6 +20,8 @@ #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp> #include <tools/urlobj.hxx> #include <vcl/svapp.hxx> +#include <uno/current_context.hxx> +#include <unotools/filteroptions_settings.hxx> #include <unotools/ucbstreamhelper.hxx> #include <connectivity/dbtools.hxx> #include <osl/diagnose.h> @@ -188,7 +190,14 @@ sal_Int16 SAL_CALL ScFilterOptionsObj::execute() ScopedVclPtr<AbstractScImportAsciiDlg> pDlg(pFact->CreateScImportAsciiDlg(Application::GetFrameWeld(xDialogParent), aPrivDatName, pInStream.get(), SC_IMPORTFILE)); - if ( pDlg->Execute() == RET_OK ) + + bool bShow; + // The "ShowFilterDialog" flag is passed from SfxApplication::OpenDocExec_Impl + if (!(css::uno::getCurrentContext()->getValueByName(u"ShowFilterDialog"_ustr) >>= bShow)) + bShow = utl::isShowFilterOptionsDialog(aFilterString); + const bool bOk = !bShow || pDlg->Execute() == RET_OK; + + if (bOk) { ScAsciiOptions aOptions; pDlg->GetOptions( aOptions ); diff --git a/sc/source/ui/unoobj/linkuno.cxx b/sc/source/ui/unoobj/linkuno.cxx index 53e34a58a059..e7531b42a352 100644 --- a/sc/source/ui/unoobj/linkuno.cxx +++ b/sc/source/ui/unoobj/linkuno.cxx @@ -469,11 +469,11 @@ sal_Int32 SAL_CALL ScSheetLinksObj::getCount() uno::Any SAL_CALL ScSheetLinksObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<beans::XPropertySet> xLink(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScSheetLinkObj> xLink(GetObjectByIndex_Impl(nIndex)); if (!xLink.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xLink); + return uno::Any(uno::Reference<beans::XPropertySet>(xLink)); } uno::Type SAL_CALL ScSheetLinksObj::getElementType() @@ -490,11 +490,11 @@ sal_Bool SAL_CALL ScSheetLinksObj::hasElements() uno::Any SAL_CALL ScSheetLinksObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - uno::Reference<beans::XPropertySet> xLink(GetObjectByName_Impl(aName)); + rtl::Reference<ScSheetLinkObj> xLink(GetObjectByName_Impl(aName)); if (!xLink.is()) throw container::NoSuchElementException(); - return uno::Any(xLink); + return uno::Any(uno::Reference<beans::XPropertySet>(xLink)); } sal_Bool SAL_CALL ScSheetLinksObj::hasByName( const OUString& aName ) @@ -967,11 +967,11 @@ sal_Int32 SAL_CALL ScAreaLinksObj::getCount() uno::Any SAL_CALL ScAreaLinksObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XAreaLink> xLink(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScAreaLinkObj> xLink(GetObjectByIndex_Impl(nIndex)); if (!xLink.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xLink); + return uno::Any(uno::Reference<sheet::XAreaLink>(xLink)); } @@ -1251,11 +1251,11 @@ sal_Int32 SAL_CALL ScDDELinksObj::getCount() uno::Any SAL_CALL ScDDELinksObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XDDELink> xLink(GetObjectByIndex_Impl(nIndex)); + rtl::Reference<ScDDELinkObj> xLink(GetObjectByIndex_Impl(nIndex)); if (!xLink.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xLink); + return uno::Any(uno::Reference<sheet::XDDELink>(xLink)); } uno::Type SAL_CALL ScDDELinksObj::getElementType() @@ -1272,11 +1272,11 @@ sal_Bool SAL_CALL ScDDELinksObj::hasElements() uno::Any SAL_CALL ScDDELinksObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XDDELink> xLink(GetObjectByName_Impl(aName)); + rtl::Reference<ScDDELinkObj> xLink(GetObjectByName_Impl(aName)); if (!xLink.is()) throw container::NoSuchElementException(); - return uno::Any(xLink); + return uno::Any(uno::Reference<sheet::XDDELink>(xLink)); } uno::Sequence<OUString> SAL_CALL ScDDELinksObj::getElementNames() diff --git a/sc/source/ui/unoobj/nameuno.cxx b/sc/source/ui/unoobj/nameuno.cxx index c96700f3474c..5497e0fc7569 100644 --- a/sc/source/ui/unoobj/nameuno.cxx +++ b/sc/source/ui/unoobj/nameuno.cxx @@ -592,11 +592,11 @@ sal_Int32 SAL_CALL ScNamedRangesObj::getCount() uno::Any SAL_CALL ScNamedRangesObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference< sheet::XNamedRange > xRange(GetObjectByIndex_Impl(static_cast<sal_uInt16>(nIndex))); + rtl::Reference< ScNamedRangeObj > xRange(GetObjectByIndex_Impl(static_cast<sal_uInt16>(nIndex))); if ( !xRange.is() ) throw lang::IndexOutOfBoundsException(); - return uno::Any(xRange); + return uno::Any(uno::Reference< sheet::XNamedRange >(xRange)); } uno::Type SAL_CALL ScNamedRangesObj::getElementType() @@ -642,11 +642,11 @@ SC_IMPL_DUMMY_PROPERTY_LISTENER( ScNamedRangesObj ) uno::Any SAL_CALL ScNamedRangesObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - uno::Reference< sheet::XNamedRange > xRange(GetObjectByName_Impl(aName)); + rtl::Reference< ScNamedRangeObj > xRange(GetObjectByName_Impl(aName)); if ( !xRange.is() ) throw container::NoSuchElementException(); - return uno::Any(xRange); + return uno::Any(uno::Reference< sheet::XNamedRange >(xRange)); } uno::Sequence<OUString> SAL_CALL ScNamedRangesObj::getElementNames() @@ -1126,11 +1126,11 @@ sal_Int32 SAL_CALL ScLabelRangesObj::getCount() uno::Any SAL_CALL ScLabelRangesObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference< sheet::XLabelRange > xRange(GetObjectByIndex_Impl(static_cast<sal_uInt16>(nIndex))); + rtl::Reference< ScLabelRangeObj > xRange(GetObjectByIndex_Impl(static_cast<sal_uInt16>(nIndex))); if ( !xRange.is() ) throw lang::IndexOutOfBoundsException(); - return uno::Any(xRange); + return uno::Any(uno::Reference< sheet::XLabelRange >(xRange)); } uno::Type SAL_CALL ScLabelRangesObj::getElementType() diff --git a/sc/source/ui/unoobj/scdetect.hxx b/sc/source/ui/unoobj/scdetect.hxx index 697bd8d58e3d..45f87e08c3d2 100644 --- a/sc/source/ui/unoobj/scdetect.hxx +++ b/sc/source/ui/unoobj/scdetect.hxx @@ -26,10 +26,6 @@ #include <rtl/ustring.hxx> -namespace com::sun::star { - namespace beans { struct PropertyValue; } -} - class ScFilterDetect : public ::cppu::WeakImplHelper< css::document::XExtendedFilterDetection, css::lang::XServiceInfo > { public: diff --git a/sc/source/ui/unoobj/styleuno.cxx b/sc/source/ui/unoobj/styleuno.cxx index 417fded19368..21fe7e6525cf 100644 --- a/sc/source/ui/unoobj/styleuno.cxx +++ b/sc/source/ui/unoobj/styleuno.cxx @@ -503,11 +503,11 @@ sal_Int32 SAL_CALL ScStyleFamiliesObj::getCount() uno::Any SAL_CALL ScStyleFamiliesObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference< container::XNameContainer > xFamily(GetObjectByIndex_Impl(nIndex)); + rtl::Reference< ScStyleFamilyObj > xFamily(GetObjectByIndex_Impl(nIndex)); if (!xFamily.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xFamily); + return uno::Any(uno::Reference< container::XNameContainer >(xFamily)); } uno::Type SAL_CALL ScStyleFamiliesObj::getElementType() @@ -526,11 +526,11 @@ sal_Bool SAL_CALL ScStyleFamiliesObj::hasElements() uno::Any SAL_CALL ScStyleFamiliesObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - uno::Reference< container::XNameContainer > xFamily(GetObjectByName_Impl(aName)); + rtl::Reference< ScStyleFamilyObj > xFamily(GetObjectByName_Impl(aName)); if (!xFamily.is()) throw container::NoSuchElementException(); - return uno::Any(xFamily); + return uno::Any(uno::Reference< container::XNameContainer >(xFamily)); } uno::Sequence<OUString> SAL_CALL ScStyleFamiliesObj::getElementNames() @@ -827,11 +827,11 @@ sal_Int32 SAL_CALL ScStyleFamilyObj::getCount() uno::Any SAL_CALL ScStyleFamilyObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference< style::XStyle > xObj(GetObjectByIndex_Impl(nIndex)); + rtl::Reference< ScStyleObj > xObj(GetObjectByIndex_Impl(nIndex)); if (!xObj.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xObj); + return uno::Any(uno::Reference< style::XStyle >(xObj)); } uno::Type SAL_CALL ScStyleFamilyObj::getElementType() @@ -850,12 +850,12 @@ sal_Bool SAL_CALL ScStyleFamilyObj::hasElements() uno::Any SAL_CALL ScStyleFamilyObj::getByName( const OUString& aName ) { SolarMutexGuard aGuard; - uno::Reference< style::XStyle > xObj( + rtl::Reference< ScStyleObj > xObj( GetObjectByName_Impl( ScStyleNameConversion::ProgrammaticToDisplayName( aName, eFamily ) )); if (!xObj.is()) throw container::NoSuchElementException(); - return uno::Any(xObj); + return uno::Any(uno::Reference< style::XStyle >(xObj)); } uno::Sequence<OUString> SAL_CALL ScStyleFamilyObj::getElementNames() diff --git a/sc/source/ui/unoobj/textuno.cxx b/sc/source/ui/unoobj/textuno.cxx index 4e4070502dc2..8fd8c0813ad5 100644 --- a/sc/source/ui/unoobj/textuno.cxx +++ b/sc/source/ui/unoobj/textuno.cxx @@ -190,14 +190,14 @@ SvxTextForwarder* ScHeaderFooterTextData::GetTextForwarder() pCellAttributeDefault = &pTmp->getDefaultCellAttribute(); } - auto pDefaults = std::make_unique<SfxItemSet>(pHdrEngine->GetEmptyItemSet()); - pCellAttributeDefault->FillEditItemSet(pDefaults.get()); + SfxItemSet aDefaults(pHdrEngine->GetEmptyItemSet()); + pCellAttributeDefault->FillEditItemSet(&aDefaults); // FillEditItemSet adjusts font height to 1/100th mm, // but for header/footer twips is needed, as in the PatternAttr: - pDefaults->Put( pCellAttributeDefault->GetItem(ATTR_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT) ); - pDefaults->Put( pCellAttributeDefault->GetItem(ATTR_CJK_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CJK) ) ; - pDefaults->Put( pCellAttributeDefault->GetItem(ATTR_CTL_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CTL) ); - pHdrEngine->SetDefaults(std::move(pDefaults)); + aDefaults.Put( pCellAttributeDefault->GetItem(ATTR_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT) ); + aDefaults.Put( pCellAttributeDefault->GetItem(ATTR_CJK_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CJK) ) ; + aDefaults.Put( pCellAttributeDefault->GetItem(ATTR_CTL_FONT_HEIGHT).CloneSetWhich(EE_CHAR_FONTHEIGHT_CTL) ); + pHdrEngine->SetDefaults(std::move(aDefaults)); ScHeaderFieldData aData; ScHeaderFooterTextObj::FillDummyFieldData( aData ); @@ -792,19 +792,19 @@ SvxTextForwarder* ScCellTextData::GetTextForwarder() { ScDocument& rDoc = pDocShell->GetDocument(); - auto pDefaults = std::make_unique<SfxItemSet>(pEditEngine->GetEmptyItemSet()); + SfxItemSet aDefaults(pEditEngine->GetEmptyItemSet()); if( const ScPatternAttr* pPattern = rDoc.GetPattern( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab() ) ) { - pPattern->FillEditItemSet(pDefaults.get()); - pPattern->FillEditParaItems(pDefaults.get()); // including alignment etc. (for reading) + pPattern->FillEditItemSet(&aDefaults); + pPattern->FillEditParaItems(&aDefaults); // including alignment etc. (for reading) } ScRefCellValue aCell(rDoc, aCellPos); if (aCell.getType() == CELLTYPE_EDIT) { const EditTextObject* pObj = aCell.getEditText(); - pEditEngine->SetTextNewDefaults(*pObj, std::move(pDefaults)); + pEditEngine->SetTextNewDefaults(*pObj, std::move(aDefaults)); } else { @@ -819,9 +819,9 @@ SvxTextForwarder* ScCellTextData::GetTextForwarder() // pEditEngine->SetTextNewDefaults() is passed an empty string // and pEditEngine->GetText() is empty string. if (!aText.isEmpty() || pEditEngine->HasText()) - pEditEngine->SetTextNewDefaults(aText, std::move(pDefaults)); + pEditEngine->SetTextNewDefaults(aText, std::move(aDefaults)); else - pEditEngine->SetDefaults(std::move(pDefaults)); + pEditEngine->SetDefaults(std::move(aDefaults)); } } diff --git a/sc/source/ui/unoobj/viewuno.cxx b/sc/source/ui/unoobj/viewuno.cxx index 02f66358cb25..f88710e4355f 100644 --- a/sc/source/ui/unoobj/viewuno.cxx +++ b/sc/source/ui/unoobj/viewuno.cxx @@ -1014,11 +1014,11 @@ sal_Int32 SAL_CALL ScTabViewObj::getCount() uno::Any SAL_CALL ScTabViewObj::getByIndex( sal_Int32 nIndex ) { SolarMutexGuard aGuard; - uno::Reference<sheet::XViewPane> xPane(GetObjectByIndex_Impl(static_cast<sal_uInt16>(nIndex))); + rtl::Reference<ScViewPaneObj> xPane(GetObjectByIndex_Impl(static_cast<sal_uInt16>(nIndex))); if (!xPane.is()) throw lang::IndexOutOfBoundsException(); - return uno::Any(xPane); + return uno::Any(uno::Reference<sheet::XViewPane>(xPane)); } uno::Type SAL_CALL ScTabViewObj::getElementType() diff --git a/sc/source/ui/vba/vbaaxis.cxx b/sc/source/ui/vba/vbaaxis.cxx index 46a5db7f0eb6..2fb718d27392 100644 --- a/sc/source/ui/vba/vbaaxis.cxx +++ b/sc/source/ui/vba/vbaaxis.cxx @@ -78,26 +78,26 @@ ScVbaAxis::Delete( ) uno::Reference< ::ooo::vba::excel::XAxisTitle > SAL_CALL ScVbaAxis::getAxisTitle( ) { - uno::Reference< excel::XAxisTitle > xAxisTitle; + rtl::Reference< ScVbaAxisTitle > xAxisTitle; try { ScVbaChart* pChart = getChartPtr(); - if (getHasTitle() ) + if (!getHasTitle() ) + return nullptr; + + int nType = getType(); + switch(nType) { - int nType = getType(); - switch(nType) - { - case xlCategory: - xAxisTitle = new ScVbaAxisTitle(this, mxContext, pChart->xAxisXSupplier->getXAxisTitle()); - break; - case xlSeriesAxis: - xAxisTitle = new ScVbaAxisTitle(this, mxContext, pChart->xAxisZSupplier->getZAxisTitle()); - break; - default: // xlValue: - xAxisTitle = new ScVbaAxisTitle(this, mxContext, pChart->xAxisYSupplier->getYAxisTitle()); - break; - } + case xlCategory: + xAxisTitle = new ScVbaAxisTitle(this, mxContext, pChart->xAxisXSupplier->getXAxisTitle()); + break; + case xlSeriesAxis: + xAxisTitle = new ScVbaAxisTitle(this, mxContext, pChart->xAxisZSupplier->getZAxisTitle()); + break; + default: // xlValue: + xAxisTitle = new ScVbaAxisTitle(this, mxContext, pChart->xAxisYSupplier->getYAxisTitle()); + break; } } catch (const uno::Exception& e) diff --git a/sc/source/ui/vba/vbachartobjects.hxx b/sc/source/ui/vba/vbachartobjects.hxx index 0efb4134ff86..de99d8f6d24b 100644 --- a/sc/source/ui/vba/vbachartobjects.hxx +++ b/sc/source/ui/vba/vbachartobjects.hxx @@ -22,7 +22,6 @@ #include <ooo/vba/excel/XChartObjects.hpp> #include <vbahelper/vbacollectionimpl.hxx> -namespace com::sun::star::container { class XEnumeration; } namespace com::sun::star::drawing { class XDrawPageSupplier; } namespace com::sun::star::table { class XTableCharts; } namespace com::sun::star::uno { class XComponentContext; } diff --git a/sc/source/ui/vba/vbaformatconditions.cxx b/sc/source/ui/vba/vbaformatconditions.cxx index 64f82e003610..ad326f61c672 100644 --- a/sc/source/ui/vba/vbaformatconditions.cxx +++ b/sc/source/ui/vba/vbaformatconditions.cxx @@ -134,7 +134,7 @@ ScVbaFormatConditions::Add( ::sal_Int32 _nType, const uno::Any& _aOperator, cons return Add( _nType, _aOperator, _aFormula1, _aFormula2, uno::Reference< excel::XStyle >() ); } -uno::Reference< excel::XFormatCondition > +rtl::Reference< ScVbaFormatCondition > ScVbaFormatConditions::Add( ::sal_Int32 _nType, const uno::Any& _aOperator, const uno::Any& _aFormula1, const uno::Any& _aFormula2, const css::uno::Reference< excel::XStyle >& _xStyle ) { // #TODO @@ -145,7 +145,7 @@ ScVbaFormatConditions::Add( ::sal_Int32 _nType, const uno::Any& _aOperator, cons // [*] reason: getA1Formula method below is just a hook and just // returns what it gets ( e.g. doesn't convert anything ) uno::Reference< excel::XStyle > xStyle( _xStyle ); - uno::Reference< excel::XFormatCondition > xFormatCondition; + rtl::Reference< ScVbaFormatCondition > xFormatCondition; try { OUString sStyleName; diff --git a/sc/source/ui/vba/vbaformatconditions.hxx b/sc/source/ui/vba/vbaformatconditions.hxx index 8fe7cfabb83f..3cc67146ee31 100644 --- a/sc/source/ui/vba/vbaformatconditions.hxx +++ b/sc/source/ui/vba/vbaformatconditions.hxx @@ -27,8 +27,8 @@ namespace com::sun::star::beans { class XPropertySet; } namespace com::sun::star::sheet { class XSheetConditionalEntries; } namespace ooo::vba::excel { class XRange; } namespace ooo::vba::excel { class XStyle; } -namespace ooo::vba::excel { class XStyles; } class ScVbaStyles; +class ScVbaFormatCondition; // This class is used only as a target for casting, it seems, // and no objects of this type are created as such, I think. @@ -44,7 +44,7 @@ public: void notifyRange(); /// @throws css::script::BasicErrorException /// @throws css::uno::RuntimeException - css::uno::Reference< ov::excel::XFormatCondition > Add( ::sal_Int32 Type, const css::uno::Any& Operator, const css::uno::Any& Formula1, const css::uno::Any& Formula2, const css::uno::Reference< ov::excel::XStyle >& _xCalcStyle ); + rtl::Reference< ScVbaFormatCondition > Add( ::sal_Int32 Type, const css::uno::Any& Operator, const css::uno::Any& Formula1, const css::uno::Any& Formula2, const css::uno::Reference< ov::excel::XStyle >& _xCalcStyle ); /// @throws css::script::BasicErrorException static OUString getA1Formula(const css::uno::Any& _aFormula); OUString getStyleName(); diff --git a/sc/source/ui/vba/vbahyperlink.hxx b/sc/source/ui/vba/vbahyperlink.hxx index 391853be74f5..da1a8bbe657e 100644 --- a/sc/source/ui/vba/vbahyperlink.hxx +++ b/sc/source/ui/vba/vbahyperlink.hxx @@ -24,7 +24,6 @@ #include <vbahelper/vbahelperinterface.hxx> #include <tools/long.hxx> -namespace ooo::vba::excel { class XRange; } namespace com::sun::star::beans { class XPropertySet; } namespace com::sun::star::table { class XCell; } diff --git a/sc/source/ui/vba/vbamenuitems.hxx b/sc/source/ui/vba/vbamenuitems.hxx index 55e6fe78225e..91adfbbac614 100644 --- a/sc/source/ui/vba/vbamenuitems.hxx +++ b/sc/source/ui/vba/vbamenuitems.hxx @@ -12,7 +12,6 @@ #include <vbahelper/vbacollectionimpl.hxx> namespace ooo::vba { class XCommandBarControls; } -namespace ooo::vba::excel { class XMenuItem; } typedef CollTestImplHelper< ov::excel::XMenuItems > MenuItems_BASE; diff --git a/sc/source/ui/vba/vbamenus.hxx b/sc/source/ui/vba/vbamenus.hxx index 4d8f646254b1..3088e418005b 100644 --- a/sc/source/ui/vba/vbamenus.hxx +++ b/sc/source/ui/vba/vbamenus.hxx @@ -12,7 +12,6 @@ #include <vbahelper/vbacollectionimpl.hxx> namespace ooo::vba { class XCommandBarControls; } -namespace ooo::vba::excel { class XMenu; } typedef CollTestImplHelper< ov::excel::XMenus > Menus_BASE; diff --git a/sc/source/ui/vba/vbanames.cxx b/sc/source/ui/vba/vbanames.cxx index 4e316e83f481..a90505a6662f 100644 --- a/sc/source/ui/vba/vbanames.cxx +++ b/sc/source/ui/vba/vbanames.cxx @@ -116,7 +116,7 @@ ScVbaNames::Add( const css::uno::Any& Name , throw uno::RuntimeException( u"This Name is not valid ."_ustr ); } } - uno::Reference< table::XCellRange > xUnoRange; + rtl::Reference< ScCellRangeObj > xUnoRange; if ( RefersTo.hasValue() || RefersToR1C1.hasValue() || RefersToR1C1Local.hasValue() ) { OUString sFormula; diff --git a/sc/source/ui/vba/vbarange.cxx b/sc/source/ui/vba/vbarange.cxx index 433b069fa6d0..e0562dc7f0f2 100644 --- a/sc/source/ui/vba/vbarange.cxx +++ b/sc/source/ui/vba/vbarange.cxx @@ -197,9 +197,9 @@ static uno::Any lcl_makeRange( const uno::Reference< XHelperInterface >& rParent return uno::Any( uno::Reference< excel::XRange >( new ScVbaRange( rParent, rContext, xCellRange, bIsRows, bIsColumns ) ) ); } -static uno::Reference< excel::XRange > lcl_makeXRangeFromSheetCellRanges( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< sheet::XSheetCellRanges >& xLocSheetCellRanges, ScDocShell* pDoc ) +static rtl::Reference< ScVbaRange > lcl_makeXRangeFromSheetCellRanges( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< sheet::XSheetCellRanges >& xLocSheetCellRanges, ScDocShell* pDoc ) { - uno::Reference< excel::XRange > xRange; + rtl::Reference< ScVbaRange > xRange; const uno::Sequence< table::CellRangeAddress > sAddresses = xLocSheetCellRanges->getRangeAddresses(); ScRangeList aCellRanges; if ( sAddresses.hasElements() ) diff --git a/sc/source/ui/vba/vbarange.hxx b/sc/source/ui/vba/vbarange.hxx index d36eb2562e63..50bac0d0e95d 100644 --- a/sc/source/ui/vba/vbarange.hxx +++ b/sc/source/ui/vba/vbarange.hxx @@ -33,13 +33,9 @@ namespace com::sun::star::sheet { class XSheetCellRangeContainer; } namespace com::sun::star::table { class XCell; } namespace com::sun::star::table { class XCellRange; } namespace com::sun::star::table { struct CellRangeAddress; } -namespace com::sun::star::lang { class XServiceInfo; } namespace ooo::vba { class XCollection; } -namespace ooo::vba::excel { class XComment; } -namespace ooo::vba::excel { class XFont; } class SfxItemSet; -class ScCellRangesBase; class ScCellRangeObj; class ScDocShell; class ScDocument; diff --git a/sc/source/ui/vba/vbasheetobjects.cxx b/sc/source/ui/vba/vbasheetobjects.cxx index ebd854f305ad..10eccf035b24 100644 --- a/sc/source/ui/vba/vbasheetobjects.cxx +++ b/sc/source/ui/vba/vbasheetobjects.cxx @@ -220,8 +220,8 @@ sal_Int32 ScVbaObjectContainer::insertShape( const uno::Reference< drawing::XSha uno::Any ScVbaObjectContainer::createCollectionObject( const uno::Any& rSource ) { uno::Reference< drawing::XShape > xShape( rSource, uno::UNO_QUERY_THROW ); - uno::Reference< excel::XSheetObject > xSheetObject( implCreateVbaObject( xShape ) ); - return uno::Any( xSheetObject ); + rtl::Reference< ScVbaSheetObjectBase > xSheetObject( implCreateVbaObject( xShape ) ); + return uno::Any( uno::Reference< excel::XSheetObject >(xSheetObject) ); } uno::Any ScVbaObjectContainer::getItemByStringIndex( const OUString& rIndex ) diff --git a/sc/source/ui/vba/vbasheetobjects.hxx b/sc/source/ui/vba/vbasheetobjects.hxx index 38d2d1c8d69f..aa7792f73e1d 100644 --- a/sc/source/ui/vba/vbasheetobjects.hxx +++ b/sc/source/ui/vba/vbasheetobjects.hxx @@ -25,7 +25,6 @@ #include <rtl/ref.hxx> namespace com::sun::star { - namespace container { class XEnumeration; } namespace frame { class XModel; } namespace sheet { class XSpreadsheet; } } diff --git a/sc/source/ui/vba/vbaworksheet.hxx b/sc/source/ui/vba/vbaworksheet.hxx index f8ca3d0f8cba..ca52841a0524 100644 --- a/sc/source/ui/vba/vbaworksheet.hxx +++ b/sc/source/ui/vba/vbaworksheet.hxx @@ -27,12 +27,9 @@ namespace com::sun::star::frame { class XModel; } namespace com::sun::star::sheet { class XSpreadsheet; } namespace com::sun::star::uno { class XComponentContext; } -namespace ooo::vba::excel { class XOutline; } -namespace ooo::vba::excel { class XPageSetup; } namespace ooo::vba::excel { class XRange; } namespace ooo::vba::excel { - class XChartObjects; class XHyperlinks; } diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index f94f19ac7c48..91a1143f2695 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -202,10 +202,10 @@ void HandleConditionalFormat(sal_uInt32 nIndex, bool bCondFormatDlg, bool bConta if (bCondFormatDlg || !bContainsCondFormat) { // Put the xml string parameter to initialize the - // Conditional Format Dialog. - std::shared_ptr<ScCondFormatDlgData> pDlgItem(std::make_shared<ScCondFormatDlgData>(nullptr, nIndex, false)); - pDlgItem->SetDialogType(eType); - pTabViewShell->setScCondFormatDlgItem(pDlgItem); + // Conditional Format Dialog. Set the initial DialogData. + std::shared_ptr<ScCondFormatDlgData> pDlgData(std::make_shared<ScCondFormatDlgData>(nullptr, nIndex, false)); + pDlgData->SetDialogType(eType); + pTabViewShell->setScCondFormatDlgData(pDlgData); sal_uInt16 nId = ScCondFormatDlgWrapper::GetChildWindowId(); SfxViewFrame& rViewFrm = pTabViewShell->GetViewFrame(); @@ -1443,7 +1443,10 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) weld::WaitObject aWait( GetViewData().GetDialogParent() ); pTabViewShell->CopyToClip( nullptr, false, false, true ); rReq.Done(); - GetViewData().SetPasteMode( ScPasteFlags::Mode | ScPasteFlags::Border ); + + if (!comphelper::LibreOfficeKit::isActive() || !pTabViewShell->GetViewShell() || !pTabViewShell->GetViewShell()->IsLokReadOnlyView()) + GetViewData().SetPasteMode( ScPasteFlags::Mode | ScPasteFlags::Border ); + pTabViewShell->ShowCursor(); pTabViewShell->UpdateCopySourceOverlay(); } @@ -1454,7 +1457,10 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) weld::WaitObject aWait( GetViewData().GetDialogParent() ); pTabViewShell->CutToClip(); rReq.Done(); - GetViewData().SetPasteMode( ScPasteFlags::Mode | ScPasteFlags::Border ); + + if (!comphelper::LibreOfficeKit::isActive() || !pTabViewShell->GetViewShell() || !pTabViewShell->GetViewShell()->IsLokReadOnlyView()) + GetViewData().SetPasteMode( ScPasteFlags::Mode | ScPasteFlags::Border ); + pTabViewShell->ShowCursor(); pTabViewShell->UpdateCopySourceOverlay(); } @@ -2202,10 +2208,11 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) sal_uInt32 nIndex = sal_uInt32(-1); bool bManaged = false; - const std::shared_ptr<ScCondFormatDlgData>& rDlgItem(pTabViewShell->getScCondFormatDlgItem()); - if (rDlgItem) + // get the current DialogData + const std::shared_ptr<ScCondFormatDlgData>& rDlgData(pTabViewShell->getScCondFormatDlgData()); + if (rDlgData) { - nIndex = rDlgItem->GetIndex(); + nIndex = rDlgData->GetIndex(); bManaged = true; } @@ -2846,7 +2853,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) SfxAllItemSet aSet( GetPool() ); aSet.Put( SfxBoolItem( FN_PARAM_1, false ) ); - aSet.Put( SvxFontItem( aCurFont.GetFamilyType(), aCurFont.GetFamilyName(), aCurFont.GetStyleName(), aCurFont.GetPitch(), aCurFont.GetCharSet(), GetPool().GetWhichIDFromSlotID(SID_ATTR_CHAR_FONT) ) ); + aSet.Put( SvxFontItem( aCurFont.GetFamilyTypeMaybeAskConfig(), aCurFont.GetFamilyName(), aCurFont.GetStyleName(), aCurFont.GetPitchMaybeAskConfig(), aCurFont.GetCharSet(), GetPool().GetWhichIDFromSlotID(SID_ATTR_CHAR_FONT) ) ); SfxViewFrame& rViewFrame = pTabViewShell->GetViewFrame(); auto xFrame = rViewFrame.GetFrame().GetFrameInterface(); VclPtr<SfxAbstractDialog> pDlg(pFact->CreateCharMapDialog(pTabViewShell->GetFrameWeld(), aSet, xFrame)); @@ -2911,10 +2918,12 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) ScAddress aPos(rData.GetCurX(), rData.GetCurY(), rData.GetTabNo()); ScConditionalFormatList* pList = nullptr; - const std::shared_ptr<ScCondFormatDlgData>& rDlgItem(pTabViewShell->getScCondFormatDlgItem()); - if (rDlgItem) + + // get the current DialogData + const std::shared_ptr<ScCondFormatDlgData>& rDlgData(pTabViewShell->getScCondFormatDlgData()); + if (rDlgData) { - pList = rDlgItem->GetConditionalFormatList(); + pList = rDlgData->GetConditionalFormatList(); } if (!pList) @@ -2923,11 +2932,15 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) VclPtr<AbstractScCondFormatManagerDlg> pDlg(pFact->CreateScCondFormatMgrDlg( pTabViewShell->GetFrameWeld(), rDoc, pList)); - if (rDlgItem) + if (rDlgData) + { pDlg->SetModified(); + // reset the current DialogData, will be reset when needed below + pTabViewShell->setScCondFormatDlgData(nullptr); + } pDlg->StartExecuteAsync( - [this, pDlg, &rData, pTabViewShell, rDlgItem, aPos](sal_Int32 nRet) + [this, pDlg, &rData, pTabViewShell, aPos](sal_Int32 nRet) { std::unique_ptr<ScConditionalFormatList> pCondFormatList = pDlg->GetConditionalFormatList(); @@ -2939,12 +2952,14 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) else if (nRet == DLG_RET_ADD) { // Put the xml string parameter to initialize the - // Conditional Format Dialog. ( add new ) - pTabViewShell->setScCondFormatDlgItem( + // Conditional Format Dialog. ( add new ). Provide + // new DialogData + pTabViewShell->setScCondFormatDlgData( std::make_shared<ScCondFormatDlgData>( std::shared_ptr<ScConditionalFormatList>( pCondFormatList.release()), -1, true)); + // Queue message to open Conditional Format Dialog GetViewData().GetDispatcher().Execute(SID_OPENDLG_CONDFRMT, SfxCallMode::ASYNCHRON); @@ -2954,12 +2969,14 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) ScConditionalFormat* pFormat = pDlg->GetCondFormatSelected(); sal_uInt32 nIndex = pFormat ? pFormat->GetKey() : sal_uInt32(-1); // Put the xml string parameter to initialize the - // Conditional Format Dialog. ( edit selected conditional format ) - pTabViewShell->setScCondFormatDlgItem( + // Conditional Format Dialog. ( edit selected conditional format ). + // Provide new DialogData + pTabViewShell->setScCondFormatDlgData( std::make_shared<ScCondFormatDlgData>( std::shared_ptr<ScConditionalFormatList>( pCondFormatList.release()), nIndex, true)); + // Queue message to open Conditional Format Dialog GetViewData().GetDispatcher().Execute(SID_OPENDLG_CONDFRMT, SfxCallMode::ASYNCHRON); @@ -2967,9 +2984,6 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) else pCondFormatList.reset(); - if (rDlgItem) - pTabViewShell->setScCondFormatDlgItem(nullptr); - pDlg->disposeOnce(); }); } @@ -3638,7 +3652,7 @@ void ScCellShell::ExecuteSubtotals(SfxRequest& rReq) ScopedVclPtr<SfxAbstractTabDialog> pDlg; ScSubTotalParam aSubTotalParam; - SfxItemSetFixed<SCITEM_SUBTDATA, SCITEM_SUBTDATA> aArgSet( GetPool() ); + SfxItemSet aArgSet(SfxItemSet::makeFixedSfxItemSet<SCITEM_SUBTDATA, SCITEM_SUBTDATA>(GetPool())); bool bAnonymous; diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx index 29d6f126b4e6..a89d1f75e245 100644 --- a/sc/source/ui/view/cellsh2.cxx +++ b/sc/source/ui/view/cellsh2.cxx @@ -684,6 +684,11 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq ) } break; + case SID_CLEAR_AUTO_FILTER: + pTabViewShell->ClearAutoFilter(); + rReq.Done(); + break; + case SID_AUTO_FILTER: pTabViewShell->ToggleAutoFilter(); rReq.Done(); @@ -1301,6 +1306,46 @@ void ScCellShell::GetDBState( SfxItemSet& rSet ) } break; + case SID_CLEAR_AUTO_FILTER: + { + const ScTableProtection* pTabProt = rDoc.GetTabProtection(nTab); + if (pTabProt && pTabProt->isProtected() && !pTabProt->isOptionEnabled(ScTableProtection::AUTOFILTER)) + { + rSet.DisableItem(nWhich); + } + else + { + if (!bAutoFilterTested) + { + bAutoFilter = rDoc.HasAutoFilter(nPosX, nPosY, nTab); + bAutoFilterTested = true; + } + + SCCOL nStartCol = GetViewData().GetCurX(); + SCROW nStartRow = GetViewData().GetCurY(); + SCTAB nStartTab = GetViewData().GetTabNo(); + bool bAnyQuery = false; + + ScQueryParam aParam; + ScDBData* pDBData = rDoc.GetDBAtCursor( nStartCol, nStartRow, nStartTab, ScDBDataPortion::AREA ); + + if(pDBData) + { + pDBData->GetQueryParam(aParam); + std::vector<ScQueryEntry*> aEntries = aParam.FindAllEntriesByField(nStartCol); + if(aEntries.size()) + { + bAnyQuery = true; + } + } + + + if(!bAutoFilter || !bAnyQuery) + rSet.DisableItem(nWhich); + } + } + break; + case SID_DEFINE_DBNAME: { if ( pDocSh->IsDocShared() ) diff --git a/sc/source/ui/view/cellsh3.cxx b/sc/source/ui/view/cellsh3.cxx index 033ecf8982cb..97f1a1208c10 100644 --- a/sc/source/ui/view/cellsh3.cxx +++ b/sc/source/ui/view/cellsh3.cxx @@ -476,9 +476,8 @@ void ScCellShell::Execute( SfxRequest& rReq ) { // set cell attribute without dialog: SfxItemSet aEmptySet(SfxItemSet::makeFixedSfxItemSet<ATTR_PATTERN_START, ATTR_PATTERN_END>(*pReqArgs->GetPool())); - // SfxItemSetFixed<ATTR_PATTERN_START, ATTR_PATTERN_END> aEmptySet( *pReqArgs->GetPool() ); - SfxItemSetFixed<ATTR_PATTERN_START, ATTR_PATTERN_END> aNewSet( *pReqArgs->GetPool() ); + SfxItemSet aNewSet(SfxItemSet::makeFixedSfxItemSet<ATTR_PATTERN_START, ATTR_PATTERN_END>(*pReqArgs->GetPool())); const SfxPoolItem* pAttr = nullptr; sal_uInt16 nWhich = 0; @@ -727,7 +726,7 @@ void ScCellShell::Execute( SfxRequest& rReq ) else { ScViewData& rData = GetViewData(); - FieldUnit eMetric = pScMod->GetAppOptions().GetAppMetric(); + FieldUnit eMetric = pScMod->GetMetric(); sal_uInt16 nCurHeight = rData.GetDocument(). GetRowHeight( rData.GetCurY(), rData.GetTabNo() ); @@ -770,7 +769,7 @@ void ScCellShell::Execute( SfxRequest& rReq ) } else { - FieldUnit eMetric = pScMod->GetAppOptions().GetAppMetric(); + FieldUnit eMetric = pScMod->GetMetric(); ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); VclPtr<AbstractScMetricInputDlg> pDlg(pFact->CreateScMetricInputDlg( @@ -832,7 +831,7 @@ void ScCellShell::Execute( SfxRequest& rReq ) } else { - FieldUnit eMetric = pScMod->GetAppOptions().GetAppMetric(); + FieldUnit eMetric = pScMod->GetMetric(); ScViewData& rData = GetViewData(); sal_uInt16 nCurHeight = rData.GetDocument(). GetColWidth( rData.GetCurX(), @@ -875,7 +874,7 @@ void ScCellShell::Execute( SfxRequest& rReq ) } else { - FieldUnit eMetric = pScMod->GetAppOptions().GetAppMetric(); + FieldUnit eMetric = pScMod->GetMetric(); ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); VclPtr<AbstractScMetricInputDlg> pDlg(pFact->CreateScMetricInputDlg( diff --git a/sc/source/ui/view/cliputil.cxx b/sc/source/ui/view/cliputil.cxx index 3c83c0066e70..b8834f0ab1af 100644 --- a/sc/source/ui/view/cliputil.cxx +++ b/sc/source/ui/view/cliputil.cxx @@ -82,7 +82,7 @@ void ScClipUtil::PasteFromClipboard( ScViewData& rViewData, ScTabViewShell* pTab weld::WaitObject aWait( rViewData.GetDialogParent() ); if (!pOwnClip) { - pTabViewShell->PasteFromSystem(); + pTabViewShell->PasteFromSystem(true); // Anchor To Cell rather than To Page ScDrawView* pDrawView = pTabViewShell->GetScDrawView(); if(pDrawView) diff --git a/sc/source/ui/view/dbfunc.cxx b/sc/source/ui/view/dbfunc.cxx index 875531b37924..11b6d8d20e5c 100644 --- a/sc/source/ui/view/dbfunc.cxx +++ b/sc/source/ui/view/dbfunc.cxx @@ -275,11 +275,11 @@ void ScDBFunc::Query( const ScQueryParam& rQueryParam, const ScRange* pAdvSource void ScDBFunc::ToggleAutoFilter() { - ScViewData* pViewData = &GetViewData(); - ScDocShell* pDocSh = pViewData->GetDocShell(); + ScViewData& rViewData = GetViewData(); + ScDocShell* pDocSh = rViewData.GetDocShell(); ScQueryParam aParam; - ScDocument& rDoc = pViewData->GetDocument(); + ScDocument& rDoc = rViewData.GetDocument(); ScDBData* pDBData = GetDBData(false, SC_DB_AUTOFILTER, ScGetDBSelection::RowDown); pDBData->SetByRow( true ); //! undo, retrieve beforehand ?? @@ -287,7 +287,7 @@ void ScDBFunc::ToggleAutoFilter() SCCOL nCol; SCROW nRow = aParam.nRow1; - SCTAB nTab = pViewData->GetTabNo(); + SCTAB nTab = rViewData.GetTabNo(); ScMF nFlag; bool bHasAuto = true; bool bHeader = pDBData->HasHeader(); @@ -310,12 +310,13 @@ void ScDBFunc::ToggleAutoFilter() { nFlag = rDoc.GetAttr( nCol, nRow, nTab, ATTR_MERGE_FLAG )->GetValue(); rDoc.ApplyAttr( nCol, nRow, nTab, ScMergeFlagAttr( nFlag & ~ScMF::Auto ) ); + aParam.RemoveAllEntriesByField(nCol); } // use a list action for the AutoFilter buttons (ScUndoAutoFilter) and the filter operation OUString aUndo = ScResId( STR_UNDO_QUERY ); - pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, pViewData->GetViewShell()->GetViewShellId() ); + pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, rViewData.GetViewShell()->GetViewShellId() ); ScRange aRange; pDBData->GetArea( aRange ); @@ -324,11 +325,6 @@ void ScDBFunc::ToggleAutoFilter() pDBData->SetAutoFilter(false); - // remove filter (incl. Paint / Undo) - - SCSIZE nEC = aParam.GetEntryCount(); - for (SCSIZE i=0; i<nEC; i++) - aParam.GetEntry(i).bDoQuery = false; aParam.bDuplicate = true; Query( aParam, nullptr, true ); @@ -343,7 +339,7 @@ void ScDBFunc::ToggleAutoFilter() { if (!bHeader) { - std::shared_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(pViewData->GetDialogParent(), + std::shared_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(rViewData.GetDialogParent(), VclMessageType::Question, VclButtonsType::YesNo, // header from first row? @@ -351,21 +347,21 @@ void ScDBFunc::ToggleAutoFilter() xBox->set_title(ScResId(STR_MSSG_DOSUBTOTALS_0)); // "StarCalc" xBox->set_default_response(RET_YES); xBox->SetInstallLOKNotifierHdl(LINK(this, ScDBFunc, InstallLOKNotifierHdl)); - xBox->runAsync(xBox, [pDocSh, pViewData, pDBData, nRow, nTab, aParam] (sal_Int32 nResult) { + xBox->runAsync(xBox, [pDocSh, &rViewData, pDBData, nRow, nTab, aParam] (sal_Int32 nResult) { if (nResult == RET_YES) { pDBData->SetHeader( true ); //! Undo ?? } - ApplyAutoFilter(pDocSh, pViewData, pDBData, nRow, nTab, aParam); + ApplyAutoFilter(pDocSh, rViewData, pDBData, nRow, nTab, aParam); }); } else - ApplyAutoFilter(pDocSh, pViewData, pDBData, nRow, nTab, aParam); + ApplyAutoFilter(pDocSh, rViewData, pDBData, nRow, nTab, aParam); } else { - std::shared_ptr<weld::MessageDialog> xErrorBox(Application::CreateMessageDialog(pViewData->GetDialogParent(), + std::shared_ptr<weld::MessageDialog> xErrorBox(Application::CreateMessageDialog(rViewData.GetDialogParent(), VclMessageType::Warning, VclButtonsType::Ok, ScResId(STR_ERR_AUTOFILTER))); xErrorBox->SetInstallLOKNotifierHdl(LINK(this, ScDBFunc, InstallLOKNotifierHdl)); @@ -379,10 +375,10 @@ IMPL_STATIC_LINK_NOARG(ScDBFunc, InstallLOKNotifierHdl, void*, vcl::ILibreOffice return GetpApp(); } -void ScDBFunc::ApplyAutoFilter(ScDocShell* pDocSh, ScViewData* pViewData, ScDBData* pDBData, +void ScDBFunc::ApplyAutoFilter(ScDocShell* pDocSh, ScViewData& rViewData, ScDBData* pDBData, SCROW nRow, SCTAB nTab, const ScQueryParam& aParam) { - ScDocument& rDoc = pViewData->GetDocument(); + ScDocument& rDoc = rViewData.GetDocument(); ScRange aRange; pDBData->GetArea(aRange); pDocSh->GetUndoManager()->AddUndoAction( @@ -450,6 +446,34 @@ void ScDBFunc::HideAutoFilter() rBindings.Invalidate( SID_AUTOFILTER_HIDE ); } +void ScDBFunc::ClearAutoFilter() +{ + ScDocShell* pDocSh = GetViewData().GetDocShell(); + ScDocument& rDoc = pDocSh->GetDocument(); + + SCCOL nCol = GetViewData().GetCurX(); + SCROW nRow = GetViewData().GetCurY(); + SCTAB nTab = GetViewData().GetTabNo(); + + ScDBData* pDBData = rDoc.GetDBAtCursor(nCol, nRow, nTab, ScDBDataPortion::AREA); + if (!pDBData) + return; + + ScQueryParam aParam; + pDBData->GetQueryParam(aParam); + + aParam.RemoveAllEntriesByField(nCol); + aParam.eSearchType = utl::SearchParam::SearchType::Normal; + aParam.bCaseSens = false; + aParam.bDuplicate = true; + aParam.bInplace = true; + + Query(aParam, nullptr, true); + + SfxBindings& rBindings = GetViewData().GetBindings(); + rBindings.Invalidate( SID_CLEAR_AUTO_FILTER ); +} + // Re-Import bool ScDBFunc::ImportData( const ScImportParam& rParam ) diff --git a/sc/source/ui/view/drawview.cxx b/sc/source/ui/view/drawview.cxx index b0c5e396322e..ca8ac4b29f1e 100644 --- a/sc/source/ui/view/drawview.cxx +++ b/sc/source/ui/view/drawview.cxx @@ -964,26 +964,8 @@ void ScDrawView::SyncForGrid( SdrObject* pObj ) void ScDrawView::resetGridOffsetsForAllSdrPageViews() { - SdrPageView* pPageView(GetSdrPageView()); - - if(nullptr == pPageView) - return; - - for(sal_uInt32 a(0); a < pPageView->PageWindowCount(); a++) - { - SdrPageWindow* pPageWindow(pPageView->GetPageWindow(a)); - assert(pPageWindow && "SdrView::SetMasterPagePaintCaching: Corrupt SdrPageWindow list (!)"); - - if(nullptr != pPageWindow) - { - sdr::contact::ObjectContact& rObjectContact(pPageWindow->GetObjectContact()); - - if(rObjectContact.supportsGridOffsets()) - { - rObjectContact.resetAllGridOffsets(); - } - } - } + if (SdrPageView* pPageView = GetSdrPageView()) + pPageView->resetGridOffsetsOfAllPageWindows(); } bool ScDrawView::calculateGridOffsetForSdrObject( diff --git a/sc/source/ui/view/editsh.cxx b/sc/source/ui/view/editsh.cxx index 3e8a5abe7b1d..d080502eeffe 100644 --- a/sc/source/ui/view/editsh.cxx +++ b/sc/source/ui/view/editsh.cxx @@ -410,8 +410,8 @@ void ScEditShell::Execute( SfxRequest& rReq ) vcl::Font aFont(aFontName, Size(1,1)); // Size just because CTOR // tdf#125054 see comment in drtxob.cxx, same ID aNewItem = std::make_shared<SvxFontItem>( - aFont.GetFamilyType(), aFont.GetFamilyName(), - aFont.GetStyleName(), aFont.GetPitch(), + aFont.GetFamilyTypeMaybeAskConfig(), aFont.GetFamilyName(), + aFont.GetStyleName(), aFont.GetPitchMaybeAskConfig(), aFont.GetCharSet(), ATTR_FONT); } else diff --git a/sc/source/ui/view/formatsh.cxx b/sc/source/ui/view/formatsh.cxx index e8f1baf7e745..60526841fa64 100644 --- a/sc/source/ui/view/formatsh.cxx +++ b/sc/source/ui/view/formatsh.cxx @@ -147,70 +147,66 @@ void ScFormatShell::ExecuteStyle( SfxRequest& rReq ) ScDocument& rDoc = pDocSh->GetDocument(); SfxStyleSheetBasePool* pStylePool = rDoc.GetStyleSheetPool(); - if ( (nSlotId == SID_STYLE_PREVIEW) - || (nSlotId == SID_STYLE_END_PREVIEW) ) + if (nSlotId == SID_STYLE_PREVIEW) { - if (nSlotId == SID_STYLE_PREVIEW) + SfxStyleFamily eFamily = SfxStyleFamily::Para; + const SfxUInt16Item* pFamItem; + if ( pArgs && (pFamItem = pArgs->GetItemIfSet( SID_STYLE_FAMILY )) ) + eFamily = static_cast<SfxStyleFamily>(pFamItem->GetValue()); + const SfxPoolItem* pNameItem; + OUString aStyleName; + if (pArgs && SfxItemState::SET == pArgs->GetItemState( nSlotId, true, &pNameItem )) + aStyleName = static_cast<const SfxStringItem*>(pNameItem)->GetValue(); + if ( eFamily == SfxStyleFamily::Para ) // CellStyles { - SfxStyleFamily eFamily = SfxStyleFamily::Para; - const SfxUInt16Item* pFamItem; - if ( pArgs && (pFamItem = pArgs->GetItemIfSet( SID_STYLE_FAMILY )) ) - eFamily = static_cast<SfxStyleFamily>(pFamItem->GetValue()); - const SfxPoolItem* pNameItem; - OUString aStyleName; - if (pArgs && SfxItemState::SET == pArgs->GetItemState( nSlotId, true, &pNameItem )) - aStyleName = static_cast<const SfxStringItem*>(pNameItem)->GetValue(); - if ( eFamily == SfxStyleFamily::Para ) // CellStyles - { - ScMarkData aFuncMark( rViewData.GetMarkData() ); - ScViewUtil::UnmarkFiltered( aFuncMark, rDoc ); - aFuncMark.MarkToMulti(); + ScMarkData aFuncMark( rViewData.GetMarkData() ); + ScViewUtil::UnmarkFiltered( aFuncMark, rDoc ); + aFuncMark.MarkToMulti(); - if ( !aFuncMark.IsMarked() && !aFuncMark.IsMultiMarked() ) - { - SCCOL nCol = rViewData.GetCurX(); - SCROW nRow = rViewData.GetCurY(); - SCTAB nTab = rViewData.GetTabNo(); - ScRange aRange( nCol, nRow, nTab ); - aFuncMark.SetMarkArea( aRange ); - } - rDoc.SetPreviewSelection( aFuncMark ); - ScStyleSheet* pPreviewStyle = static_cast<ScStyleSheet*>( pStylePool->Find( aStyleName, eFamily ) ); - rDoc.SetPreviewCellStyle( pPreviewStyle ); - ScPatternAttr aAttr( *rDoc.GetSelectionPattern( aFuncMark ) ); - aAttr.SetStyleSheet( pPreviewStyle ); + if ( !aFuncMark.IsMarked() && !aFuncMark.IsMultiMarked() ) + { + SCCOL nCol = rViewData.GetCurX(); + SCROW nRow = rViewData.GetCurY(); + SCTAB nTab = rViewData.GetTabNo(); + ScRange aRange( nCol, nRow, nTab ); + aFuncMark.SetMarkArea( aRange ); + } + rDoc.SetPreviewSelection( aFuncMark ); + ScStyleSheet* pPreviewStyle = static_cast<ScStyleSheet*>( pStylePool->Find( aStyleName, eFamily ) ); + rDoc.SetPreviewCellStyle( pPreviewStyle ); + ScPatternAttr aAttr( *rDoc.GetSelectionPattern( aFuncMark ) ); + aAttr.SetStyleSheet( pPreviewStyle ); - SfxItemSet aItemSet( GetPool() ); + SfxItemSet aItemSet( GetPool() ); - ScPatternAttr aNewAttrs(GetViewData().GetDocument().getCellAttributeHelper()); - SfxItemSet& rNewSet = aNewAttrs.GetItemSet(); - rNewSet.Put( aItemSet, false ); + ScPatternAttr aNewAttrs(GetViewData().GetDocument().getCellAttributeHelper()); + SfxItemSet& rNewSet = aNewAttrs.GetItemSet(); + rNewSet.Put( aItemSet, false ); - rDoc.ApplySelectionPattern( aNewAttrs, rDoc.GetPreviewSelection() ); - pTabViewShell->UpdateSelectionArea( aFuncMark, &aAttr ); - } + rDoc.ApplySelectionPattern( aNewAttrs, rDoc.GetPreviewSelection() ); + pTabViewShell->UpdateSelectionArea(aFuncMark, &aAttr, /*adjustHeight*/ false); } - else + } + else if (nSlotId == SID_STYLE_END_PREVIEW) + { + // No mark at all happens when creating a new document, in which + // case the selection pattern obtained would be empty (created of + // GetPool()) anyway and nothing needs to be applied. + ScMarkData aPreviewMark( rDoc.GetPreviewSelection()); + if (aPreviewMark.IsMarked() || aPreviewMark.IsMultiMarked()) { - // No mark at all happens when creating a new document, in which - // case the selection pattern obtained would be empty (created of - // GetPool()) anyway and nothing needs to be applied. - ScMarkData aPreviewMark( rDoc.GetPreviewSelection()); - if (aPreviewMark.IsMarked() || aPreviewMark.IsMultiMarked()) - { - ScPatternAttr aAttr( *rDoc.GetSelectionPattern( aPreviewMark ) ); - if ( ScStyleSheet* pPreviewStyle = rDoc.GetPreviewCellStyle() ) - aAttr.SetStyleSheet( pPreviewStyle ); - rDoc.SetPreviewCellStyle(nullptr); - - SfxItemSet aItemSet( GetPool() ); - - ScPatternAttr aNewAttrs(GetViewData().GetDocument().getCellAttributeHelper()); - SfxItemSet& rNewSet = aNewAttrs.GetItemSet(); - rNewSet.Put( aItemSet, false ); - rDoc.ApplySelectionPattern( aNewAttrs, aPreviewMark ); - pTabViewShell->UpdateSelectionArea( aPreviewMark, &aAttr ); - } + ScPatternAttr aAttr( *rDoc.GetSelectionPattern( aPreviewMark ) ); + if ( ScStyleSheet* pPreviewStyle = rDoc.GetPreviewCellStyle() ) + aAttr.SetStyleSheet( pPreviewStyle ); + rDoc.SetPreviewCellStyle(nullptr); + + SfxItemSet aItemSet( GetPool() ); + + ScPatternAttr aNewAttrs(GetViewData().GetDocument().getCellAttributeHelper()); + SfxItemSet& rNewSet = aNewAttrs.GetItemSet(); + rNewSet.Put( aItemSet, false ); + rDoc.ApplySelectionPattern( aNewAttrs, aPreviewMark ); + pTabViewShell->UpdateSelectionArea(aPreviewMark, &aAttr, /*adjustHeight*/ false); } } else if (nSlotId == SID_CLASSIFICATION_APPLY) @@ -936,7 +932,8 @@ void ScFormatShell::ExecuteAttr( SfxRequest& rReq ) case SID_ATTR_CHAR_ENDPREVIEW_FONT: { rDoc.SetPreviewFont(nullptr); - pTabViewShell->UpdateSelectionArea( rDoc.GetPreviewSelection() ); + pTabViewShell->UpdateSelectionArea(rDoc.GetPreviewSelection(), nullptr, + /*adjustHeight*/ false); break; } case SID_ATTR_CHAR_COLOR: @@ -1017,7 +1014,7 @@ void ScFormatShell::ExecuteAttr( SfxRequest& rReq ) aFuncMark.SetMarkArea( aRange ); } rDoc.SetPreviewSelection( aFuncMark ); - pTabViewShell->UpdateSelectionArea( aFuncMark ); + pTabViewShell->UpdateSelectionArea(aFuncMark, nullptr, /*adjustHeight*/ false); break; } case SID_ATTR_CHAR_OVERLINE: diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index eb7cbb2e27a7..faaa9ba51c82 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -390,6 +390,7 @@ ScGridWindow::ScGridWindow( vcl::Window* pParent, ScViewData& rData, ScSplitPos aComboButton( GetOutDev() ), aCurMousePos( 0,0 ), nPaintCount( 0 ), + aDrawSelectionPos( 0,0 ), aRFSelectedCorned( NONE ), maShowPageBreaksTimer("ScGridWindow maShowPageBreaksTimer"), bEEMouse( false ), @@ -5786,10 +5787,10 @@ std::shared_ptr<ScFieldEditEngine> createEditEngine( ScDocShell* pDocSh, const S ScSizeDeviceProvider aProv(pDocSh); pEngine->SetRefDevice(aProv.GetDevice()); pEngine->SetRefMapMode(MapMode(MapUnit::Map100thMM)); - auto pDefault = std::make_unique<SfxItemSet>(pEngine->GetEmptyItemSet()); - rPat.FillEditItemSet(pDefault.get()); - pDefault->Put(SvxAdjustItem(toSvxAdjust(rPat), EE_PARA_JUST)); - pEngine->SetDefaults(std::move(pDefault)); + SfxItemSet aDefault(pEngine->GetEmptyItemSet()); + rPat.FillEditItemSet(&aDefault); + aDefault.Put(SvxAdjustItem(toSvxAdjust(rPat), EE_PARA_JUST)); + pEngine->SetDefaults(std::move(aDefault)); return pEngine; } @@ -6103,21 +6104,21 @@ void ScGridWindow::ResetAutoSpellForContentChange() mpSpellCheckCxt->resetForContentChange(); } -void ScGridWindow::SetAutoSpellData( SCCOL nPosX, SCROW nPosY, const std::vector<editeng::MisspellRanges>* pRanges ) +void ScGridWindow::SetAutoSpellData( SCCOL nPosX, SCROW nPosY, const sc::MisspellRangeResult& rRangeResult ) { if (!mpSpellCheckCxt) return; - mpSpellCheckCxt->setMisspellRanges(nPosX, nPosY, pRanges); + mpSpellCheckCxt->setMisspellRanges(nPosX, nPosY, rRangeResult); } -const std::vector<editeng::MisspellRanges>* ScGridWindow::GetAutoSpellData( SCCOL nPosX, SCROW nPosY ) +sc::MisspellRangeResult ScGridWindow::GetAutoSpellData( SCCOL nPosX, SCROW nPosY ) { if (!mpSpellCheckCxt) - return nullptr; + return {}; if (!maVisibleRange.isInside(nPosX, nPosY)) - return nullptr; + return {}; return mpSpellCheckCxt->getMisspellRanges(nPosX, nPosY); } @@ -7386,8 +7387,16 @@ void ScGridWindow::UpdateSparklineGroupOverlay() SCCOL nColumn = pCurrentSparkline->getColumn(); SCROW nRow = pCurrentSparkline->getRow(); - Point aStart = mrViewData.GetScrPos(nColumn, nRow, eWhich); - Point aEnd = mrViewData.GetScrPos(nColumn + 1, nRow + 1, eWhich); + SCTAB nTab = mrViewData.GetTabNo(); + ScRange aCurrRange(nColumn, nRow, nTab); + bool bMerge = rDocument.IsMerged(aCurrentAddress); + if (bMerge) + rDocument.ExtendMerge(aCurrRange); + + Point aStart = mrViewData.GetScrPos(aCurrRange.aStart.Col(), + aCurrRange.aStart.Row(), eWhich); + Point aEnd = mrViewData.GetScrPos(aCurrRange.aEnd.Col() + 1, + aCurrRange.aEnd.Row() + 1, eWhich); basegfx::B2DRange aRange(aStart.X(), aStart.Y(), aEnd.X(), aEnd.Y()); @@ -7424,15 +7433,6 @@ rtl::Reference<sdr::overlay::OverlayManager> ScGridWindow::getOverlayManager() c return rtl::Reference<sdr::overlay::OverlayManager>(); } -void ScGridWindow::flushOverlayManager() -{ - // #i70788# get the OverlayManager safely - rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager = getOverlayManager(); - - if (xOverlayManager.is()) - xOverlayManager->flush(); -} - ScViewData& ScGridWindow::getViewData() { return mrViewData; diff --git a/sc/source/ui/view/gridwin2.cxx b/sc/source/ui/view/gridwin2.cxx index 5b85d3c66fd5..02df37caac6f 100644 --- a/sc/source/ui/view/gridwin2.cxx +++ b/sc/source/ui/view/gridwin2.cxx @@ -206,7 +206,7 @@ void ScGridWindow::DoPushPivotButton( SCCOL nCol, SCROW nRow, const MouseEvent& nSrcTab = pDesc->GetSourceRange().aStart.Tab(); } - SfxItemSetFixed<SCITEM_QUERYDATA, SCITEM_QUERYDATA> aArgSet( mrViewData.GetViewShell()->GetPool() ); + SfxItemSet aArgSet(SfxItemSet::makeFixedSfxItemSet<SCITEM_QUERYDATA, SCITEM_QUERYDATA>(mrViewData.GetViewShell()->GetPool())); aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA, &mrViewData, &aQueryParam ) ); ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); diff --git a/sc/source/ui/view/gridwin3.cxx b/sc/source/ui/view/gridwin3.cxx index c0aa97ded4c6..3b257fabc226 100644 --- a/sc/source/ui/view/gridwin3.cxx +++ b/sc/source/ui/view/gridwin3.cxx @@ -31,15 +31,40 @@ #include <output.hxx> #include <drawview.hxx> #include <fupoor.hxx> +#include <fusel.hxx> +#include <scmod.hxx> +#include <appoptio.hxx> #include <drawutil.hxx> #include <document.hxx> #include <comphelper/lok.hxx> +static bool lcl_HasSelectionChanged(const SdrMarkList & rBeforeList, const SdrMarkList & rAfterList) +{ + if (rBeforeList.GetMarkCount() != rAfterList.GetMarkCount()) + return true; + for (size_t nObject = 0; nObject < rBeforeList.GetMarkCount(); ++nObject) + { + if (rBeforeList.GetMark(nObject)->GetMarkedSdrObj() != + rAfterList.GetMark(nObject)->GetMarkedSdrObj()) + return true; + } + return false; +} + +static bool lcl_PosUnchanged(const tools::Rectangle& rSelectionRect, const Point& rDrawSelectionPos) +{ + return rDrawSelectionPos.X() == rSelectionRect.Left() && + rDrawSelectionPos.Y() == rSelectionRect.Top(); +} + bool ScGridWindow::DrawMouseButtonDown(const MouseEvent& rMEvt) { bool bRet = false; FuPoor* pDraw = mrViewData.GetView()->GetDrawFuncPtr(); + if (pDraw) + pDraw->ResetSelectionHasChanged(); + ScDrawView* pDrView = mrViewData.GetScDrawView(); if (pDraw && !mrViewData.IsRefMode()) { MapMode aDrawMode = GetDrawMapMode(); @@ -49,6 +74,15 @@ bool ScGridWindow::DrawMouseButtonDown(const MouseEvent& rMEvt) pDraw->SetWindow( this ); Point aLogicPos = PixelToLogic(rMEvt.GetPosPixel()); + SdrMarkList aPreMarkList = pDrView->GetMarkedObjectList(); + if(!aPreMarkList.GetMarkCount()) + aDrawSelectionPos = Point(0,0); + else + { + tools::Rectangle aRect = pDrView->GetAllMarkedRect(); + aDrawSelectionPos = Point(aRect.Left(), aRect.Top()); + } + if ( pDraw->IsDetectiveHit( aLogicPos ) ) { // nothing on detective arrows (double click is evaluated on ButtonUp) @@ -57,8 +91,12 @@ bool ScGridWindow::DrawMouseButtonDown(const MouseEvent& rMEvt) else { bRet = pDraw->MouseButtonDown( rMEvt ); - if ( bRet ) + if (bRet) + { + if (lcl_HasSelectionChanged(aPreMarkList, pDrView->GetMarkedObjectList())) + pDraw->SetSelectionHasChanged(); UpdateStatusPosSize(); + } } if ( comphelper::LibreOfficeKit::isActive() && aOldMode != aDrawMode ) @@ -66,7 +104,6 @@ bool ScGridWindow::DrawMouseButtonDown(const MouseEvent& rMEvt) } // cancel draw with right key - ScDrawView* pDrView = mrViewData.GetScDrawView(); if ( pDrView && !rMEvt.IsLeft() && !bRet ) { pDrView->BrkAction(); @@ -79,12 +116,13 @@ bool ScGridWindow::DrawMouseButtonUp(const MouseEvent& rMEvt) { ScViewFunc* pView = mrViewData.GetView(); bool bRet = false; + bool bLOKitActive = comphelper::LibreOfficeKit::isActive(); FuPoor* pDraw = pView->GetDrawFuncPtr(); if (pDraw && !mrViewData.IsRefMode()) { MapMode aDrawMode = GetDrawMapMode(); MapMode aOldMode = GetMapMode(); - if ( comphelper::LibreOfficeKit::isActive() && aOldMode != aDrawMode ) + if ( bLOKitActive && aOldMode != aDrawMode ) SetMapMode( aDrawMode ); pDraw->SetWindow( this ); @@ -92,9 +130,9 @@ bool ScGridWindow::DrawMouseButtonUp(const MouseEvent& rMEvt) // execute "format paint brush" for drawing objects SfxItemSet* pDrawBrush = pView->GetDrawBrushSet(); + ScDrawView* pDrView = mrViewData.GetScDrawView(); if ( pDrawBrush ) { - ScDrawView* pDrView = mrViewData.GetScDrawView(); if ( pDrView ) { pDrView->SetAttrToMarked(*pDrawBrush, true/*bReplaceAll*/); @@ -103,8 +141,18 @@ bool ScGridWindow::DrawMouseButtonUp(const MouseEvent& rMEvt) if ( !pView->IsPaintBrushLocked() ) pView->ResetBrushDocument(); // end paint brush mode if not locked } + else if (!bLOKitActive && pDrView->GetMarkedObjectList().GetMarkCount() > 0 + && rMEvt.IsLeft() + && rMEvt.GetClicks() == 1 + && ScModule::get()->GetAppOptions().IsClickChangeRotation() + && !pDraw->HasSelectionChanged() + && dynamic_cast<FuSelection*>(pDraw) + && lcl_PosUnchanged(pDrView->GetAllMarkedRect(), aDrawSelectionPos)) + { + mrViewData.GetView()->SwitchRotateMode(); + } - if ( comphelper::LibreOfficeKit::isActive() && aOldMode != aDrawMode ) + if ( bLOKitActive && aOldMode != aDrawMode ) SetMapMode( aOldMode ); } diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx index 7a13917fd917..7b7d05a58779 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -94,7 +94,7 @@ static void lcl_LimitRect( tools::Rectangle& rRect, const tools::Rectangle& rVis static void lcl_DrawOneFrame( vcl::RenderContext* pDev, const tools::Rectangle& rInnerPixel, const OUString& rTitle, const Color& rColor, bool bTextBelow, double nPPTX, double nPPTY, const Fraction& rZoomY, - ScDocument& rDoc, ScViewData& rButtonViewData, bool bLayoutRTL ) + const ScDocument& rDoc, ScViewData& rButtonViewData, bool bLayoutRTL ) { // rButtonViewData is only used to set the button size, @@ -1351,9 +1351,6 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI if (mrViewData.HasEditView(eWhich)) { - // flush OverlayManager before changing the MapMode - flushOverlayManager(); - // set MapMode for text edit rDevice.SetMapMode(mrViewData.GetLogicMode()); } @@ -1500,6 +1497,13 @@ namespace }; } // anonymous namespace +void ScGridWindow::resetCachedViewGridOffsets() const +{ + if (mpLOKDrawView) + if (SdrPageView* pPageView = mpLOKDrawView->GetSdrPageView()) + pPageView->resetGridOffsetsOfAllPageWindows(); +} + void ScGridWindow::PaintTile( VirtualDevice& rDevice, int nOutputWidth, int nOutputHeight, int nTilePosX, int nTilePosY, @@ -1910,10 +1914,10 @@ void ScGridWindow::DrawPagePreview( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, // use EditEngine to draw mixed-script string pEditEng.reset(new ScEditEngineDefaulter( EditEngine::CreatePool().get(), true )); pEditEng->SetRefMapMode(rRenderContext.GetMapMode()); - auto pEditDefaults = std::make_unique<SfxItemSet>( pEditEng->GetEmptyItemSet() ); - rDefPattern.FillEditItemSet( pEditDefaults.get() ); - pEditDefaults->Put( SvxColorItem( COL_LIGHTGRAY, EE_CHAR_COLOR ) ); - pEditEng->SetDefaults( std::move(pEditDefaults) ); + SfxItemSet aEditDefaults( pEditEng->GetEmptyItemSet() ); + rDefPattern.FillEditItemSet( &aEditDefaults ); + aEditDefaults.Put( SvxColorItem( COL_LIGHTGRAY, EE_CHAR_COLOR ) ); + pEditEng->SetDefaults( std::move(aEditDefaults) ); } sal_uInt16 nCount = sal::static_int_cast<sal_uInt16>( pPageData->GetCount() ); diff --git a/sc/source/ui/view/gridwin5.cxx b/sc/source/ui/view/gridwin5.cxx index 5d6a8d78bfd8..ad1987f59382 100644 --- a/sc/source/ui/view/gridwin5.cxx +++ b/sc/source/ui/view/gridwin5.cxx @@ -405,7 +405,7 @@ css::uno::Reference< css::accessibility::XAccessible > } rtl::Reference<ScAccessibleDocument> pAccessibleDocument = - new ScAccessibleDocument(GetAccessibleParentWindow()->GetAccessible(), + new ScAccessibleDocument(GetAccessibleParent(), mrViewData.GetViewShell(), eWhich); pAccessibleDocument->PreInit(); diff --git a/sc/source/ui/view/olinewin.cxx b/sc/source/ui/view/olinewin.cxx index 6298f5db3687..52a78b2dcf0e 100644 --- a/sc/source/ui/view/olinewin.cxx +++ b/sc/source/ui/view/olinewin.cxx @@ -37,9 +37,9 @@ const tools::Long SC_OL_POSOFFSET = 2; const size_t SC_OL_NOLEVEL = static_cast< size_t >( -1 ); const size_t SC_OL_HEADERENTRY = static_cast< size_t >( -1 ); -ScOutlineWindow::ScOutlineWindow( vcl::Window* pParent, ScOutlineMode eMode, ScViewData* pViewData, ScSplitPos eWhich ) : +ScOutlineWindow::ScOutlineWindow( vcl::Window* pParent, ScOutlineMode eMode, ScViewData& rViewData, ScSplitPos eWhich ) : Window( pParent ), - mrViewData( *pViewData ), + mrViewData( rViewData ), meWhich( eWhich ), mbHoriz( eMode == SC_OUTLINE_HOR ), mbMirrorEntries( false ), // updated in SetHeaderSize diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx index cc4a3bd6e2b4..e12aabaff1c6 100644 --- a/sc/source/ui/view/output.cxx +++ b/sc/source/ui/view/output.cxx @@ -1083,22 +1083,13 @@ void ScOutputData::DrawBackground(vcl::RenderContext& rRenderContext) tools::Long nOneYLogic = aOnePixel.Height(); // See more about bWorksInPixels in ScOutputData::DrawGrid - bool bWorksInPixels = false; - if (eType == OUTTYPE_WINDOW) - bWorksInPixels = true; - - tools::Long nOneX = 1; - tools::Long nOneY = 1; - if (!bWorksInPixels) - { - nOneX = nOneXLogic; - nOneY = nOneYLogic; - } + bool bWorksInPixels = (eType == OUTTYPE_WINDOW); + const tools::Long nOneX = bWorksInPixels ? 1 : nOneXLogic; + const tools::Long nLayoutSign = bLayoutRTL ? -1 : 1; + const tools::Long nSignedOneX = nOneX * nLayoutSign; tools::Rectangle aRect; - tools::Long nLayoutSign = bLayoutRTL ? -1 : 1; - rRenderContext.SetLineColor(); bool bShowProt = mbSyntaxMode && mpDoc->IsTabProtected(nTab); @@ -1141,11 +1132,14 @@ void ScOutputData::DrawBackground(vcl::RenderContext& rRenderContext) } tools::Long nPosX = nScrX; - if ( bLayoutRTL ) nPosX += nMirrorW - nOneX; - aRect = tools::Rectangle(nPosX, nPosY - nOneY, nPosX, nPosY - nOneY + nRowHeight); + // tdf#135891 - adjust the x position to ensure the correct starting point + if (!bWorksInPixels) + nPosX -= nLayoutSign + 1; + + aRect = tools::Rectangle(nPosX, nPosY - 1, nPosX, nPosY - 1 + nRowHeight); if (bWorksInPixels) aRect = rRenderContext.PixelToLogic(aRect); // internal data in pixels, but we'll be drawing in logic units @@ -1228,6 +1222,9 @@ void ScOutputData::DrawBackground(vcl::RenderContext& rRenderContext) drawCells(rRenderContext, pColor, pBackground, pOldColor, pOldBackground, aRect, nPosXLogic, nLayoutSign, nOneXLogic, nOneYLogic, pDataBarInfo, pOldDataBarInfo, pIconSetInfo, pOldIconSetInfo, mpDoc->GetIconSetBitmapMap()); nPosX = nNewPosX; + // tdf#135891 - adjust the x position to ensure the correct starting point + if (!bWorksInPixels && nX == nX1) + nPosX += nSignedOneX + 1; } tools::Long nPosXLogic = nPosX; @@ -2388,23 +2385,6 @@ void ScOutputData::DrawChangeTrack() void ScOutputData::DrawSparklines(vcl::RenderContext& rRenderContext) { - Size aOnePixel = rRenderContext.PixelToLogic(Size(1,1)); - tools::Long nOneXLogic = aOnePixel.Width(); - tools::Long nOneYLogic = aOnePixel.Height(); - - // See more about bWorksInPixels in ScOutputData::DrawGrid - bool bWorksInPixels = false; - if (eType == OUTTYPE_WINDOW) - bWorksInPixels = true; - - tools::Long nOneX = 1; - tools::Long nOneY = 1; - if (!bWorksInPixels) - { - nOneX = nOneXLogic; - nOneY = nOneYLogic; - } - tools::Long nInitPosX = nScrX; if ( bLayoutRTL ) nInitPosX += nMirrorW - 1; // always in pixels @@ -2422,30 +2402,81 @@ void ScOutputData::DrawSparklines(vcl::RenderContext& rRenderContext) ScCellInfo* pInfo = &pThisRowInfo->cellInfo(nX); bool bIsMerged = false; - if ( nX==nX1 && pInfo->bHOverlapped && !pInfo->bVOverlapped ) - { - // find start of merged cell - bIsMerged = true; - SCROW nY = pRowInfo[nArrY].nRowNo; - SCCOL nMergeX = nX; - SCROW nMergeY = nY; - mpDoc->ExtendOverlapped( nMergeX, nMergeY, nX, nY, nTab ); - } + SCCOL nOverX = nX; + SCROW nOverY = pThisRowInfo->nRowNo; + tools::Long nStartPosX = nPosX; + tools::Long nStartPosY = nPosY; - std::shared_ptr<sc::Sparkline> pSparkline; ScAddress aCurrentAddress(nX, pRowInfo[nArrY].nRowNo, nTab); + std::shared_ptr<sc::Sparkline> pSparkline = mpDoc->GetSparkline(aCurrentAddress); + + if (pInfo->bHOverlapped || pInfo->bVOverlapped) + { + while (nOverX > 0 && (mpDoc->GetAttr( + nOverX, nOverY, nTab, ATTR_MERGE_FLAG)->GetValue() & ScMF::Hor)) + { + --nOverX; + nStartPosX -= nLayoutSign + * static_cast<tools::Long>(mpDoc->GetColWidth(nOverX, nTab) + * mnPPTX); + } + + while (nOverY > 0 && (mpDoc->GetAttr( + nOverX, nOverY, nTab, ATTR_MERGE_FLAG)->GetValue() & ScMF::Ver)) + { + --nOverY; + nStartPosY -= nLayoutSign + * static_cast<tools::Long>(mpDoc->GetRowHeight(nOverY, nTab) + * mnPPTY); + } + + pSparkline = mpDoc->GetSparkline(ScAddress(nOverX, nOverY, nTab)); + bIsMerged = pSparkline ? true : false; + } - if (!mpDoc->ColHidden(nX, nTab) && (pSparkline = mpDoc->GetSparkline(aCurrentAddress)) + if (!mpDoc->ColHidden(nX, nTab) && pSparkline && (bIsMerged || (!pInfo->bHOverlapped && !pInfo->bVOverlapped))) { - const tools::Long nWidth = pRowInfo[0].basicCellInfo(nX).nWidth; - const tools::Long nHeight = pThisRowInfo->nHeight; + tools::Long nWidth = pRowInfo[0].basicCellInfo(nX).nWidth; + tools::Long nHeight = pThisRowInfo->nHeight; + + if (bIsMerged || pInfo->bMerged) + { + const ScMergeAttr* pMerge = mpDoc->GetAttr(nOverX, nOverY, nTab, ATTR_MERGE); + SCROW nCountX = pMerge->GetColMerge(); + if (nCountX > 0) + { + sal_Int32 nIndex = 1; + while (nCountX > nIndex && (mpDoc->GetAttr( + nOverX + nIndex, nOverY, nTab, ATTR_MERGE_FLAG)->GetValue() & ScMF::Hor)) + { + nWidth += nLayoutSign + * static_cast<tools::Long>( + mpDoc->GetColWidth(nOverX + nIndex, nTab) * mnPPTX); + nIndex++; + } + } + + SCROW nCountY = pMerge->GetRowMerge(); + if (nCountY > 0) + { + sal_Int32 nIndex = 1; + while (nCountY > nIndex && (mpDoc->GetAttr( + nOverX, nOverY + nIndex, nTab, ATTR_MERGE_FLAG)->GetValue() & ScMF::Ver)) + { + nHeight += nLayoutSign + * static_cast<tools::Long>( + mpDoc->GetRowHeight(nOverY + nIndex, nTab) * mnPPTY); + nIndex++; + } + } + } - Point aPoint(nPosX, nPosY); + Point aPoint(nStartPosX, nStartPosY); Size aSize(nWidth, nHeight); sc::SparklineRenderer renderer(*mpDoc); - renderer.render(pSparkline, rRenderContext, tools::Rectangle(aPoint, aSize), nOneX, nOneY, double(aZoomX), double(aZoomY)); + renderer.render(pSparkline, rRenderContext, tools::Rectangle(aPoint, aSize), 1, 1, double(aZoomX), double(aZoomY)); } nPosX += pRowInfo[0].basicCellInfo(nX).nWidth * nLayoutSign; diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx index 4a3bdc5535ba..7123c47d986f 100644 --- a/sc/source/ui/view/output2.cxx +++ b/sc/source/ui/view/output2.cxx @@ -872,7 +872,7 @@ double ScOutputData::GetStretch() const // output strings -static void lcl_DoHyperlinkResult( const OutputDevice* pDev, const tools::Rectangle& rRect, ScRefCellValue& rCell ) +static void lcl_DoHyperlinkResult( const OutputDevice* pDev, const tools::Rectangle& rRect, const ScRefCellValue& rCell ) { vcl::PDFExtOutDevData* pPDFData = dynamic_cast< vcl::PDFExtOutDevData* >( pDev->GetExtOutDevData() ); @@ -888,7 +888,7 @@ static void lcl_DoHyperlinkResult( const OutputDevice* pDev, const tools::Rectan if ( !aURL.isEmpty() && pPDFData ) { vcl::PDFExtOutDevBookmarkEntry aBookmark; - aBookmark.nLinkId = pPDFData->CreateLink(rRect, aCellText); + aBookmark.nLinkId = pPDFData->CreateLink(rRect, u""_ustr); aBookmark.aBookmark = aURL; std::vector< vcl::PDFExtOutDevBookmarkEntry >& rBookmarks = pPDFData->GetBookmarks(); rBookmarks.push_back( aBookmark ); @@ -2302,7 +2302,7 @@ static void lcl_ClearEdit( EditEngine& rEngine ) // text and attributes rEngine.EnableSkipOutsideFormat(false); } -static bool lcl_SafeIsValue( ScRefCellValue& rCell ) +static bool lcl_SafeIsValue( const ScRefCellValue& rCell ) { switch (rCell.getType()) { @@ -2489,8 +2489,7 @@ ScOutputData::DrawEditParam::DrawEditParam(const ScPatternAttr* pPattern, const mpOldPattern(nullptr), mpOldCondSet(nullptr), mpOldPreviewFontSet(nullptr), - mpThisRowInfo(nullptr), - mpMisspellRanges(nullptr) + mpThisRowInfo(nullptr) {} bool ScOutputData::DrawEditParam::readCellContent( @@ -2534,8 +2533,8 @@ bool ScOutputData::DrawEditParam::readCellContent( lcl_SetEditColor( *mpEngine, *pColor ); } - if (mpMisspellRanges) - mpEngine->SetAllMisspellRanges(*mpMisspellRanges); + if (maMisspellRanges.mpRanges) + mpEngine->SetAllMisspellRanges(*maMisspellRanges.mpRanges); return true; } @@ -2559,28 +2558,28 @@ void ScOutputData::DrawEditParam::setPatternToEngine(bool bUseStyleColor) bool bCellContrast = bUseStyleColor && Application::GetSettings().GetStyleSettings().GetHighContrastMode(); - auto pSet = std::make_unique<SfxItemSet>( mpEngine->GetEmptyItemSet() ); - mpPattern->FillEditItemSet( pSet.get(), mpCondSet ); + SfxItemSet aSet( mpEngine->GetEmptyItemSet() ); + mpPattern->FillEditItemSet( &aSet, mpCondSet ); if ( mpPreviewFontSet ) { if ( const SvxFontItem* pItem = mpPreviewFontSet->GetItemIfSet( ATTR_FONT ) ) { // tdf#125054 adapt WhichID - pSet->PutAsTargetWhich(*pItem, EE_CHAR_FONTINFO); + aSet.PutAsTargetWhich(*pItem, EE_CHAR_FONTINFO); } if ( const SvxFontItem* pItem = mpPreviewFontSet->GetItemIfSet( ATTR_CJK_FONT ) ) { // tdf#125054 adapt WhichID - pSet->PutAsTargetWhich(*pItem, EE_CHAR_FONTINFO_CJK); + aSet.PutAsTargetWhich(*pItem, EE_CHAR_FONTINFO_CJK); } if ( const SvxFontItem* pItem = mpPreviewFontSet->GetItemIfSet( ATTR_CTL_FONT ) ) { // tdf#125054 adapt WhichID - pSet->PutAsTargetWhich(*pItem, EE_CHAR_FONTINFO_CTL); + aSet.PutAsTargetWhich(*pItem, EE_CHAR_FONTINFO_CTL); } } - bool bParaHyphenate = pSet->Get(EE_PARA_HYPHENATE).GetValue(); - mpEngine->SetDefaults( std::move(pSet) ); + bool bParaHyphenate = aSet.Get(EE_PARA_HYPHENATE).GetValue(); + mpEngine->SetDefaults( std::move(aSet) ); mpOldPattern = mpPattern; mpOldCondSet = mpCondSet; mpOldPreviewFontSet = mpPreviewFontSet; @@ -4600,7 +4599,7 @@ void ScOutputData::DrawEdit(bool bPixelToLogic) aParam.mpOldPreviewFontSet = pOldPreviewFontSet; aParam.mpThisRowInfo = pThisRowInfo; if (mpSpellCheckCxt) - aParam.mpMisspellRanges = mpSpellCheckCxt->getMisspellRanges(nCellX, nCellY); + aParam.maMisspellRanges = mpSpellCheckCxt->getMisspellRanges(nCellX, nCellY); if (aParam.meHorJustAttr == SvxCellHorJustify::Repeat) { @@ -4778,18 +4777,18 @@ void ScOutputData::DrawRotated(bool bPixelToLogic) // StringDiffer doesn't look at hyphenate, language items if ( !ScPatternAttr::areSame(pPattern, pOldPattern) || pCondSet != pOldCondSet ) { - auto pSet = std::make_unique<SfxItemSet>( mxOutputEditEngine->GetEmptyItemSet() ); - pPattern->FillEditItemSet( pSet.get(), pCondSet ); + SfxItemSet aSet( mxOutputEditEngine->GetEmptyItemSet() ); + pPattern->FillEditItemSet( &aSet, pCondSet ); // adjustment for EditEngine SvxAdjust eSvxAdjust = SvxAdjust::Left; if (eOrient==SvxCellOrientation::Stacked) eSvxAdjust = SvxAdjust::Center; // adjustment for bBreak is omitted here - pSet->Put( SvxAdjustItem( eSvxAdjust, EE_PARA_JUST ) ); + aSet.Put( SvxAdjustItem( eSvxAdjust, EE_PARA_JUST ) ); - bool bParaHyphenate = pSet->Get(EE_PARA_HYPHENATE).GetValue(); - mxOutputEditEngine->SetDefaults( std::move(pSet) ); + bool bParaHyphenate = aSet.Get(EE_PARA_HYPHENATE).GetValue(); + mxOutputEditEngine->SetDefaults( std::move(aSet) ); pOldPattern = pPattern; pOldCondSet = pCondSet; diff --git a/sc/source/ui/view/preview.cxx b/sc/source/ui/view/preview.cxx index 4a96b4c61d6f..34670acab451 100644 --- a/sc/source/ui/view/preview.cxx +++ b/sc/source/ui/view/preview.cxx @@ -383,7 +383,7 @@ void ScPreview::DoPrint( ScPreviewLocationData* pFillLocation ) pPrintFunc->SetManualZoom(nZoom); pPrintFunc->SetDateTime(aDateTime); pPrintFunc->SetClearFlag(true); - pPrintFunc->SetUseStyleColor( officecfg::Office::Common::Accessibility::IsForPagePreviews::get() ); + pPrintFunc->SetUseStyleColor(false); // tdf#101142 print preview should use a white background pPrintFunc->SetDrawView( pDrawView.get() ); @@ -498,10 +498,10 @@ void ScPreview::DoPrint( ScPreviewLocationData* pFillLocation ) new ScEditEngineDefaulter(EditEngine::CreatePool().get(), true)); pEditEng->SetRefMapMode(aMMMode); - auto pEditDefaults = std::make_unique<SfxItemSet>( pEditEng->GetEmptyItemSet() ); - rDefPattern.FillEditItemSet(pEditDefaults.get()); - pEditDefaults->Put(SvxColorItem(COL_LIGHTGRAY, EE_CHAR_COLOR)); - pEditEng->SetDefaults(std::move(pEditDefaults)); + SfxItemSet aEditDefaults( pEditEng->GetEmptyItemSet() ); + rDefPattern.FillEditItemSet(&aEditDefaults); + aEditDefaults.Put(SvxColorItem(COL_LIGHTGRAY, EE_CHAR_COLOR)); + pEditEng->SetDefaults(std::move(aEditDefaults)); OUString aEmptyMsg; if (mbHasEmptyRangeTable) @@ -1522,7 +1522,7 @@ css::uno::Reference<css::accessibility::XAccessible> ScPreview::CreateAccessible } rtl::Reference<ScAccessibleDocumentPagePreview> pAccessible = - new ScAccessibleDocumentPagePreview( GetAccessibleParentWindow()->GetAccessible(), pViewShell ); + new ScAccessibleDocumentPagePreview(GetAccessibleParent(), pViewShell ); xAcc = pAccessible; SetAccessible(xAcc); diff --git a/sc/source/ui/view/prevwsh.cxx b/sc/source/ui/view/prevwsh.cxx index 329a9b46df40..e1e9dc2f0c5b 100644 --- a/sc/source/ui/view/prevwsh.cxx +++ b/sc/source/ui/view/prevwsh.cxx @@ -625,7 +625,7 @@ void ScPreviewShell::Execute( SfxRequest& rReq ) } else { - SfxItemSetFixed<SID_ATTR_ZOOM, SID_ATTR_ZOOM> aSet( GetPool() ); + SfxItemSet aSet(SfxItemSet::makeFixedSfxItemSet<SID_ATTR_ZOOM, SID_ATTR_ZOOM>(GetPool())); SvxZoomItem aZoomItem( SvxZoomType::PERCENT, pPreview->GetZoom(), SID_ATTR_ZOOM ); aSet.Put( aZoomItem ); diff --git a/sc/source/ui/view/printfun.cxx b/sc/source/ui/view/printfun.cxx index 07f5225b87f5..1cf873093bd3 100644 --- a/sc/source/ui/view/printfun.cxx +++ b/sc/source/ui/view/printfun.cxx @@ -435,16 +435,14 @@ static void lcl_HidePrint( const ScTableInfo& rTabInfo, SCCOL nX1, SCCOL nX2 ) // - Preview of templates void ScPrintFunc::DrawToDev(ScDocument& rDoc, OutputDevice* pDev, double /* nPrintFactor */, - const tools::Rectangle& rBound, ScViewData* pViewData, bool bMetaFile) + const tools::Rectangle& rBound, ScViewData& rViewData, bool bMetaFile) { if (rDoc.GetMaxTableNumber() < 0) return; //! evaluate nPrintFactor !!! - SCTAB nTab = 0; - if (pViewData) - nTab = pViewData->GetTabNo(); + SCTAB nTab = rViewData.GetTabNo(); bool bDoGrid, bNullVal, bFormula; ScStyleSheetPool* pStylePool = rDoc.GetStyleSheetPool(); @@ -483,16 +481,16 @@ void ScPrintFunc::DrawToDev(ScDocument& rDoc, OutputDevice* pDev, double /* nPri nX2 = aRange.aEnd.Col(); nY2 = aRange.aEnd.Row(); } - else if (pViewData) + else { - ScSplitPos eWhich = pViewData->GetActivePart(); + ScSplitPos eWhich = rViewData.GetActivePart(); ScHSplitPos eHWhich = WhichH(eWhich); ScVSplitPos eVWhich = WhichV(eWhich); - nX1 = pViewData->GetPosX(eHWhich); - nY1 = pViewData->GetPosY(eVWhich); - nX2 = nX1 + pViewData->VisibleCellsX(eHWhich); + nX1 = rViewData.GetPosX(eHWhich); + nY1 = rViewData.GetPosY(eVWhich); + nX2 = nX1 + rViewData.VisibleCellsX(eHWhich); if (nX2>nX1) --nX2; - nY2 = nY1 + pViewData->VisibleCellsY(eVWhich); + nY2 = nY1 + rViewData.VisibleCellsY(eVWhich); if (nY2>nY1) --nY2; } @@ -541,7 +539,9 @@ void ScPrintFunc::DrawToDev(ScDocument& rDoc, OutputDevice* pDev, double /* nPri // If no lines, still leave space for grid lines // (would be elseways cut away) - nScrX += 1; + // tdf#135891 - adjust the x position to ensure the correct starting point + const Size aOnePixel = pDev->PixelToLogic(Size(1, 1)); + nScrX += aOnePixel.Width(); nScrY += 1; ScOutputData aOutputData( pDev, OUTTYPE_PRINTER, aTabInfo, &rDoc, nTab, @@ -589,14 +589,14 @@ void ScPrintFunc::DrawToDev(ScDocument& rDoc, OutputDevice* pDev, double /* nPri //! nZoom for GetFont in OutputData ??? - if (!bMetaFile && pViewData) - pDev->SetMapMode(pViewData->GetLogicMode(pViewData->GetActivePart())); + if (!bMetaFile) + pDev->SetMapMode(rViewData.GetLogicMode(rViewData.GetActivePart())); // #i72502# const Point aMMOffset(aOutputData.PrePrintDrawingLayer(nLogStX, nLogStY)); aOutputData.PrintDrawingLayer(SC_LAYER_BACK, aMMOffset); - if (!bMetaFile && pViewData) + if (!bMetaFile) pDev->SetMapMode(aMode); aOutputData.DrawBackground(*pDev); @@ -606,14 +606,14 @@ void ScPrintFunc::DrawToDev(ScDocument& rDoc, OutputDevice* pDev, double /* nPri aOutputData.DrawSparklines(*pDev); aOutputData.DrawStrings(); - if (!bMetaFile && pViewData) - pDev->SetMapMode(pViewData->GetLogicMode(pViewData->GetActivePart())); + if (!bMetaFile) + pDev->SetMapMode(rViewData.GetLogicMode(rViewData.GetActivePart())); aOutputData.DrawEdit(!bMetaFile); if (bDoGrid) { - if (!bMetaFile && pViewData) + if (!bMetaFile) pDev->SetMapMode(aMode); aOutputData.DrawGrid(*pDev, true, false); // no page breaks diff --git a/sc/source/ui/view/select.cxx b/sc/source/ui/view/select.cxx index 28ee0bc4cc77..5585c9f92395 100644 --- a/sc/source/ui/view/select.cxx +++ b/sc/source/ui/view/select.cxx @@ -43,13 +43,12 @@ static Point aSwitchPos; //! Member static bool bDidSwitch = false; // View (Gridwin / keyboard) -ScViewFunctionSet::ScViewFunctionSet( ScViewData* pNewViewData ) : - m_pViewData( pNewViewData ), +ScViewFunctionSet::ScViewFunctionSet( ScViewData& rViewData ) : + m_rViewData( rViewData ), m_pEngine( nullptr ), m_bAnchor( false ), m_bStarted( false ) { - OSL_ENSURE(m_pViewData, "ViewData==0 at FunctionSet"); } ScSplitPos ScViewFunctionSet::GetWhich() const @@ -57,7 +56,7 @@ ScSplitPos ScViewFunctionSet::GetWhich() const if (m_pEngine) return m_pEngine->GetWhich(); else - return m_pViewData->GetActivePart(); + return m_rViewData.GetActivePart(); } sal_uInt64 ScViewFunctionSet::CalcUpdateInterval( const Size& rWinSize, const Point& rEffPos, @@ -124,7 +123,7 @@ sal_uInt64 ScViewFunctionSet::CalcUpdateInterval( const Size& rWinSize, const Po } #ifdef _WIN32 - ScTabViewShell* pViewShell = m_pViewData->GetViewShell(); + ScTabViewShell* pViewShell = m_rViewData.GetViewShell(); bool bRefMode = pViewShell && pViewShell->IsRefInputMode(); if (bRefMode && nUpdateInterval < SC_SELENG_REFMODE_UPDATE_INTERVAL_MIN) // Lower the update interval during ref mode, because re-draw can be @@ -145,22 +144,22 @@ void ScViewFunctionSet::SetSelectionEngine( ScViewSelectionEngine* pSelEngine ) // Drag & Drop void ScViewFunctionSet::BeginDrag() { - if (m_pViewData->GetViewShell()->IsLokReadOnlyView()) + if (m_rViewData.GetViewShell()->IsLokReadOnlyView()) return; - SCTAB nTab = m_pViewData->GetTabNo(); + SCTAB nTab = m_rViewData.GetTabNo(); SCCOL nPosX; SCROW nPosY; if (m_pEngine) { Point aMPos = m_pEngine->GetMousePosPixel(); - m_pViewData->GetPosFromPixel( aMPos.X(), aMPos.Y(), GetWhich(), nPosX, nPosY ); + m_rViewData.GetPosFromPixel( aMPos.X(), aMPos.Y(), GetWhich(), nPosX, nPosY ); } else { - nPosX = m_pViewData->GetCurX(); - nPosY = m_pViewData->GetCurY(); + nPosX = m_rViewData.GetCurX(); + nPosY = m_rViewData.GetCurY(); } ScModule* pScMod = ScModule::get(); @@ -168,24 +167,24 @@ void ScViewFunctionSet::BeginDrag() if (bRefMode) return; - m_pViewData->GetView()->FakeButtonUp( GetWhich() ); // ButtonUp is swallowed + m_rViewData.GetView()->FakeButtonUp( GetWhich() ); // ButtonUp is swallowed - ScMarkData& rMark = m_pViewData->GetMarkData(); + ScMarkData& rMark = m_rViewData.GetMarkData(); rMark.MarkToSimple(); if ( !rMark.IsMarked() || rMark.IsMultiMarked() ) return; ScDocumentUniquePtr pClipDoc(new ScDocument( SCDOCMODE_CLIP )); // bApi = TRUE -> no error messages - bool bCopied = m_pViewData->GetView()->CopyToClip( pClipDoc.get(), false, true ); + bool bCopied = m_rViewData.GetView()->CopyToClip( pClipDoc.get(), false, true ); if ( !bCopied ) return; - sal_Int8 nDragActions = m_pViewData->GetView()->SelectionEditable() ? + sal_Int8 nDragActions = m_rViewData.GetView()->SelectionEditable() ? ( DND_ACTION_COPYMOVE | DND_ACTION_LINK ) : ( DND_ACTION_COPY | DND_ACTION_LINK ); - ScDocShell* pDocSh = m_pViewData->GetDocShell(); + ScDocShell* pDocSh = m_rViewData.GetDocShell(); TransferableObjectDescriptor aObjDesc; pDocSh->FillTransferableObjectDescriptor( aObjDesc ); aObjDesc.maDisplayName = pDocSh->GetMedium()->GetURLObject().GetURLNoPass(); @@ -200,12 +199,12 @@ void ScViewFunctionSet::BeginDrag() SCCOL nHandleX = (nPosX >= nStartX) ? nPosX - nStartX : 0; SCROW nHandleY = (nPosY >= nStartY) ? nPosY - nStartY : 0; pTransferObj->SetDragHandlePos( nHandleX, nHandleY ); - pTransferObj->SetSourceCursorPos( m_pViewData->GetCurX(), m_pViewData->GetCurY() ); + pTransferObj->SetSourceCursorPos( m_rViewData.GetCurX(), m_rViewData.GetCurY() ); pTransferObj->SetVisibleTab( nTab ); pTransferObj->SetDragSource( pDocSh, rMark ); - vcl::Window* pWindow = m_pViewData->GetActiveWin(); + vcl::Window* pWindow = m_rViewData.GetActiveWin(); if ( pWindow->IsTracking() ) pWindow->EndTracking( TrackingEventFlags::Cancel ); // abort selecting @@ -226,16 +225,16 @@ void ScViewFunctionSet::CreateAnchor() bool bRefMode = ScModule::get()->IsFormulaMode(); if (bRefMode) - SetAnchor( m_pViewData->GetRefStartX(), m_pViewData->GetRefStartY() ); + SetAnchor( m_rViewData.GetRefStartX(), m_rViewData.GetRefStartY() ); else - SetAnchor( m_pViewData->GetCurX(), m_pViewData->GetCurY() ); + SetAnchor( m_rViewData.GetCurX(), m_rViewData.GetCurY() ); } void ScViewFunctionSet::SetAnchor( SCCOL nPosX, SCROW nPosY ) { bool bRefMode = ScModule::get()->IsFormulaMode(); - ScTabView* pView = m_pViewData->GetView(); - SCTAB nTab = m_pViewData->GetTabNo(); + ScTabView* pView = m_rViewData.GetView(); + SCTAB nTab = m_rViewData.GetTabNo(); if (bRefMode) { @@ -245,7 +244,7 @@ void ScViewFunctionSet::SetAnchor( SCCOL nPosX, SCROW nPosY ) SC_REFTYPE_REF ); m_bStarted = true; } - else if (m_pViewData->IsAnyFillMode()) + else if (m_rViewData.IsAnyFillMode()) { m_aAnchorPos.Set( nPosX, nPosY, nTab ); m_bStarted = true; @@ -261,7 +260,7 @@ void ScViewFunctionSet::SetAnchor( SCCOL nPosX, SCROW nPosY ) { pView->DoneBlockMode( true ); m_aAnchorPos.Set( nPosX, nPosY, nTab ); - ScMarkData& rMark = m_pViewData->GetMarkData(); + ScMarkData& rMark = m_rViewData.GetMarkData(); if ( rMark.IsMarked() || rMark.IsMultiMarked() ) { pView->InitBlockMode( m_aAnchorPos.Col(), m_aAnchorPos.Row(), @@ -277,14 +276,14 @@ void ScViewFunctionSet::SetAnchor( SCCOL nPosX, SCROW nPosY ) void ScViewFunctionSet::DestroyAnchor() { - if (m_pViewData->IsAnyFillMode()) + if (m_rViewData.IsAnyFillMode()) return; bool bRefMode = ScModule::get()->IsFormulaMode(); if (bRefMode) - m_pViewData->GetView()->DoneRefMode( true ); + m_rViewData.GetView()->DoneRefMode( true ); else - m_pViewData->GetView()->DoneBlockMode( true ); + m_rViewData.GetView()->DoneBlockMode( true ); m_bAnchor = false; } @@ -322,14 +321,14 @@ void ScViewFunctionSet::SetCursorAtPoint( const Point& rPointPixel, bool /* bDon SCCOL nPosX; SCROW nPosY; - m_pViewData->GetPosFromPixel( aEffPos.X(), aEffPos.Y(), GetWhich(), + m_rViewData.GetPosFromPixel( aEffPos.X(), aEffPos.Y(), GetWhich(), nPosX, nPosY, true, true ); // with Repair - tools::Rectangle aEditArea = m_pViewData->GetEditArea(GetWhich(), nPosX, nPosY, + tools::Rectangle aEditArea = m_rViewData.GetEditArea(GetWhich(), nPosX, nPosY, m_pEngine->GetWindow(), nullptr, false); - bool bFillingSelection = m_pViewData->IsFillMode() || m_pViewData->GetFillMode() == ScFillMode::MATRIX; + bool bFillingSelection = m_rViewData.IsFillMode() || m_rViewData.GetFillMode() == ScFillMode::MATRIX; bool bBottomScroll; bool bRightScroll; // for Autofill don't yet assume we want to auto-scroll to the cell under the mouse @@ -353,9 +352,9 @@ void ScViewFunctionSet::SetCursorAtPoint( const Point& rPointPixel, bool /* bDon if (bFillingSelection) { bool bLeft, bTop; - m_pViewData->GetMouseQuadrant( aEffPos, GetWhich(), nPosX, nPosY, bLeft, bTop ); - ScDocument& rDoc = m_pViewData->GetDocument(); - SCTAB nTab = m_pViewData->GetTabNo(); + m_rViewData.GetMouseQuadrant( aEffPos, GetWhich(), nPosX, nPosY, bLeft, bTop ); + ScDocument& rDoc = m_rViewData.GetDocument(); + SCTAB nTab = m_rViewData.GetTabNo(); if ( bLeft && !bRightScroll ) do --nPosX; while ( nPosX>=0 && rDoc.ColHidden( nPosX, nTab ) ); if ( bTop && !bBottomScroll ) @@ -372,37 +371,37 @@ void ScViewFunctionSet::SetCursorAtPoint( const Point& rPointPixel, bool /* bDon // moved out of fix limit? ScSplitPos eWhich = GetWhich(); - if ( eWhich == m_pViewData->GetActivePart() ) + if ( eWhich == m_rViewData.GetActivePart() ) { - if ( m_pViewData->GetHSplitMode() == SC_SPLIT_FIX ) + if ( m_rViewData.GetHSplitMode() == SC_SPLIT_FIX ) if ( aEffPos.X() >= aWinSize.Width() ) { if ( eWhich == SC_SPLIT_TOPLEFT ) { - m_pViewData->GetView()->ActivatePart( SC_SPLIT_TOPRIGHT ); + m_rViewData.GetView()->ActivatePart( SC_SPLIT_TOPRIGHT ); bScroll = false; bDidSwitch = true; } else if ( eWhich == SC_SPLIT_BOTTOMLEFT ) { - m_pViewData->GetView()->ActivatePart( SC_SPLIT_BOTTOMRIGHT ); + m_rViewData.GetView()->ActivatePart( SC_SPLIT_BOTTOMRIGHT ); bScroll = false; bDidSwitch = true; } } - if ( m_pViewData->GetVSplitMode() == SC_SPLIT_FIX ) + if ( m_rViewData.GetVSplitMode() == SC_SPLIT_FIX ) if ( aEffPos.Y() >= aWinSize.Height() ) { if ( eWhich == SC_SPLIT_TOPLEFT ) { - m_pViewData->GetView()->ActivatePart( SC_SPLIT_BOTTOMLEFT ); + m_rViewData.GetView()->ActivatePart( SC_SPLIT_BOTTOMLEFT ); bScroll = false; bDidSwitch = true; } else if ( eWhich == SC_SPLIT_TOPRIGHT ) { - m_pViewData->GetView()->ActivatePart( SC_SPLIT_BOTTOMRIGHT ); + m_rViewData.GetView()->ActivatePart( SC_SPLIT_BOTTOMRIGHT ); bScroll = false; bDidSwitch = true; } @@ -422,26 +421,26 @@ void ScViewFunctionSet::SetCursorAtPoint( const Point& rPointPixel, bool /* bDon m_pEngine->SetUpdateInterval(SELENG_AUTOREPEAT_INTERVAL); } - m_pViewData->ResetOldCursor(); + m_rViewData.ResetOldCursor(); SetCursorAtCell( nPosX, nPosY, bScroll ); } bool ScViewFunctionSet::CheckRefBounds(SCCOL nPosX, SCROW nPosY) { - SCCOL startX = m_pViewData->GetRefStartX(); - SCROW startY = m_pViewData->GetRefStartY(); + SCCOL startX = m_rViewData.GetRefStartX(); + SCROW startY = m_rViewData.GetRefStartY(); - SCCOL endX = m_pViewData->GetRefEndX(); - SCROW endY = m_pViewData->GetRefEndY(); + SCCOL endX = m_rViewData.GetRefEndX(); + SCROW endY = m_rViewData.GetRefEndY(); return nPosX >= startX && nPosX <= endX && nPosY >= startY && nPosY <= endY; } bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, SCROW nPosY, bool bScroll ) { - ScTabView* pView = m_pViewData->GetView(); - SCTAB nTab = m_pViewData->GetTabNo(); - ScDocument& rDoc = m_pViewData->GetDocument(); + ScTabView* pView = m_rViewData.GetView(); + SCTAB nTab = m_rViewData.GetTabNo(); + ScDocument& rDoc = m_rViewData.GetDocument(); if ( rDoc.IsTabProtected(nTab) ) { @@ -464,11 +463,11 @@ bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, SCROW nPosY, bool bScroll return false; } - ScTabViewShell* pViewShell = m_pViewData->GetViewShell(); + ScTabViewShell* pViewShell = m_rViewData.GetViewShell(); bool bRefMode = pViewShell && pViewShell->IsRefInputMode(); - bool bHide = !bRefMode && !m_pViewData->IsAnyFillMode() && - ( nPosX != m_pViewData->GetCurX() || nPosY != m_pViewData->GetCurY() ); + bool bHide = !bRefMode && !m_rViewData.IsAnyFillMode() && + ( nPosX != m_rViewData.GetCurX() || nPosY != m_rViewData.GetCurY() ); if (bHide) pView->HideAllCursors(); @@ -487,38 +486,38 @@ bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, SCROW nPosY, bool bScroll if (bRefMode) { // if no input is possible from this doc, don't move the reference cursor around - if ( !ScModule::get()->IsModalMode(m_pViewData->GetSfxDocShell()) && (!CheckRefBounds(nPosX, nPosY) || SfxLokHelper::getDeviceFormFactor() != LOKDeviceFormFactor::MOBILE)) + if ( !ScModule::get()->IsModalMode(m_rViewData.GetSfxDocShell()) && (!CheckRefBounds(nPosX, nPosY) || SfxLokHelper::getDeviceFormFactor() != LOKDeviceFormFactor::MOBILE)) { if (!m_bAnchor) { pView->DoneRefMode( true ); - pView->InitRefMode( nPosX, nPosY, m_pViewData->GetTabNo(), SC_REFTYPE_REF ); + pView->InitRefMode( nPosX, nPosY, m_rViewData.GetTabNo(), SC_REFTYPE_REF ); } if(SfxLokHelper::getDeviceFormFactor() != LOKDeviceFormFactor::MOBILE) - pView->UpdateRef( nPosX, nPosY, m_pViewData->GetTabNo() ); + pView->UpdateRef( nPosX, nPosY, m_rViewData.GetTabNo() ); pView->SelectionChanged(); } } - else if (m_pViewData->IsFillMode() || - (m_pViewData->GetFillMode() == ScFillMode::MATRIX && (nScFillModeMouseModifier & KEY_MOD1) )) + else if (m_rViewData.IsFillMode() || + (m_rViewData.GetFillMode() == ScFillMode::MATRIX && (nScFillModeMouseModifier & KEY_MOD1) )) { // If a matrix got touched, switch back to Autofill is possible with Ctrl SCCOL nStartX, nEndX; SCROW nStartY, nEndY; // Block SCTAB nDummy; - m_pViewData->GetSimpleArea( nStartX, nStartY, nDummy, nEndX, nEndY, nDummy ); + m_rViewData.GetSimpleArea( nStartX, nStartY, nDummy, nEndX, nEndY, nDummy ); - if (m_pViewData->GetRefType() != SC_REFTYPE_FILL) + if (m_rViewData.GetRefType() != SC_REFTYPE_FILL) { pView->InitRefMode( nStartX, nStartY, nTab, SC_REFTYPE_FILL ); CreateAnchor(); } ScRange aDelRange; - bool bOldDelMark = m_pViewData->GetDelMark( aDelRange ); + bool bOldDelMark = m_rViewData.GetDelMark( aDelRange ); if ( nPosX+1 >= nStartX && nPosX <= nEndX && nPosY+1 >= nStartY && nPosY <= nEndY && @@ -546,29 +545,29 @@ bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, SCROW nPosY, bool bScroll // set range - m_pViewData->SetDelMark( ScRange( nDelStartX,nDelStartY,nTab, + m_rViewData.SetDelMark( ScRange( nDelStartX,nDelStartY,nTab, nEndX,nEndY,nTab ) ); - m_pViewData->GetView()->UpdateShrinkOverlay(); + m_rViewData.GetView()->UpdateShrinkOverlay(); - m_pViewData->GetView()-> + m_rViewData.GetView()-> PaintArea( nStartX,nDelStartY, nEndX,nEndY, ScUpdateMode::Marks ); nPosX = nEndX; // keep red border around range nPosY = nEndY; // reference the right way up, if it's upside down below - if ( nStartX != m_pViewData->GetRefStartX() || nStartY != m_pViewData->GetRefStartY() ) + if ( nStartX != m_rViewData.GetRefStartX() || nStartY != m_rViewData.GetRefStartY() ) { - m_pViewData->GetView()->DoneRefMode(); - m_pViewData->GetView()->InitRefMode( nStartX, nStartY, nTab, SC_REFTYPE_FILL ); + m_rViewData.GetView()->DoneRefMode(); + m_rViewData.GetView()->InitRefMode( nStartX, nStartY, nTab, SC_REFTYPE_FILL ); } } else { if ( bOldDelMark ) { - m_pViewData->ResetDelMark(); - m_pViewData->GetView()->UpdateShrinkOverlay(); + m_rViewData.ResetDelMark(); + m_rViewData.GetView()->UpdateShrinkOverlay(); } bool bNegX = ( nPosX < nStartX ); @@ -616,25 +615,25 @@ bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, SCROW nPosY, bool bScroll SCCOL nRefStX = bNegX ? nEndX : nStartX; SCROW nRefStY = bNegY ? nEndY : nStartY; - if ( nRefStX != m_pViewData->GetRefStartX() || nRefStY != m_pViewData->GetRefStartY() ) + if ( nRefStX != m_rViewData.GetRefStartX() || nRefStY != m_rViewData.GetRefStartY() ) { - m_pViewData->GetView()->DoneRefMode(); - m_pViewData->GetView()->InitRefMode( nRefStX, nRefStY, nTab, SC_REFTYPE_FILL ); + m_rViewData.GetView()->DoneRefMode(); + m_rViewData.GetView()->InitRefMode( nRefStX, nRefStY, nTab, SC_REFTYPE_FILL ); } } pView->UpdateRef( nPosX, nPosY, nTab ); } - else if (m_pViewData->IsAnyFillMode()) + else if (m_rViewData.IsAnyFillMode()) { - ScFillMode nMode = m_pViewData->GetFillMode(); + ScFillMode nMode = m_rViewData.GetFillMode(); if ( nMode == ScFillMode::EMBED_LT || nMode == ScFillMode::EMBED_RB ) { OSL_ENSURE( rDoc.IsEmbedded(), "!rDoc.IsEmbedded()" ); ScRange aRange; rDoc.GetEmbedded( aRange); ScRefType eRefMode = (nMode == ScFillMode::EMBED_LT) ? SC_REFTYPE_EMBED_LT : SC_REFTYPE_EMBED_RB; - if (m_pViewData->GetRefType() != eRefMode) + if (m_rViewData.GetRefType() != eRefMode) { if ( nMode == ScFillMode::EMBED_LT ) pView->InitRefMode( aRange.aEnd.Col(), aRange.aEnd.Row(), nTab, eRefMode ); @@ -650,9 +649,9 @@ bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, SCROW nPosY, bool bScroll SCCOL nStartX, nEndX; SCROW nStartY, nEndY; // Block SCTAB nDummy; - m_pViewData->GetSimpleArea( nStartX, nStartY, nDummy, nEndX, nEndY, nDummy ); + m_rViewData.GetSimpleArea( nStartX, nStartY, nDummy, nEndX, nEndY, nDummy ); - if (m_pViewData->GetRefType() != SC_REFTYPE_FILL) + if (m_rViewData.GetRefType() != SC_REFTYPE_FILL) { pView->InitRefMode( nStartX, nStartY, nTab, SC_REFTYPE_FILL ); CreateAnchor(); @@ -667,8 +666,8 @@ bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, SCROW nPosY, bool bScroll } else // regular selection { - bool bHideCur = m_bAnchor && ( nPosX != m_pViewData->GetCurX() || - nPosY != m_pViewData->GetCurY() ); + bool bHideCur = m_bAnchor && ( nPosX != m_rViewData.GetCurX() || + nPosY != m_rViewData.GetCurY() ); if (bHideCur) pView->HideAllCursors(); // otherwise twice: Block and SetCursor @@ -693,7 +692,7 @@ bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, SCROW nPosY, bool bScroll } else { - ScMarkData& rMark = m_pViewData->GetMarkData(); + ScMarkData& rMark = m_rViewData.GetMarkData(); if (rMark.IsMarked() || rMark.IsMultiMarked()) { pView->DoneBlockMode(true); @@ -707,10 +706,10 @@ bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, SCROW nPosY, bool bScroll // it highlights that new cell as well as the old cell where the cursor is // positioned prior to the click. A selection mode via Shift-F8 should also // follow the same behavior. - else if ( m_pViewData->IsSelCtrlMouseClick() ) + else if ( m_rViewData.IsSelCtrlMouseClick() ) { - SCCOL nOldX = m_pViewData->GetCurX(); - SCROW nOldY = m_pViewData->GetCurY(); + SCCOL nOldX = m_rViewData.GetCurX(); + SCROW nOldY = m_rViewData.GetCurY(); pView->InitBlockMode( nOldX, nOldY, nTab, true ); pView->MarkCursor( nOldX, nOldY, nTab ); @@ -728,7 +727,7 @@ bool ScViewFunctionSet::SetCursorAtCell( SCCOL nPosX, SCROW nPosY, bool bScroll pView->SetCursor( nPosX, nPosY ); } - m_pViewData->SetRefStart( nPosX, nPosY, nTab ); + m_rViewData.SetRefStart( nPosX, nPosY, nTab ); if (bHideCur) pView->ShowAllCursors(); } @@ -745,16 +744,16 @@ bool ScViewFunctionSet::IsSelectionAtPoint( const Point& rPointPixel ) if (bRefMode) return false; - if (m_pViewData->IsAnyFillMode()) + if (m_rViewData.IsAnyFillMode()) return false; - ScMarkData& rMark = m_pViewData->GetMarkData(); + ScMarkData& rMark = m_rViewData.GetMarkData(); if (m_bAnchor || !rMark.IsMultiMarked()) { SCCOL nPosX; SCROW nPosY; - m_pViewData->GetPosFromPixel( rPointPixel.X(), rPointPixel.Y(), GetWhich(), nPosX, nPosY ); - return m_pViewData->GetMarkData().IsCellMarked( nPosX, nPosY ); + m_rViewData.GetPosFromPixel( rPointPixel.X(), rPointPixel.Y(), GetWhich(), nPosX, nPosY ); + return m_rViewData.GetMarkData().IsCellMarked( nPosX, nPosY ); } return false; @@ -767,18 +766,18 @@ void ScViewFunctionSet::DeselectAtPoint( const Point& /* rPointPixel */ ) void ScViewFunctionSet::DeselectAll() { - if (m_pViewData->IsAnyFillMode()) + if (m_rViewData.IsAnyFillMode()) return; bool bRefMode = ScModule::get()->IsFormulaMode(); if (bRefMode) { - m_pViewData->GetView()->DoneRefMode(); + m_rViewData.GetView()->DoneRefMode(); } else { - m_pViewData->GetView()->DoneBlockMode(); - m_pViewData->GetViewShell()->UpdateInputHandler(); + m_rViewData.GetView()->DoneBlockMode(); + m_rViewData.GetViewShell()->UpdateInputHandler(); } m_bAnchor = false; @@ -794,14 +793,13 @@ ScViewSelectionEngine::ScViewSelectionEngine( vcl::Window* pWindow, ScTabView* p } // column and row headers -ScHeaderFunctionSet::ScHeaderFunctionSet( ScViewData* pNewViewData ) : - pViewData( pNewViewData ), +ScHeaderFunctionSet::ScHeaderFunctionSet( ScViewData& rData ) : + rViewData( rData ), bColumn( false ), eWhich( SC_SPLIT_TOPLEFT ), bAnchor( false ), nCursorPos( 0 ) { - OSL_ENSURE(pViewData, "ViewData==0 at FunctionSet"); } void ScHeaderFunctionSet::SetColumn( bool bSet ) @@ -824,24 +822,24 @@ void ScHeaderFunctionSet::CreateAnchor() if (bAnchor) return; - ScTabView* pView = pViewData->GetView(); + ScTabView* pView = rViewData.GetView(); pView->DoneBlockMode( true ); if (bColumn) { - pView->InitBlockMode( static_cast<SCCOL>(nCursorPos), 0, pViewData->GetTabNo(), true, true ); - pView->MarkCursor( static_cast<SCCOL>(nCursorPos), pViewData->MaxRow(), pViewData->GetTabNo() ); + pView->InitBlockMode( static_cast<SCCOL>(nCursorPos), 0, rViewData.GetTabNo(), true, true ); + pView->MarkCursor( static_cast<SCCOL>(nCursorPos), rViewData.MaxRow(), rViewData.GetTabNo() ); } else { - pView->InitBlockMode( 0, nCursorPos, pViewData->GetTabNo(), true, false, true ); - pView->MarkCursor( pViewData->MaxCol(), nCursorPos, pViewData->GetTabNo() ); + pView->InitBlockMode( 0, nCursorPos, rViewData.GetTabNo(), true, false, true ); + pView->MarkCursor( rViewData.MaxCol(), nCursorPos, rViewData.GetTabNo() ); } bAnchor = true; } void ScHeaderFunctionSet::DestroyAnchor() { - pViewData->GetView()->DoneBlockMode( true ); + rViewData.GetView()->DoneBlockMode( true ); bAnchor = false; } @@ -857,7 +855,7 @@ void ScHeaderFunctionSet::SetCursorAtPoint( const Point& rPointPixel, bool /* bD } // Scrolling - Size aWinSize = pViewData->GetActiveWin()->GetOutputSizePixel(); + Size aWinSize = rViewData.GetActiveWin()->GetOutputSizePixel(); bool bScroll; if (bColumn) bScroll = ( rPointPixel.X() < 0 || rPointPixel.X() >= aWinSize.Width() ); @@ -868,18 +866,18 @@ void ScHeaderFunctionSet::SetCursorAtPoint( const Point& rPointPixel, bool /* bD bool bSwitched = false; if ( bColumn ) { - if ( pViewData->GetHSplitMode() == SC_SPLIT_FIX ) + if ( rViewData.GetHSplitMode() == SC_SPLIT_FIX ) { if ( rPointPixel.X() > aWinSize.Width() ) { if ( eWhich == SC_SPLIT_TOPLEFT ) { - pViewData->GetView()->ActivatePart( SC_SPLIT_TOPRIGHT ); + rViewData.GetView()->ActivatePart( SC_SPLIT_TOPRIGHT ); bSwitched = true; } else if ( eWhich == SC_SPLIT_BOTTOMLEFT ) { - pViewData->GetView()->ActivatePart( SC_SPLIT_BOTTOMRIGHT ); + rViewData.GetView()->ActivatePart( SC_SPLIT_BOTTOMRIGHT ); bSwitched = true; } } @@ -887,18 +885,18 @@ void ScHeaderFunctionSet::SetCursorAtPoint( const Point& rPointPixel, bool /* bD } else // column headers { - if ( pViewData->GetVSplitMode() == SC_SPLIT_FIX ) + if ( rViewData.GetVSplitMode() == SC_SPLIT_FIX ) { if ( rPointPixel.Y() > aWinSize.Height() ) { if ( eWhich == SC_SPLIT_TOPLEFT ) { - pViewData->GetView()->ActivatePart( SC_SPLIT_BOTTOMLEFT ); + rViewData.GetView()->ActivatePart( SC_SPLIT_BOTTOMLEFT ); bSwitched = true; } else if ( eWhich == SC_SPLIT_TOPRIGHT ) { - pViewData->GetView()->ActivatePart( SC_SPLIT_BOTTOMRIGHT ); + rViewData.GetView()->ActivatePart( SC_SPLIT_BOTTOMRIGHT ); bSwitched = true; } } @@ -913,22 +911,22 @@ void ScHeaderFunctionSet::SetCursorAtPoint( const Point& rPointPixel, bool /* bD SCCOL nPosX; SCROW nPosY; - pViewData->GetPosFromPixel( rPointPixel.X(), rPointPixel.Y(), pViewData->GetActivePart(), + rViewData.GetPosFromPixel( rPointPixel.X(), rPointPixel.Y(), rViewData.GetActivePart(), nPosX, nPosY, false ); if (bColumn) { nCursorPos = static_cast<SCCOLROW>(nPosX); - nPosY = pViewData->GetPosY(WhichV(pViewData->GetActivePart())); + nPosY = rViewData.GetPosY(WhichV(rViewData.GetActivePart())); } else { nCursorPos = static_cast<SCCOLROW>(nPosY); - nPosX = pViewData->GetPosX(WhichH(pViewData->GetActivePart())); + nPosX = rViewData.GetPosX(WhichH(rViewData.GetActivePart())); } - ScTabView* pView = pViewData->GetView(); - bool bHide = pViewData->GetCurX() != nPosX || - pViewData->GetCurY() != nPosY; + ScTabView* pView = rViewData.GetView(); + bool bHide = rViewData.GetCurX() != nPosX || + rViewData.GetCurY() != nPosY; if (bHide) pView->HideAllCursors(); @@ -939,13 +937,13 @@ void ScHeaderFunctionSet::SetCursorAtPoint( const Point& rPointPixel, bool /* bD if ( !bAnchor || !pView->IsBlockMode() ) { pView->DoneBlockMode( true ); - pViewData->GetMarkData().MarkToMulti(); //! who changes this? - pView->InitBlockMode( nPosX, nPosY, pViewData->GetTabNo(), true, bColumn, !bColumn ); + rViewData.GetMarkData().MarkToMulti(); //! who changes this? + pView->InitBlockMode( nPosX, nPosY, rViewData.GetTabNo(), true, bColumn, !bColumn ); bAnchor = true; } - pView->MarkCursor( nPosX, nPosY, pViewData->GetTabNo(), bColumn, !bColumn ); + pView->MarkCursor( nPosX, nPosY, rViewData.GetTabNo(), bColumn, !bColumn ); // SelectionChanged inside of HideCursor because of UpdateAutoFillMark pView->SelectionChanged(); @@ -958,10 +956,10 @@ bool ScHeaderFunctionSet::IsSelectionAtPoint( const Point& rPointPixel ) { SCCOL nPosX; SCROW nPosY; - pViewData->GetPosFromPixel( rPointPixel.X(), rPointPixel.Y(), pViewData->GetActivePart(), + rViewData.GetPosFromPixel( rPointPixel.X(), rPointPixel.Y(), rViewData.GetActivePart(), nPosX, nPosY, false ); - ScMarkData& rMark = pViewData->GetMarkData(); + ScMarkData& rMark = rViewData.GetMarkData(); if (bColumn) return rMark.IsColumnMarked( nPosX ); else @@ -974,7 +972,7 @@ void ScHeaderFunctionSet::DeselectAtPoint( const Point& /* rPointPixel */ ) void ScHeaderFunctionSet::DeselectAll() { - pViewData->GetView()->DoneBlockMode(); + rViewData.GetView()->DoneBlockMode(); bAnchor = false; } diff --git a/sc/source/ui/view/spellcheckcontext.cxx b/sc/source/ui/view/spellcheckcontext.cxx index 890940531874..f3145855f8b5 100644 --- a/sc/source/ui/view/spellcheckcontext.cxx +++ b/sc/source/ui/view/spellcheckcontext.cxx @@ -56,28 +56,53 @@ class SpellCheckContext::SpellCheckCache }; - typedef std::vector<editeng::MisspellRanges> MisspellType; - typedef std::unordered_map<CellPos, std::unique_ptr<MisspellType>, CellPos::Hash> CellMapType; - typedef std::unordered_map<const rtl_uString*, std::unique_ptr<MisspellType>> SharedStringMapType; - typedef std::unordered_map<CellPos, LanguageType, CellPos::Hash> CellLangMapType; + struct LangSharedString + { + struct Hash + { + size_t operator() (const LangSharedString& rKey) const + { + std::size_t seed = 0; + o3tl::hash_combine(seed, rKey.meLang.get()); + o3tl::hash_combine(seed, rKey.mpString); + return seed; + } + }; + + LanguageType meLang; + const rtl_uString* mpString; + + LangSharedString(LanguageType eLang, const ScRefCellValue& rCell) + : meLang(eLang) + , mpString(rCell.getSharedString()->getData()) + { + } + + bool operator== (const LangSharedString& r) const + { + return meLang == r.meLang && mpString == r.mpString; + } + }; + + typedef std::unordered_map<CellPos, std::unique_ptr<MisspellRangesVec>, CellPos::Hash> CellMapType; + typedef std::unordered_map<LangSharedString, std::unique_ptr<MisspellRangesVec>, LangSharedString::Hash> SharedStringMapType; SharedStringMapType maStringMisspells; CellMapType maEditTextMisspells; - CellLangMapType maCellLanguages; - LanguageType meDefCellLanguage; public: - SpellCheckCache(LanguageType eDefaultCellLanguage) : meDefCellLanguage(eDefaultCellLanguage) + SpellCheckCache() { } - bool query(SCCOL nCol, SCROW nRow, const ScRefCellValue& rCell, MisspellType*& rpRanges) const + bool query(SCCOL nCol, SCROW nRow, LanguageType eLang, + const ScRefCellValue& rCell, MisspellRangesVec*& rpRanges) const { CellType eType = rCell.getType(); if (eType == CELLTYPE_STRING) { - SharedStringMapType::const_iterator it = maStringMisspells.find(rCell.getSharedString()->getData()); + SharedStringMapType::const_iterator it = maStringMisspells.find(LangSharedString(eLang, rCell)); if (it == maStringMisspells.end()) return false; // Not available @@ -99,38 +124,22 @@ public: return true; } - void set(SCCOL nCol, SCROW nRow, const ScRefCellValue& rCell, std::unique_ptr<MisspellType> pRanges) + void set(SCCOL nCol, SCROW nRow, LanguageType eLang, + const ScRefCellValue& rCell, std::unique_ptr<MisspellRangesVec> pRanges) { CellType eType = rCell.getType(); if (eType == CELLTYPE_STRING) - maStringMisspells.insert_or_assign(rCell.getSharedString()->getData(), std::move(pRanges)); + { + maStringMisspells.insert_or_assign(LangSharedString(eLang, rCell), std::move(pRanges)); + } else if (eType == CELLTYPE_EDIT) maEditTextMisspells.insert_or_assign(CellPos(nCol, nRow), std::move(pRanges)); } - LanguageType getLanguage(SCCOL nCol, SCROW nRow) const - { - CellLangMapType::const_iterator it = maCellLanguages.find(CellPos(nCol, nRow)); - if (it == maCellLanguages.end()) - return meDefCellLanguage; - - return it->second; - } - - void setLanguage(LanguageType eCellLang, SCCOL nCol, SCROW nRow) - { - if (eCellLang == meDefCellLanguage) - maCellLanguages.erase(CellPos(nCol, nRow)); - else - maCellLanguages.insert_or_assign(CellPos(nCol, nRow), eCellLang); - } - - void clear(LanguageType eDefaultCellLanguage) + void clear() { maStringMisspells.clear(); maEditTextMisspells.clear(); - maCellLanguages.clear(); - meDefCellLanguage = eDefaultCellLanguage; } void clearEditTextMap() @@ -159,31 +168,31 @@ struct SpellCheckContext::SpellCheckResult { SCCOL mnCol; SCROW mnRow; - const std::vector<editeng::MisspellRanges>* pRanges; + MisspellRangeResult maRanges; - SpellCheckResult() : mnCol(-1), mnRow(-1), pRanges(nullptr) {} + SpellCheckResult() : mnCol(-1), mnRow(-1) {} - void set(SCCOL nCol, SCROW nRow, const std::vector<editeng::MisspellRanges>* pMisspells) + void set(SCCOL nCol, SCROW nRow, const MisspellRangeResult& rMisspells) { mnCol = nCol; mnRow = nRow; - pRanges = pMisspells; + maRanges = rMisspells; } - const std::vector<editeng::MisspellRanges>* query(SCCOL nCol, SCROW nRow) const + MisspellRangeResult query(SCCOL nCol, SCROW nRow) const { assert(mnCol == nCol); assert(mnRow == nRow); (void)nCol; (void)nRow; - return pRanges; + return maRanges; } void clear() { mnCol = -1; mnRow = -1; - pRanges = nullptr; + maRanges = {}; } }; @@ -217,10 +226,10 @@ void SpellCheckContext::setTabNo(SCTAB nTab) bool SpellCheckContext::isMisspelled(SCCOL nCol, SCROW nRow) const { const_cast<SpellCheckContext*>(this)->ensureResults(nCol, nRow); - return mpResult->query(nCol, nRow); + return mpResult->query(nCol, nRow).mpRanges; } -const std::vector<editeng::MisspellRanges>* SpellCheckContext::getMisspellRanges( +sc::MisspellRangeResult SpellCheckContext::getMisspellRanges( SCCOL nCol, SCROW nRow ) const { const_cast<SpellCheckContext*>(this)->ensureResults(nCol, nRow); @@ -228,7 +237,7 @@ const std::vector<editeng::MisspellRanges>* SpellCheckContext::getMisspellRanges } void SpellCheckContext::setMisspellRanges( - SCCOL nCol, SCROW nRow, const std::vector<editeng::MisspellRanges>* pRanges ) + SCCOL nCol, SCROW nRow, const sc::MisspellRangeResult& rRangeResult ) { if (!mpEngine || !mpCache) reset(); @@ -239,9 +248,9 @@ void SpellCheckContext::setMisspellRanges( if (eType != CELLTYPE_STRING && eType != CELLTYPE_EDIT) return; - typedef std::vector<editeng::MisspellRanges> MisspellType; - std::unique_ptr<MisspellType> pMisspells(pRanges ? new MisspellType(*pRanges) : nullptr); - mpCache->set(nCol, nRow, aCell, std::move(pMisspells)); + const MisspellRangesVec* pRanges = rRangeResult.mpRanges; + std::unique_ptr<MisspellRangesVec> pMisspells(pRanges ? new MisspellRangesVec(*pRanges) : nullptr); + mpCache->set(nCol, nRow, rRangeResult.meCellLang, aCell, std::move(pMisspells)); } void SpellCheckContext::reset() @@ -274,7 +283,7 @@ void SpellCheckContext::ensureResults(SCCOL nCol, SCROW nRow) ScRangeList aPivotRanges = pDPs->GetAllTableRanges(mnTab); if (aPivotRanges.Contains(ScRange(ScAddress(nCol, nRow, mnTab)))) // Don't spell check within pivot tables { - mpResult->set(nCol, nRow, nullptr); + mpResult->set(nCol, nRow, {}); return; } } @@ -286,7 +295,7 @@ void SpellCheckContext::ensureResults(SCCOL nCol, SCROW nRow) if (eType != CELLTYPE_STRING && eType != CELLTYPE_EDIT) { // No spell-check required. - mpResult->set(nCol, nRow, nullptr); + mpResult->set(nCol, nRow, {}); return; } @@ -303,27 +312,17 @@ void SpellCheckContext::ensureResults(SCCOL nCol, SCROW nRow) if (eCellLang == LANGUAGE_NONE) { - mpResult->set(nCol, nRow, nullptr); // No need to spell check this cell. + mpResult->set(nCol, nRow, {}); // No need to spell check this cell. return; } - typedef std::vector<editeng::MisspellRanges> MisspellType; - - LanguageType eCachedCellLang = mpCache->getLanguage(nCol, nRow); - - if (eCellLang != eCachedCellLang) - mpCache->setLanguage(eCellLang, nCol, nRow); - - else + MisspellRangesVec* pCacheRanges = nullptr; + bool bFound = mpCache->query(nCol, nRow, eCellLang, aCell, pCacheRanges); + if (bFound) { - MisspellType* pRanges = nullptr; - bool bFound = mpCache->query(nCol, nRow, aCell, pRanges); - if (bFound) - { - // Cache hit. - mpResult->set(nCol, nRow, pRanges); - return; - } + // Cache hit. + mpResult->set(nCol, nRow, MisspellRangeResult(pCacheRanges, eCellLang)); + return; } // Cache miss, the cell needs spell-check.. @@ -337,10 +336,10 @@ void SpellCheckContext::ensureResults(SCCOL nCol, SCROW nRow) mpStatus->mbModified = false; mpEngine->CompleteOnlineSpelling(); - std::unique_ptr<MisspellType> pRanges; + std::unique_ptr<MisspellRangesVec> pRanges; if (mpStatus->mbModified) { - pRanges.reset(new MisspellType); + pRanges.reset(new MisspellRangesVec); mpEngine->GetAllMisspellRanges(*pRanges); if (pRanges->empty()) @@ -348,8 +347,8 @@ void SpellCheckContext::ensureResults(SCCOL nCol, SCROW nRow) } // else : No change in status for EditStatusFlags::WRONGWORDCHANGED => no spell errors (which is the default status). - mpResult->set(nCol, nRow, pRanges.get()); - mpCache->set(nCol, nRow, aCell, std::move(pRanges)); + mpResult->set(nCol, nRow, MisspellRangeResult(pRanges.get(), eCellLang)); + mpCache->set(nCol, nRow, eCellLang, aCell, std::move(pRanges)); } void SpellCheckContext::resetCache(bool bContentChangeOnly) @@ -360,11 +359,11 @@ void SpellCheckContext::resetCache(bool bContentChangeOnly) mpResult->clear(); if (!mpCache) - mpCache.reset(new SpellCheckCache(meLanguage)); + mpCache.reset(new SpellCheckCache); else if (bContentChangeOnly) mpCache->clearEditTextMap(); else - mpCache->clear(meLanguage); + mpCache->clear(); } void SpellCheckContext::setup() diff --git a/sc/source/ui/view/tabcont.cxx b/sc/source/ui/view/tabcont.cxx index aa2ed2895ba1..4582900557f9 100644 --- a/sc/source/ui/view/tabcont.cxx +++ b/sc/source/ui/view/tabcont.cxx @@ -39,16 +39,16 @@ #include <LibreOfficeKit/LibreOfficeKitEnums.h> #include <comphelper/lok.hxx> -ScTabControl::ScTabControl( vcl::Window* pParent, ScViewData* pData ) +ScTabControl::ScTabControl( vcl::Window* pParent, ScViewData& rData ) : TabBar(pParent, WB_3DLOOK | WB_MINSCROLL | WB_SCROLL | WB_RANGESELECT | WB_MULTISELECT | WB_DRAG, true) , DropTargetHelper(this) , DragSourceHelper(this) - , pViewData(pData) + , rViewData(rData) , nMouseClickPageId(TabBar::PAGE_NOT_FOUND) , nSelPageIdByMouse(TabBar::PAGE_NOT_FOUND) , bErrorShown(false) { - ScDocument& rDoc = pViewData->GetDocument(); + ScDocument& rDoc = rViewData.GetDocument(); OUString aString; Color aTabBgColor; @@ -76,11 +76,11 @@ ScTabControl::ScTabControl( vcl::Window* pParent, ScViewData* pData ) } } - SetCurPageId( static_cast<sal_uInt16>(pViewData->GetTabNo()) + 1 ); + SetCurPageId( static_cast<sal_uInt16>(rViewData.GetTabNo()) + 1 ); SetSizePixel( Size(SC_TABBAR_DEFWIDTH, 0) ); - SetSplitHdl( LINK( pViewData->GetView(), ScTabView, TabBarResize ) ); + SetSplitHdl( LINK( rViewData.GetView(), ScTabView, TabBarResize ) ); EnableEditMode(); UpdateInputContext(); @@ -99,7 +99,7 @@ IMPL_LINK(ScTabControl, ShowPageList, const CommandEvent &, rEvent, void) sal_uInt16 nCurPageId = GetCurPageId(); - ScDocument& rDoc = pViewData->GetDocument(); + ScDocument& rDoc = rViewData.GetDocument(); SCTAB nCount = rDoc.GetTableCount(); for (SCTAB i=0; i<nCount; ++i) { @@ -149,7 +149,7 @@ SCTAB ScTabControl::GetPrivatDropPos(const Point& rPos ) if(nPos !=0 ) { - ScDocument& rDoc = pViewData->GetDocument(); + ScDocument& rDoc = rViewData.GetDocument(); SCTAB nCount = rDoc.GetTableCount(); @@ -185,8 +185,8 @@ void ScTabControl::MouseButtonDown( const MouseEvent& rMEvt ) if ( !pScMod->IsModalMode() && !pScMod->IsFormulaMode() && !IsInEditMode() ) { // activate View - pViewData->GetViewShell()->SetActive(); // Appear and SetViewFrame - pViewData->GetView()->ActiveGrabFocus(); + rViewData.GetViewShell()->SetActive(); // Appear and SetViewFrame + rViewData.GetView()->ActiveGrabFocus(); } if (rMEvt.IsLeft() && rMEvt.GetModifier() == 0) @@ -205,7 +205,7 @@ void ScTabControl::MouseButtonUp( const MouseEvent& rMEvt ) if ( rMEvt.GetClicks() == 2 && rMEvt.IsLeft() && nMouseClickPageId != 0 && nMouseClickPageId != TabBar::PAGE_NOT_FOUND ) { - SfxDispatcher* pDispatcher = pViewData->GetViewShell()->GetViewFrame().GetDispatcher(); + SfxDispatcher* pDispatcher = rViewData.GetViewShell()->GetViewFrame().GetDispatcher(); pDispatcher->Execute( FID_TAB_MENU_RENAME, SfxCallMode::SYNCHRON | SfxCallMode::RECORD ); return; } @@ -213,7 +213,7 @@ void ScTabControl::MouseButtonUp( const MouseEvent& rMEvt ) if( nMouseClickPageId == 0 ) { // Click in the area next to the existing tabs: - SfxDispatcher* pDispatcher = pViewData->GetViewShell()->GetViewFrame().GetDispatcher(); + SfxDispatcher* pDispatcher = rViewData.GetViewShell()->GetViewFrame().GetDispatcher(); pDispatcher->Execute( FID_TAB_DESELECTALL, SfxCallMode::SYNCHRON | SfxCallMode::RECORD ); // forget page ID, to be really sure that the dialog is not called twice nMouseClickPageId = TabBar::PAGE_NOT_FOUND; @@ -227,7 +227,7 @@ void ScTabControl::AddTabClick() TabBar::AddTabClick(); // Insert a new sheet at the right end, with default name. - ScDocument& rDoc = pViewData->GetDocument(); + ScDocument& rDoc = rViewData.GetDocument(); ScModule* pScMod = ScModule::get(); if (!rDoc.IsDocEditable() || pScMod->IsTableLocked()) return; @@ -239,9 +239,9 @@ void ScTabControl::AddTabClick() OUString aName; rDoc.CreateValidTabName(aName); SCTAB nTabCount = rDoc.GetTableCount(); - pViewData->GetViewShell()->InsertTable(aName, nTabCount); + rViewData.GetViewShell()->InsertTable(aName, nTabCount); if (!pScMod->IsModalMode() && !pScMod->IsFormulaMode() && !IsInEditMode()) - pViewData->GetViewShell()->SetActive(); + rViewData.GetViewShell()->SetActive(); } void ScTabControl::Select() @@ -253,8 +253,8 @@ void ScTabControl::Select() nMouseClickPageId = TabBar::PAGE_NOT_FOUND; ScModule* pScMod = ScModule::get(); - ScDocument& rDoc = pViewData->GetDocument(); - ScMarkData& rMark = pViewData->GetMarkData(); + ScDocument& rDoc = rViewData.GetDocument(); + ScMarkData& rMark = rViewData.GetMarkData(); SCTAB nCount = rDoc.GetTableCount(); SCTAB i; @@ -264,7 +264,7 @@ void ScTabControl::Select() for (i=0; i<nCount; i++) SelectPage( static_cast<sal_uInt16>(i)+1, rMark.GetTableSelect(i) ); - SetCurPageId( static_cast<sal_uInt16>(pViewData->GetTabNo()) + 1 ); + SetCurPageId( static_cast<sal_uInt16>(rViewData.GetTabNo()) + 1 ); return; } @@ -274,8 +274,8 @@ void ScTabControl::Select() sal_uInt16 nPage = nCurId - 1; // OLE-inplace deactivate - if ( nPage != static_cast<sal_uInt16>(pViewData->GetTabNo()) ) - pViewData->GetView()->DrawMarkListHasChanged(); + if ( nPage != static_cast<sal_uInt16>(rViewData.GetTabNo()) ) + rViewData.GetView()->DrawMarkListHasChanged(); // InputEnterHandler onlw when not reference input @@ -286,9 +286,9 @@ void ScTabControl::Select() for (i=0; i<nCount; i++) rMark.SelectTable( i, IsPageSelected(static_cast<sal_uInt16>(i)+1) ); - SfxDispatcher& rDisp = pViewData->GetDispatcher(); + SfxDispatcher& rDisp = rViewData.GetDispatcher(); if (rDisp.IsLocked()) - pViewData->GetView()->SetTabNo( static_cast<SCTAB>(nPage) ); + rViewData.GetView()->SetTabNo( static_cast<SCTAB>(nPage) ); else { // sheet for basic is 1-based @@ -297,7 +297,7 @@ void ScTabControl::Select() SfxCallMode::SLOT | SfxCallMode::RECORD, { &aItem }); } - SfxBindings& rBind = pViewData->GetBindings(); + SfxBindings& rBind = rViewData.GetBindings(); rBind.Invalidate( FID_FILL_TAB ); rBind.Invalidate( FID_TAB_DESELECTALL ); @@ -318,12 +318,12 @@ void ScTabControl::Select() // (for references over multiple sheets) // for others this is only needed fidgeting - if ( bRefMode && pViewData->GetRefType() == SC_REFTYPE_REF ) - if ( pViewData->GetViewShell()->GetViewFrame().HasChildWindow(SID_OPENDLG_CONSOLIDATE) ) + if ( bRefMode && rViewData.GetRefType() == SC_REFTYPE_REF ) + if ( rViewData.GetViewShell()->GetViewFrame().HasChildWindow(SID_OPENDLG_CONSOLIDATE) ) { ScRange aRange( - pViewData->GetRefStartX(), pViewData->GetRefStartY(), pViewData->GetRefStartZ(), - pViewData->GetRefEndX(), pViewData->GetRefEndY(), pViewData->GetRefEndZ() ); + rViewData.GetRefStartX(), rViewData.GetRefStartY(), rViewData.GetRefStartZ(), + rViewData.GetRefEndX(), rViewData.GetRefEndY(), rViewData.GetRefEndZ() ); pScMod->SetReference( aRange, rDoc, &rMark ); pScMod->EndReference(); // due to Auto-Hide } @@ -331,7 +331,7 @@ void ScTabControl::Select() void ScTabControl::UpdateInputContext() { - ScDocument& rDoc = pViewData->GetDocument(); + ScDocument& rDoc = rViewData.GetDocument(); WinBits nStyle = GetStyle(); if (rDoc.GetDocumentShell()->IsReadOnly()) // no insert sheet tab for readonly doc. @@ -342,9 +342,9 @@ void ScTabControl::UpdateInputContext() void ScTabControl::UpdateStatus() { - ScDocument& rDoc = pViewData->GetDocument(); - ScMarkData& rMark = pViewData->GetMarkData(); - bool bActive = pViewData->IsActive(); + ScDocument& rDoc = rViewData.GetDocument(); + ScMarkData& rMark = rViewData.GetMarkData(); + bool bActive = rViewData.IsActive(); SCTAB nCount = rDoc.GetTableCount(); SCTAB i; @@ -395,7 +395,7 @@ void ScTabControl::UpdateStatus() } } } - SetCurPageId( static_cast<sal_uInt16>(pViewData->GetTabNo()) + 1 ); + SetCurPageId( static_cast<sal_uInt16>(rViewData.GetTabNo()) + 1 ); if (bActive) { @@ -439,14 +439,14 @@ void ScTabControl::SwitchToPageId(sal_uInt16 nId) { // notify LibreOfficeKit about changed page OString aPayload = OString::number(nId - 1); - pViewData->GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_SET_PART, aPayload); + rViewData.GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_SET_PART, aPayload); } } void ScTabControl::Command( const CommandEvent& rCEvt ) { ScModule* pScMod = ScModule::get(); - ScTabViewShell* pViewSh = pViewData->GetViewShell(); + ScTabViewShell* pViewSh = rViewData.GetViewShell(); bool bDisable = pScMod->IsFormulaMode() || pScMod->IsModalMode(); // first activate ViewFrame (Bug 19493): @@ -466,7 +466,7 @@ void ScTabControl::Command( const CommandEvent& rCEvt ) // Popup-Menu: // get Dispatcher from ViewData (ViewFrame) instead of Shell (Frame), so it can't be null - pViewData->GetDispatcher().ExecutePopup( u"sheettab"_ustr ); + rViewData.GetDispatcher().ExecutePopup( u"sheettab"_ustr ); } void ScTabControl::StartDrag( sal_Int8 /* nAction */, const Point& rPosPixel ) @@ -485,12 +485,12 @@ void ScTabControl::StartDrag( sal_Int8 /* nAction */, const Point& rPosPixel ) void ScTabControl::DoDrag() { - ScDocShell* pDocSh = pViewData->GetDocShell(); + ScDocShell* pDocSh = rViewData.GetDocShell(); ScDocument& rDoc = pDocSh->GetDocument(); - SCTAB nTab = pViewData->GetTabNo(); + SCTAB nTab = rViewData.GetTabNo(); ScRange aTabRange( 0, 0, nTab, rDoc.MaxCol(), rDoc.MaxRow(), nTab ); - ScMarkData aTabMark = pViewData->GetMarkData(); + ScMarkData aTabMark = rViewData.GetMarkData(); aTabMark.ResetMark(); // doesn't change marked table information aTabMark.SetMarkArea( aTabRange ); @@ -509,9 +509,9 @@ void ScTabControl::DoDrag() pTransferObj->SetDragSource( pDocSh, aTabMark ); - pTransferObj->SetSourceCursorPos( pViewData->GetCurX(), pViewData->GetCurY() ); + pTransferObj->SetSourceCursorPos( rViewData.GetCurX(), rViewData.GetCurY() ); - vcl::Window* pWindow = pViewData->GetActiveWin(); + vcl::Window* pWindow = rViewData.GetActiveWin(); ScModule::get()->SetDragObject(pTransferObj.get(), nullptr); // for internal D&D pTransferObj->StartDrag( pWindow, DND_ACTION_COPYMOVE | DND_ACTION_LINK ); } @@ -540,7 +540,7 @@ sal_Int8 ScTabControl::ExecuteDrop( const ExecuteDropEvent& rEvt ) { EndSwitchPage(); - ScDocument& rDoc = pViewData->GetDocument(); + ScDocument& rDoc = rViewData.GetDocument(); const ScDragData& rData = ScModule::get()->GetDragData(); if ( rData.pCellTransfer && (rData.pCellTransfer->GetDragSourceFlags() & ScDragSrc::Table) && rData.pCellTransfer->GetSourceDocument() == &rDoc ) @@ -559,7 +559,7 @@ sal_Int8 ScTabControl::ExecuteDrop( const ExecuteDropEvent& rEvt ) if ( !rDoc.GetChangeTrack() && rDoc.IsDocEditable() ) { //! use table selection from the tab control where dragging was started? - pViewData->GetView()->MoveTable( lcl_DocShellNr(rDoc), nPos, rEvt.mnAction != DND_ACTION_MOVE ); + rViewData.GetView()->MoveTable( lcl_DocShellNr(rDoc), nPos, rEvt.mnAction != DND_ACTION_MOVE ); rData.pCellTransfer->SetDragWasInternal(); // don't delete return DND_ACTION_COPY; @@ -579,7 +579,7 @@ sal_Int8 ScTabControl::AcceptDrop( const AcceptDropEvent& rEvt ) return rEvt.mnAction; } - const ScDocument& rDoc = pViewData->GetDocument(); + const ScDocument& rDoc = rViewData.GetDocument(); const ScDragData& rData = ScModule::get()->GetDragData(); if ( rData.pCellTransfer && (rData.pCellTransfer->GetDragSourceFlags() & ScDragSrc::Table) && rData.pCellTransfer->GetSourceDocument() == &rDoc ) @@ -602,13 +602,13 @@ sal_Int8 ScTabControl::AcceptDrop( const AcceptDropEvent& rEvt ) bool ScTabControl::StartRenaming() { - return pViewData->GetDocument().IsDocEditable(); + return rViewData.GetDocument().IsDocEditable(); } TabBarAllowRenamingReturnCode ScTabControl::AllowRenaming() { - ScTabViewShell* pViewSh = pViewData->GetViewShell(); - OSL_ENSURE( pViewSh, "pViewData->GetViewShell()" ); + ScTabViewShell* pViewSh = rViewData.GetViewShell(); + OSL_ENSURE( pViewSh, "rViewData.GetViewShell()" ); TabBarAllowRenamingReturnCode nRet = TABBAR_RENAMING_CANCEL; sal_uInt16 nId = GetEditPageId(); @@ -627,7 +627,7 @@ TabBarAllowRenamingReturnCode ScTabControl::AllowRenaming() OSL_FAIL("ScTabControl::AllowRenaming: nested calls"); nRet = TABBAR_RENAMING_NO; } - else if (pViewData->GetDocShell()->IsInModalMode()) + else if (rViewData.GetDocShell()->IsInModalMode()) { // don't show error message above any modal dialog // instead cancel renaming without error message @@ -650,7 +650,7 @@ TabBarAllowRenamingReturnCode ScTabControl::AllowRenaming() void ScTabControl::EndRenaming() { if ( HasFocus() ) - pViewData->GetView()->ActiveGrabFocus(); + rViewData.GetView()->ActiveGrabFocus(); } void ScTabControl::Mirror() diff --git a/sc/source/ui/view/tabsplit.cxx b/sc/source/ui/view/tabsplit.cxx index fb8435b2712a..95fef3d1acf6 100644 --- a/sc/source/ui/view/tabsplit.cxx +++ b/sc/source/ui/view/tabsplit.cxx @@ -22,9 +22,9 @@ #include <vcl/settings.hxx> -ScTabSplitter::ScTabSplitter( vcl::Window* pParent, WinBits nWinStyle, const ScViewData* pData ) : +ScTabSplitter::ScTabSplitter( vcl::Window* pParent, WinBits nWinStyle, ScViewData& rData ) : Splitter(pParent, nWinStyle), - pViewData(pData) + rViewData(rData) { SetFixed(false); EnableRTL(false); @@ -60,7 +60,7 @@ void ScTabSplitter::Paint( vcl::RenderContext& rRenderContext, const tools::Rect if (IsHorizontal()) { - switch (pViewData->GetHSplitMode()) + switch (rViewData.GetHSplitMode()) { case SC_SPLIT_NONE: { @@ -91,7 +91,7 @@ void ScTabSplitter::Paint( vcl::RenderContext& rRenderContext, const tools::Rect } else { - switch (pViewData->GetVSplitMode()) + switch (rViewData.GetVSplitMode()) { case SC_SPLIT_NONE: { diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx index 03258c9fdaf2..652e6b5a244f 100644 --- a/sc/source/ui/view/tabview.cxx +++ b/sc/source/ui/view/tabview.cxx @@ -76,9 +76,9 @@ using namespace ::com::sun::star; // Corner-Button -ScCornerButton::ScCornerButton( vcl::Window* pParent, ScViewData* pData ) : +ScCornerButton::ScCornerButton( vcl::Window* pParent, ScViewData& rData ) : Window( pParent, WinBits( 0 ) ), - pViewData( pData ) + rViewData( rData ) { ScCornerButton::EnableRTL( false ); SetQuickHelpText(ScResId(SCSTR_QHELP_SELECT_ALL_CELLS)); @@ -99,7 +99,7 @@ void ScCornerButton::Paint(vcl::RenderContext& rRenderContext, const tools::Rect Window::Paint(rRenderContext, rRect); - bool bLayoutRTL = pViewData->GetDocument().IsLayoutRTL( pViewData->GetTabNo() ); + bool bLayoutRTL = rViewData.GetDocument().IsLayoutRTL( rViewData.GetTabNo() ); tools::Long nDarkX = bLayoutRTL ? 0 : nPosX; // both buttons have the same look now - only dark right/bottom lines @@ -137,7 +137,7 @@ void ScCornerButton::MouseButtonDown( const MouseEvent& rMEvt ) bool bDisable = pScMod->IsFormulaMode() || pScMod->IsModalMode(); if (!bDisable) { - ScTabViewShell* pViewSh = pViewData->GetViewShell(); + ScTabViewShell* pViewSh = rViewData.GetViewShell(); pViewSh->SetActive(); // Appear and SetViewFrame pViewSh->ActiveGrabFocus(); @@ -177,14 +177,14 @@ bool lcl_HasRowOutline( const ScViewData& rViewData ) ScTabView::ScTabView( vcl::Window* pParent, ScDocShell& rDocSh, ScTabViewShell* pViewShell ) : pFrameWin( pParent ), aViewData( rDocSh, pViewShell ), - aFunctionSet( &aViewData ), - aHdrFunc( &aViewData ), + aFunctionSet( aViewData ), + aHdrFunc( aViewData ), aVScrollTop( VclPtr<ScrollAdaptor>::Create( pFrameWin, false ) ), aVScrollBottom( VclPtr<ScrollAdaptor>::Create( pFrameWin, false ) ), aHScrollLeft( VclPtr<ScrollAdaptor>::Create( pFrameWin, true ) ), aHScrollRight( VclPtr<ScrollAdaptor>::Create( pFrameWin, true ) ), - aCornerButton( VclPtr<ScCornerButton>::Create( pFrameWin, &aViewData ) ), - aTopButton( VclPtr<ScCornerButton>::Create( pFrameWin, &aViewData ) ), + aCornerButton( VclPtr<ScCornerButton>::Create( pFrameWin, aViewData ) ), + aTopButton( VclPtr<ScCornerButton>::Create( pFrameWin, aViewData ) ), aScrollTimer("ScTabView aScrollTimer"), pTimerWindow( nullptr ), aExtraEditViewManager( pViewShell, pGridWin ), @@ -1657,14 +1657,14 @@ void ScTabView::UpdateShow() } if (bHOutline && !pColOutline[SC_SPLIT_LEFT]) - pColOutline[SC_SPLIT_LEFT] = VclPtr<ScOutlineWindow>::Create( pFrameWin, SC_OUTLINE_HOR, &aViewData, SC_SPLIT_BOTTOMLEFT ); + pColOutline[SC_SPLIT_LEFT] = VclPtr<ScOutlineWindow>::Create( pFrameWin, SC_OUTLINE_HOR, aViewData, SC_SPLIT_BOTTOMLEFT ); if (bShowH && bHOutline && !pColOutline[SC_SPLIT_RIGHT]) - pColOutline[SC_SPLIT_RIGHT] = VclPtr<ScOutlineWindow>::Create( pFrameWin, SC_OUTLINE_HOR, &aViewData, SC_SPLIT_BOTTOMRIGHT ); + pColOutline[SC_SPLIT_RIGHT] = VclPtr<ScOutlineWindow>::Create( pFrameWin, SC_OUTLINE_HOR, aViewData, SC_SPLIT_BOTTOMRIGHT ); if (bVOutline && !pRowOutline[SC_SPLIT_BOTTOM]) - pRowOutline[SC_SPLIT_BOTTOM] = VclPtr<ScOutlineWindow>::Create( pFrameWin, SC_OUTLINE_VER, &aViewData, SC_SPLIT_BOTTOMLEFT ); + pRowOutline[SC_SPLIT_BOTTOM] = VclPtr<ScOutlineWindow>::Create( pFrameWin, SC_OUTLINE_VER, aViewData, SC_SPLIT_BOTTOMLEFT ); if (bShowV && bVOutline && !pRowOutline[SC_SPLIT_TOP]) - pRowOutline[SC_SPLIT_TOP] = VclPtr<ScOutlineWindow>::Create( pFrameWin, SC_OUTLINE_VER, &aViewData, SC_SPLIT_TOPLEFT ); + pRowOutline[SC_SPLIT_TOP] = VclPtr<ScOutlineWindow>::Create( pFrameWin, SC_OUTLINE_VER, aViewData, SC_SPLIT_TOPLEFT ); if (bShowH && bHeader && !pColBar[SC_SPLIT_RIGHT]) pColBar[SC_SPLIT_RIGHT] = VclPtr<ScColBar>::Create( pFrameWin, SC_SPLIT_RIGHT, @@ -2384,7 +2384,6 @@ void ScTabView::SetNewVisArea() for (i=0; i<4; i++) if (pGridWin[i] && aDrawMode[i] != aOldMode[i]) { - pGridWin[i]->flushOverlayManager(); // #i79909# flush overlays before switching to edit MapMode pGridWin[i]->SetMapMode(aOldMode[i]); } @@ -2409,8 +2408,6 @@ void ScTabView::SetNewVisArea() ScGridWindow *pGridWindow = GetViewData().GetActiveWin(); pGridWindow->DrawEditView(*pGridWindow->GetOutDev(), pEditView); - - pGridWindow->flushOverlayManager(); pGridWindow->GetOutDev()->SetMapMode(GetViewData().GetLogicMode()); if (bInPlaceVisCursor) @@ -2546,14 +2543,14 @@ void ScTabView::ResetAutoSpellForContentChange() } } -void ScTabView::SetAutoSpellData( SCCOL nPosX, SCROW nPosY, const std::vector<editeng::MisspellRanges>* pRanges ) +void ScTabView::SetAutoSpellData( SCCOL nPosX, SCROW nPosY, const sc::MisspellRangeResult& rRangeResult ) { for (VclPtr<ScGridWindow> & pWin: pGridWin) { if (!pWin) continue; - pWin->SetAutoSpellData(nPosX, nPosY, pRanges); + pWin->SetAutoSpellData(nPosX, nPosY, rRangeResult); } } diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx index f9e534d55cd2..6cc15283d272 100644 --- a/sc/source/ui/view/tabview3.cxx +++ b/sc/source/ui/view/tabview3.cxx @@ -638,6 +638,7 @@ void ScTabView::SelectionChanged(bool bFromPaste) rBindings.Invalidate( SID_SORT_ASCENDING ); rBindings.Invalidate( SID_SORT_DESCENDING ); rBindings.Invalidate( SID_SELECT_UNPROTECTED_CELLS ); + rBindings.Invalidate( SID_CLEAR_AUTO_FILTER ); if (!comphelper::LibreOfficeKit::isActive()) rBindings.Invalidate( SID_LANGUAGE_STATUS ); @@ -2013,7 +2014,7 @@ void ScTabView::SetTabNo( SCTAB nTab, bool bNew, bool bExtendSelection, bool bSa bool bUnoRefDialog = pScMod->IsRefDialogOpen() && pScMod->GetCurRefDlgId() == WID_SIMPLE_REF; // recalc zoom-dependent values (before TabChanged, before UpdateEditViewPos) - RefreshZoom(); + RefreshZoom(/*bRecalcScale*/false); // no need to call RecalcScale() here, because we will do it in TabChanged() UpdateVarZoom(); if ( bRefMode ) // hide EditView if necessary (after aViewData.SetTabNo !) @@ -2225,8 +2226,17 @@ void ScTabView::MakeEditView( ScEditEngineDefaulter* pEngine, SCCOL nCol, SCROW pGridWin[i]->DeleteAutoFillOverlay(); pGridWin[i]->DeleteCopySourceOverlay(); - // flush OverlayManager before changing MapMode to text edit - pGridWin[i]->flushOverlayManager(); + // tdf#165621 allow the Overlay to quickly update, necessary + // for clean graphical refreshes + // NOTE: This also works using Application::Reschedule(true), but + // triggers CppunitTest_desktop_lib "DesktopLOKTest::testRedlineCalc", + // probably due to not only the timer triggering but 'other' stuff + // that better runs later (...?). Not doing it - as long as we need + // to do it - is safer, but forces to keep that flush just for this + // single usage + rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager = pGridWin[i]->getOverlayManager(); + if (xOverlayManager.is()) + xOverlayManager->flush(); // MapMode must be set after HideCursor pGridWin[i]->SetMapMode(aViewData.GetLogicMode()); @@ -3223,9 +3233,6 @@ void ScTabView::ZoomChanged() if ( pWin && aViewData.HasEditView( aViewData.GetActivePart() ) ) { - // flush OverlayManager before changing the MapMode - pWin->flushOverlayManager(); - // make sure the EditView's position and size are updated // with the right (logic, not drawing) MapMode pWin->SetMapMode( aViewData.GetLogicMode() ); diff --git a/sc/source/ui/view/tabview5.cxx b/sc/source/ui/view/tabview5.cxx index 6d293ea3f0d5..ecb064a04b6d 100644 --- a/sc/source/ui/view/tabview5.cxx +++ b/sc/source/ui/view/tabview5.cxx @@ -91,14 +91,14 @@ void ScTabView::Init() for (i=0; i<2; i++) pColOutline[i] = pRowOutline[i] = nullptr; - pHSplitter = VclPtr<ScTabSplitter>::Create( pFrameWin, WinBits( WB_HSCROLL ), &aViewData ); - pVSplitter = VclPtr<ScTabSplitter>::Create( pFrameWin, WinBits( WB_VSCROLL ), &aViewData ); + pHSplitter = VclPtr<ScTabSplitter>::Create( pFrameWin, WinBits( WB_HSCROLL ), aViewData ); + pVSplitter = VclPtr<ScTabSplitter>::Create( pFrameWin, WinBits( WB_VSCROLL ), aViewData ); // SSA: override default keyboard step size to allow snap to row/column pHSplitter->SetKeyboardStepSize( 1 ); pVSplitter->SetKeyboardStepSize( 1 ); - pTabControl = VclPtr<ScTabControl>::Create(pFrameWin, &aViewData); + pTabControl = VclPtr<ScTabControl>::Create(pFrameWin, aViewData); if (mbInlineWithScrollbar) pTabControl->SetStyle(pTabControl->GetStyle() | WB_SIZEABLE); @@ -441,10 +441,10 @@ void ScTabView::SetZoom( const Fraction& rNewX, const Fraction& rNewY, bool bAll ZoomChanged(); } -void ScTabView::RefreshZoom() +void ScTabView::RefreshZoom(bool bRecalcScale) { aViewData.RefreshZoom(); - if (pDrawView) + if (bRecalcScale && pDrawView) pDrawView->RecalcScale(); ZoomChanged(); } @@ -463,6 +463,27 @@ void ScTabView::ResetDrawDragMode() pDrawView->SetDragMode( SdrDragMode::Move ); } +void ScTabView::SwitchRotateMode() +{ + if (pDrawView) + { + SfxBindings& rBindings = aViewData.GetBindings(); + SdrDragMode eMode; + if (pDrawView->GetDragMode() == SdrDragMode::Rotate) + eMode = SdrDragMode::Move; + else + eMode = SdrDragMode::Rotate; + pDrawView->SetDragMode( eMode ); + rBindings.Invalidate( SID_OBJECT_ROTATE ); + rBindings.Invalidate( SID_OBJECT_MIRROR ); + if (eMode == SdrDragMode::Rotate && !pDrawView->IsFrameDragSingles()) + { + pDrawView->SetFrameDragSingles(); + rBindings.Invalidate( SID_BEZIER_EDIT ); + } + } +} + void ScTabView::ViewOptionsHasChanged( bool bHScrollChanged, bool bGraphicsChanged ) { // create DrawView when grid should be displayed diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx index 46ed26d6b808..a50842624ae6 100644 --- a/sc/source/ui/view/tabvwsh4.cxx +++ b/sc/source/ui/view/tabvwsh4.cxx @@ -1779,7 +1779,7 @@ ScViewOptiChangesListener::ScViewOptiChangesListener(ScTabViewShell& rViewShell) m_xColorSchemeChangesNotifier->addChangesListener(this); } -static void lcl_RemoveCells(uno::Reference<sheet::XSpreadsheet>& rSheet, sal_uInt16 nSheet, +static void lcl_RemoveCells(const uno::Reference<sheet::XSpreadsheet>& rSheet, sal_uInt16 nSheet, sal_uInt32 nStartColumn, sal_uInt32 nStartRow, sal_uInt32 nEndColumn, sal_uInt32 nEndRow, bool bRows) { @@ -1887,7 +1887,7 @@ void ScTabViewShell::ExtendSingleSelection(css::table::CellRangeAddress& rRangeD } /* bool bRemove == false ==> highlight duplicate rows */ -void ScTabViewShell::HandleDuplicateRecords(css::uno::Reference<css::sheet::XSpreadsheet> ActiveSheet, +void ScTabViewShell::HandleDuplicateRecords(const css::uno::Reference<css::sheet::XSpreadsheet>& ActiveSheet, const css::table::CellRangeAddress& aRange, bool bRemove, bool bIncludesHeaders, bool bDuplicateRows, const std::vector<int>& rSelectedEntries) @@ -2040,7 +2040,7 @@ ScTabViewShell::ScTabViewShell( SfxViewFrame& rViewFrame, nCurRefDlgId(0), mbInSwitch(false), m_pDragData(new ScDragData), - m_pScCondFormatDlgItem() + m_pScCondFormatDlgData() { const ScAppOptions& rAppOpt = ScModule::get()->GetAppOptions(); diff --git a/sc/source/ui/view/tabvwsha.cxx b/sc/source/ui/view/tabvwsha.cxx index 63e930928439..67e2fe125430 100644 --- a/sc/source/ui/view/tabvwsha.cxx +++ b/sc/source/ui/view/tabvwsha.cxx @@ -254,7 +254,7 @@ void ScTabViewShell::GetState( SfxItemSet& rSet ) SearchOptionFlags nOptions = SearchOptionFlags::ALL; // No replacement if ReadOnly - if (GetViewData().GetDocShell()->IsReadOnly()) + if (GetViewData().GetDocShell()->IsReadOnly() || IsCurrentLokViewReadOnly()) nOptions &= ~SearchOptionFlags( SearchOptionFlags::REPLACE | SearchOptionFlags::REPLACE_ALL ); rSet.Put( SfxUInt16Item( nWhich, static_cast<sal_uInt16>(nOptions) ) ); } @@ -808,9 +808,10 @@ void ScTabViewShell::ExecuteSave( SfxRequest& rReq ) // only SID_SAVEDOC / SID_SAVEASDOC bool bCommitChanges = true; const SfxItemSet* pReqArgs = rReq.GetArgs(); - const SfxPoolItem* pItem; + const SfxPoolItem* pItem = nullptr; - if (pReqArgs && pReqArgs->HasItem(FN_PARAM_1, &pItem)) + bool bHasDontTerminateEdit = pReqArgs && pReqArgs->HasItem(FN_PARAM_1, &pItem); + if (bHasDontTerminateEdit && pItem) bCommitChanges = !static_cast<const SfxBoolItem*>(pItem)->GetValue(); // Finish entering unless 'DontTerminateEdit' is specified, even if a formula is being processed @@ -938,7 +939,7 @@ void ScTabViewShell::ExecStyle( SfxRequest& rReq ) const sal_uInt16 nSlotId = rReq.GetSlot(); if ( !pArgs && nSlotId != SID_STYLE_NEW_BY_EXAMPLE && nSlotId != SID_STYLE_UPDATE_BY_EXAMPLE ) { - // in case of vertical toolbar + // in case of vertical toolbar, sidebar shortcut icon GetDispatcher()->Execute( SID_STYLE_DESIGNER, SfxCallMode::ASYNCHRON | SfxCallMode::RECORD ); return; } diff --git a/sc/source/ui/view/tabvwshc.cxx b/sc/source/ui/view/tabvwshc.cxx index 8fc9fb1276cf..e95fa932178d 100644 --- a/sc/source/ui/view/tabvwshc.cxx +++ b/sc/source/ui/view/tabvwshc.cxx @@ -265,7 +265,7 @@ std::shared_ptr<SfxModelessDialogController> ScTabViewShell::CreateRefDialogCont break; } case SID_OPENDLG_EDIT_PRINTAREA: - xResult = std::make_shared<ScPrintAreasDlg>(pB, pCW, pParent); + xResult = std::make_shared<ScPrintAreasDlg>(pB, pCW, pParent, GetViewData()); break; case SID_DEFINE_COLROWNAMERANGES: xResult = std::make_shared<ScColRowNameRangesDlg>(pB, pCW, pParent, GetViewData()); @@ -327,7 +327,7 @@ std::shared_ptr<SfxModelessDialogController> ScTabViewShell::CreateRefDialogCont } case SID_EASY_CONDITIONAL_FORMAT_DIALOG: { - xResult = std::make_shared<sc::ConditionalFormatEasyDialog>(pB, pCW, pParent, &GetViewData()); + xResult = std::make_shared<sc::ConditionalFormatEasyDialog>(pB, pCW, pParent, GetViewData()); break; } case SID_FILTER: @@ -410,7 +410,7 @@ std::shared_ptr<SfxModelessDialogController> ScTabViewShell::CreateRefDialogCont ScViewData& rViewData = GetViewData(); rViewData.SetRefTabNo( rViewData.GetTabNo() ); ScDPObject* pObj = rDoc.GetDPAtCursor(rViewData.GetCurX(), rViewData.GetCurY(), rViewData.GetTabNo()); - xResult = std::make_shared<ScPivotLayoutDialog>(pB, pCW, pParent, &rViewData, pDialogDPObject.get(), pObj == nullptr); + xResult = std::make_shared<ScPivotLayoutDialog>(pB, pCW, pParent, rViewData, pDialogDPObject.get(), pObj == nullptr); } break; @@ -426,20 +426,18 @@ std::shared_ptr<SfxModelessDialogController> ScTabViewShell::CreateRefDialogCont } case WID_CONDFRMT_REF: { - // Get the pool item stored by Conditional Format Manager Dialog. - const std::shared_ptr<ScCondFormatDlgData>& rDlgItem(getScCondFormatDlgItem()); + // Get the DialogData stored by Conditional Format Manager Dialog. + const std::shared_ptr<ScCondFormatDlgData>& rDlgData(getScCondFormatDlgData()); - if (rDlgItem) + if (rDlgData) { ScViewData& rViewData = GetViewData(); rViewData.SetRefTabNo( rViewData.GetTabNo() ); - xResult = std::make_shared<ScCondFormatDlg>(pB, pCW, pParent, &rViewData, rDlgItem); + xResult = std::make_shared<ScCondFormatDlg>(pB, pCW, pParent, rViewData, rDlgData); - // Remove the pool item stored by Conditional Format Manager Dialog. - // tdf#160252 still needed *after* change to ScCondFormatDlgData due to - // UnitTest UITest_conditional_format - setScCondFormatDlgItem(nullptr); + // Remove the DialogData stored by Conditional Format Manager Dialog. + setScCondFormatDlgData(nullptr); } break; diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx index 45c49f294ba4..68c4a9b736d6 100644 --- a/sc/source/ui/view/viewdata.cxx +++ b/sc/source/ui/view/viewdata.cxx @@ -2471,7 +2471,6 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, const_cast<ScViewData*>(this)->aScrSize.setHeight( pView->GetGridHeight(eWhichY) ); } - sal_uInt16 nTSize; bool bIsTiledRendering = comphelper::LibreOfficeKit::isActive(); SCCOL nPosX = GetPosX(eWhichX, nForTab); @@ -2496,7 +2495,7 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, nScrPosX = 0x7FFFFFFF; else { - nTSize = mrDoc.GetColWidth(nX, nForTab); + sal_uInt16 nTSize = mrDoc.GetColWidth(nX, nForTab); if (nTSize) { tools::Long nSizeXPix = ToPixel( nTSize, nPPTX ); @@ -2516,7 +2515,7 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, for (SCCOL nX = nStartPosX; nX > nWhereX;) { --nX; - nTSize = mrDoc.GetColWidth(nX, nForTab); + sal_uInt16 nTSize = mrDoc.GetColWidth(nX, nForTab); if (nTSize) { tools::Long nSizeXPix = ToPixel( nTSize, nPPTX ); @@ -2550,26 +2549,37 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, if (nWhereY >= nStartPosY) { - for (SCROW nY = nStartPosY; nY < nWhereY && (bAllowNeg || bIsTiledRendering || nScrPosY <= aScrSize.Height()); nY++) + if (bAllowNeg && !bIsTiledRendering) { - if ( nY > mrDoc.MaxRow() ) + // tdf#150623 If possible, use the faster range-based calculation functions. + if ( nStartPosY > mrDoc.MaxRow() ) nScrPosY = 0x7FFFFFFF; else + nScrPosY = mrDoc.GetScaledRowHeight(nStartPosY, nWhereY - 1, nTabNo, nPPTY); + } + else + { + for (SCROW nY = nStartPosY; nY < nWhereY && (bAllowNeg || bIsTiledRendering || nScrPosY <= aScrSize.Height()); nY++) { - nTSize = mrDoc.GetRowHeight( nY, nTabNo ); - if (nTSize) - { - tools::Long nSizeYPix = ToPixel( nTSize, nPPTY ); - nScrPosY += nSizeYPix; - } - else if ( nY < mrDoc.MaxRow() ) + if ( nY > mrDoc.MaxRow() ) + nScrPosY = 0x7FFFFFFF; + else { - // skip multiple hidden rows (forward only for now) - SCROW nNext = mrDoc.FirstVisibleRow(nY + 1, mrDoc.MaxRow(), nTabNo); - if ( nNext > mrDoc.MaxRow() ) - nY = mrDoc.MaxRow(); - else - nY = nNext - 1; // +=nDir advances to next visible row + sal_uInt16 nTSize = mrDoc.GetRowHeight( nY, nTabNo ); + if (nTSize) + { + tools::Long nSizeYPix = ToPixel( nTSize, nPPTY ); + nScrPosY += nSizeYPix; + } + else if ( nY < mrDoc.MaxRow() ) + { + // skip multiple hidden rows (forward only for now) + SCROW nNext = mrDoc.FirstVisibleRow(nY + 1, mrDoc.MaxRow(), nTabNo); + if ( nNext > mrDoc.MaxRow() ) + nY = mrDoc.MaxRow(); + else + nY = nNext - 1; // +=nDir advances to next visible row + } } } } @@ -2579,7 +2589,7 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, for (SCROW nY = nStartPosY; nY > nWhereY;) { --nY; - nTSize = mrDoc.GetRowHeight(nY, nForTab); + sal_uInt16 nTSize = mrDoc.GetRowHeight(nY, nForTab); if (nTSize) { tools::Long nSizeYPix = ToPixel( nTSize, nPPTY ); @@ -3787,6 +3797,8 @@ void ScViewData::WriteUserDataSequence(uno::Sequence <beans::PropertyValue>& rSe OUString sName; GetDocument().GetName( nTabNo, sName ); + // tdf#150317 - sync visible tab (later used for, e.g., thumbnail generation) + GetDocument().SetVisibleTab(nTabNo); pSettings[SC_ACTIVE_TABLE].Name = SC_ACTIVETABLE; pSettings[SC_ACTIVE_TABLE].Value <<= sName; pSettings[SC_HORIZONTAL_SCROLL_BAR_WIDTH].Name = SC_HORIZONTALSCROLLBARWIDTH; diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx index 1e8a19021c08..174b6ac4143d 100644 --- a/sc/source/ui/view/viewfun2.cxx +++ b/sc/source/ui/view/viewfun2.cxx @@ -1557,11 +1557,11 @@ void ScViewFunc::CopyAutoSpellData( FillDir eDir, SCCOL nStartCol, SCROW nStartR if (eCellType != CELLTYPE_EDIT) continue; - const std::vector<editeng::MisspellRanges>* pRanges = pWin->GetAutoSpellData(nColItr, nStartRow); - if ( !pRanges ) + sc::MisspellRangeResult aRangeResult = pWin->GetAutoSpellData(nColItr, nStartRow); + if (!aRangeResult.HasRanges()) continue; for ( SCROW nRowItr = nStartRow + 1; nRowItr <= nEndRow; ++nRowItr ) - pWin->SetAutoSpellData(nColItr, nRowItr, pRanges); + pWin->SetAutoSpellData(nColItr, nRowItr, aRangeResult); } break; case FILL_TO_TOP: @@ -1571,11 +1571,11 @@ void ScViewFunc::CopyAutoSpellData( FillDir eDir, SCCOL nStartCol, SCROW nStartR if (eCellType != CELLTYPE_EDIT) continue; - const std::vector<editeng::MisspellRanges>* pRanges = pWin->GetAutoSpellData(nColItr, nEndRow); - if ( !pRanges ) + sc::MisspellRangeResult aRangeResult = pWin->GetAutoSpellData(nColItr, nEndRow); + if (!aRangeResult.HasRanges()) continue; for ( SCROW nRowItr = nEndRow - 1; nRowItr >= nStartRow; --nRowItr ) - pWin->SetAutoSpellData(nColItr, nRowItr, pRanges); + pWin->SetAutoSpellData(nColItr, nRowItr, aRangeResult); } break; case FILL_TO_RIGHT: @@ -1585,11 +1585,11 @@ void ScViewFunc::CopyAutoSpellData( FillDir eDir, SCCOL nStartCol, SCROW nStartR if (eCellType != CELLTYPE_EDIT) continue; - const std::vector<editeng::MisspellRanges>* pRanges = pWin->GetAutoSpellData(nStartCol, nRowItr); - if ( !pRanges ) + sc::MisspellRangeResult aRangeResult = pWin->GetAutoSpellData(nStartCol, nRowItr); + if (!aRangeResult.HasRanges()) continue; for ( SCCOL nColItr = nStartCol + 1; nColItr <= nEndCol; ++nColItr ) - pWin->SetAutoSpellData(nColItr, nRowItr, pRanges); + pWin->SetAutoSpellData(nColItr, nRowItr, aRangeResult); } break; case FILL_TO_LEFT: @@ -1599,23 +1599,22 @@ void ScViewFunc::CopyAutoSpellData( FillDir eDir, SCCOL nStartCol, SCROW nStartR if (eCellType != CELLTYPE_EDIT) continue; - const std::vector<editeng::MisspellRanges>* pRanges = pWin->GetAutoSpellData(nEndCol, nRowItr); - if ( !pRanges ) + sc::MisspellRangeResult aRangeResult = pWin->GetAutoSpellData(nEndCol, nRowItr); + if (!aRangeResult.HasRanges()) continue; for ( SCCOL nColItr = nEndCol - 1; nColItr >= nStartCol; --nColItr ) - pWin->SetAutoSpellData(nColItr, nRowItr, pRanges); + pWin->SetAutoSpellData(nColItr, nRowItr, aRangeResult); } break; } return; } - typedef const std::vector<editeng::MisspellRanges>* MisspellRangesType; SCROW nRowRepeatSize = nEndRow - nStartRow + 1; SCCOL nColRepeatSize = nEndCol - nStartCol + 1; SCROW nTillRow = 0; SCCOL nTillCol = 0; - std::vector<std::vector<MisspellRangesType>> aSourceSpellRanges(nRowRepeatSize, std::vector<MisspellRangesType>(nColRepeatSize, nullptr)); + std::vector<std::vector<sc::MisspellRangeResult>> aSourceSpellRanges(nRowRepeatSize, std::vector<sc::MisspellRangeResult>(nColRepeatSize)); for ( SCROW nRowIdx = 0; nRowIdx < nRowRepeatSize; ++nRowIdx ) { @@ -1638,10 +1637,10 @@ void ScViewFunc::CopyAutoSpellData( FillDir eDir, SCCOL nStartCol, SCROW nStartR for ( SCROW nRowItr = nEndRow + 1; nRowItr <= nTillRow; ++nRowItr ) { size_t nSourceRowIdx = ( nRowItr - nEndRow - 1 ) % nRowRepeatSize; - MisspellRangesType pRanges = aSourceSpellRanges[nSourceRowIdx][nColItr - nStartCol]; - if ( !pRanges ) + sc::MisspellRangeResult aRangeResult = aSourceSpellRanges[nSourceRowIdx][nColItr - nStartCol]; + if (!aRangeResult.HasRanges()) continue; - pWin->SetAutoSpellData(nColItr, nRowItr, pRanges); + pWin->SetAutoSpellData(nColItr, nRowItr, aRangeResult); } } break; @@ -1653,10 +1652,10 @@ void ScViewFunc::CopyAutoSpellData( FillDir eDir, SCCOL nStartCol, SCROW nStartR for ( SCROW nRowItr = nStartRow - 1; nRowItr >= nTillRow; --nRowItr ) { size_t nSourceRowIdx = nRowRepeatSize - 1 - ( ( nStartRow - 1 - nRowItr ) % nRowRepeatSize ); - MisspellRangesType pRanges = aSourceSpellRanges[nSourceRowIdx][nColItr - nStartCol]; - if ( !pRanges ) + sc::MisspellRangeResult aRangeResult = aSourceSpellRanges[nSourceRowIdx][nColItr - nStartCol]; + if (!aRangeResult.HasRanges()) continue; - pWin->SetAutoSpellData(nColItr, nRowItr, pRanges); + pWin->SetAutoSpellData(nColItr, nRowItr, aRangeResult); } } break; @@ -1668,10 +1667,10 @@ void ScViewFunc::CopyAutoSpellData( FillDir eDir, SCCOL nStartCol, SCROW nStartR size_t nSourceColIdx = ( nColItr - nEndCol - 1 ) % nColRepeatSize; for ( SCROW nRowItr = nStartRow; nRowItr <= nEndRow; ++nRowItr ) { - MisspellRangesType pRanges = aSourceSpellRanges[nRowItr - nStartRow][nSourceColIdx]; - if ( !pRanges ) + sc::MisspellRangeResult aRangeResult = aSourceSpellRanges[nRowItr - nStartRow][nSourceColIdx]; + if (!aRangeResult.HasRanges()) continue; - pWin->SetAutoSpellData(nColItr, nRowItr, pRanges); + pWin->SetAutoSpellData(nColItr, nRowItr, aRangeResult); } } break; @@ -1683,10 +1682,10 @@ void ScViewFunc::CopyAutoSpellData( FillDir eDir, SCCOL nStartCol, SCROW nStartR size_t nSourceColIdx = nColRepeatSize - 1 - ( ( nStartCol - 1 - nColItr ) % nColRepeatSize ); for ( SCROW nRowItr = nStartRow; nRowItr <= nEndRow; ++nRowItr ) { - MisspellRangesType pRanges = aSourceSpellRanges[nRowItr - nStartRow][nSourceColIdx]; - if ( !pRanges ) + sc::MisspellRangeResult aRangeResult = aSourceSpellRanges[nRowItr - nStartRow][nSourceColIdx]; + if (!aRangeResult.HasRanges()) continue; - pWin->SetAutoSpellData(nColItr, nRowItr, pRanges); + pWin->SetAutoSpellData(nColItr, nRowItr, aRangeResult); } } break; @@ -1971,6 +1970,9 @@ bool ScViewFunc::SearchAndReplace( const SvxSearchItem* pSearchItem, if (bAddUndo && !rDoc.IsUndoEnabled()) bAddUndo = false; + bool bCursorMoved = false; + SCCOL nOrigPosX = GetViewData().GetCurX(); + SCROW nOrigPosY = GetViewData().GetCurY(); if ( !rMark.IsMarked() && !rMark.IsMultiMarked() && (pSearchItem->HasStartPoint()) ) { // No selection -> but we have a start point (top left corner of the @@ -1986,6 +1988,7 @@ bool ScViewFunc::SearchAndReplace( const SvxSearchItem* pSearchItem, AlignToCursor( nPosX, nPosY, SC_FOLLOW_JUMP ); SetCursor( nPosX, nPosY, true ); + bCursorMoved = true; } SCCOL nCol, nOldCol; @@ -2261,6 +2264,10 @@ bool ScViewFunc::SearchAndReplace( const SvxSearchItem* pSearchItem, pDocSh->PostPaintGridAll(); // mark GetFrameWin()->LeaveWait(); } + else if (bCursorMoved) + { + SetCursor(nOrigPosX, nOrigPosY, true); + } return bFound; } diff --git a/sc/source/ui/view/viewfun3.cxx b/sc/source/ui/view/viewfun3.cxx index f485ea2d9439..2fd0bd881d3d 100644 --- a/sc/source/ui/view/viewfun3.cxx +++ b/sc/source/ui/view/viewfun3.cxx @@ -489,7 +489,7 @@ void ScViewFunc::PasteDraw() } } -void ScViewFunc::PasteFromSystem() +void ScViewFunc::PasteFromSystem(bool useSavedPrefs) { UpdateInputLine(); @@ -605,7 +605,7 @@ void ScViewFunc::PasteFromSystem() else if (aDataHelper.HasFormat(SotClipboardFormatId::RICHTEXT)) PasteFromSystem(SotClipboardFormatId::RICHTEXT); else if (aDataHelper.HasFormat(SotClipboardFormatId::HTML)) - PasteFromSystem(SotClipboardFormatId::HTML); + PasteFromSystem(SotClipboardFormatId::HTML, false, useSavedPrefs); else if (aDataHelper.HasFormat(SotClipboardFormatId::BITMAP)) PasteFromSystem(SotClipboardFormatId::BITMAP); else if (aDataHelper.HasFormat(SotClipboardFormatId::HTML_SIMPLE)) @@ -717,7 +717,7 @@ void ScViewFunc::PasteFromTransferable( const uno::Reference<datatransfer::XTran } } -bool ScViewFunc::PasteFromSystem( SotClipboardFormatId nFormatId, bool bApi ) +bool ScViewFunc::PasteFromSystem( SotClipboardFormatId nFormatId, bool bApi, bool useSavedPrefs ) { UpdateInputLine(); @@ -755,7 +755,7 @@ bool ScViewFunc::PasteFromSystem( SotClipboardFormatId nFormatId, bool bApi ) bRet = PasteDataFormat( nFormatId, aDataHelper.GetTransferable(), nPosX, nPosY, - nullptr, false, !bApi ); // allow warning dialog + nullptr, false, !bApi, useSavedPrefs ); // allow warning dialog if ( !bRet && !bApi ) { diff --git a/sc/source/ui/view/viewfun4.cxx b/sc/source/ui/view/viewfun4.cxx index d4b7ea83d9a8..129e13cfbf3b 100644 --- a/sc/source/ui/view/viewfun4.cxx +++ b/sc/source/ui/view/viewfun4.cxx @@ -365,9 +365,9 @@ void ScViewFunc::DoThesaurus() const ScPatternAttr* pPattern = rDoc.GetPattern(nCol, nRow, nTab); if (pPattern) { - auto pEditDefaults = std::make_unique<SfxItemSet>(pThesaurusEngine->GetEmptyItemSet()); - pPattern->FillEditItemSet(pEditDefaults.get()); - pThesaurusEngine->SetDefaults(std::move(pEditDefaults)); + SfxItemSet aEditDefaults(pThesaurusEngine->GetEmptyItemSet()); + pPattern->FillEditItemSet(&aEditDefaults); + pThesaurusEngine->SetDefaults(std::move(aEditDefaults)); } if (aOldText.getType() == CELLTYPE_EDIT) diff --git a/sc/source/ui/view/viewfun5.cxx b/sc/source/ui/view/viewfun5.cxx index 3786db723629..345a3f973fc4 100644 --- a/sc/source/ui/view/viewfun5.cxx +++ b/sc/source/ui/view/viewfun5.cxx @@ -17,6 +17,8 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <i18nlangtag/lang.h> +#include <officecfg/Office/Calc.hxx> #include <com/sun/star/embed/XEmbedObjectClipboardCreator.hpp> #include <com/sun/star/embed/Aspects.hpp> #include <com/sun/star/embed/MSOLEObjectSystemCreator.hpp> @@ -76,7 +78,7 @@ using namespace com::sun::star; bool ScViewFunc::PasteDataFormat( SotClipboardFormatId nFormatId, const uno::Reference<datatransfer::XTransferable>& rxTransferable, - SCCOL nPosX, SCROW nPosY, const Point* pLogicPos, bool bLink, bool bAllowDialogs ) + SCCOL nPosX, SCROW nPosY, const Point* pLogicPos, bool bLink, bool bAllowDialogs, bool useSavedPrefs ) { ScDocument& rDoc = GetViewData().GetDocument(); rDoc.SetPastingDrawFromOtherDoc( true ); @@ -126,7 +128,7 @@ bool ScViewFunc::PasteDataFormat( SotClipboardFormatId nFormatId, nFormatId == SotClipboardFormatId::EDITENGINE_ODF_TEXT_FLAT ) { bRet = PasteDataFormatFormattedText(nFormatId, rxTransferable, nPosX, nPosY, - bAllowDialogs, aDataHelper); + bAllowDialogs, aDataHelper, useSavedPrefs); } else if (nFormatId == SotClipboardFormatId::SBA_DATAEXCHANGE) { @@ -459,7 +461,7 @@ bool ScViewFunc::PasteLink( const uno::Reference<datatransfer::XTransferable>& r bool ScViewFunc::PasteDataFormatSource( SotClipboardFormatId nFormatId, SCCOL nPosX, SCROW nPosY, bool bAllowDialogs, - TransferableDataHelper& rDataHelper, Point& rPos ) + const TransferableDataHelper& rDataHelper, const Point& rPos ) { bool bRet = false; uno::Reference < io::XInputStream > xStm; @@ -658,7 +660,7 @@ bool ScViewFunc::PasteDataFormatSource( SotClipboardFormatId nFormatId, bool ScViewFunc::PasteDataFormatFormattedText( SotClipboardFormatId nFormatId, const uno::Reference<datatransfer::XTransferable>& rxTransferable, SCCOL nPosX, SCROW nPosY, bool bAllowDialogs, - TransferableDataHelper& rDataHelper ) + const TransferableDataHelper& rDataHelper, bool useSavedPrefs ) { if ( nFormatId == SotClipboardFormatId::RTF && rDataHelper.HasFormat( SotClipboardFormatId::EDITENGINE_ODF_TEXT_FLAT ) ) { @@ -676,22 +678,15 @@ bool ScViewFunc::PasteDataFormatFormattedText( SotClipboardFormatId nFormatId, auto pStrBuffer = std::make_shared<OUString>(); if (std::unique_ptr<SvStream> xStream = rDataHelper.GetSotStorageStream( nFormatId ) ) { - // Static variables for per-session storage. This could be - // changed to longer-term storage in future. - static bool bHaveSavedPreferences = false; - static LanguageType eSavedLanguage; - static bool bSavedDateConversion; - static bool bSavedScientificConversion; - if (nFormatId == SotClipboardFormatId::HTML && !comphelper::LibreOfficeKit::isActive()) { - if (bHaveSavedPreferences) + if (useSavedPrefs) { ScAsciiOptions aOptions; - aOptions.SetLanguage(eSavedLanguage); - aOptions.SetDetectSpecialNumber(bSavedDateConversion); - aOptions.SetDetectScientificNumber(bSavedScientificConversion); + aOptions.SetLanguage(LanguageType(officecfg::Office::Calc::Dialogs::ClipboardHTMLImport::Language::get())); + aOptions.SetDetectSpecialNumber(officecfg::Office::Calc::Dialogs::ClipboardHTMLImport::DetectSpecialNumbers::get()); + aOptions.SetDetectScientificNumber(officecfg::Office::Calc::Dialogs::ClipboardHTMLImport::DetectScientificNumbers::get()); pObj->SetExtOptions(aOptions); } else @@ -710,13 +705,11 @@ bool ScViewFunc::PasteDataFormatFormattedText( SotClipboardFormatId nFormatId, aOptions.SetLanguage(pDlg->GetLanguageType()); aOptions.SetDetectSpecialNumber(pDlg->IsDateConversionSet()); aOptions.SetDetectScientificNumber(pDlg->IsScientificConversionSet()); - if (!pDlg->IsKeepAskingSet()) - { - bHaveSavedPreferences = true; - eSavedLanguage = pDlg->GetLanguageType(); - bSavedDateConversion = pDlg->IsDateConversionSet(); - bSavedScientificConversion = pDlg->IsScientificConversionSet(); - } + auto pChange(comphelper::ConfigurationChanges::create()); + officecfg::Office::Calc::Dialogs::ClipboardHTMLImport::Language::set(pDlg->GetLanguageType().get(), pChange); + officecfg::Office::Calc::Dialogs::ClipboardHTMLImport::DetectSpecialNumbers::set(pDlg->IsDateConversionSet(), pChange); + officecfg::Office::Calc::Dialogs::ClipboardHTMLImport::DetectScientificNumbers::set(pDlg->IsScientificConversionSet(), pChange); + pChange->commit(); pObj->SetExtOptions(aOptions); } else diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index 1d766741cd99..8dcb2cb7e4cc 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -307,7 +307,7 @@ void ScViewFunc::DoAutoAttributes( SCCOL nCol, SCROW nRow, SCTAB nTab, // additional routines -void ScViewData::setupSizeDeviceProviderForColWidth(ScSizeDeviceProvider& rProv, Fraction& rZoomX, Fraction& rZoomY, double& rPPTX, double &rPPTY) +void ScViewData::setupSizeDeviceProviderForColWidth(const ScSizeDeviceProvider& rProv, Fraction& rZoomX, Fraction& rZoomY, double& rPPTX, double &rPPTY) { if (rProv.IsPrinter()) { @@ -1019,7 +1019,7 @@ SvtScriptType ScViewFunc::GetSelectionScriptType() return nScript; } -static void ShrinkToDataArea(ScMarkData& rFuncMark, ScDocument& rDoc); +static void ShrinkToDataArea(ScMarkData& rFuncMark, const ScDocument& rDoc); const ScPatternAttr* ScViewFunc::GetSelectionPattern() { @@ -1308,7 +1308,7 @@ void ScViewFunc::ApplyPatternLines( const ScPatternAttr& rAttr, const SvxBoxItem // tdf#147842 if the marked area is the entire sheet, then shrink it to the data area. // Otherwise ctrl-A, perform-action, will take a very long time as it tries to modify // cells that we are not using. -static void ShrinkToDataArea(ScMarkData& rFuncMark, ScDocument& rDoc) +static void ShrinkToDataArea(ScMarkData& rFuncMark, const ScDocument& rDoc) { // do not make it marked if it is not already marked if (!rFuncMark.IsMarked()) @@ -3246,7 +3246,8 @@ void ScViewFunc::InsertNameList() pDocSh->UpdateOle(GetViewData()); } -void ScViewFunc::UpdateSelectionArea( const ScMarkData& rSel, ScPatternAttr* pAttr ) +void ScViewFunc::UpdateSelectionArea(const ScMarkData& rSel, ScPatternAttr* pAttr, + bool adjustHeight) { ScDocShell* pDocShell = GetViewData().GetDocShell(); ScRange aMarkRange; @@ -3280,8 +3281,11 @@ void ScViewFunc::UpdateSelectionArea( const ScMarkData& rSel, ScPatternAttr* pAt pDocShell->PostPaint( nStartCol, nStartRow, nStartTab, nEndCol, nEndRow, nEndTab, PaintPartFlags::Grid, nExtFlags | SC_PF_TESTMERGE ); - ScTabViewShell* pTabViewShell = GetViewData().GetViewShell(); - pTabViewShell->AdjustBlockHeight(false, const_cast<ScMarkData*>(&rSel)); + if (adjustHeight) + { + ScTabViewShell* pTabViewShell = GetViewData().GetViewShell(); + pTabViewShell->AdjustBlockHeight(false, const_cast<ScMarkData*>(&rSel)); + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/uiconfig/scalc/menubar/menubar.xml b/sc/uiconfig/scalc/menubar/menubar.xml index 6563defbafd7..0d1e186f1dcf 100644 --- a/sc/uiconfig/scalc/menubar/menubar.xml +++ b/sc/uiconfig/scalc/menubar/menubar.xml @@ -602,6 +602,7 @@ <menu:menuseparator/> <menu:menuitem menu:id=".uno:DataFilterRemoveFilter"/> <menu:menuitem menu:id=".uno:DataFilterHideAutoFilter"/> + <menu:menuitem menu:id=".uno:ClearAutoFilter"/> </menu:menupopup> </menu:menu> <menu:menuitem menu:id=".uno:HandleDuplicateRecords"/> @@ -633,6 +634,8 @@ <menu:menuseparator/> <menu:menuitem menu:id=".uno:DataStreams"/> <menu:menuitem menu:id=".uno:ManageXMLSource" menu:style="text"/> + <menu:menuitem menu:id=".uno:DataProvider"/> + <menu:menuitem menu:id=".uno:DataProviderRefresh"/> <menu:menuseparator/> <menu:menuitem menu:id=".uno:TableOperationDialog"/> <menu:menuitem menu:id=".uno:TextToColumns"/> diff --git a/sc/uiconfig/scalc/popupmenu/cell.xml b/sc/uiconfig/scalc/popupmenu/cell.xml index 163c54b09bc6..a5de57e54d3a 100644 --- a/sc/uiconfig/scalc/popupmenu/cell.xml +++ b/sc/uiconfig/scalc/popupmenu/cell.xml @@ -27,6 +27,7 @@ <menu:menuseparator/> <menu:menuitem menu:id=".uno:DataSelect"/> <menu:menuitem menu:id=".uno:CurrentValidation"/> + <menu:menuitem menu:id=".uno:ClearAutoFilter"/> <menu:menuitem menu:id=".uno:DefineCurrentName"/> <menu:menuseparator/> <menu:menuitem menu:id=".uno:InsertCell"/> diff --git a/sc/uiconfig/scalc/popupmenu/graphic.xml b/sc/uiconfig/scalc/popupmenu/graphic.xml index cb14ac724f35..10f813f1e702 100644 --- a/sc/uiconfig/scalc/popupmenu/graphic.xml +++ b/sc/uiconfig/scalc/popupmenu/graphic.xml @@ -16,6 +16,12 @@ <menu:menuitem menu:id=".uno:ExternalEdit"/> <menu:menuitem menu:id=".uno:ChangePicture"/> <menu:menuitem menu:id=".uno:CompressGraphic"/> + <menu:menu menu:id=".uno:ProtectGraphicMenu"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:ProtectPos"/> + <menu:menuitem menu:id=".uno:ProtectSize"/> + </menu:menupopup> + </menu:menu> <menu:menuitem menu:id=".uno:SaveGraphic"/> <menu:menuseparator/> <menu:menuitem menu:id=".uno:OriginalSize"/> diff --git a/sc/uiconfig/scalc/toolbar/drawbar.xml b/sc/uiconfig/scalc/toolbar/drawbar.xml index 368ed8c39c6b..2e20e0c98915 100644 --- a/sc/uiconfig/scalc/toolbar/drawbar.xml +++ b/sc/uiconfig/scalc/toolbar/drawbar.xml @@ -59,4 +59,5 @@ <toolbar:toolbarseparator/> <toolbar:toolbaritem xlink:href=".uno:ToggleObjectBezierMode"/> <toolbar:toolbaritem xlink:href=".uno:ExtrusionToggle"/> + <toolbar:toolbaritem xlink:href=".uno:ClickChangeRotation"/> </toolbar:toolbar> diff --git a/sc/uiconfig/scalc/toolbar/findbar.xml b/sc/uiconfig/scalc/toolbar/findbar.xml index 41660109687a..c7ec77dcf0af 100644 --- a/sc/uiconfig/scalc/toolbar/findbar.xml +++ b/sc/uiconfig/scalc/toolbar/findbar.xml @@ -25,6 +25,7 @@ <toolbar:toolbaritem xlink:href=".uno:FindAll"/> <toolbar:toolbaritem xlink:href=".uno:SearchFormattedDisplayString"/> <toolbar:toolbaritem xlink:href=".uno:MatchCase"/> + <toolbar:toolbaritem xlink:href=".uno:MatchDiacritics"/> <toolbar:toolbarseparator/> <toolbar:toolbaritem xlink:href=".uno:SearchDialog"/> <toolbar:toolbarseparator/> diff --git a/sc/uiconfig/scalc/ui/aggregatefunctionentry.ui b/sc/uiconfig/scalc/ui/aggregatefunctionentry.ui index 2b6e31e13824..82422f69b6e4 100644 --- a/sc/uiconfig/scalc/ui/aggregatefunctionentry.ui +++ b/sc/uiconfig/scalc/ui/aggregatefunctionentry.ui @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.38.2 --> +<!-- Generated with glade 3.40.0 --> <interface domain="sc"> <requires lib="gtk+" version="3.20"/> <!-- n-columns=3 n-rows=3 --> @@ -64,6 +64,11 @@ <property name="width-chars">10</property> <property name="truncate-multiline">True</property> <property name="placeholder-text" translatable="yes" context="aggregatefunctionentry/cols">Columns</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_columns-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="aggregatefunctionentry|extended_tip|ed_columns">Column index in the database range.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/uiconfig/scalc/ui/conditionaliconset.ui b/sc/uiconfig/scalc/ui/conditionaliconset.ui index abca462dbd7a..57cf2d4992f5 100644 --- a/sc/uiconfig/scalc/ui/conditionaliconset.ui +++ b/sc/uiconfig/scalc/ui/conditionaliconset.ui @@ -16,10 +16,17 @@ <property name="row-spacing">6</property> <property name="column-spacing">12</property> <child> - <object class="GtkLabel" id="label"> + <object class="GtkComboBoxText" id="conditionMode"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="label" translatable="yes" context="conditionaliconset|label"> >= </property> + <items> + <item translatable="no" context="conditionaliconset|conditionMode"> = </item> + <item translatable="no" context="conditionaliconset|conditionMode"> < </item> + <item translatable="no" context="conditionaliconset|conditionMode"> > </item> + <item translatable="no" context="conditionaliconset|conditionMode"> <= </item> + <item translatable="no" context="conditionaliconset|conditionMode"> >= </item> + <item translatable="no" context="conditionaliconset|conditionMode"> <> </item> + </items> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/uiconfig/scalc/ui/dataproviderdlg.ui b/sc/uiconfig/scalc/ui/dataproviderdlg.ui index 23eb805a6066..137e3b1cbff2 100644 --- a/sc/uiconfig/scalc/ui/dataproviderdlg.ui +++ b/sc/uiconfig/scalc/ui/dataproviderdlg.ui @@ -13,7 +13,7 @@ <property name="orientation">vertical</property> <property name="spacing">12</property> <child internal-child="action_area"> - <object class="GtkButtonBox"> + <object class="GtkButtonBox" id="dialog-action_area1"> <property name="can-focus">False</property> <property name="margin-end">6</property> <property name="margin-bottom">6</property> @@ -48,6 +48,21 @@ <property name="position">1</property> </packing> </child> + <child> + <object class="GtkButton" id="help"> + <property name="label" translatable="yes" context="stock">_Help</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="use-underline">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> + <property name="secondary">True</property> + </packing> + </child> </object> <packing> <property name="expand">False</property> @@ -102,6 +117,11 @@ <object class="GtkComboBoxText" id="select_db_range"> <property name="visible">True</property> <property name="can-focus">False</property> + <child internal-child="accessible"> + <object class="AtkObject" id="select_db_range-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="dataproviderdlg|extended_tip|select_dg_range">The database range to receive the data from the provider.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> @@ -113,7 +133,7 @@ <object class="GtkLabel" id="label3"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="label" translatable="yes" context="dataproviderdlg/provider">Data Provider:</property> + <property name="label" translatable="yes" context="dataproviderdlg/provider">Data Format:</property> <property name="use-underline">True</property> <property name="mnemonic-widget">provider_lst</property> <property name="xalign">0</property> @@ -127,6 +147,17 @@ <object class="GtkComboBoxText" id="provider_lst"> <property name="visible">True</property> <property name="can-focus">False</property> + <items> + <item id="org.libreoffice.calc.csv">CSV</item> + <item id="org.libreoffice.calc.html">HTML</item> + <item id="org.libreoffice.calc.xml">XML</item> + <item id="org.libreoffice.calc.sql">SQL</item> + </items> + <child internal-child="accessible"> + <object class="AtkObject" id="provider_lst-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="dataproviderdlg|extended_tip|provider_lst">The format of the data to be imported.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> @@ -153,6 +184,11 @@ <property name="visible">True</property> <property name="can-focus">True</property> <property name="truncate-multiline">True</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_url-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="dataproviderdlg|extended_tip|ed_url">The URL of the data provider.For local file, insert the file path and name. For web service, insert the URL.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> @@ -176,7 +212,7 @@ <object class="GtkLabel" id="label5"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="label" translatable="yes" context="dataproviderdlg/id">Id / Xpath:</property> + <property name="label" translatable="yes" context="dataproviderdlg/id">Identifier:</property> <property name="use-underline">True</property> <property name="mnemonic-widget">ed_id</property> <property name="xalign">0</property> @@ -191,6 +227,11 @@ <property name="visible">True</property> <property name="can-focus">True</property> <property name="truncate-multiline">True</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_id-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="dataproviderdlg|extended_tip|ed_id">The table identifier in the HTML source or the XPath in XML source.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> @@ -247,6 +288,11 @@ <property name="halign">end</property> <property name="margin-end">12</property> <property name="use-underline">True</property> + <child internal-child="accessible"> + <object class="AtkObject" id="add_transformation-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="dataproviderdlg|extended_tip|add_transformation">Includes the selected transformation to the transformation set. Transformations are included at the bottom of the list.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> @@ -258,6 +304,25 @@ <property name="visible">True</property> <property name="can-focus">False</property> <property name="hexpand">True</property> + <items> + <item id="0" translatable="yes" context="dataproviderdlg|transformation_list">Delete Columns</item> + <item id="1" translatable="yes" context="dataproviderdlg|transformation_list">Delete Rows</item> + <item id="2" translatable="yes" context="dataproviderdlg|transformation_list">Swap Rows</item> + <item id="3" translatable="yes" context="dataproviderdlg|transformation_list">Split Column</item> + <item id="4" translatable="yes" context="dataproviderdlg|transformation_list">Merge Columns</item> + <item id="5" translatable="yes" context="dataproviderdlg|transformation_list">Text Transformation</item> + <item id="6" translatable="yes" context="dataproviderdlg|transformation_list">Sort Columns</item> + <item id="7" translatable="yes" context="dataproviderdlg|transformation_list">Aggregate Functions</item> + <item id="8" translatable="yes" context="dataproviderdlg|transformation_list">Numeric</item> + <item id="9" translatable="yes" context="dataproviderdlg|transformation_list">Replace Null</item> + <item id="10" translatable="yes" context="dataproviderdlg|transformation_list">Date and Time</item> + <item id="11" translatable="yes" context="dataproviderdlg|transformation_list">Find and Replace</item> + </items> + <child internal-child="accessible"> + <object class="AtkObject" id="transformation_box-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="dataproviderdlg|extended_tip|transformation_box">Available transformations that can be applied to the provided data.</property> + </object> + </child> </object> <packing> <property name="left-attach">0</property> @@ -364,6 +429,11 @@ <property name="halign">end</property> <property name="margin-end">6</property> <property name="use-underline">True</property> + <child internal-child="accessible"> + <object class="AtkObject" id="apply-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="dataproviderdlg|extended_tip|apply">Applies the transformations to the provided data and displays results in the Preview area for inspection.</property> + </object> + </child> </object> <packing> <property name="expand">False</property> @@ -407,6 +477,7 @@ <action-widgets> <action-widget response="-5">ok</action-widget> <action-widget response="-6">cancel</action-widget> + <action-widget response="-11">help</action-widget> </action-widgets> </object> </interface> diff --git a/sc/uiconfig/scalc/ui/datetimetransformationentry.ui b/sc/uiconfig/scalc/ui/datetimetransformationentry.ui index 8ca3b9e7fb9d..5fe9eac574fc 100644 --- a/sc/uiconfig/scalc/ui/datetimetransformationentry.ui +++ b/sc/uiconfig/scalc/ui/datetimetransformationentry.ui @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.38.2 --> +<!-- Generated with glade 3.40.0 --> <interface domain="sc"> <requires lib="gtk+" version="3.20"/> <!-- n-columns=3 n-rows=3 --> @@ -26,7 +26,7 @@ <property name="visible">True</property> <property name="can-focus">False</property> <property name="halign">start</property> - <property name="label" translatable="yes" context="datetimetransformationentry|name">Date Time Transformations</property> + <property name="label" translatable="yes" context="datetimetransformationentry|name">Date and Time</property> <property name="use-underline">True</property> <property name="mnemonic-widget">ed_lst</property> </object> @@ -77,7 +77,12 @@ <property name="hexpand">True</property> <property name="width-chars">10</property> <property name="truncate-multiline">True</property> - <property name="placeholder-text" translatable="yes" context="datetimetransformationentry/cols">Columns</property> + <property name="placeholder-text" translatable="yes" context="datetimetransformationentry/cols">Cols(; Separated)</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_columns-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="datetimetransformationentry|extended_tip|ed_columns">List of column indexes to apply the date transformation, separated by semicolons.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/uiconfig/scalc/ui/deletecolumnentry.ui b/sc/uiconfig/scalc/ui/deletecolumnentry.ui index db951e2d766d..9680c27a3b21 100644 --- a/sc/uiconfig/scalc/ui/deletecolumnentry.ui +++ b/sc/uiconfig/scalc/ui/deletecolumnentry.ui @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.38.2 --> +<!-- Generated with glade 3.40.0 --> <interface domain="sc"> <requires lib="gtk+" version="3.20"/> <!-- n-columns=2 n-rows=3 --> @@ -44,6 +44,11 @@ <property name="width-chars">10</property> <property name="truncate-multiline">True</property> <property name="placeholder-text" translatable="yes" context="deletecolumnentry/cols">Cols(; Separated)</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_columns-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="deletecolumnentry|extended_tip|ed_columns">List of column indexes to delete, separated by semicolons.</property> + </object> + </child> </object> <packing> <property name="left-attach">0</property> @@ -57,6 +62,11 @@ <property name="can-focus">True</property> <property name="receives-default">False</property> <property name="halign">end</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_delete-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="deletecolumnentry|extended_tip|ed_delete">Removes this entry from the transformation list.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/uiconfig/scalc/ui/deleterowentry.ui b/sc/uiconfig/scalc/ui/deleterowentry.ui index e51c57232329..7f1a775b5432 100644 --- a/sc/uiconfig/scalc/ui/deleterowentry.ui +++ b/sc/uiconfig/scalc/ui/deleterowentry.ui @@ -26,7 +26,7 @@ <property name="visible">True</property> <property name="can-focus">False</property> <property name="halign">start</property> - <property name="label" translatable="yes" context="deleterow|delete_label">Delete Row Action</property> + <property name="label" translatable="yes" context="deleterow|delete_label">Delete Rows</property> <property name="use-underline">True</property> <property name="mnemonic-widget">ed_find</property> </object> @@ -43,7 +43,12 @@ <property name="hexpand">True</property> <property name="width-chars">10</property> <property name="truncate-multiline">True</property> - <property name="placeholder-text" translatable="yes" context="deleterow|value">Enter Value</property> + <property name="placeholder-text" translatable="yes" context="deleterow|value">Lookup value</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_find-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="deleterowentry|extended_tip|ed_find">The value to look for in the database.</property> + </object> + </child> </object> <packing> <property name="left-attach">0</property> @@ -57,7 +62,12 @@ <property name="hexpand">True</property> <property name="width-chars">10</property> <property name="truncate-multiline">True</property> - <property name="placeholder-text" translatable="yes" context="deleterow|column">Column</property> + <property name="placeholder-text" translatable="yes" context="deleterow|column">Column index</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_columns-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="deleterowentry| extended_tip|ed_columns">Column index in the database range.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/uiconfig/scalc/ui/duplicaterecordsdlg.ui b/sc/uiconfig/scalc/ui/duplicaterecordsdlg.ui index 0c3406095a1b..e0086b4480a5 100644 --- a/sc/uiconfig/scalc/ui/duplicaterecordsdlg.ui +++ b/sc/uiconfig/scalc/ui/duplicaterecordsdlg.ui @@ -33,8 +33,8 @@ <property name="hexpand">True</property> <property name="layout-style">end</property> <child> - <object class="GtkButton" id="helpbutton"> - <property name="label" translatable="yes" context="duplicaterecordsdialog|helpbutton">_Help</property> + <object class="GtkButton" id="help"> + <property name="label" translatable="yes" context="stock">_Help</property> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">True</property> @@ -48,8 +48,8 @@ </packing> </child> <child> - <object class="GtkButton" id="okbtn"> - <property name="label" translatable="yes" context="duplicaterecordsdialog|okbtn">_OK</property> + <object class="GtkButton" id="ok"> + <property name="label" translatable="yes" context="stock">_OK</property> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">True</property> @@ -62,8 +62,8 @@ </packing> </child> <child> - <object class="GtkButton" id="cancelbtn"> - <property name="label" translatable="yes" context="duplicaterecordsdialog|cancelbtn">Ca_ncel</property> + <object class="GtkButton" id="cancel"> + <property name="label" translatable="yes" context="stock">_Cancel</property> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">True</property> @@ -214,7 +214,7 @@ </child> <child> <object class="GtkRadioButton" id="column"> - <property name="label" translatable="yes" context="duplicaterecordsdialog|column">_Columns</property> + <property name="label" translatable="yes" context="duplicaterecordsdialog|column">Colu_mns</property> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">False</property> @@ -338,9 +338,9 @@ </object> </child> <action-widgets> - <action-widget response="-11">helpbutton</action-widget> - <action-widget response="-5">okbtn</action-widget> - <action-widget response="-6">cancelbtn</action-widget> + <action-widget response="-11">help</action-widget> + <action-widget response="-5">ok</action-widget> + <action-widget response="-6">cancel</action-widget> </action-widgets> </object> </interface> diff --git a/sc/uiconfig/scalc/ui/findreplaceentry.ui b/sc/uiconfig/scalc/ui/findreplaceentry.ui index 03582cefa5e7..8de60f792916 100644 --- a/sc/uiconfig/scalc/ui/findreplaceentry.ui +++ b/sc/uiconfig/scalc/ui/findreplaceentry.ui @@ -26,7 +26,7 @@ <property name="visible">True</property> <property name="can-focus">False</property> <property name="halign">start</property> - <property name="label" translatable="yes" context="findreplace|label_action">Find Replace Action</property> + <property name="label" translatable="yes" context="findreplace|label_action">Find and Replace</property> <property name="use-underline">True</property> <property name="mnemonic-widget">ed_find</property> </object> @@ -44,6 +44,11 @@ <property name="width-chars">7</property> <property name="truncate-multiline">True</property> <property name="placeholder-text" translatable="yes" context="findreplace|find">Find</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_find-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="findreplaceentry|extended_tip|ed_find">The value to find.</property> + </object> + </child> </object> <packing> <property name="left-attach">0</property> @@ -58,6 +63,11 @@ <property name="width-chars">7</property> <property name="truncate-multiline">True</property> <property name="placeholder-text" translatable="yes" context="findreplace|replace">Replace With</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_replace-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="findreplaceentry|extended_tip|ed_replace">The replacement value.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> @@ -72,6 +82,11 @@ <property name="width-chars">6</property> <property name="truncate-multiline">True</property> <property name="placeholder-text" translatable="yes" context="findreplace|columns">Column</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_columns-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="findreplaceentry|extended_tip|ed_columns">The index of the column to find value and replace it.</property> + </object> + </child> </object> <packing> <property name="left-attach">2</property> diff --git a/sc/uiconfig/scalc/ui/functionpanel.ui b/sc/uiconfig/scalc/ui/functionpanel.ui index 8f1d22ab3292..62acb6c8c344 100644 --- a/sc/uiconfig/scalc/ui/functionpanel.ui +++ b/sc/uiconfig/scalc/ui/functionpanel.ui @@ -67,7 +67,7 @@ <property name="hexpand">True</property> <items> <item translatable="yes" context="functionpanel|category">Last Used</item> - <item translatable="yes" context="functionpanel|category">Favourites</item> + <item translatable="yes" context="functionpanel|category">Favorites</item> <item translatable="yes" context="functionpanel|category">All</item> <item translatable="yes" context="functionpanel|category">Database</item> <item translatable="yes" context="functionpanel|category">Date&Time</item> diff --git a/sc/uiconfig/scalc/ui/mergecolumnentry.ui b/sc/uiconfig/scalc/ui/mergecolumnentry.ui index 41ce05894067..74aafc94b6f2 100644 --- a/sc/uiconfig/scalc/ui/mergecolumnentry.ui +++ b/sc/uiconfig/scalc/ui/mergecolumnentry.ui @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.38.2 --> +<!-- Generated with glade 3.40.0 --> <interface domain="sc"> <requires lib="gtk+" version="3.20"/> <!-- n-columns=3 n-rows=3 --> @@ -26,7 +26,7 @@ <property name="visible">True</property> <property name="can-focus">False</property> <property name="halign">start</property> - <property name="label" translatable="yes" context="mergecolumnentry|name">Merge Column Action</property> + <property name="label" translatable="yes" context="mergecolumnentry|name">Merge Columns</property> <property name="use-underline">True</property> <property name="mnemonic-widget">ed_separator</property> </object> @@ -43,7 +43,12 @@ <property name="hexpand">True</property> <property name="width-chars">10</property> <property name="truncate-multiline">True</property> - <property name="placeholder-text" translatable="yes" context="mergecolumnentry/separator">Separator</property> + <property name="placeholder-text" translatable="yes" context="mergecolumnentry/separator">Separator string</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_separator-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="mergecolumnentry|extended_tip|ed_separator">Character or string added between the values in each row of the columns to merge.</property> + </object> + </child> </object> <packing> <property name="left-attach">0</property> @@ -57,7 +62,12 @@ <property name="hexpand">True</property> <property name="width-chars">10</property> <property name="truncate-multiline">True</property> - <property name="placeholder-text" translatable="yes" context="mergecolumnentry/cols">Columns</property> + <property name="placeholder-text" translatable="yes" context="mergecolumnentry/cols">Cols(; Separated)</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_columns-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="mergecolumnentry|extended_tip|ed_columns">List of column indexes to merge, separated by semicolons.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/uiconfig/scalc/ui/numbertransformationentry.ui b/sc/uiconfig/scalc/ui/numbertransformationentry.ui index 35cd42a7afb1..b3fecb5adaed 100644 --- a/sc/uiconfig/scalc/ui/numbertransformationentry.ui +++ b/sc/uiconfig/scalc/ui/numbertransformationentry.ui @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.38.2 --> +<!-- Generated with glade 3.40.0 --> <interface domain="sc"> <requires lib="gtk+" version="3.20"/> <!-- n-columns=3 n-rows=3 --> @@ -26,7 +26,7 @@ <property name="visible">True</property> <property name="can-focus">False</property> <property name="halign">start</property> - <property name="label" translatable="yes" context="numbertransformationentry|name">Number Transformations</property> + <property name="label" translatable="yes" context="numbertransformationentry|name">Numeric</property> <property name="use-underline">True</property> <property name="mnemonic-widget">ed_lst</property> </object> @@ -72,7 +72,12 @@ <property name="hexpand">True</property> <property name="width-chars">10</property> <property name="truncate-multiline">True</property> - <property name="placeholder-text" translatable="yes" context="numbertransformationentry/cols">Columns</property> + <property name="placeholder-text" translatable="yes" context="numbertransformationentry/cols">Cols(; Separated)</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_columns-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="numbertransformationentry|extended_tip|ed_columns">List of column indexes to apply the numeric transformation, separated by semicolons.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/uiconfig/scalc/ui/pivottablelayoutdialog.ui b/sc/uiconfig/scalc/ui/pivottablelayoutdialog.ui index 40a929fefd09..6bbb8b6c8e33 100644 --- a/sc/uiconfig/scalc/ui/pivottablelayoutdialog.ui +++ b/sc/uiconfig/scalc/ui/pivottablelayoutdialog.ui @@ -659,7 +659,7 @@ </child> <child> <object class="GtkCheckButton" id="check-total-rows"> - <property name="label" translatable="yes" context="pivottablelayoutdialog|check-total-rows">Total rows</property> + <property name="label" translatable="yes" context="pivottablelayoutdialog|check-total-rows">Show totals row</property> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">False</property> @@ -678,7 +678,7 @@ </child> <child> <object class="GtkCheckButton" id="check-total-columns"> - <property name="label" translatable="yes" context="pivottablelayoutdialog|check-total-columns">Total columns</property> + <property name="label" translatable="yes" context="pivottablelayoutdialog|check-total-columns">Show totals column</property> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">False</property> diff --git a/sc/uiconfig/scalc/ui/replacenulltransformationentry.ui b/sc/uiconfig/scalc/ui/replacenulltransformationentry.ui index babd68f4ffe3..89eec4a47b35 100644 --- a/sc/uiconfig/scalc/ui/replacenulltransformationentry.ui +++ b/sc/uiconfig/scalc/ui/replacenulltransformationentry.ui @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.38.2 --> +<!-- Generated with glade 3.40.0 --> <interface domain="sc"> <requires lib="gtk+" version="3.20"/> <!-- n-columns=3 n-rows=3 --> @@ -26,7 +26,7 @@ <property name="visible">True</property> <property name="can-focus">False</property> <property name="halign">start</property> - <property name="label" translatable="yes" context="replacenulltransformationentry|name">Replace Null Transformation</property> + <property name="label" translatable="yes" context="replacenulltransformationentry|name">Replace Null</property> <property name="use-underline">True</property> <property name="mnemonic-widget">ed_str</property> </object> @@ -57,7 +57,12 @@ <property name="hexpand">True</property> <property name="width-chars">10</property> <property name="truncate-multiline">True</property> - <property name="placeholder-text" translatable="yes" context="replacenulltransformationentry/cols">Columns</property> + <property name="placeholder-text" translatable="yes" context="replacenulltransformationentry/cols">Cols(; Separated)</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_columns-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="replacenulltransformationentry|extended_tip|ed_columns">List of column indexes to replace nulls, separated by semicolons.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/uiconfig/scalc/ui/sidebarcellappearance.ui b/sc/uiconfig/scalc/ui/sidebarcellappearance.ui index 1611c326d2ac..01bd2a1fd38b 100644 --- a/sc/uiconfig/scalc/ui/sidebarcellappearance.ui +++ b/sc/uiconfig/scalc/ui/sidebarcellappearance.ui @@ -82,6 +82,11 @@ <property name="homogeneous">True</property> </packing> </child> + <child internal-child="accessible"> + <object class="AtkObject" id="cellbordertype-atkobject"> + <property name="AtkObject::accessible-name" translatable="yes" context="sidebarcellappearance|cellbordertype-atkobject">Border Style</property> + </object> + </child> </object> <packing> <property name="left-attach">0</property> diff --git a/sc/uiconfig/scalc/ui/sorttransformationentry.ui b/sc/uiconfig/scalc/ui/sorttransformationentry.ui index c2c9cc65930a..bf316a341f82 100644 --- a/sc/uiconfig/scalc/ui/sorttransformationentry.ui +++ b/sc/uiconfig/scalc/ui/sorttransformationentry.ui @@ -26,7 +26,7 @@ <property name="visible">True</property> <property name="can-focus">False</property> <property name="halign">start</property> - <property name="label" translatable="yes" context="sorttransformationentry|name">Sort Transformation</property> + <property name="label" translatable="yes" context="sorttransformationentry|name">Sort Columns</property> <property name="use-underline">True</property> <property name="mnemonic-widget">ed_ascending</property> </object> @@ -43,7 +43,12 @@ <property name="hexpand">True</property> <property name="width-chars">10</property> <property name="truncate-multiline">True</property> - <property name="placeholder-text" translatable="yes" context="sorttransformationentry/cols">Column</property> + <property name="placeholder-text" translatable="yes" context="sorttransformationentry/cols">Column index</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_columns-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="sorttransformationentry|extended_tip|ed_columns">The column index for sorting data.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/uiconfig/scalc/ui/splitcolumnentry.ui b/sc/uiconfig/scalc/ui/splitcolumnentry.ui index ef839c8f8e22..8a5977e8876f 100644 --- a/sc/uiconfig/scalc/ui/splitcolumnentry.ui +++ b/sc/uiconfig/scalc/ui/splitcolumnentry.ui @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.38.2 --> +<!-- Generated with glade 3.40.0 --> <interface domain="sc"> <requires lib="gtk+" version="3.20"/> <!-- n-columns=3 n-rows=3 --> @@ -43,7 +43,12 @@ <property name="hexpand">True</property> <property name="width-chars">10</property> <property name="truncate-multiline">True</property> - <property name="placeholder-text" translatable="yes" context="splitcolumnentry/separator">Separator</property> + <property name="placeholder-text" translatable="yes" context="splitcolumnentry/separator">Separator string</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_separator-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="splitcolumnentry|extended_tip|ed_separator">The character or string used to separate the column in two.</property> + </object> + </child> </object> <packing> <property name="left-attach">0</property> @@ -57,7 +62,12 @@ <property name="hexpand">True</property> <property name="width-chars">10</property> <property name="truncate-multiline">True</property> - <property name="placeholder-text" translatable="yes" context="splitcolumnentry/cols">Column</property> + <property name="placeholder-text" translatable="yes" context="splitcolumnentry/cols">Column index</property> + <child internal-child="accessible"> + <object class="AtkObject" id="num_cols-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="splitcolumnentry|extended_tip|num_cols">The index of the column to split.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/uiconfig/scalc/ui/subtotaloptionspage.ui b/sc/uiconfig/scalc/ui/subtotaloptionspage.ui index 0d1c54f510d0..3ee95353087e 100644 --- a/sc/uiconfig/scalc/ui/subtotaloptionspage.ui +++ b/sc/uiconfig/scalc/ui/subtotaloptionspage.ui @@ -96,7 +96,7 @@ <property name="draw-indicator">True</property> <child internal-child="accessible"> <object class="AtkObject" id="summarybelow-atkobject"> - <property name="AtkObject::accessible-description" translatable="yes" context="subtotaloptionspage|extended_tip|summarybelow">Decide if the subtotals below or above the data. Reposition subtotals when you change the summary below data options.</property> + <property name="AtkObject::accessible-description" translatable="yes" context="subtotaloptionspage|extended_tip|summarybelow">Specify if the subtotals are positioned below or above the data.</property> </object> </child> </object> diff --git a/sc/uiconfig/scalc/ui/swaprowsentry.ui b/sc/uiconfig/scalc/ui/swaprowsentry.ui index c5251127a673..0d25eb3c1a26 100644 --- a/sc/uiconfig/scalc/ui/swaprowsentry.ui +++ b/sc/uiconfig/scalc/ui/swaprowsentry.ui @@ -26,7 +26,7 @@ <property name="visible">True</property> <property name="can-focus">False</property> <property name="halign">start</property> - <property name="label" translatable="yes" context="swaprows|action">Swap Rows Action</property> + <property name="label" translatable="yes" context="swaprows|action">Swap Rows</property> <property name="use-underline">True</property> <property name="mnemonic-widget">ed_row1</property> </object> @@ -44,6 +44,11 @@ <property name="width-chars">10</property> <property name="truncate-multiline">True</property> <property name="placeholder-text" translatable="yes" context="swaprows|row1">First Row</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_row1-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="swaprowsentry|extended_tip|ed_row1">The first row to swap position with the second row.</property> + </object> + </child> </object> <packing> <property name="left-attach">0</property> @@ -58,6 +63,11 @@ <property name="width-chars">10</property> <property name="truncate-multiline">True</property> <property name="placeholder-text" translatable="yes" context="swaprows|row2">Second Row</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_row2-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="swaprowsentry|extended_tip|ed_row2">The second row to swap position with the first row.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/uiconfig/scalc/ui/textimportcsv.ui b/sc/uiconfig/scalc/ui/textimportcsv.ui index 943cfcc6415c..1bf43a871a5a 100644 --- a/sc/uiconfig/scalc/ui/textimportcsv.ui +++ b/sc/uiconfig/scalc/ui/textimportcsv.ui @@ -104,7 +104,7 @@ <property name="label-xalign">0</property> <property name="shadow-type">none</property> <child> - <!-- n-columns=2 n-rows=3 --> + <!-- n-columns=2 n-rows=4 --> <object class="GtkGrid" id="grid1"> <property name="visible">True</property> <property name="can-focus">False</property> @@ -870,6 +870,22 @@ <property name="position">2</property> </packing> </child> + <child> + <object class="GtkCheckButton" id="alwaysshowonimport"> + <property name="label" translatable="yes" context="textimportcsv|alwaysshow">_Always show on import</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="use-underline">True</property> + <property name="active">True</property> + <property name="draw-indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + <property name="padding">5</property> + </packing> + </child> </object> </child> <child type="label"> diff --git a/sc/uiconfig/scalc/ui/textimportoptions.ui b/sc/uiconfig/scalc/ui/textimportoptions.ui index 0abfd7f4b6bd..84e4531f91e6 100644 --- a/sc/uiconfig/scalc/ui/textimportoptions.ui +++ b/sc/uiconfig/scalc/ui/textimportoptions.ui @@ -49,22 +49,6 @@ <property name="position">1</property> </packing> </child> - <child> - <object class="GtkCheckButton" id="keepasking"> - <property name="label" translatable="yes" context="textimportoptions|keepasking">Keep asking during this session</property> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">False</property> - <property name="active">True</property> - <property name="draw-indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - <property name="secondary">True</property> - </packing> - </child> </object> <packing> <property name="expand">False</property> diff --git a/sc/uiconfig/scalc/ui/texttransformationentry.ui b/sc/uiconfig/scalc/ui/texttransformationentry.ui index 5a6c0f01f479..75629452853e 100644 --- a/sc/uiconfig/scalc/ui/texttransformationentry.ui +++ b/sc/uiconfig/scalc/ui/texttransformationentry.ui @@ -63,7 +63,12 @@ <property name="hexpand">True</property> <property name="width-chars">10</property> <property name="truncate-multiline">True</property> - <property name="placeholder-text" translatable="yes" context="texttransformationentry/cols">Columns</property> + <property name="placeholder-text" translatable="yes" context="texttransformationentry/cols">Cols(; Separated)</property> + <child internal-child="accessible"> + <object class="AtkObject" id="ed_columns-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="texttransformationentry|extended_tip|ed_columns">List of column indexes to perform the text transformation, separated by semicolons.</property> + </object> + </child> </object> <packing> <property name="left-attach">1</property> diff --git a/sc/workben/celltrans/keywords_utf16.txt b/sc/workben/celltrans/keywords_utf16.txt Binary files differdeleted file mode 100644 index 3c9b12d0d112..000000000000 --- a/sc/workben/celltrans/keywords_utf16.txt +++ /dev/null diff --git a/sc/workben/celltrans/parse.py b/sc/workben/celltrans/parse.py deleted file mode 100644 index 4b604cbe9ab3..000000000000 --- a/sc/workben/celltrans/parse.py +++ /dev/null @@ -1,202 +0,0 @@ -#!/usr/bin/env python -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# This file incorporates work covered by the following license notice: -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed -# with this work for additional information regarding copyright -# ownership. The ASF licenses this file to you under the Apache -# License, Version 2.0 (the "License"); you may not use this file -# except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 . -# - -import sys - -localeNames = {'fr': 'French', 'hu': 'Hungarian', 'de': 'German'} -def getLocaleName (code): - global localeNames - if code in localeNames: - return localeNames[code] - else: - return "(unknown locale)" - -def getAscii (ords): - ascii = '' - for c in ords: - ascii += chr(c) - return ascii - -class LocaleData(object): - def __init__ (self, locale): - self.locale = locale - self.funcList = {} - - def addKeywordMap (self, funcName, localeName, engName): - if funcName not in self.funcList: - self.funcList[funcName] = [] - - self.funcList[funcName].append([localeName, engName]) - - def getLocaleFuncVarName (self, func, pair): - return func.lower() + "_" + getAscii(pair[1]).lower() + "_" + self.locale - - def dumpCode (self): - chars = "" - - # locale output - chars += "// " + "-"*75 + "\n" - chars += "// %s language locale (automatically generated)\n"%getLocaleName(self.locale) - chars += "// " + "-"*75 + "\n" - chars += "static const Locale a" + self.locale.capitalize() + "(OUString(\"" - chars += self.locale - chars += "\"), OUString(), OUString());\n\n" - - # pre instantiations of localized function names. - funcs = sorted(self.funcList.keys()) - chars += "// pre instantiations of localized function names\n" - for func in funcs: - for item in self.funcList[func]: - chars += "static const sal_Unicode " + self.getLocaleFuncVarName(func, item) + "[] = {\n" - chars += " " - isFirst = True - # Dump the UTF-16 bytes. - for uval in item[0]: - if isFirst: - isFirst = False - else: - chars += ", " - chars += "0x%.4X"%uval - - # Don't forget to null-terminate the string. - if not isFirst: - chars += ", " - chars += "0x0000" - - chars += "};\n" - - # map item instantiations - chars += "\n" - chars += "static const TransItem p" + self.locale.capitalize() + "[] = {\n" - for func in funcs: - for item in self.funcList[func]: - chars += " " - chars += "{%s, \"%s\", %s},\n"%(self.getLocaleFuncVarName(func, item), - getAscii(item[1]), - "oc"+func.capitalize()) - - chars += " {NULL, NULL, ocNone}\n" - chars += "};\n\n" - - # addToMap call - chars += "addToMap(%s, %s);\n"%( - "p"+self.locale.capitalize(), "a"+self.locale.capitalize()) - - return chars - -class Parser(object): - - def __init__ (self, args): - # default input & output files. - self.infile = "./keywords_utf16.txt" - self.outfile = "../../source/core/tool/cellkeywords.inl" - - if len(args) >= 2: - self.infile = args[1] - if len(args) >= 3: - self.outfile = args[2] - - def getDByte (self): - # Assume little endian. - bh = self.bytes[self.i] - bl = self.bytes[self.i+1] - try: - dbyte = ord(bl)*256 + ord(bh) - except Exception: - dbyte = bl*256 + bh - self.i += 2 - return dbyte - - def parseLine (self): - buf = [] - while self.i < self.size: - dbyte = self.getDByte() - if dbyte == 0x000A: - break - buf.append(dbyte) - return buf - - def dumpBuf (self, buf, linefeed=True): - for item in buf: - sys.stdout.write(chr(item)) - if linefeed: - print ('') - - def parse (self): - - file = open(self.infile, 'rb') - self.bytes = file.read() - file.close() - - self.size = len(self.bytes) - self.i = 0 - - localeList = [] # stores an array of locale data objects. - funcName = None - word = [] - wordPair = [] - - while self.i < self.size: - dbyte = self.getDByte() - if dbyte == 0xFEFF and self.i == 2: - # unicode signature - ignore it. - pass - elif dbyte == 0x0024: - # $ - locale name - buf = self.parseLine() - locale = getAscii(buf) - localeList.append(LocaleData(locale)) - - elif dbyte == 0x0040: - # @ - function name - buf = self.parseLine() - funcName = getAscii(buf) - - elif dbyte == 0x002C: - # , - comma separator - if len(word) > 0: - wordPair.append(word) - word = [] - elif dbyte == 0x000A: - # linefeed - if len(word) > 0: - wordPair.append(word) - word = [] - if len(wordPair) >= 2: - localeList[-1].addKeywordMap(funcName, wordPair[0], wordPair[1]) - wordPair = [] - elif dbyte in [0x0009, 0x0020]: - # whitespace - ignore it. - pass - else: - word.append(dbyte) - - chars = "// This file has been automatically generated. Do not hand-edit this!\n" - for obj in localeList: - chars += "\n" + obj.dumpCode() - - # Write to output file. - file = open(self.outfile, 'w') - file.write(chars) - file.close() - -if __name__=='__main__': - parser = Parser(sys.argv) - parser.parse() - |