summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
Diffstat (limited to 'sc')
-rw-r--r--sc/CppunitTest_sc_cache_test.mk3
-rw-r--r--sc/CppunitTest_sc_cond_format_merge.mk3
-rw-r--r--sc/CppunitTest_sc_dataprovider.mk3
-rw-r--r--sc/CppunitTest_sc_filters_test.mk3
-rw-r--r--sc/CppunitTest_sc_mark_test.mk3
-rw-r--r--sc/CppunitTest_sc_tiledrendering.mk2
-rw-r--r--sc/CppunitTest_sc_tiledrendering2.mk2
-rw-r--r--sc/IwyuFilter_sc.yaml4
-rw-r--r--sc/Library_scfilt.mk2
-rw-r--r--sc/Library_scqahelper.mk2
-rw-r--r--sc/README.md3
-rw-r--r--sc/inc/PivotTableDataProvider.hxx8
-rw-r--r--sc/inc/address.hxx7
-rw-r--r--sc/inc/appoptio.hxx5
-rw-r--r--sc/inc/arealink.hxx1
-rw-r--r--sc/inc/attarray.hxx1
-rw-r--r--sc/inc/cellsuno.hxx11
-rw-r--r--sc/inc/chgtrack.hxx2
-rw-r--r--sc/inc/colorscale.hxx10
-rw-r--r--sc/inc/column.hxx30
-rw-r--r--sc/inc/compiler.hxx2
-rw-r--r--sc/inc/conditio.hxx6
-rw-r--r--sc/inc/datauno.hxx19
-rw-r--r--sc/inc/dociter.hxx8
-rw-r--r--sc/inc/docpool.hxx3
-rw-r--r--sc/inc/document.hxx15
-rw-r--r--sc/inc/docuno.hxx16
-rw-r--r--sc/inc/dpcache.hxx5
-rw-r--r--sc/inc/dpobject.hxx3
-rw-r--r--sc/inc/dptabsrc.hxx1
-rw-r--r--sc/inc/editutil.hxx8
-rw-r--r--sc/inc/fillinfo.hxx3
-rw-r--r--sc/inc/fstalgorithm.hxx2
-rw-r--r--sc/inc/global.hxx1
-rw-r--r--sc/inc/globstr.hrc1
-rw-r--r--sc/inc/helpids.h3
-rw-r--r--sc/inc/interpretercontext.hxx5
-rw-r--r--sc/inc/lookupcache.hxx20
-rw-r--r--sc/inc/lookupsearchmode.hxx33
-rw-r--r--sc/inc/markarr.hxx1
-rw-r--r--sc/inc/markdata.hxx2
-rw-r--r--sc/inc/patattr.hxx5
-rw-r--r--sc/inc/poolcach.hxx2
-rw-r--r--sc/inc/postit.hxx2
-rw-r--r--sc/inc/queryentry.hxx1
-rw-r--r--sc/inc/queryevaluator.hxx2
-rw-r--r--sc/inc/queryiter.hxx10
-rw-r--r--sc/inc/queryparam.hxx3
-rw-r--r--sc/inc/rangecache.hxx1
-rw-r--r--sc/inc/rangeseq.hxx2
-rw-r--r--sc/inc/refhint.hxx1
-rw-r--r--sc/inc/sc.hrc1
-rw-r--r--sc/inc/scabstdlg.hxx1
-rw-r--r--sc/inc/scfuncs.hrc54
-rw-r--r--sc/inc/scitems.hxx1
-rw-r--r--sc/inc/scmatrix.hxx2
-rw-r--r--sc/inc/scmod.hxx4
-rw-r--r--sc/inc/scopetools.hxx4
-rw-r--r--sc/inc/spellcheckcontext.hxx27
-rw-r--r--sc/inc/stlpool.hxx3
-rw-r--r--sc/inc/styleuno.hxx1
-rw-r--r--sc/inc/subtotal.hxx2
-rw-r--r--sc/inc/table.hxx43
-rw-r--r--sc/inc/targuno.hxx4
-rw-r--r--sc/inc/validat.hxx8
-rw-r--r--sc/inc/viewopti.hxx2
-rw-r--r--sc/inc/xmlwrap.hxx2
-rw-r--r--sc/qa/extras/scfunctionlistobj.cxx2
-rw-r--r--sc/qa/extras/scpdfexport.cxx6
-rw-r--r--sc/qa/uitest/autofilter2/tdf149907.py37
-rw-r--r--sc/qa/uitest/calc_tests6/tdf85976.py65
-rw-r--r--sc/qa/uitest/conditional_format/colorScale.py93
-rw-r--r--sc/qa/uitest/conditional_format/iconSet.py57
-rw-r--r--sc/qa/uitest/conditional_format/tdf160252.py53
-rw-r--r--sc/qa/uitest/conditional_format/tdf162692.py58
-rw-r--r--sc/qa/uitest/conditional_format/tdf163897.py54
-rw-r--r--sc/qa/uitest/conditional_format/tdf164722.py43
-rw-r--r--sc/qa/uitest/data/autofilter/tdf149907.odsbin0 -> 7950 bytes
-rw-r--r--sc/qa/uitest/data/tdf160252.odsbin0 -> 9487 bytes
-rw-r--r--sc/qa/uitest/data/tdf162692.odsbin0 -> 12118 bytes
-rw-r--r--sc/qa/uitest/data/tdf85976.odsbin0 -> 32712 bytes
-rw-r--r--sc/qa/unit/data/functions/date_time/fods/weekday.fods2
-rw-r--r--sc/qa/unit/data/functions/date_time/fods/weeknum.fods32
-rw-r--r--sc/qa/unit/data/functions/spreadsheet/fods/choosecols.fods6485
-rw-r--r--sc/qa/unit/data/functions/spreadsheet/fods/hstack.fods5034
-rw-r--r--sc/qa/unit/data/functions/spreadsheet/fods/let.fods143
-rw-r--r--sc/qa/unit/data/functions/spreadsheet/fods/sort.fods313
-rw-r--r--sc/qa/unit/data/functions/spreadsheet/fods/sortby.fods512
-rw-r--r--sc/qa/unit/data/functions/spreadsheet/fods/unique.fods111
-rw-r--r--sc/qa/unit/data/functions/spreadsheet/fods/vstack.fods5343
-rw-r--r--sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods374
-rw-r--r--sc/qa/unit/data/ods/RowHeightTdf165003.odsbin0 -> 12162 bytes
-rw-r--r--sc/qa/unit/data/ods/tdf123225_pivotTable_empty_row_col_items.odsbin0 -> 22447 bytes
-rw-r--r--sc/qa/unit/data/ods/tdf123225_pivotTable_no_col_items.odsbin0 -> 17622 bytes
-rw-r--r--sc/qa/unit/data/ods/tdf123225_pivotTable_row_col_items.odsbin0 -> 21673 bytes
-rw-r--r--sc/qa/unit/data/ods/tdf165383.odsbin0 -> 9947 bytes
-rw-r--r--sc/qa/unit/data/xls/tdf165080.xlsbin0 -> 50176 bytes
-rw-r--r--sc/qa/unit/data/xlsx/freezePaneStartCell.xlsxbin0 -> 7730 bytes
-rw-r--r--sc/qa/unit/data/xlsx/sortconditionref2.xlsxbin0 -> 14816 bytes
-rw-r--r--sc/qa/unit/data/xlsx/tdf164895.xlsxbin0 -> 5808 bytes
-rw-r--r--sc/qa/unit/data/xlsx/tdf165503.xlsxbin0 -> 13402 bytes
-rw-r--r--sc/qa/unit/data/xlsx/tdf165655.xlsxbin0 -> 11525 bytes
-rw-r--r--sc/qa/unit/data/xlsx/tdf165886.xlsxbin0 -> 8859 bytes
-rw-r--r--sc/qa/unit/data/xml/autofilter-text.xml3333
-rw-r--r--sc/qa/unit/data/xml/tdf154311.xml252
-rw-r--r--sc/qa/unit/helper/qahelper.cxx18
-rw-r--r--sc/qa/unit/helper/qahelper.hxx6
-rw-r--r--sc/qa/unit/helper/sctestviewcallback.cxx360
-rw-r--r--sc/qa/unit/helper/sctestviewcallback.hxx94
-rw-r--r--sc/qa/unit/helper/sctiledrenderingtest.cxx171
-rw-r--r--sc/qa/unit/helper/sctiledrenderingtest.hxx53
-rw-r--r--sc/qa/unit/pivottable_filters_test.cxx131
-rw-r--r--sc/qa/unit/subsequent_export_test2.cxx29
-rw-r--r--sc/qa/unit/subsequent_export_test4.cxx119
-rw-r--r--sc/qa/unit/subsequent_filters_test2.cxx34
-rw-r--r--sc/qa/unit/subsequent_filters_test3.cxx240
-rw-r--r--sc/qa/unit/subsequent_filters_test4.cxx23
-rw-r--r--sc/qa/unit/tiledrendering/data/decimal-separator.odsbin0 -> 9651 bytes
-rw-r--r--sc/qa/unit/tiledrendering/tiledrendering.cxx314
-rw-r--r--sc/qa/unit/tiledrendering/tiledrendering2.cxx97
-rw-r--r--sc/qa/unit/tiledrendering/tiledrenderingmodeltestbase.cxx465
-rw-r--r--sc/qa/unit/ucalc.cxx5
-rw-r--r--sc/qa/unit/ucalc_condformat.cxx8
-rw-r--r--sc/qa/unit/ucalc_formula.cxx72
-rw-r--r--sc/qa/unit/uicalc/uicalc.cxx56
-rw-r--r--sc/qa/unit/uicalc/uicalc2.cxx15
-rw-r--r--sc/sdi/cellsh.sdi1
-rw-r--r--sc/sdi/docsh.sdi2
-rw-r--r--sc/sdi/drawsh.sdi1
-rw-r--r--sc/sdi/scalc.sdi21
-rw-r--r--sc/source/core/data/attrib.cxx4
-rw-r--r--sc/source/core/data/colorscale.cxx81
-rw-r--r--sc/source/core/data/column2.cxx22
-rw-r--r--sc/source/core/data/column3.cxx2
-rw-r--r--sc/source/core/data/column4.cxx4
-rw-r--r--sc/source/core/data/conditio.cxx8
-rw-r--r--sc/source/core/data/dociter.cxx24
-rw-r--r--sc/source/core/data/docpool.cxx4
-rw-r--r--sc/source/core/data/documen2.cxx6
-rw-r--r--sc/source/core/data/documen4.cxx2
-rw-r--r--sc/source/core/data/documen8.cxx25
-rw-r--r--sc/source/core/data/dpcache.cxx4
-rw-r--r--sc/source/core/data/dpobject.cxx6
-rw-r--r--sc/source/core/data/dpsave.cxx4
-rw-r--r--sc/source/core/data/funcdesc.cxx5
-rw-r--r--sc/source/core/data/patattr.cxx34
-rw-r--r--sc/source/core/data/postit.cxx10
-rw-r--r--sc/source/core/data/queryevaluator.cxx3
-rw-r--r--sc/source/core/data/segmenttree.cxx8
-rw-r--r--sc/source/core/data/stlpool.cxx15
-rw-r--r--sc/source/core/data/table2.cxx49
-rw-r--r--sc/source/core/data/validat.cxx8
-rw-r--r--sc/source/core/inc/cellkeytranslator.hxx46
-rw-r--r--sc/source/core/inc/ddelink.hxx2
-rw-r--r--sc/source/core/inc/interpre.hxx40
-rw-r--r--sc/source/core/inc/webservicelink.hxx5
-rw-r--r--sc/source/core/opencl/op_math.cxx4
-rw-r--r--sc/source/core/opencl/opbase.hxx3
-rw-r--r--sc/source/core/tool/address.cxx16
-rw-r--r--sc/source/core/tool/appoptio.cxx11
-rw-r--r--sc/source/core/tool/autoform.cxx12
-rw-r--r--sc/source/core/tool/cellkeytranslator.cxx270
-rw-r--r--sc/source/core/tool/cellkeywords.inl199
-rw-r--r--sc/source/core/tool/chgtrack.cxx2
-rw-r--r--sc/source/core/tool/compiler.cxx372
-rw-r--r--sc/source/core/tool/editutil.cxx52
-rw-r--r--sc/source/core/tool/interpr1.cxx622
-rw-r--r--sc/source/core/tool/interpr2.cxx24
-rw-r--r--sc/source/core/tool/interpr4.cxx123
-rw-r--r--sc/source/core/tool/interpr5.cxx4
-rw-r--r--sc/source/core/tool/lookupcache.cxx4
-rw-r--r--sc/source/core/tool/numformat.cxx5
-rw-r--r--sc/source/core/tool/parclass.cxx5
-rw-r--r--sc/source/core/tool/queryentry.cxx9
-rw-r--r--sc/source/core/tool/rangeseq.cxx2
-rw-r--r--sc/source/core/tool/scmatrix.cxx121
-rw-r--r--sc/source/core/tool/token.cxx3
-rw-r--r--sc/source/core/tool/viewopti.cxx152
-rw-r--r--sc/source/filter/excel/colrowst.cxx2
-rw-r--r--sc/source/filter/excel/excdoc.cxx2
-rw-r--r--sc/source/filter/excel/export/ExportTools.cxx4
-rw-r--r--sc/source/filter/excel/export/SparklineExt.cxx6
-rw-r--r--sc/source/filter/excel/xecontent.cxx4
-rw-r--r--sc/source/filter/excel/xeextlst.cxx4
-rw-r--r--sc/source/filter/excel/xehelper.cxx10
-rw-r--r--sc/source/filter/excel/xename.cxx5
-rw-r--r--sc/source/filter/excel/xepage.cxx5
-rw-r--r--sc/source/filter/excel/xepivotxml.cxx66
-rw-r--r--sc/source/filter/excel/xestyle.cxx2
-rw-r--r--sc/source/filter/excel/xeview.cxx7
-rw-r--r--sc/source/filter/excel/xistyle.cxx25
-rw-r--r--sc/source/filter/excel/xlformula.cxx5
-rw-r--r--sc/source/filter/excel/xlroot.cxx12
-rw-r--r--sc/source/filter/ftools/ftools.cxx2
-rw-r--r--sc/source/filter/inc/PivotTableFormat.hxx1
-rw-r--r--sc/source/filter/inc/SparklineFragment.hxx5
-rw-r--r--sc/source/filter/inc/autofilterbuffer.hxx1
-rw-r--r--sc/source/filter/inc/condformatbuffer.hxx44
-rw-r--r--sc/source/filter/inc/condformatcontext.hxx10
-rw-r--r--sc/source/filter/inc/connectionsbuffer.hxx2
-rw-r--r--sc/source/filter/inc/eeimport.hxx1
-rw-r--r--sc/source/filter/inc/excdoc.hxx2
-rw-r--r--sc/source/filter/inc/export/ExportTools.hxx4
-rw-r--r--sc/source/filter/inc/export/SparklineExt.hxx6
-rw-r--r--sc/source/filter/inc/extlstcontext.hxx1
-rw-r--r--sc/source/filter/inc/htmlpars.hxx1
-rw-r--r--sc/source/filter/inc/lotattr.hxx1
-rw-r--r--sc/source/filter/inc/numberformatsbuffer.hxx6
-rw-r--r--sc/source/filter/inc/orcus_autofilter.hxx111
-rw-r--r--sc/source/filter/inc/orcus_global.hxx42
-rw-r--r--sc/source/filter/inc/orcusinterface.hxx450
-rw-r--r--sc/source/filter/inc/root.hxx3
-rw-r--r--sc/source/filter/inc/sharedformulagroups.hxx1
-rw-r--r--sc/source/filter/inc/stylesbuffer.hxx25
-rw-r--r--sc/source/filter/inc/tablecolumnsbuffer.hxx1
-rw-r--r--sc/source/filter/inc/workbookhelper.hxx7
-rw-r--r--sc/source/filter/inc/xestyle.hxx2
-rw-r--r--sc/source/filter/inc/xetable.hxx5
-rw-r--r--sc/source/filter/inc/xlroot.hxx1
-rw-r--r--sc/source/filter/lotus/op.cxx12
-rw-r--r--sc/source/filter/oox/SparklineFragment.cxx2
-rw-r--r--sc/source/filter/oox/autofilterbuffer.cxx2
-rw-r--r--sc/source/filter/oox/commentsbuffer.cxx5
-rw-r--r--sc/source/filter/oox/condformatbuffer.cxx261
-rw-r--r--sc/source/filter/oox/condformatcontext.cxx29
-rw-r--r--sc/source/filter/oox/connectionsbuffer.cxx2
-rw-r--r--sc/source/filter/oox/defnamesbuffer.cxx7
-rw-r--r--sc/source/filter/oox/formulabase.cxx5
-rw-r--r--sc/source/filter/oox/pivottablebuffer.cxx17
-rw-r--r--sc/source/filter/oox/stylesbuffer.cxx61
-rw-r--r--sc/source/filter/oox/tablebuffer.cxx13
-rw-r--r--sc/source/filter/oox/workbookfragment.cxx8
-rw-r--r--sc/source/filter/oox/workbookhelper.cxx33
-rw-r--r--sc/source/filter/orcus/autofilter.cxx295
-rw-r--r--sc/source/filter/orcus/filterdetect.cxx44
-rw-r--r--sc/source/filter/orcus/global.cxx118
-rw-r--r--sc/source/filter/orcus/interface.cxx1378
-rw-r--r--sc/source/filter/orcus/xmlcontext.cxx95
-rw-r--r--sc/source/filter/xcl97/xcl97esc.cxx4
-rw-r--r--sc/source/filter/xcl97/xcl97rec.cxx7
-rw-r--r--sc/source/filter/xml/SparklineGroupsImportContext.hxx5
-rw-r--r--sc/source/filter/xml/XMLChangeTrackingExportHelper.hxx5
-rw-r--r--sc/source/filter/xml/XMLExportDataPilot.cxx2
-rw-r--r--sc/source/filter/xml/XMLExportDataPilot.hxx2
-rw-r--r--sc/source/filter/xml/XMLStylesExportHelper.cxx6
-rw-r--r--sc/source/filter/xml/XMLStylesExportHelper.hxx4
-rw-r--r--sc/source/filter/xml/XMLTableMasterPageExport.hxx4
-rw-r--r--sc/source/filter/xml/XMLTableSourceContext.cxx3
-rw-r--r--sc/source/filter/xml/XMLTrackedChangesContext.cxx16
-rw-r--r--sc/source/filter/xml/xmlcelli.cxx30
-rw-r--r--sc/source/filter/xml/xmlcoli.cxx5
-rw-r--r--sc/source/filter/xml/xmlcondformat.cxx6
-rw-r--r--sc/source/filter/xml/xmlexprt.cxx52
-rw-r--r--sc/source/filter/xml/xmlexprt.hxx43
-rw-r--r--sc/source/filter/xml/xmlimprt.cxx19
-rw-r--r--sc/source/filter/xml/xmlimprt.hxx6
-rw-r--r--sc/source/filter/xml/xmlrowi.cxx25
-rw-r--r--sc/source/filter/xml/xmlstyli.cxx54
-rw-r--r--sc/source/filter/xml/xmlstyli.hxx11
-rw-r--r--sc/source/filter/xml/xmlsubti.cxx29
-rw-r--r--sc/source/filter/xml/xmlsubti.hxx7
-rw-r--r--sc/source/filter/xml/xmltabi.cxx3
-rw-r--r--sc/source/filter/xml/xmlwrap.cxx5
-rw-r--r--sc/source/ui/Accessibility/AccessibleCell.cxx17
-rw-r--r--sc/source/ui/Accessibility/AccessibleCellBase.cxx18
-rw-r--r--sc/source/ui/Accessibility/AccessibleContextBase.cxx258
-rw-r--r--sc/source/ui/Accessibility/AccessibleDocument.cxx229
-rw-r--r--sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx101
-rw-r--r--sc/source/ui/Accessibility/AccessibleEditObject.cxx8
-rw-r--r--sc/source/ui/Accessibility/AccessiblePageHeader.cxx35
-rw-r--r--sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx13
-rw-r--r--sc/source/ui/Accessibility/AccessiblePreviewCell.cxx10
-rw-r--r--sc/source/ui/Accessibility/AccessiblePreviewHeaderCell.cxx12
-rw-r--r--sc/source/ui/Accessibility/AccessiblePreviewTable.cxx98
-rw-r--r--sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx254
-rw-r--r--sc/source/ui/Accessibility/AccessibleTableBase.cxx29
-rw-r--r--sc/source/ui/Accessibility/AccessibleText.cxx14
-rw-r--r--sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx38
-rw-r--r--sc/source/ui/app/inputhdl.cxx28
-rw-r--r--sc/source/ui/app/inputwin.cxx22
-rw-r--r--sc/source/ui/app/msgpool.cxx2
-rw-r--r--sc/source/ui/app/scmod.cxx14
-rw-r--r--sc/source/ui/app/transobj.cxx2
-rw-r--r--sc/source/ui/app/uiitems.cxx29
-rw-r--r--sc/source/ui/attrdlg/scdlgfact.cxx1
-rw-r--r--sc/source/ui/condformat/condformatdlg.cxx56
-rw-r--r--sc/source/ui/condformat/condformatdlgentry.cxx45
-rw-r--r--sc/source/ui/condformat/condformateasydlg.cxx20
-rw-r--r--sc/source/ui/dataprovider/csvdataprovider.cxx23
-rw-r--r--sc/source/ui/dataprovider/dataprovider.cxx11
-rw-r--r--sc/source/ui/dbgui/PivotLayoutDialog.cxx12
-rw-r--r--sc/source/ui/dbgui/csvgrid.cxx32
-rw-r--r--sc/source/ui/dbgui/filtdlg.cxx5
-rw-r--r--sc/source/ui/dbgui/pfiltdlg.cxx2
-rw-r--r--sc/source/ui/dbgui/scuiasciiopt.cxx29
-rw-r--r--sc/source/ui/dbgui/sfiltdlg.cxx2
-rw-r--r--sc/source/ui/dbgui/textimportoptions.cxx6
-rw-r--r--sc/source/ui/dbgui/tpsort.cxx2
-rw-r--r--sc/source/ui/docshell/docfunc.cxx9
-rw-r--r--sc/source/ui/docshell/docsh.cxx4
-rw-r--r--sc/source/ui/docshell/docsh4.cxx57
-rw-r--r--sc/source/ui/docshell/docsh5.cxx2
-rw-r--r--sc/source/ui/docshell/docsh6.cxx6
-rw-r--r--sc/source/ui/drawfunc/drawsh.cxx12
-rw-r--r--sc/source/ui/drawfunc/drawsh2.cxx4
-rw-r--r--sc/source/ui/drawfunc/drawsh5.cxx16
-rw-r--r--sc/source/ui/drawfunc/drtxtob.cxx4
-rw-r--r--sc/source/ui/drawfunc/drtxtob1.cxx5
-rw-r--r--sc/source/ui/drawfunc/fuins2.cxx2
-rw-r--r--sc/source/ui/drawfunc/fupoor.cxx3
-rw-r--r--sc/source/ui/inc/AccessibleCell.hxx5
-rw-r--r--sc/source/ui/inc/AccessibleContextBase.hxx87
-rw-r--r--sc/source/ui/inc/AccessibleDocument.hxx2
-rw-r--r--sc/source/ui/inc/AccessibleSpreadsheet.hxx11
-rw-r--r--sc/source/ui/inc/PivotLayoutDialog.hxx4
-rw-r--r--sc/source/ui/inc/RandomNumberGeneratorDialog.hxx5
-rw-r--r--sc/source/ui/inc/SparklineDataRangeDialog.hxx2
-rw-r--r--sc/source/ui/inc/anyrefdg.hxx1
-rw-r--r--sc/source/ui/inc/areasdlg.hxx6
-rw-r--r--sc/source/ui/inc/autostyl.hxx1
-rw-r--r--sc/source/ui/inc/checklistmenu.hxx3
-rw-r--r--sc/source/ui/inc/condformatdlg.hxx6
-rw-r--r--sc/source/ui/inc/condformateasydlg.hxx6
-rw-r--r--sc/source/ui/inc/condformatuno.hxx2
-rw-r--r--sc/source/ui/inc/consdlg.hxx1
-rw-r--r--sc/source/ui/inc/csvcontrol.hxx2
-rw-r--r--sc/source/ui/inc/csvgrid.hxx1
-rw-r--r--sc/source/ui/inc/csvruler.hxx1
-rw-r--r--sc/source/ui/inc/dataprovider.hxx6
-rw-r--r--sc/source/ui/inc/dataproviderdlg.hxx1
-rw-r--r--sc/source/ui/inc/dbdocfun.hxx2
-rw-r--r--sc/source/ui/inc/dbfunc.hxx3
-rw-r--r--sc/source/ui/inc/docsh.hxx7
-rw-r--r--sc/source/ui/inc/drawview.hxx1
-rw-r--r--sc/source/ui/inc/foptmgr.hxx1
-rw-r--r--sc/source/ui/inc/fupoor.hxx6
-rw-r--r--sc/source/ui/inc/gridwin.hxx14
-rw-r--r--sc/source/ui/inc/inputhdl.hxx1
-rw-r--r--sc/source/ui/inc/inputwin.hxx4
-rw-r--r--sc/source/ui/inc/navipi.hxx6
-rw-r--r--sc/source/ui/inc/olinewin.hxx2
-rw-r--r--sc/source/ui/inc/output.hxx3
-rw-r--r--sc/source/ui/inc/printfun.hxx2
-rw-r--r--sc/source/ui/inc/scuiasciiopt.hxx1
-rw-r--r--sc/source/ui/inc/select.hxx8
-rw-r--r--sc/source/ui/inc/sharedocdlg.hxx2
-rw-r--r--sc/source/ui/inc/simpref.hxx2
-rw-r--r--sc/source/ui/inc/tabcont.hxx4
-rw-r--r--sc/source/ui/inc/tabsplit.hxx4
-rw-r--r--sc/source/ui/inc/tabview.hxx15
-rw-r--r--sc/source/ui/inc/tabvwsh.hxx16
-rw-r--r--sc/source/ui/inc/textimportoptions.hxx2
-rw-r--r--sc/source/ui/inc/tphfedit.hxx3
-rw-r--r--sc/source/ui/inc/transobj.hxx6
-rw-r--r--sc/source/ui/inc/uiitems.hxx15
-rw-r--r--sc/source/ui/inc/uiobject.hxx1
-rw-r--r--sc/source/ui/inc/undo/UndoDeleteSparkline.hxx1
-rw-r--r--sc/source/ui/inc/undo/UndoEditSparkline.hxx1
-rw-r--r--sc/source/ui/inc/undoblk.hxx3
-rw-r--r--sc/source/ui/inc/undocell.hxx1
-rw-r--r--sc/source/ui/inc/viewdata.hxx4
-rw-r--r--sc/source/ui/inc/viewfunc.hxx13
-rw-r--r--sc/source/ui/inc/viewutil.hxx1
-rw-r--r--sc/source/ui/inc/xmlsourcedlg.hxx1
-rw-r--r--sc/source/ui/miscdlgs/dataproviderdlg.cxx120
-rw-r--r--sc/source/ui/miscdlgs/duplicaterecordsdlg.cxx14
-rw-r--r--sc/source/ui/miscdlgs/sharedocdlg.cxx7
-rw-r--r--sc/source/ui/navipi/navipi.cxx52
-rw-r--r--sc/source/ui/pagedlg/areasdlg.cxx83
-rw-r--r--sc/source/ui/pagedlg/tphfedit.cxx16
-rw-r--r--sc/source/ui/undo/UndoInsertSparkline.cxx26
-rw-r--r--sc/source/ui/undo/undoblk.cxx2
-rw-r--r--sc/source/ui/unoobj/PivotTableDataProvider.cxx25
-rw-r--r--sc/source/ui/unoobj/TablePivotCharts.cxx4
-rw-r--r--sc/source/ui/unoobj/afmtuno.cxx8
-rw-r--r--sc/source/ui/unoobj/cellsuno.cxx46
-rw-r--r--sc/source/ui/unoobj/chartuno.cxx8
-rw-r--r--sc/source/ui/unoobj/dapiuno.cxx16
-rw-r--r--sc/source/ui/unoobj/datauno.cxx12
-rw-r--r--sc/source/ui/unoobj/docuno.cxx88
-rw-r--r--sc/source/ui/unoobj/fielduno.cxx4
-rw-r--r--sc/source/ui/unoobj/filtuno.cxx11
-rw-r--r--sc/source/ui/unoobj/linkuno.cxx20
-rw-r--r--sc/source/ui/unoobj/nameuno.cxx12
-rw-r--r--sc/source/ui/unoobj/scdetect.hxx4
-rw-r--r--sc/source/ui/unoobj/styleuno.cxx16
-rw-r--r--sc/source/ui/unoobj/textuno.cxx24
-rw-r--r--sc/source/ui/unoobj/viewuno.cxx4
-rw-r--r--sc/source/ui/vba/vbaaxis.cxx30
-rw-r--r--sc/source/ui/vba/vbachartobjects.hxx1
-rw-r--r--sc/source/ui/vba/vbaformatconditions.cxx4
-rw-r--r--sc/source/ui/vba/vbaformatconditions.hxx4
-rw-r--r--sc/source/ui/vba/vbahyperlink.hxx1
-rw-r--r--sc/source/ui/vba/vbamenuitems.hxx1
-rw-r--r--sc/source/ui/vba/vbamenus.hxx1
-rw-r--r--sc/source/ui/vba/vbanames.cxx2
-rw-r--r--sc/source/ui/vba/vbarange.cxx4
-rw-r--r--sc/source/ui/vba/vbarange.hxx4
-rw-r--r--sc/source/ui/vba/vbasheetobjects.cxx4
-rw-r--r--sc/source/ui/vba/vbasheetobjects.hxx1
-rw-r--r--sc/source/ui/vba/vbaworksheet.hxx3
-rw-r--r--sc/source/ui/view/cellsh1.cxx60
-rw-r--r--sc/source/ui/view/cellsh2.cxx45
-rw-r--r--sc/source/ui/view/cellsh3.cxx11
-rw-r--r--sc/source/ui/view/cliputil.cxx2
-rw-r--r--sc/source/ui/view/dbfunc.cxx58
-rw-r--r--sc/source/ui/view/drawview.cxx22
-rw-r--r--sc/source/ui/view/editsh.cxx4
-rw-r--r--sc/source/ui/view/formatsh.cxx113
-rw-r--r--sc/source/ui/view/gridwin.cxx40
-rw-r--r--sc/source/ui/view/gridwin2.cxx2
-rw-r--r--sc/source/ui/view/gridwin3.cxx58
-rw-r--r--sc/source/ui/view/gridwin4.cxx20
-rw-r--r--sc/source/ui/view/gridwin5.cxx2
-rw-r--r--sc/source/ui/view/olinewin.cxx4
-rw-r--r--sc/source/ui/view/output.cxx125
-rw-r--r--sc/source/ui/view/output2.cxx39
-rw-r--r--sc/source/ui/view/preview.cxx12
-rw-r--r--sc/source/ui/view/prevwsh.cxx2
-rw-r--r--sc/source/ui/view/printfun.cxx34
-rw-r--r--sc/source/ui/view/select.cxx232
-rw-r--r--sc/source/ui/view/spellcheckcontext.cxx137
-rw-r--r--sc/source/ui/view/tabcont.cxx94
-rw-r--r--sc/source/ui/view/tabsplit.cxx8
-rw-r--r--sc/source/ui/view/tabview.cxx31
-rw-r--r--sc/source/ui/view/tabview3.cxx19
-rw-r--r--sc/source/ui/view/tabview5.cxx31
-rw-r--r--sc/source/ui/view/tabvwsh4.cxx6
-rw-r--r--sc/source/ui/view/tabvwsha.cxx9
-rw-r--r--sc/source/ui/view/tabvwshc.cxx20
-rw-r--r--sc/source/ui/view/viewdata.cxx50
-rw-r--r--sc/source/ui/view/viewfun2.cxx59
-rw-r--r--sc/source/ui/view/viewfun3.cxx8
-rw-r--r--sc/source/ui/view/viewfun4.cxx6
-rw-r--r--sc/source/ui/view/viewfun5.cxx37
-rw-r--r--sc/source/ui/view/viewfunc.cxx16
-rw-r--r--sc/uiconfig/scalc/menubar/menubar.xml3
-rw-r--r--sc/uiconfig/scalc/popupmenu/cell.xml1
-rw-r--r--sc/uiconfig/scalc/popupmenu/graphic.xml6
-rw-r--r--sc/uiconfig/scalc/toolbar/drawbar.xml1
-rw-r--r--sc/uiconfig/scalc/toolbar/findbar.xml1
-rw-r--r--sc/uiconfig/scalc/ui/aggregatefunctionentry.ui7
-rw-r--r--sc/uiconfig/scalc/ui/conditionaliconset.ui11
-rw-r--r--sc/uiconfig/scalc/ui/dataproviderdlg.ui77
-rw-r--r--sc/uiconfig/scalc/ui/datetimetransformationentry.ui11
-rw-r--r--sc/uiconfig/scalc/ui/deletecolumnentry.ui12
-rw-r--r--sc/uiconfig/scalc/ui/deleterowentry.ui16
-rw-r--r--sc/uiconfig/scalc/ui/duplicaterecordsdlg.ui20
-rw-r--r--sc/uiconfig/scalc/ui/findreplaceentry.ui17
-rw-r--r--sc/uiconfig/scalc/ui/functionpanel.ui2
-rw-r--r--sc/uiconfig/scalc/ui/mergecolumnentry.ui18
-rw-r--r--sc/uiconfig/scalc/ui/numbertransformationentry.ui11
-rw-r--r--sc/uiconfig/scalc/ui/pivottablelayoutdialog.ui4
-rw-r--r--sc/uiconfig/scalc/ui/replacenulltransformationentry.ui11
-rw-r--r--sc/uiconfig/scalc/ui/sidebarcellappearance.ui5
-rw-r--r--sc/uiconfig/scalc/ui/sorttransformationentry.ui9
-rw-r--r--sc/uiconfig/scalc/ui/splitcolumnentry.ui16
-rw-r--r--sc/uiconfig/scalc/ui/subtotaloptionspage.ui2
-rw-r--r--sc/uiconfig/scalc/ui/swaprowsentry.ui12
-rw-r--r--sc/uiconfig/scalc/ui/textimportcsv.ui18
-rw-r--r--sc/uiconfig/scalc/ui/textimportoptions.ui16
-rw-r--r--sc/uiconfig/scalc/ui/texttransformationentry.ui7
-rw-r--r--sc/workben/celltrans/keywords_utf16.txtbin1826 -> 0 bytes
-rw-r--r--sc/workben/celltrans/parse.py202
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
new file mode 100644
index 000000000000..716c4551ef1d
--- /dev/null
+++ b/sc/qa/uitest/data/autofilter/tdf149907.ods
Binary files differ
diff --git a/sc/qa/uitest/data/tdf160252.ods b/sc/qa/uitest/data/tdf160252.ods
new file mode 100644
index 000000000000..2cb64c86482e
--- /dev/null
+++ b/sc/qa/uitest/data/tdf160252.ods
Binary files differ
diff --git a/sc/qa/uitest/data/tdf162692.ods b/sc/qa/uitest/data/tdf162692.ods
new file mode 100644
index 000000000000..211ead17f4b6
--- /dev/null
+++ b/sc/qa/uitest/data/tdf162692.ods
Binary files differ
diff --git a/sc/qa/uitest/data/tdf85976.ods b/sc/qa/uitest/data/tdf85976.ods
new file mode 100644
index 000000000000..cc4feeadb8c2
--- /dev/null
+++ b/sc/qa/uitest/data/tdf85976.ods
Binary files differ
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="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans" svg:font-family="&apos;Noto Sans&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans CJK SC" svg:font-family="&apos;Noto Sans CJK SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="&apos;WenQuanYi Micro Hei&apos;" 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="&apos;Liberation Serif&apos;" 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="&apos;Segoe UI&apos;" 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="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="10pt" style:font-name-asian="WenQuanYi Micro Hei" style:font-family-asian="&apos;WenQuanYi Micro Hei&apos;" 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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N121P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N128P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N139P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N144P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N157P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N171P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N175P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N187P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N192P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N203P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N207P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N213P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N223P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N227P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N231P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N236P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N244P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N248P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N250P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N259P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N294P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N298P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N302P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N306P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N383P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N387P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N391P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N395P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N403P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N407P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N411P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N415P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N435P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N437P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N439P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N441P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N462P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N466P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N470P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N474P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N490P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N494P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N498P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N502P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N10153P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10157P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10161P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10165P0"/>
+ <style:map style:condition="value()&lt;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()&lt;=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()&lt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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="=&quot;&quot;" 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; &quot;test&quot;)" 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; &quot;test&quot;)}" calcext:value-type="string">
+ <text:p>{=CHOOSECOLS(J3:L8; 5; &quot;test&quot;)}</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="=&quot;&quot;" 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="=&quot;&quot;" 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="=&quot;&quot;" 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="=&quot;&quot;" 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="=&quot;&quot;" 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="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans" svg:font-family="&apos;Noto Sans&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans CJK SC" svg:font-family="&apos;Noto Sans CJK SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="&apos;WenQuanYi Micro Hei&apos;" 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="&apos;Liberation Serif&apos;" 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="&apos;Segoe UI&apos;" 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="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="10pt" style:font-name-asian="WenQuanYi Micro Hei" style:font-family-asian="&apos;WenQuanYi Micro Hei&apos;" 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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N121P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N128P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N139P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N144P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N157P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N171P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N175P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N187P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N192P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N203P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N207P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N213P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N223P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N227P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N231P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N236P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N244P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N248P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N250P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N259P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N294P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N298P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N302P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N306P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N383P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N387P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N391P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N395P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N403P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N407P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N411P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N415P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N435P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N437P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N439P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N441P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N462P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N466P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N470P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N474P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N490P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N494P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N498P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N502P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N10153P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10157P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10161P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10165P0"/>
+ <style:map style:condition="value()&lt;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()&lt;=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()&lt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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="=&quot;&quot;" 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|&quot;&quot;})" 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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=HSTACK(L3:M8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=HSTACK(L3:M8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=HSTACK(L3:M8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=HSTACK(L3:M8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=HSTACK(L3:M8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=HSTACK(L3:M8;{2;3;&quot;&quot;})}</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|&quot;&quot;};[.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;&quot;&quot;};L3:M8)}" calcext:value-type="string">
+ <text:p>{=HSTACK({2;3;&quot;&quot;};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;&quot;&quot;};L3:M8)}" calcext:value-type="string">
+ <text:p>{=HSTACK({2;3;&quot;&quot;};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;&quot;&quot;};L3:M8)}" calcext:value-type="string">
+ <text:p>{=HSTACK({2;3;&quot;&quot;};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;&quot;&quot;};L3:M8)}" calcext:value-type="string">
+ <text:p>{=HSTACK({2;3;&quot;&quot;};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;&quot;&quot;};L3:M8)}" calcext:value-type="string">
+ <text:p>{=HSTACK({2;3;&quot;&quot;};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;&quot;&quot;};L3:M8)}" calcext:value-type="string">
+ <text:p>{=HSTACK({2;3;&quot;&quot;};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="=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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);&quot;ERROR&quot;)" 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);&quot;ERROR&quot;)" calcext:value-type="string">
+ <text:p>=IFERROR(LET(a_1;1;a_1);&quot;ERROR&quot;)</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&gt;249; &quot;Excellent&quot;; &quot;No good&quot;))" 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&gt;249; &quot;Excellent&quot;; &quot;No good&quot;))" calcext:value-type="string">
+ <text:p>=LET(avg; AVERAGE(O2:R2); IF(avg&gt;249; &quot;Excellent&quot;; &quot;No good&quot;))</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="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
- <style:font-face style:name="Lucida Sans" svg:font-family="&apos;Lucida Sans&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="Microsoft YaHei" svg:font-family="&apos;Microsoft YaHei&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="&apos;WenQuanYi Micro Hei&apos;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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.&quot;g&quot;.&quot;z&quot;;3.&quot;c&quot;.&quot;o&quot;;12.&quot;a&quot;.&quot;u&quot;;6.&quot;b&quot;.&quot;e&quot;};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.&quot;g&quot;.&quot;z&quot;;3.&quot;c&quot;.&quot;o&quot;;12.&quot;a&quot;.&quot;u&quot;;6.&quot;b&quot;.&quot;e&quot;};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.&quot;g&quot;.&quot;z&quot;;3.&quot;c&quot;.&quot;o&quot;;12.&quot;a&quot;.&quot;u&quot;;6.&quot;b&quot;.&quot;e&quot;};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.&quot;g&quot;.&quot;z&quot;;3.&quot;c&quot;.&quot;o&quot;;12.&quot;a&quot;.&quot;u&quot;;6.&quot;b&quot;.&quot;e&quot;};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({&quot;y&quot;.&quot;n&quot;.&quot;x&quot;;&quot;p&quot;.&quot;c&quot;.&quot;o&quot;;&quot;i&quot;.&quot;a&quot;.&quot;u&quot;;&quot;h&quot;.&quot;b&quot;.&quot;e&quot;};;;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({&quot;y&quot;.&quot;n&quot;.&quot;x&quot;;&quot;p&quot;.&quot;c&quot;.&quot;o&quot;;&quot;i&quot;.&quot;a&quot;.&quot;u&quot;;&quot;h&quot;.&quot;b&quot;.&quot;e&quot;};;;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({&quot;y&quot;.&quot;n&quot;.&quot;x&quot;;&quot;p&quot;.&quot;c&quot;.&quot;o&quot;;&quot;i&quot;.&quot;a&quot;.&quot;u&quot;;&quot;h&quot;.&quot;b&quot;.&quot;e&quot;};;;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({&quot;y&quot;.&quot;n&quot;.&quot;x&quot;;&quot;p&quot;.&quot;c&quot;.&quot;o&quot;;&quot;i&quot;.&quot;a&quot;.&quot;u&quot;;&quot;h&quot;.&quot;b&quot;.&quot;e&quot;};;;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]&amp;[.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);&quot;&quot;);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);&quot;&quot;);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);&quot;&quot;);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);&quot;&quot;);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);&quot;&quot;);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);&quot;&quot;);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);&quot;&quot;);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);&quot;&quot;);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="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
- <style:font-face style:name="Lucida Sans" svg:font-family="&apos;Lucida Sans&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
- <style:font-face style:name="Microsoft YaHei" svg:font-family="&apos;Microsoft YaHei&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="&apos;WenQuanYi Micro Hei&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
</office:font-face-decls>
<office:styles>
@@ -2464,6 +2465,169 @@
<style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N542P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10174P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10175P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10176P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10177P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N30128P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N30129P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N30130P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N30131P0"/>
+ <style:map style:condition="value()&lt;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="=&quot;&quot;" 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({&quot;A&quot;|&quot;a&quot;|&quot;b&quot;|&quot;B&quot;})" 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({&quot;A&quot;;&quot;a&quot;;&quot;b&quot;;&quot;B&quot;})}" calcext:value-type="string">
+ <text:p>{=UNIQUE({&quot;A&quot;;&quot;a&quot;;&quot;b&quot;;&quot;B&quot;})}</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({&quot;A&quot;;&quot;a&quot;;&quot;b&quot;;&quot;B&quot;})}" calcext:value-type="string">
+ <text:p>{=UNIQUE({&quot;A&quot;;&quot;a&quot;;&quot;b&quot;;&quot;B&quot;})}</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({&quot;A&quot;|&quot;a&quot;|&quot;b&quot;|&quot;B&quot;|&quot;c&quot;}; ; 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({&quot;A&quot;;&quot;a&quot;;&quot;b&quot;;&quot;B&quot;;&quot;c&quot;}; ; 1)}" calcext:value-type="string">
+ <text:p>{=UNIQUE({&quot;A&quot;;&quot;a&quot;;&quot;b&quot;;&quot;B&quot;;&quot;c&quot;}; ; 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({&quot;Á&quot;|&quot;á&quot;|&quot;é&quot;|&quot;É&quot;})" 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({&quot;Á&quot;;&quot;á&quot;;&quot;é&quot;;&quot;É&quot;})}" calcext:value-type="string">
+ <text:p>{=UNIQUE({&quot;Á&quot;;&quot;á&quot;;&quot;é&quot;;&quot;É&quot;})}</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({&quot;Á&quot;;&quot;á&quot;;&quot;é&quot;;&quot;É&quot;})}" calcext:value-type="string">
+ <text:p>{=UNIQUE({&quot;Á&quot;;&quot;á&quot;;&quot;é&quot;;&quot;É&quot;})}</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({&quot;Á&quot;|&quot;á&quot;|&quot;é&quot;|&quot;É&quot;|&quot;c&quot;}; ; 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({&quot;Á&quot;;&quot;á&quot;;&quot;é&quot;;&quot;É&quot;;&quot;c&quot;}; ; 1)}" calcext:value-type="string">
+ <text:p>{=UNIQUE({&quot;Á&quot;;&quot;á&quot;;&quot;é&quot;;&quot;É&quot;;&quot;c&quot;}; ; 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="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans" svg:font-family="&apos;Noto Sans&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans CJK SC" svg:font-family="&apos;Noto Sans CJK SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="&apos;WenQuanYi Micro Hei&apos;" 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="&apos;Liberation Serif&apos;" 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="&apos;Segoe UI&apos;" 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="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="10pt" style:font-name-asian="WenQuanYi Micro Hei" style:font-family-asian="&apos;WenQuanYi Micro Hei&apos;" 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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N121P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N128P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N139P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N144P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N157P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N171P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N175P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N187P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N192P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N203P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N207P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N213P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N223P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;0" style:apply-style-name="N227P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N231P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N236P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N244P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N248P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N250P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N259P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N294P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N298P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N302P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N306P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N383P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N387P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N391P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N395P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N403P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N407P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N411P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N415P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N435P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N437P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N439P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N441P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N462P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N466P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N470P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N474P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N490P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N494P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N498P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N502P0"/>
+ <style:map style:condition="value()&lt;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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;0" style:apply-style-name="N10153P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10157P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10161P0"/>
+ <style:map style:condition="value()&lt;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()&gt;0" style:apply-style-name="N10165P0"/>
+ <style:map style:condition="value()&lt;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()&lt;=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()&lt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()&gt;=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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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="=&quot;&quot;" 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|&quot;&quot;})" 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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=VSTACK(J3:K8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=VSTACK(J3:K8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=VSTACK(J3:K8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=VSTACK(J3:K8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=VSTACK(J3:K8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=VSTACK(J3:K8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=VSTACK(J3:K8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=VSTACK(J3:K8;{2;3;&quot;&quot;})}</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;&quot;&quot;})}" calcext:value-type="string">
+ <text:p>{=VSTACK(J3:K8;{2;3;&quot;&quot;})}</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|&quot;&quot;};[.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;&quot;&quot;};J3:K8)}" calcext:value-type="string">
+ <text:p>{=VSTACK({2;3;&quot;&quot;};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;&quot;&quot;};J3:K8)}" calcext:value-type="string">
+ <text:p>{=VSTACK({2;3;&quot;&quot;};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;&quot;&quot;};J3:K8)}" calcext:value-type="string">
+ <text:p>{=VSTACK({2;3;&quot;&quot;};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;&quot;&quot;};J3:K8)}" calcext:value-type="string">
+ <text:p>{=VSTACK({2;3;&quot;&quot;};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;&quot;&quot;};J3:K8)}" calcext:value-type="string">
+ <text:p>{=VSTACK({2;3;&quot;&quot;};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;&quot;&quot;};J3:K8)}" calcext:value-type="string">
+ <text:p>{=VSTACK({2;3;&quot;&quot;};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;&quot;&quot;};J3:K8)}" calcext:value-type="string">
+ <text:p>{=VSTACK({2;3;&quot;&quot;};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;&quot;&quot;};J3:K8)}" calcext:value-type="string">
+ <text:p>{=VSTACK({2;3;&quot;&quot;};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;&quot;&quot;};J3:K8)}" calcext:value-type="string">
+ <text:p>{=VSTACK({2;3;&quot;&quot;};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="=&quot;&quot;" 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="=&quot;&quot;" 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="=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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()=&quot;&quot;" 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(&quot;India&quot;;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(&quot;INDIA&quot;;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(&quot;Ireland&quot;;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(&quot;Ireland&quot;;H2:H11;J2:J11;&quot;&quot;)" 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(&quot;Ireland&quot;;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(&quot;Ireland&quot;;H2:H11;J2:J11;&quot;Not here&quot;)" 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(&quot;&quot;;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(&quot;Nigeria&quot;;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(&quot;Nigeria&quot;;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;&quot;ID not found&quot;)}" 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;&quot;ID not found&quot;)}" 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(&quot;&quot;;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(&quot;&quot;;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(&quot;B&quot;;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(&quot;C&quot;;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(&quot;E&quot;;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(&quot;E&quot;;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(&quot;C&quot;;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(&quot;C&quot;;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(&quot;D&quot;;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(&quot;D&quot;;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(&quot;b?b&quot;;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(&quot;C&quot;;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(&quot;D&quot;;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(&quot;D&quot;;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(&quot;C&quot;;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(&quot;C&quot;;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(&quot;D&quot;;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(&quot;D&quot;;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(&quot;C&quot;;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(&quot;D&quot;;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(&quot;D&quot;;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(&quot;C&quot;;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(&quot;D&quot;;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(&quot;D&quot;;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(&quot;C?&quot;;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(&quot;c&quot;;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(&quot;d&quot;;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(&quot;d&quot;;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(&quot;f?&quot;;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(&quot;Luchs&quot;;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(&quot;B&quot;;{&quot;A&quot;|&quot;B&quot;};{1|2};&quot;&quot;)" 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(&quot;B&quot;;{&quot;A&quot;;&quot;B&quot;};{1;2};&quot;&quot;)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;B&quot;;{&quot;A&quot;;&quot;B&quot;};{1;2};&quot;&quot;)</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
new file mode 100644
index 000000000000..b3672f929f82
--- /dev/null
+++ b/sc/qa/unit/data/ods/RowHeightTdf165003.ods
Binary files differ
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
new file mode 100644
index 000000000000..fba4bc00d3ab
--- /dev/null
+++ b/sc/qa/unit/data/ods/tdf123225_pivotTable_empty_row_col_items.ods
Binary files differ
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
new file mode 100644
index 000000000000..0e2b601efa44
--- /dev/null
+++ b/sc/qa/unit/data/ods/tdf123225_pivotTable_no_col_items.ods
Binary files differ
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
new file mode 100644
index 000000000000..c47e083311e5
--- /dev/null
+++ b/sc/qa/unit/data/ods/tdf123225_pivotTable_row_col_items.ods
Binary files differ
diff --git a/sc/qa/unit/data/ods/tdf165383.ods b/sc/qa/unit/data/ods/tdf165383.ods
new file mode 100644
index 000000000000..f49ac2d27187
--- /dev/null
+++ b/sc/qa/unit/data/ods/tdf165383.ods
Binary files differ
diff --git a/sc/qa/unit/data/xls/tdf165080.xls b/sc/qa/unit/data/xls/tdf165080.xls
new file mode 100644
index 000000000000..01323774499c
--- /dev/null
+++ b/sc/qa/unit/data/xls/tdf165080.xls
Binary files differ
diff --git a/sc/qa/unit/data/xlsx/freezePaneStartCell.xlsx b/sc/qa/unit/data/xlsx/freezePaneStartCell.xlsx
new file mode 100644
index 000000000000..9bce2671009c
--- /dev/null
+++ b/sc/qa/unit/data/xlsx/freezePaneStartCell.xlsx
Binary files differ
diff --git a/sc/qa/unit/data/xlsx/sortconditionref2.xlsx b/sc/qa/unit/data/xlsx/sortconditionref2.xlsx
new file mode 100644
index 000000000000..748e894ac0a7
--- /dev/null
+++ b/sc/qa/unit/data/xlsx/sortconditionref2.xlsx
Binary files differ
diff --git a/sc/qa/unit/data/xlsx/tdf164895.xlsx b/sc/qa/unit/data/xlsx/tdf164895.xlsx
new file mode 100644
index 000000000000..7df4516e2dcf
--- /dev/null
+++ b/sc/qa/unit/data/xlsx/tdf164895.xlsx
Binary files differ
diff --git a/sc/qa/unit/data/xlsx/tdf165503.xlsx b/sc/qa/unit/data/xlsx/tdf165503.xlsx
new file mode 100644
index 000000000000..a581c93cd9c4
--- /dev/null
+++ b/sc/qa/unit/data/xlsx/tdf165503.xlsx
Binary files differ
diff --git a/sc/qa/unit/data/xlsx/tdf165655.xlsx b/sc/qa/unit/data/xlsx/tdf165655.xlsx
new file mode 100644
index 000000000000..620b68a4b956
--- /dev/null
+++ b/sc/qa/unit/data/xlsx/tdf165655.xlsx
Binary files differ
diff --git a/sc/qa/unit/data/xlsx/tdf165886.xlsx b/sc/qa/unit/data/xlsx/tdf165886.xlsx
new file mode 100644
index 000000000000..146d08823181
--- /dev/null
+++ b/sc/qa/unit/data/xlsx/tdf165886.xlsx
Binary files differ
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
new file mode 100644
index 000000000000..6f4baedd63f1
--- /dev/null
+++ b/sc/qa/unit/tiledrendering/data/decimal-separator.ods
Binary files differ
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"> &gt;= </property>
+ <items>
+ <item translatable="no" context="conditionaliconset|conditionMode"> = </item>
+ <item translatable="no" context="conditionaliconset|conditionMode"> &lt; </item>
+ <item translatable="no" context="conditionaliconset|conditionMode"> &gt; </item>
+ <item translatable="no" context="conditionaliconset|conditionMode"> &lt;= </item>
+ <item translatable="no" context="conditionaliconset|conditionMode"> &gt;= </item>
+ <item translatable="no" context="conditionaliconset|conditionMode"> &lt;&gt; </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&amp;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
deleted file mode 100644
index 3c9b12d0d112..000000000000
--- a/sc/workben/celltrans/keywords_utf16.txt
+++ /dev/null
Binary files differ
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()
-