sc/qa/unit/data/xlsx/row-index-1-based.xlsx |binary sc/qa/unit/subsequent_filters-test.cxx | 39 ++++++++++++++++++++++++++++ sc/source/filter/inc/sheetdatacontext.hxx | 4 +- sc/source/filter/oox/sheetdatacontext.cxx | 4 +- 4 files changed, 43 insertions(+), 4 deletions(-)
New commits: commit ff56553e34dfed01b9226ce7a516dbeb6da32124 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Thu Mar 13 18:01:21 2014 -0400 fdo#76032: This row index is 1-based whereas our own mnRow is 0-based. Change-Id: I098d300532bef164bef0d40ebf62a6848bc19cb8 diff --git a/sc/source/filter/inc/sheetdatacontext.hxx b/sc/source/filter/inc/sheetdatacontext.hxx index dba7a7e..e352cd0 100644 --- a/sc/source/filter/inc/sheetdatacontext.hxx +++ b/sc/source/filter/inc/sheetdatacontext.hxx @@ -129,8 +129,8 @@ private: bool mbHasFormula; /// True = current cell has formula data (OOXML only). bool mbValidRange; /// True = maFmlaData.maFormulaRef is valid (OOXML only). - sal_Int32 mnRow; - sal_Int32 mnCol; + sal_Int32 mnRow; /// row index (0-based) + sal_Int32 mnCol; /// column index (0-based) }; diff --git a/sc/source/filter/oox/sheetdatacontext.cxx b/sc/source/filter/oox/sheetdatacontext.cxx index 9628e78..4d2c57a 100644 --- a/sc/source/filter/oox/sheetdatacontext.cxx +++ b/sc/source/filter/oox/sheetdatacontext.cxx @@ -279,11 +279,11 @@ ContextHandlerRef SheetDataContext::onCreateRecordContext( sal_Int32 nRecId, Seq void SheetDataContext::importRow( const AttributeList& rAttribs ) { RowModel aModel; - sal_Int32 nRow = rAttribs.getInteger( XML_r, -1 ); + sal_Int32 nRow = rAttribs.getInteger( XML_r, -1 ); // 1-based row index if(nRow != -1) { aModel.mnRow = nRow; - mnRow = nRow; + mnRow = nRow-1; // to 0-based row index. } else aModel.mnRow = ++mnRow; commit a145e8859c5a878110ec1b346f244c51d1e5a80b Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Thu Mar 13 18:00:19 2014 -0400 fdo#76032: Write test for this. Change-Id: Iec8d32a4e53d2d5d3cdc9767c2ede7654fe2bdd6 diff --git a/sc/qa/unit/data/xlsx/row-index-1-based.xlsx b/sc/qa/unit/data/xlsx/row-index-1-based.xlsx new file mode 100644 index 0000000..1f60c3b Binary files /dev/null and b/sc/qa/unit/data/xlsx/row-index-1-based.xlsx differ diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx index f22e1e2..66bfb94 100644 --- a/sc/qa/unit/subsequent_filters-test.cxx +++ b/sc/qa/unit/subsequent_filters-test.cxx @@ -127,6 +127,12 @@ public: //change this test file only in excel and not in calc void testCellValueXLSX(); + /** + * Test importing of xlsx document that previously had its row index off + * by one. (fdo#76032) + */ + void testRowIndex1BasedXLSX(); + //misc tests unrelated to the import filters void testPasswordNew(); void testPasswordOld(); @@ -195,6 +201,7 @@ public: CPPUNIT_TEST(testDataTableMultiTableXLSX); CPPUNIT_TEST(testBrokenQuotesCSV); CPPUNIT_TEST(testCellValueXLSX); + CPPUNIT_TEST(testRowIndex1BasedXLSX); CPPUNIT_TEST(testControlImport); CPPUNIT_TEST(testChartImportODS); @@ -1417,6 +1424,38 @@ void ScFiltersTest::testCellValueXLSX() xDocSh->DoClose(); } +void ScFiltersTest::testRowIndex1BasedXLSX() +{ + ScDocShellRef xDocSh = loadDoc("row-index-1-based.", XLSX); + CPPUNIT_ASSERT(xDocSh.Is()); + ScDocument* pDoc = xDocSh->GetDocument(); + + // A1 + OUString aStr = pDoc->GetString(ScAddress(0,0,0)); + CPPUNIT_ASSERT_EQUAL(OUString("Action Plan.Name"), aStr); + + // B1 + aStr = pDoc->GetString(ScAddress(1,0,0)); + CPPUNIT_ASSERT_EQUAL(OUString("Action Plan.Description"), aStr); + + // A2 + aStr = pDoc->GetString(ScAddress(0,1,0)); + CPPUNIT_ASSERT_EQUAL(OUString("Jerry"), aStr); + + // B2 - multi-line text. + const EditTextObject* pText = pDoc->GetEditText(ScAddress(1,1,0)); + CPPUNIT_ASSERT(pText); + CPPUNIT_ASSERT(pText->GetParagraphCount() == 3); + aStr = pText->GetText(0); + CPPUNIT_ASSERT_EQUAL(OUString("This is a longer Text."), aStr); + aStr = pText->GetText(1); + CPPUNIT_ASSERT_EQUAL(OUString("Second line."), aStr); + aStr = pText->GetText(2); + CPPUNIT_ASSERT_EQUAL(OUString("Third line."), aStr); + + xDocSh->DoClose(); +} + void ScFiltersTest::testPassword_Impl(const OUString& aFileNameBase) { OUString aFileExtension(getFileFormats()[0].pName, strlen(getFileFormats()[0].pName), RTL_TEXTENCODING_UTF8 ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits