Kaydet (Commit) 343aa6f8 authored tarafından Eike Rathke's avatar Eike Rathke Kaydeden (comit) Andras Timar

TableRef: import OOXML table column names to ScDBData

Change-Id: I5fa32922fffcd027ddf1c61fe0b122fa2d320d98
(cherry picked from commit 715b4bbc)
üst 612bd172
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
#include <oox/helper/refvector.hxx> #include <oox/helper/refvector.hxx>
#include "workbookhelper.hxx" #include "workbookhelper.hxx"
class ScDBData;
namespace oox { namespace oox {
namespace xls { namespace xls {
...@@ -37,6 +39,8 @@ public: ...@@ -37,6 +39,8 @@ public:
void importTableColumn( const AttributeList& rAttribs ); void importTableColumn( const AttributeList& rAttribs );
/** Imports table column settings from the TABLECOLUMN (?) record. */ /** Imports table column settings from the TABLECOLUMN (?) record. */
void importTableColumn( SequenceInputStream& rStrm ); void importTableColumn( SequenceInputStream& rStrm );
/** Gets the name of this column. */
const OUString& getName() const;
private: private:
OUString maName; OUString maName;
...@@ -57,8 +61,8 @@ public: ...@@ -57,8 +61,8 @@ public:
/** Creates a new table column and stores it internally. */ /** Creates a new table column and stores it internally. */
TableColumn& createTableColumn(); TableColumn& createTableColumn();
/** Applies the columns to the passed database range descriptor. */ /** Applies the columns to the passed database range. */
bool finalizeImport( const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDatabaseRange >& rxDatabaseRange ); bool finalizeImport( ScDBData* pDBData );
private: private:
typedef RefVector< TableColumn > TableColumnVector; typedef RefVector< TableColumn > TableColumnVector;
...@@ -75,9 +79,9 @@ public: ...@@ -75,9 +79,9 @@ public:
/** Creates a new table columns object and stores it internally. */ /** Creates a new table columns object and stores it internally. */
TableColumns& createTableColumns(); TableColumns& createTableColumns();
/** Applies the table columns to the passed database range object. /** Applies the table columns to the passed database range.
@return True = this buffer contains valid table column settings. */ @return True = this buffer contains valid table column settings. */
bool finalizeImport( const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDatabaseRange >& rxDatabaseRange ); bool finalizeImport( ScDBData* pDBData );
private: private:
/** Returns the table columns object used. */ /** Returns the table columns object used. */
......
...@@ -60,6 +60,7 @@ class ScDocument; ...@@ -60,6 +60,7 @@ class ScDocument;
class ScDocShell; class ScDocShell;
class ScDocumentImport; class ScDocumentImport;
class ScEditEngineDefaulter; class ScEditEngineDefaulter;
class ScDBData;
namespace oox { namespace oox {
namespace xls { namespace xls {
...@@ -207,6 +208,9 @@ public: ...@@ -207,6 +208,9 @@ public:
createUnnamedDatabaseRangeObject( createUnnamedDatabaseRangeObject(
const ::com::sun::star::table::CellRangeAddress& rRangeAddr ) const; const ::com::sun::star::table::CellRangeAddress& rRangeAddr ) const;
/** Finds the (already existing) database range of the given formula token index. */
ScDBData* findDatabaseRangeByIndex( sal_uInt16 nIndex ) const;
/** Creates and returns a com.sun.star.style.Style object for cells or pages. */ /** Creates and returns a com.sun.star.style.Style object for cells or pages. */
::com::sun::star::uno::Reference< ::com::sun::star::style::XStyle > ::com::sun::star::uno::Reference< ::com::sun::star::style::XStyle >
createStyleObject( createStyleObject(
......
...@@ -130,6 +130,11 @@ void Table::applyAutoFilters() ...@@ -130,6 +130,11 @@ void Table::applyAutoFilters()
} }
} }
void Table::applyTableColumns()
{
maTableColumns.finalizeImport( findDatabaseRangeByIndex( mnTokenIndex ));
}
TableBuffer::TableBuffer( const WorkbookHelper& rHelper ) : TableBuffer::TableBuffer( const WorkbookHelper& rHelper ) :
WorkbookHelper( rHelper ) WorkbookHelper( rHelper )
{ {
...@@ -156,6 +161,11 @@ void TableBuffer::applyAutoFilters() ...@@ -156,6 +161,11 @@ void TableBuffer::applyAutoFilters()
maIdTables.forEachMem( &Table::applyAutoFilters ); maIdTables.forEachMem( &Table::applyAutoFilters );
} }
void TableBuffer::applyTableColumns()
{
maIdTables.forEachMem( &Table::applyTableColumns );
}
TableRef TableBuffer::getTable( sal_Int32 nTableId ) const TableRef TableBuffer::getTable( sal_Int32 nTableId ) const
{ {
return maIdTables.get( nTableId ); return maIdTables.get( nTableId );
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "addressconverter.hxx" #include "addressconverter.hxx"
#include "biffinputstream.hxx" #include "biffinputstream.hxx"
#include "defnamesbuffer.hxx" #include "defnamesbuffer.hxx"
#include "dbdata.hxx"
namespace oox { namespace oox {
namespace xls { namespace xls {
...@@ -56,6 +57,11 @@ void TableColumn::importTableColumn( SequenceInputStream& /*rStrm*/ ) ...@@ -56,6 +57,11 @@ void TableColumn::importTableColumn( SequenceInputStream& /*rStrm*/ )
/* XXX not implemented */ /* XXX not implemented */
} }
const OUString& TableColumn::getName() const
{
return maName;
}
TableColumns::TableColumns( const WorkbookHelper& rHelper ) : TableColumns::TableColumns( const WorkbookHelper& rHelper ) :
WorkbookHelper( rHelper ), WorkbookHelper( rHelper ),
mnCount(0) mnCount(0)
...@@ -79,13 +85,21 @@ TableColumn& TableColumns::createTableColumn() ...@@ -79,13 +85,21 @@ TableColumn& TableColumns::createTableColumn()
return *xTableColumn; return *xTableColumn;
} }
bool TableColumns::finalizeImport( const Reference< XDatabaseRange >& rxDatabaseRange ) bool TableColumns::finalizeImport( ScDBData* pDBData )
{ {
SAL_WARN_IF( static_cast<size_t>(mnCount) != maTableColumnVector.size(), "sc.filter", SAL_WARN_IF( static_cast<size_t>(mnCount) != maTableColumnVector.size(), "sc.filter",
"TableColumns::finalizeImport - count attribute doesn't match number of tableColumn elements"); "TableColumns::finalizeImport - count attribute doesn't match number of tableColumn elements");
if( rxDatabaseRange.is() ) if ( pDBData )
{ {
/* TODO: implementation */ /* TODO: use svl::SharedString for names */
::std::vector< OUString > aNames( maTableColumnVector.size());
size_t i = 0;
for (TableColumnVector::const_iterator aIt = maTableColumnVector.begin(), aEnd = maTableColumnVector.end();
aIt != aEnd; ++aIt, ++i)
{
aNames[i] = (*aIt)->getName();
}
pDBData->SetTableColumnNames( aNames);
return true; return true;
} }
return false; return false;
...@@ -103,18 +117,11 @@ TableColumns& TableColumnsBuffer::createTableColumns() ...@@ -103,18 +117,11 @@ TableColumns& TableColumnsBuffer::createTableColumns()
return *xTableColumns; return *xTableColumns;
} }
bool TableColumnsBuffer::finalizeImport( const Reference< XDatabaseRange >& rxDatabaseRange ) bool TableColumnsBuffer::finalizeImport( ScDBData* pDBData )
{ {
TableColumns* pTableColumns = getActiveTableColumns(); TableColumns* pTableColumns = getActiveTableColumns();
if( pTableColumns && rxDatabaseRange.is() ) try if ( pTableColumns )
{ return pTableColumns->finalizeImport( pDBData );
pTableColumns->finalizeImport( rxDatabaseRange );
// return true to indicate available table columns
return true;
}
catch( Exception& )
{
}
return false; return false;
} }
......
...@@ -167,6 +167,8 @@ public: ...@@ -167,6 +167,8 @@ public:
Reference< XDatabaseRange > createDatabaseRangeObject( OUString& orName, const CellRangeAddress& rRangeAddr ); Reference< XDatabaseRange > createDatabaseRangeObject( OUString& orName, const CellRangeAddress& rRangeAddr );
/** Creates and returns an unnamed database range on-the-fly in the Calc document. */ /** Creates and returns an unnamed database range on-the-fly in the Calc document. */
Reference< XDatabaseRange > createUnnamedDatabaseRangeObject( const CellRangeAddress& rRangeAddr ); Reference< XDatabaseRange > createUnnamedDatabaseRangeObject( const CellRangeAddress& rRangeAddr );
/** Finds the (already existing) database range of the given formula token index. */
ScDBData* findDatabaseRangeByIndex( sal_uInt16 nIndex );
/** Creates and returns a com.sun.star.style.Style object for cells or pages. */ /** Creates and returns a com.sun.star.style.Style object for cells or pages. */
Reference< XStyle > createStyleObject( OUString& orStyleName, bool bPageStyle ); Reference< XStyle > createStyleObject( OUString& orStyleName, bool bPageStyle );
/** Helper to switch chart data table - specifically for xlsx imports */ /** Helper to switch chart data table - specifically for xlsx imports */
...@@ -495,6 +497,14 @@ Reference< XDatabaseRange > WorkbookGlobals::createUnnamedDatabaseRangeObject( c ...@@ -495,6 +497,14 @@ Reference< XDatabaseRange > WorkbookGlobals::createUnnamedDatabaseRangeObject( c
return xDatabaseRange; return xDatabaseRange;
} }
ScDBData* WorkbookGlobals::findDatabaseRangeByIndex( sal_uInt16 nIndex )
{
ScDBCollection* pDBCollection = getScDocument().GetDBCollection();
if (!pDBCollection)
return nullptr;
return pDBCollection->getNamedDBs().findByIndex( nIndex );
}
Reference< XStyle > WorkbookGlobals::createStyleObject( OUString& orStyleName, bool bPageStyle ) Reference< XStyle > WorkbookGlobals::createStyleObject( OUString& orStyleName, bool bPageStyle )
{ {
Reference< XStyle > xStyle; Reference< XStyle > xStyle;
...@@ -901,6 +911,11 @@ Reference< XDatabaseRange > WorkbookHelper::createUnnamedDatabaseRangeObject( co ...@@ -901,6 +911,11 @@ Reference< XDatabaseRange > WorkbookHelper::createUnnamedDatabaseRangeObject( co
return mrBookGlob.createUnnamedDatabaseRangeObject( rRangeAddr ); return mrBookGlob.createUnnamedDatabaseRangeObject( rRangeAddr );
} }
ScDBData* WorkbookHelper::findDatabaseRangeByIndex( sal_uInt16 nIndex ) const
{
return mrBookGlob.findDatabaseRangeByIndex( nIndex );
}
Reference< XStyle > WorkbookHelper::createStyleObject( OUString& orStyleName, bool bPageStyle ) const Reference< XStyle > WorkbookHelper::createStyleObject( OUString& orStyleName, bool bPageStyle ) const
{ {
return mrBookGlob.createStyleObject( orStyleName, bPageStyle ); return mrBookGlob.createStyleObject( orStyleName, bPageStyle );
......
...@@ -943,6 +943,7 @@ void WorksheetGlobals::finalizeWorksheetImport() ...@@ -943,6 +943,7 @@ void WorksheetGlobals::finalizeWorksheetImport()
// assumes getTables().finalizeImport ( which creates the DatabaseRanges ) // assumes getTables().finalizeImport ( which creates the DatabaseRanges )
// has been called already // has been called already
getTables().applyAutoFilters(); getTables().applyAutoFilters();
getTables().applyTableColumns();
getCondFormats().finalizeImport(); getCondFormats().finalizeImport();
lclUpdateProgressBar( mxFinalProgress, 0.25 ); lclUpdateProgressBar( mxFinalProgress, 0.25 );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment