How to write ORG.OPENOFFICE.EASTERSUNDAY for ODF 1.3 and pure EASTERSUNDAY for ODF 1.4?
Regina Henschel
rb.henschel at t-online.de
Sun Oct 27 00:27:16 UTC 2024
Hi Mike, hi all,
Mike Kaganski schrieb am 21.10.2024 um 09:19:
> Hi Regina!
>
> On 20.10.2024 23:20, Regina Henschel wrote:
>> it would be necessary to write ORG.OFFICE.EASTERSUNDAY when writing in
>> ODF versions 1.3 and before and write pure EASTERSUNDAY in case of ODF
>> 1.4. But I see no way to distinguish between ODF 1.3 and ODF 1.4 in
>> the export filter. I see only a general mxSymbols->isODFF() in
>> ScCompiler::ParseOpCode().
>
>
> It seems to me, that the export of formula is done in
> ScXMLExport::WriteCell (sc/source/filter/xml/xmlexprt.cxx); and there,
> you have access to getSaneDefaultVersion().
>
> Hope this helps.
>
You can indeed get the version to be saved to in xmlexprt.cxx. But where
to evaluate it?
Evaluating it directly in sc/source/filter/xml/xmlexprt.cxx would mean,
that you have to tweak the result of
#3218 OUString aFormula = pFormulaCell->GetFormula(*mpCompileFormulaCxt);
so that each occurrence of EASTERSUNDAY is replaced by
ORG.OPENOFFICE.EASTERSUNDAY.
Besides the fact that EASTERSUNDAY as text and not as formula name would
be replaced too, I think it is not a good idea to check each formula in
a spreadsheet to catch the EASTERSUNDAY cases.
Such approach seems completely wrong to me also because we will get the
same problem again with the new functions XLOOKUP, FILTER, UNIQUE, etc.
when the change from ODF 1.4 to ODF 1.5 is made.
I would prefer a solution, that corrects the string, when the string is
created from the opcode ocEasterSunday.
When you look where the string is generated, you get the steps:
ScFormulaCell::GetFormula() in sc/source/core/data/formulacell.cxx
FormulaCompiler::CreateStringFromTokenArray() in
formula/source/core/api/FormulaCompiler.cxx
FormulaCompiler::CreateStringFromToken()
mxSymbols->getSymbol(eOp), which uses the map in
formula/inc/core_resource.hrc.
You could pass on the ODF version and the fact that you are exporting to
ODF to the method GetFormula(). That could be done as new parameter or
by adding members to CompileFormulaContext.
But the method CreateStringFromTokenArray() is not only called from
export, but in other, totally unrelated situations, e.g. when the window
with the sheet gets focus.
Do we need a totally new method CreateStringFromTokenArrayForODFExport()?
I'm still looking for your ideas.
Kind regards,
Regina
More information about the LibreOffice
mailing list