21 #include <unordered_set>
22 #include <unordered_map>
26 #include <com/sun/star/sheet/ConditionOperator2.hpp>
28 #include <osl/diagnose.h>
33 #include <oox/token/tokens.hxx>
41 #include <document.hxx>
42 #include <tokenarray.hxx>
53 const sal_Int32 BIFF12_CFRULE_TYPE_CELLIS = 1;
54 const sal_Int32 BIFF12_CFRULE_TYPE_EXPRESSION = 2;
55 const sal_Int32 BIFF12_CFRULE_TYPE_COLORSCALE = 3;
56 const sal_Int32 BIFF12_CFRULE_TYPE_DATABAR = 4;
57 const sal_Int32 BIFF12_CFRULE_TYPE_TOPTEN = 5;
58 const sal_Int32 BIFF12_CFRULE_TYPE_ICONSET = 6;
60 const sal_Int32 BIFF12_CFRULE_SUB_CELLIS = 0;
61 const sal_Int32 BIFF12_CFRULE_SUB_EXPRESSION = 1;
62 const sal_Int32 BIFF12_CFRULE_SUB_COLORSCALE = 2;
63 const sal_Int32 BIFF12_CFRULE_SUB_DATABAR = 3;
64 const sal_Int32 BIFF12_CFRULE_SUB_ICONSET = 4;
65 const sal_Int32 BIFF12_CFRULE_SUB_TOPTEN = 5;
66 const sal_Int32 BIFF12_CFRULE_SUB_UNIQUE = 7;
67 const sal_Int32 BIFF12_CFRULE_SUB_TEXT = 8;
68 const sal_Int32 BIFF12_CFRULE_SUB_BLANK = 9;
69 const sal_Int32 BIFF12_CFRULE_SUB_NOTBLANK = 10;
70 const sal_Int32 BIFF12_CFRULE_SUB_ERROR = 11;
71 const sal_Int32 BIFF12_CFRULE_SUB_NOTERROR = 12;
72 const sal_Int32 BIFF12_CFRULE_SUB_TODAY = 15;
73 const sal_Int32 BIFF12_CFRULE_SUB_TOMORROW = 16;
74 const sal_Int32 BIFF12_CFRULE_SUB_YESTERDAY = 17;
75 const sal_Int32 BIFF12_CFRULE_SUB_LAST7DAYS = 18;
76 const sal_Int32 BIFF12_CFRULE_SUB_LASTMONTH = 19;
77 const sal_Int32 BIFF12_CFRULE_SUB_NEXTMONTH = 20;
78 const sal_Int32 BIFF12_CFRULE_SUB_THISWEEK = 21;
79 const sal_Int32 BIFF12_CFRULE_SUB_NEXTWEEK = 22;
80 const sal_Int32 BIFF12_CFRULE_SUB_LASTWEEK = 23;
81 const sal_Int32 BIFF12_CFRULE_SUB_THISMONTH = 24;
82 const sal_Int32 BIFF12_CFRULE_SUB_ABOVEAVERAGE = 25;
83 const sal_Int32 BIFF12_CFRULE_SUB_BELOWAVERAGE = 26;
84 const sal_Int32 BIFF12_CFRULE_SUB_DUPLICATE = 27;
85 const sal_Int32 BIFF12_CFRULE_SUB_EQABOVEAVERAGE = 29;
86 const sal_Int32 BIFF12_CFRULE_SUB_EQBELOWAVERAGE = 30;
88 const sal_Int32 BIFF12_CFRULE_TIMEOP_TODAY = 0;
89 const sal_Int32 BIFF12_CFRULE_TIMEOP_YESTERDAY = 1;
90 const sal_Int32 BIFF12_CFRULE_TIMEOP_LAST7DAYS = 2;
91 const sal_Int32 BIFF12_CFRULE_TIMEOP_THISWEEK = 3;
92 const sal_Int32 BIFF12_CFRULE_TIMEOP_LASTWEEK = 4;
93 const sal_Int32 BIFF12_CFRULE_TIMEOP_LASTMONTH = 5;
94 const sal_Int32 BIFF12_CFRULE_TIMEOP_TOMORROW = 6;
95 const sal_Int32 BIFF12_CFRULE_TIMEOP_NEXTWEEK = 7;
96 const sal_Int32 BIFF12_CFRULE_TIMEOP_NEXTMONTH = 8;
97 const sal_Int32 BIFF12_CFRULE_TIMEOP_THISMONTH = 9;
99 const sal_uInt16 BIFF12_CFRULE_STOPIFTRUE = 0x0002;
100 const sal_uInt16 BIFF12_CFRULE_ABOVEAVERAGE = 0x0004;
101 const sal_uInt16 BIFF12_CFRULE_BOTTOM = 0x0008;
102 const sal_uInt16 BIFF12_CFRULE_PERCENT = 0x0010;
104 bool isValue(
const OUString& rStr,
double& rVal)
107 rVal = rtl::math::stringToDouble(rStr.trim(),
'.',
',',
nullptr, &nEnd);
109 return nEnd >= rStr.getLength();
112 void SetCfvoData( ColorScaleRuleModelEntry* pEntry,
const AttributeList& rAttribs )
114 OUString aType = rAttribs.getString( XML_type, OUString() );
115 OUString aVal = rAttribs.getString(XML_val, OUString());
118 bool bVal = isValue(aVal, nVal);
119 if( !bVal || aType ==
"formula" )
121 pEntry->maFormula = aVal;
125 pEntry->mnVal = nVal;
130 pEntry->mbNum =
true;
132 else if( aType ==
"min" )
134 pEntry->mbMin =
true;
136 else if( aType ==
"max" )
138 pEntry->mbMax =
true;
140 else if( aType ==
"percent" )
142 pEntry->mbPercent =
true;
144 else if( aType ==
"percentile" )
146 pEntry->mbPercentile =
true;
178 sal_uInt32 nThemeIndex = rAttribs.
getUnsigned( XML_theme, 0 );
181 if (nThemeIndex == 0)
183 else if (nThemeIndex == 1)
185 else if (nThemeIndex == 2)
187 else if (nThemeIndex == 3)
194 double nTint = rAttribs.
getDouble(XML_tint, 0.0);
200 aColor = aDMColor.
getColor(rGraphicHelper);
203 aColor = nColor.GetRGBColor();
214 ::Color aColor = importOOXColor(rAttribs, rThemeBuffer, rGraphicHelper);
272 ::Color aColor = importOOXColor(rAttribs, rThemeBuffer, rGraphicHelper);
291 SetCfvoData( pEntry, rAttribs );
306 mxFormat->mpUpperLimit.reset( pUpperEntry );
307 mxFormat->mpLowerLimit.reset( pLowerEntry );
321 SetCfvoData(&aNewEntry, rAttribs);
342 else if (!rFormula.isEmpty())
352 for(
size_t i = 0; pIconSetMap[
i].
pName; ++
i)
354 if(OUString::createFromAscii(pIconSetMap[i].
pName) == rName)
356 eIconSetType = pIconSetMap[
i].
eType;
368 OUString aIconSet = rAttribs.
getString(XML_iconSet, OUString());
370 if (aIconSet ==
"NoIcons")
376 mxFormatData->maCustomVector.emplace_back(eIconSetType, nIndex);
400 mbStopIfTrue( false ),
403 mbAboveAverage( true ),
404 mbEqualAverage( false )
410 static const sal_Int32 spnOperators[] = {
412 XML_greaterThan, XML_lessThan, XML_greaterThanOrEqual, XML_lessThanOrEqual };
419 static const sal_Int32 spnTypes[] = { XML_containsText, XML_notContainsText, XML_beginsWith, XML_endsWith };
421 static const sal_Int32 spnOperators[] = { XML_containsText, XML_notContains, XML_beginsWith, XML_endsWith };
427 mrCondFormat( rCondFormat ),
429 mpFormatEntry(nullptr)
465 sal_Int32
nType, nSubType, nOperator, nFmla1Size, nFmla2Size, nFmla3Size;
485 SAL_WARN_IF( !( (nFmla1Size >= 0) || ((nFmla2Size == 0) && (nFmla3Size == 0)) ),
"sc.filter",
"CondFormatRule::importCfRule - missing first formula" );
486 SAL_WARN_IF( !( (nFmla1Size > 0) == (rStrm.
getRemaining() >= 8) ),
"sc.filter",
"CondFormatRule::importCfRule - formula size mismatch" );
494 OSL_ENSURE( (nFmla2Size >= 0) || (nFmla3Size == 0),
"CondFormatRule::importCfRule - missing second formula" );
495 OSL_ENSURE( (nFmla2Size > 0) == (rStrm.
getRemaining() >= 8),
"CondFormatRule::importCfRule - formula size mismatch" );
502 OSL_ENSURE( (nFmla3Size > 0) == (rStrm.
getRemaining() >= 8),
"CondFormatRule::importCfRule - formula size mismatch" );
521 case BIFF12_CFRULE_TYPE_CELLIS:
523 nSubType != BIFF12_CFRULE_SUB_CELLIS,
"sc.filter",
524 "CondFormatRule::importCfRule - rule type/subtype mismatch");
529 case BIFF12_CFRULE_TYPE_EXPRESSION:
533 case BIFF12_CFRULE_SUB_EXPRESSION:
534 OSL_ENSURE( nOperator == 0,
"CondFormatRule::importCfRule - unexpected operator value" );
537 case BIFF12_CFRULE_SUB_UNIQUE:
538 OSL_ENSURE( nOperator == 0,
"CondFormatRule::importCfRule - unexpected operator value" );
541 case BIFF12_CFRULE_SUB_TEXT:
545 case BIFF12_CFRULE_SUB_BLANK:
546 OSL_ENSURE( nOperator == 0,
"CondFormatRule::importCfRule - unexpected operator value" );
549 case BIFF12_CFRULE_SUB_NOTBLANK:
550 OSL_ENSURE( nOperator == 0,
"CondFormatRule::importCfRule - unexpected operator value" );
553 case BIFF12_CFRULE_SUB_ERROR:
554 OSL_ENSURE( nOperator == 0,
"CondFormatRule::importCfRule - unexpected operator value" );
557 case BIFF12_CFRULE_SUB_NOTERROR:
558 OSL_ENSURE( nOperator == 0,
"CondFormatRule::importCfRule - unexpected operator value" );
561 case BIFF12_CFRULE_SUB_TODAY:
563 nOperator != BIFF12_CFRULE_TIMEOP_TODAY,
"sc.filter",
564 "CondFormatRule::importCfRule - unexpected time operator value");
568 case BIFF12_CFRULE_SUB_TOMORROW:
570 nOperator != BIFF12_CFRULE_TIMEOP_TOMORROW,
"sc.filter",
571 "CondFormatRule::importCfRule - unexpected time operator value");
575 case BIFF12_CFRULE_SUB_YESTERDAY:
577 nOperator != BIFF12_CFRULE_TIMEOP_YESTERDAY,
579 "CondFormatRule::importCfRule - unexpected time operator value");
583 case BIFF12_CFRULE_SUB_LAST7DAYS:
585 nOperator != BIFF12_CFRULE_TIMEOP_LAST7DAYS,
587 "CondFormatRule::importCfRule - unexpected time operator value");
591 case BIFF12_CFRULE_SUB_LASTMONTH:
593 nOperator != BIFF12_CFRULE_TIMEOP_LASTMONTH,
595 "CondFormatRule::importCfRule - unexpected time operator value");
599 case BIFF12_CFRULE_SUB_NEXTMONTH:
601 nOperator != BIFF12_CFRULE_TIMEOP_NEXTMONTH,
603 "CondFormatRule::importCfRule - unexpected time operator value");
607 case BIFF12_CFRULE_SUB_THISWEEK:
609 nOperator != BIFF12_CFRULE_TIMEOP_THISWEEK,
"sc.filter",
610 "CondFormatRule::importCfRule - unexpected time operator value");
614 case BIFF12_CFRULE_SUB_NEXTWEEK:
616 nOperator != BIFF12_CFRULE_TIMEOP_NEXTWEEK,
"sc.filter",
617 "CondFormatRule::importCfRule - unexpected time operator value");
621 case BIFF12_CFRULE_SUB_LASTWEEK:
623 nOperator != BIFF12_CFRULE_TIMEOP_LASTWEEK,
"sc.filter",
624 "CondFormatRule::importCfRule - unexpected time operator value");
628 case BIFF12_CFRULE_SUB_THISMONTH:
630 nOperator != BIFF12_CFRULE_TIMEOP_THISMONTH,
632 "CondFormatRule::importCfRule - unexpected time operator value");
636 case BIFF12_CFRULE_SUB_ABOVEAVERAGE:
643 case BIFF12_CFRULE_SUB_BELOWAVERAGE:
650 case BIFF12_CFRULE_SUB_DUPLICATE:
651 OSL_ENSURE( nOperator == 0,
"CondFormatRule::importCfRule - unexpected operator value" );
654 case BIFF12_CFRULE_SUB_EQABOVEAVERAGE:
661 case BIFF12_CFRULE_SUB_EQBELOWAVERAGE:
670 case BIFF12_CFRULE_TYPE_COLORSCALE:
672 nSubType != BIFF12_CFRULE_SUB_COLORSCALE,
"sc.filter",
673 "CondFormatRule::importCfRule - rule type/subtype mismatch");
674 OSL_ENSURE( nOperator == 0,
"CondFormatRule::importCfRule - unexpected operator value" );
677 case BIFF12_CFRULE_TYPE_DATABAR:
679 nSubType != BIFF12_CFRULE_SUB_DATABAR,
"sc.filter",
680 "CondFormatRule::importCfRule - rule type/subtype mismatch");
681 OSL_ENSURE( nOperator == 0,
"CondFormatRule::importCfRule - unexpected operator value" );
684 case BIFF12_CFRULE_TYPE_TOPTEN:
686 nSubType != BIFF12_CFRULE_SUB_TOPTEN,
"sc.filter",
687 "CondFormatRule::importCfRule - rule type/subtype mismatch");
691 case BIFF12_CFRULE_TYPE_ICONSET:
693 nSubType != BIFF12_CFRULE_SUB_ICONSET,
"sc.filter",
694 "CondFormatRule::importCfRule - rule type/subtype mismatch");
695 OSL_ENSURE( nOperator == 0,
"CondFormatRule::importCfRule - unexpected operator value" );
699 OSL_FAIL(
"CondFormatRule::importCfRule - unknown rule type" );
736 OUString aReplaceFormula;
743 case XML_duplicateValues:
746 case XML_uniqueValues:
752 case XML_containsText:
753 OSL_ENSURE(
maModel.
mnOperator == XML_containsText,
"CondFormatRule::finalizeImport - unexpected operator" );
756 case XML_notContainsText:
758 OSL_ENSURE(
maModel.
mnOperator == XML_notContains,
"CondFormatRule::finalizeImport - unexpected operator" );
762 OSL_ENSURE(
maModel.
mnOperator == XML_beginsWith,
"CondFormatRule::finalizeImport - unexpected operator" );
766 OSL_ENSURE(
maModel.
mnOperator == XML_endsWith,
"CondFormatRule::finalizeImport - unexpected operator" );
771 case XML_containsBlanks:
772 aReplaceFormula =
"LEN(TRIM(#B))=0";
774 case XML_notContainsBlanks:
775 aReplaceFormula =
"LEN(TRIM(#B))>0";
777 case XML_containsErrors:
780 case XML_notContainsErrors:
799 case XML_aboveAverage:
819 if( !aReplaceFormula.isEmpty() )
822 sal_Int32 nStrPos = aReplaceFormula.getLength();
823 while( (nStrPos = aReplaceFormula.lastIndexOf(
'#', nStrPos )) >= 0 )
825 switch( aReplaceFormula[ nStrPos + 1 ] )
828 if( aAddress.isEmpty() )
830 aReplaceFormula = aReplaceFormula.replaceAt( nStrPos, 2, aAddress );
833 OSL_FAIL(
"CondFormatRule::finalizeImport - unknown placeholder" );
866 std::unique_ptr<ScTokenArray> pTokenArray2;
879 &aTokenArray, pTokenArray2.get(), rDoc, aPos, aStyleName);
946 SAL_WARN(
"sc.filter",
"CondFormatRule::finalizeImport - unknown time period type" );
964 mpColor->AddEntries( pFormatEntry, &rDoc, aPos );
972 mpDataBar->SetData( pFormatEntry, &rDoc, aPos );
981 mpIconSet->SetData( pFormatEntry, &rDoc, aPos );
1017 mbReadyForFinalize(false)
1031 xRule->importCfRule( rAttribs );
1048 xRule->importCfRule( rStrm );
1068 return std::make_shared<CondFormatRule>( *
this,
mpFormat );
1073 if( xRule && (xRule->getPriority() > 0) )
1075 OSL_ENSURE(
maRules.find( xRule->getPriority() ) ==
maRules.end(),
"CondFormat::insertRule - multiple rules with equal priority" );
1076 maRules[ xRule->getPriority() ] = xRule;
1088 xCondFmt->importConditionalFormatting( rAttribs );
1097 for (
auto const& it : *pList)
1099 if (it->GetRange() == rRange)
1108 class ScRangeListHasher
1111 size_t operator() (
ScRangeList const& rRanges)
const
1114 for (
size_t nIdx = 0; nIdx < rRanges.
size(); ++nIdx)
1115 nHash += rRanges[nIdx].hashArea();
1124 std::unordered_set<size_t> aDoneExtCFs;
1125 typedef std::unordered_map<ScRangeList, CondFormat*, ScRangeListHasher> RangeMap;
1129 if (aRangeMap.find(rxCondFormat->getRanges()) != aRangeMap.end())
1131 aRangeMap[rxCondFormat->getRanges()] = rxCondFormat.get();
1134 size_t nExtCFIndex = 0;
1138 const ScRangeList& rRange = rxExtCondFormat->getRange();
1139 RangeMap::iterator it = aRangeMap.find(rRange);
1140 if (it != aRangeMap.end())
1143 const std::vector<std::unique_ptr<ScFormatEntry>>& rEntries = rxExtCondFormat->getEntries();
1144 const std::vector<sal_Int32>& rPriorities = rxExtCondFormat->getPriorities();
1145 size_t nEntryIdx = 0;
1146 for (
const auto& rxEntry : rEntries)
1150 sal_Int32 nPriority = rPriorities[nEntryIdx];
1151 if (nPriority == -1)
1153 xRule->setFormatEntry(nPriority, pNewEntry);
1158 aDoneExtCFs.insert(nExtCFIndex);
1164 for(
const auto& rxCondFormat : maCondFormats )
1167 rxCondFormat->finalizeImport();
1169 for (
const auto& rxCfRule :
maCfRules )
1172 rxCfRule->finalizeImport();
1176 for (
const auto& rxExtCondFormat : maExtCondFormats)
1178 if (aDoneExtCFs.count(nExtCFIndex))
1185 const ScRangeList& rRange = rxExtCondFormat->getRange();
1191 auto pNewFormat = std::make_unique<ScConditionalFormat>(0, pDoc);
1192 pFormat = pNewFormat.get();
1198 const std::vector< std::unique_ptr<ScFormatEntry> >& rEntries = rxExtCondFormat->getEntries();
1199 for (
const auto& rxEntry : rEntries)
1201 pFormat->
AddEntry(rxEntry->Clone(pDoc));
1213 xCondFmt->importCondFormatting( rStrm );
1233 case XML_between:
return ConditionOperator2::BETWEEN;
1234 case XML_equal:
return ConditionOperator2::EQUAL;
1235 case XML_greaterThan:
return ConditionOperator2::GREATER;
1236 case XML_greaterThanOrEqual:
return ConditionOperator2::GREATER_EQUAL;
1237 case XML_lessThan:
return ConditionOperator2::LESS;
1238 case XML_lessThanOrEqual:
return ConditionOperator2::LESS_EQUAL;
1239 case XML_notBetween:
return ConditionOperator2::NOT_BETWEEN;
1240 case XML_notEqual:
return ConditionOperator2::NOT_EQUAL;
1241 case XML_duplicateValues:
return ConditionOperator2::DUPLICATE;
1268 CondFormatRef xCondFmt = std::make_shared<CondFormat>( *this );
1306 pDataBar->
mbNeg =
true;
1352 ::Color aColor = importOOXColor(rAttribs, rThemeBuffer, rGraphicHelper);
1361 ::Color aColor = importOOXColor(rAttribs, rThemeBuffer, rGraphicHelper);
1372 const std::vector<sal_Int32>* pPriorities):
std::unique_ptr< ScIconSetFormatData > mxFormatData
SharedString intern(const OUString &rStr)
void importIcon(const AttributeList &rAttribs)
SC_DLLPUBLIC svl::SharedStringPool & GetSharedStringPool()
void importColor(const AttributeList &rAttribs)
OptValue< bool > getBool(sal_Int32 nAttrToken) const
bool getType(BSTR name, Type &type)
A 2D cell range address list for binary filters.
OptValue< sal_Int32 > getInteger(sal_Int32 nAttrToken) const
const sal_uInt32 UNSIGNED_RGB_TRANSPARENT
IconSetRule(const WorksheetHelper &rParent)
std::unique_ptr< ScDataBarFormatData > mxFormat
ScDocument & getScDocument()
void importCfvo(const AttributeList &rAttribs)
SC_DLLPUBLIC sal_uLong AddCondFormat(std::unique_ptr< ScConditionalFormat > pNew, SCTAB nTab)
OptValue< double > getDouble(sal_Int32 nAttrToken) const
#define STATIC_ARRAY_SELECT(array, index, def)
OptValue< OUString > getString(sal_Int32 nAttrToken) const
OUString createDxfStyle(sal_Int32 nDxfId) const
Creates the style sheet described by the DXF with the passed identifier.
StylesBuffer & getStyles() const
Returns all cell formatting objects read from the styles substream.
GraphicHelper & getGraphicHelper() const
SC_DLLPUBLIC ScConditionalFormatList * GetCondFormList(SCTAB nTab) const
SC_DLLPUBLIC void CheckLinkFormulaNeedingCheck(const ScTokenArray &rCode)
Check token array and set link check if ocDde/ocWebservice is contained.
sal_uInt32 getUnsignedHex(sal_Int32 nAttrToken, sal_uInt32 nDefault) const
void AddEntries(ScColorScaleFormat *pFormat, ScDocument *pDoc, const ScAddress &rAddr)
bool hasAttribute(sal_Int32 nAttrToken) const
::oox::core::FilterBase & getBaseFilter() const
Returns the base filter object (base class of all filters).
OptValue< sal_uInt32 > getUnsigned(sal_Int32 nAttrToken) const
void importColor(const AttributeList &rAttribs)
bool getFlag(Type nBitField, Type nMask)
ScAddress GetTopLeftCorner() const
std::unique_ptr< ColorScaleRuleModelEntry > mpUpperLimit
std::shared_ptr< CondFormatRule > CondFormatRuleRef
std::vector< ColorScaleRuleModelEntry > maColorScaleRuleEntries
::Color getColor(const GraphicHelper &rGraphicHelper,::Color nPhClr=API_RGB_TRANSPARENT) const
Shared formula definition.
ExtCfDataBarRule(ScDataBarFormatData *pTarget, const WorksheetHelper &rParent)
std::shared_ptr< CondFormat > CondFormatRef
void importNegativeFillColor(const AttributeList &rAttribs)
OUString maColorScaleType
void convertToCellRangeList(ScRangeList &orRanges, const OUString &rString, sal_Int16 nSheet, bool bTrackOverflow)
Tries to convert the passed string to a cell range list.
static SC_DLLPUBLIC bool ConvertToTokenArray(ScDocument &rDoc, ScTokenArray &rTokenArray, const css::uno::Sequence< css::sheet::FormulaToken > &rSequence)
virtual ScFormatEntry * Clone(ScDocument *pDoc) const =0
void importAttribs(const AttributeList &rAttribs)
void SetFormula(const OUString &rFormula, ScDocument &rDoc, const ScAddress &rAddr, formula::FormulaGrammar::Grammar eGrammar=formula::FormulaGrammar::GRAM_DEFAULT)
css::uno::Sequence< ApiToken > ApiTokenSequence
void importAttribs(const AttributeList &rAttribs)
ScDataBarFormatData * mpTarget
sal_Int64 getRemaining() const
void setSrgbClr(sal_Int32 nRgb)
void importCfvo(const AttributeList &rAttribs)
#define SAL_WARN_IF(condition, area, stream)
::Color getColorByIndex(size_t nIndex) const
ColorScaleRule(const CondFormat &rFormat)
SCTAB getSheetIndex() const
Returns the index of the current sheet.
std::unique_ptr< ColorScaleRuleModelEntry > mpLowerLimit
void SetDateType(condformat::ScCondFormatDateType eType)
void SetData(ScDataBarFormat *pFormat, ScDocument *pDoc, const ScAddress &rAddr)
void addExcelTintTransformation(double fTint)
void importCfvo(const AttributeList &rAttribs)
std::shared_ptr< ExtCfDataBarRule > ExtCfDataBarRuleRef
FormulaParser & getFormulaParser() const
Returns a shared import formula parser (import filter only!).
ThemeBuffer & getTheme() const
Returns the office theme object read from the theme substorage.
#define SAL_WARN(area, stream)
void SetType(ScColorScaleEntryType eType)
void importCfvo(const AttributeList &rAttribs)
void importFormula(const OUString &rFormula)
void importAxisColor(const AttributeList &rAttribs)
DataBarRule(const CondFormat &rFormat)
void SetData(ScIconSetFormat *pFormat, ScDocument *pDoc, const ScAddress &rAddr)
void forEachMem(FuncType pFunc) const
void importDataBar(const AttributeList &rAttribs)
void SetStyleName(const OUString &rStyleName)
OptValue< sal_Int32 > getToken(sal_Int32 nAttrToken) const
SC_DLLPUBLIC void AddCondFormatData(const ScRangeList &rRange, SCTAB nTab, sal_uInt32 nIndex)
AddressConverter & getAddressConverter() const
Returns the converter for string to cell address/range conversion.
std::vector< ColorScaleRuleModelEntry > maEntries