Re: How to write ORG.OPENOFFICE.EASTERSUNDAY for ODF 1.3 and pure EASTERSUNDAY for ODF 1.4?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux