diff options
-rw-r--r-- | sc/inc/column.hxx | 1 | ||||
-rw-r--r-- | sc/inc/document.hxx | 6 | ||||
-rw-r--r-- | sc/inc/mtvcellfunc.hxx | 7 | ||||
-rw-r--r-- | sc/inc/table.hxx | 1 | ||||
-rw-r--r-- | sc/source/core/data/column2.cxx | 23 | ||||
-rw-r--r-- | sc/source/core/data/document.cxx | 11 | ||||
-rw-r--r-- | sc/source/core/data/table2.cxx | 6 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlwrap.cxx | 2 |
8 files changed, 57 insertions, 0 deletions
diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index 835daa8465db..34cef915e40a 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -515,6 +515,7 @@ public: bool IsNotesEmptyBlock(SCROW nStartRow, SCROW nEndRow) const; size_t GetNoteCount() const; + void CreateAllNoteCaptions(); SCROW GetNotePosition( size_t nIndex ) const; void GetAllNoteEntries( std::vector<sc::NoteEntry>& rNotes ) const; void GetNotesInRange( SCROW nStartRow, SCROW nEndRow, std::vector<sc::NoteEntry>& rNotes ) const; diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 551557d280d8..ded209cf0439 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -913,6 +913,12 @@ public: size_t CountNotes() const; size_t GetNoteCount( SCTAB nTab, SCCOL nCol ) const; + /** + * Ensure that all note objects have an associated sdr object. The export + * code uses sdr objects to export note data. + */ + void CreateAllNoteCaptions(); + ScAddress GetNotePosition( size_t nIndex ) const; SCROW GetNotePosition( SCTAB nTab, SCCOL nCol, size_t nIndex ) const; diff --git a/sc/inc/mtvcellfunc.hxx b/sc/inc/mtvcellfunc.hxx index c54d02ebd339..793f2dbc1872 100644 --- a/sc/inc/mtvcellfunc.hxx +++ b/sc/inc/mtvcellfunc.hxx @@ -159,6 +159,13 @@ FindFormulaEditText(const CellStoreType& rStore, SCROW nRow1, SCROW nRow2, _Func return FindElement2<CellStoreType, edittext_block, formula_block, _Func, _Func>(rStore, nRow1, nRow2, rFunc, rFunc); } +template<typename _Func> +void ProcessNote(CellNoteStoreType& rStore, _Func& rFunc) +{ + FuncElseNoOp<size_t> aElse; + ProcessElements1<CellNoteStoreType, cellnote_block, _Func, FuncElseNoOp<size_t> >(rStore, rFunc, aElse); +} + } #endif diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx index 548c6ccc0d81..eb17a18d90b8 100644 --- a/sc/inc/table.hxx +++ b/sc/inc/table.hxx @@ -388,6 +388,7 @@ public: size_t GetNoteCount( SCCOL nCol ) const; SCROW GetNotePosition( SCCOL nCol, size_t nIndex ) const; + void CreateAllNoteCaptions(); void GetAllNoteEntries( std::vector<sc::NoteEntry>& rNotes ) const; void GetNotesInRange( const ScRange& rRange, std::vector<sc::NoteEntry>& rNotes ) const; diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index 510ad177c9bf..7a58377ec683 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -1227,6 +1227,29 @@ size_t ScColumn::GetNoteCount() const return nCount; } +namespace { + +class NoteCaptionCreator +{ + ScAddress maPos; +public: + NoteCaptionCreator( SCTAB nTab, SCCOL nCol ) : maPos(nCol,0,nTab) {} + + void operator() ( size_t nRow, ScPostIt* p ) + { + maPos.SetRow(nRow); + p->GetOrCreateCaption(maPos); + } +}; + +} + +void ScColumn::CreateAllNoteCaptions() +{ + NoteCaptionCreator aFunc(nTab, nCol); + sc::ProcessNote(maCellNotes, aFunc); +} + SCROW ScColumn::GetNotePosition( size_t nIndex ) const { // Return the row position of the nth note in the column. diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index 432888bdcef8..eab25945fddc 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -6224,6 +6224,17 @@ size_t ScDocument::GetNoteCount( SCTAB nTab, SCCOL nCol ) const return pTab->GetNoteCount(nCol); } +void ScDocument::CreateAllNoteCaptions() +{ + TableContainer::iterator it = maTabs.begin(), itEnd = maTabs.end(); + for (; it != itEnd; ++it) + { + ScTable* p = *it; + if (p) + p->CreateAllNoteCaptions(); + } +} + ScAddress ScDocument::GetNotePosition( size_t nIndex ) const { for (size_t nTab = 0; nTab < maTabs.size(); ++nTab) diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx index 8a16e49a2bdc..d8cfbfe3efe5 100644 --- a/sc/source/core/data/table2.cxx +++ b/sc/source/core/data/table2.cxx @@ -1511,6 +1511,12 @@ SCROW ScTable::GetNotePosition( SCCOL nCol, size_t nIndex ) const return aCol[nCol].GetNotePosition(nIndex); } +void ScTable::CreateAllNoteCaptions() +{ + for (SCCOL i = 0; i <= MAXCOL; ++i) + aCol[i].CreateAllNoteCaptions(); +} + void ScTable::GetAllNoteEntries( std::vector<sc::NoteEntry>& rNotes ) const { for (SCCOL nCol = 0; nCol < MAXCOLCOUNT; ++nCol) diff --git a/sc/source/filter/xml/xmlwrap.cxx b/sc/source/filter/xml/xmlwrap.cxx index 4e2ef7d1f5ea..b9658882bd0d 100644 --- a/sc/source/filter/xml/xmlwrap.cxx +++ b/sc/source/filter/xml/xmlwrap.cxx @@ -759,6 +759,8 @@ sal_Bool ScXMLImportWrapper::ExportToComponent(const uno::Reference<uno::XCompon sal_Bool ScXMLImportWrapper::Export(sal_Bool bStylesOnly) { + rDoc.CreateAllNoteCaptions(); + uno::Reference<uno::XComponentContext> xContext(comphelper::getProcessComponentContext()); uno::Reference<xml::sax::XWriter> xWriter = xml::sax::Writer::create(xContext); |