This is an automated email from the ASF dual-hosted git repository.
damjan pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/openoffice.git
The following commit(s) were added to refs/heads/trunk by this push:
new 3714104178 When converting the .sxc table:formula XML attribute to
ODF, use the "of" namespace instead of "ooow". Also add a unit test for saving
and reloading formulas to .sxc files.
3714104178 is described below
commit 371410417827e07a8f8596550830c16c641bed7c
Author: Damjan Jovanovic <[email protected]>
AuthorDate: Tue Nov 18 08:00:48 2025 +0200
When converting the .sxc table:formula XML attribute to ODF, use
the "of" namespace instead of "ooow". Also add a unit test for
saving and reloading formulas to .sxc files.
Patch by: me
Fixes: https://bz.apache.org/ooo/show_bug.cgi?id=128625
importing .sxc corrupts formulas
---
main/xmloff/source/transform/OOo2Oasis.cxx | 2 +-
.../fvt/uno/sc/formula/TestFormulaRoundTrip.java | 53 ++++++++++++++++------
2 files changed, 40 insertions(+), 15 deletions(-)
diff --git a/main/xmloff/source/transform/OOo2Oasis.cxx
b/main/xmloff/source/transform/OOo2Oasis.cxx
index 126535becb..90be61fb8f 100644
--- a/main/xmloff/source/transform/OOo2Oasis.cxx
+++ b/main/xmloff/source/transform/OOo2Oasis.cxx
@@ -887,7 +887,7 @@ static XMLTransformerActionInit
aTableValueTypeActionTable[] =
XML_NAMESPACE_OFFICE, XML_STRING_VALUE ),
ENTRY0( TABLE, STYLE_NAME, XML_ATACTION_ENCODE_STYLE_NAME_REF ),
ENTRY1( TABLE, FORMULA, XML_ATACTION_ADD_APP_NAMESPACE_PREFIX,
- XML_NAMESPACE_OOOW ),
+ XML_NAMESPACE_OF ),
ENTRY1Q( TABLE, VALIDATION_NAME, XML_ATACTION_RENAME,
XML_NAMESPACE_TABLE, XML_CONTENT_VALIDATION_NAME ),
ENTRY0( TABLE, TOKEN_INVALID, XML_ATACTION_EOT )
diff --git a/test/testuno/source/fvt/uno/sc/formula/TestFormulaRoundTrip.java
b/test/testuno/source/fvt/uno/sc/formula/TestFormulaRoundTrip.java
index a1c2894732..8750a6ea72 100644
--- a/test/testuno/source/fvt/uno/sc/formula/TestFormulaRoundTrip.java
+++ b/test/testuno/source/fvt/uno/sc/formula/TestFormulaRoundTrip.java
@@ -68,34 +68,59 @@ public class TestFormulaRoundTrip {
unoApp.close();
}
- @Test
- public void testMSExcel2003XMLFormulaRoundTrip() throws Exception {
+ private XSpreadsheet generateTestDocument(XSpreadsheetDocument
scDocument) throws Exception {
XSpreadsheet sheet = SCUtil.getCurrentSheet(scDocument);
SCUtil.setTextToCell(sheet, 0, 0, "Hello world");
SCUtil.setFormulaToCell(sheet, 0, 1, "=A1");
+ return sheet;
+ }
+
+ @Test
+ public void testMSExcel2003XMLFormulaRoundTrip() throws Exception {
+ XSpreadsheet sheet = generateTestDocument(scDocument);
String formulaValue = SCUtil.getTextFromCell(sheet, 0, 1);
assertEquals("Hello world", formulaValue);
+ String path = "output/sc/temp.xml";
+ saveFormatTo("MS Excel 2003 XML", Testspace.getUrl(path));
+ unoApp.closeDocument(scComponent);
- String storeUrl = Testspace.getUrl("output/sc/temp.xml");
- PropertyValue[] storeProps = new PropertyValue[2];
- storeProps[0] = new PropertyValue();
- storeProps[0].Name = "FilterName";
- storeProps[0].Value = "MS Excel 2003 XML";
- storeProps[1] = new PropertyValue();
- storeProps[1].Name = "Overwrite";
- storeProps[1].Value = new Boolean(true);
- XStorable scStorable =
- (XStorable) UnoRuntime.queryInterface(XStorable.class,
scComponent);
- scStorable.storeAsURL(storeUrl, storeProps);
+ scDocument = (XSpreadsheetDocument) UnoRuntime.queryInterface(
+ XSpreadsheetDocument.class,
unoApp.loadDocument(Testspace.getPath(path)));
+ sheet = SCUtil.getCurrentSheet(scDocument);
+ String formulaValue2 = SCUtil.getTextFromCell(sheet, 0, 1);
+ assertEquals("Hello world", formulaValue2);
+ String formula2 = SCUtil.getFormulaFromCell(sheet, 0, 1);
+ assertEquals("=A1", formula2);
+ }
+ @Test
+ public void testStarOfficeXMLFormulaRoundTrip() throws Exception {
+ XSpreadsheet sheet = generateTestDocument(scDocument);
+ String formulaValue = SCUtil.getTextFromCell(sheet, 0, 1);
+ assertEquals("Hello world", formulaValue);
+ String path = "output/sc/temp.sxc";
+ saveFormatTo("StarOffice XML (Calc)", Testspace.getUrl(path));
unoApp.closeDocument(scComponent);
scDocument = (XSpreadsheetDocument) UnoRuntime.queryInterface(
- XSpreadsheetDocument.class,
unoApp.loadDocument(Testspace.getPath("output/sc/temp.xml")));
+ XSpreadsheetDocument.class,
unoApp.loadDocument(Testspace.getPath(path)));
sheet = SCUtil.getCurrentSheet(scDocument);
String formulaValue2 = SCUtil.getTextFromCell(sheet, 0, 1);
assertEquals("Hello world", formulaValue2);
String formula2 = SCUtil.getFormulaFromCell(sheet, 0, 1);
assertEquals("=A1", formula2);
}
+
+ private void saveFormatTo(String filterName, String storeUrl) throws
Exception {
+ PropertyValue[] storeProps = new PropertyValue[2];
+ storeProps[0] = new PropertyValue();
+ storeProps[0].Name = "FilterName";
+ storeProps[0].Value = filterName;
+ storeProps[1] = new PropertyValue();
+ storeProps[1].Name = "Overwrite";
+ storeProps[1].Value = new Boolean(true);
+ XStorable scStorable =
+ (XStorable) UnoRuntime.queryInterface(XStorable.class,
scComponent);
+ scStorable.storeAsURL(storeUrl, storeProps);
+ }
}