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 @@
#include <oox/helper/refvector.hxx>
#include "workbookhelper.hxx"
class ScDBData;
namespace oox {
namespace xls {
......@@ -37,6 +39,8 @@ public:
void importTableColumn( const AttributeList& rAttribs );
/** Imports table column settings from the TABLECOLUMN (?) record. */
void importTableColumn( SequenceInputStream& rStrm );
/** Gets the name of this column. */
const OUString& getName() const;
private:
OUString maName;
......@@ -57,8 +61,8 @@ public:
/** Creates a new table column and stores it internally. */
TableColumn& createTableColumn();
/** Applies the columns to the passed database range descriptor. */
bool finalizeImport( const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDatabaseRange >& rxDatabaseRange );
/** Applies the columns to the passed database range. */
bool finalizeImport( ScDBData* pDBData );
private:
typedef RefVector< TableColumn > TableColumnVector;
......@@ -75,9 +79,9 @@ public:
/** Creates a new table columns object and stores it internally. */
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. */
bool finalizeImport( const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDatabaseRange >& rxDatabaseRange );
bool finalizeImport( ScDBData* pDBData );
private:
/** Returns the table columns object used. */
......
......@@ -60,6 +60,7 @@ class ScDocument;
class ScDocShell;
class ScDocumentImport;
class ScEditEngineDefaulter;
class ScDBData;
namespace oox {
namespace xls {
......@@ -207,6 +208,9 @@ public:
createUnnamedDatabaseRangeObject(
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. */
::com::sun::star::uno::Reference< ::com::sun::star::style::XStyle >
createStyleObject(
......
......@@ -130,6 +130,11 @@ void Table::applyAutoFilters()
}
}
void Table::applyTableColumns()
{
maTableColumns.finalizeImport( findDatabaseRangeByIndex( mnTokenIndex ));
}
TableBuffer::TableBuffer( const WorkbookHelper& rHelper ) :
WorkbookHelper( rHelper )
{
......@@ -156,6 +161,11 @@ void TableBuffer::applyAutoFilters()
maIdTables.forEachMem( &Table::applyAutoFilters );
}
void TableBuffer::applyTableColumns()
{
maIdTables.forEachMem( &Table::applyTableColumns );
}
TableRef TableBuffer::getTable( sal_Int32 nTableId ) const
{
return maIdTables.get( nTableId );
......
......@@ -29,6 +29,7 @@
#include "addressconverter.hxx"
#include "biffinputstream.hxx"
#include "defnamesbuffer.hxx"
#include "dbdata.hxx"
namespace oox {
namespace xls {
......@@ -56,6 +57,11 @@ void TableColumn::importTableColumn( SequenceInputStream& /*rStrm*/ )
/* XXX not implemented */
}
const OUString& TableColumn::getName() const
{
return maName;
}
TableColumns::TableColumns( const WorkbookHelper& rHelper ) :
WorkbookHelper( rHelper ),
mnCount(0)
......@@ -79,13 +85,21 @@ TableColumn& TableColumns::createTableColumn()
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",
"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 false;
......@@ -103,18 +117,11 @@ TableColumns& TableColumnsBuffer::createTableColumns()
return *xTableColumns;
}
bool TableColumnsBuffer::finalizeImport( const Reference< XDatabaseRange >& rxDatabaseRange )
bool TableColumnsBuffer::finalizeImport( ScDBData* pDBData )
{
TableColumns* pTableColumns = getActiveTableColumns();
if( pTableColumns && rxDatabaseRange.is() ) try
{
pTableColumns->finalizeImport( rxDatabaseRange );
// return true to indicate available table columns
return true;
}
catch( Exception& )
{
}
if ( pTableColumns )
return pTableColumns->finalizeImport( pDBData );
return false;
}
......
......@@ -167,6 +167,8 @@ public:
Reference< XDatabaseRange > createDatabaseRangeObject( OUString& orName, const CellRangeAddress& rRangeAddr );
/** Creates and returns an unnamed database range on-the-fly in the Calc document. */
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. */
Reference< XStyle > createStyleObject( OUString& orStyleName, bool bPageStyle );
/** Helper to switch chart data table - specifically for xlsx imports */
......@@ -495,6 +497,14 @@ Reference< XDatabaseRange > WorkbookGlobals::createUnnamedDatabaseRangeObject( c
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 > xStyle;
......@@ -901,6 +911,11 @@ Reference< XDatabaseRange > WorkbookHelper::createUnnamedDatabaseRangeObject( co
return mrBookGlob.createUnnamedDatabaseRangeObject( rRangeAddr );
}
ScDBData* WorkbookHelper::findDatabaseRangeByIndex( sal_uInt16 nIndex ) const
{
return mrBookGlob.findDatabaseRangeByIndex( nIndex );
}
Reference< XStyle > WorkbookHelper::createStyleObject( OUString& orStyleName, bool bPageStyle ) const
{
return mrBookGlob.createStyleObject( orStyleName, bPageStyle );
......
......@@ -943,6 +943,7 @@ void WorksheetGlobals::finalizeWorksheetImport()
// assumes getTables().finalizeImport ( which creates the DatabaseRanges )
// has been called already
getTables().applyAutoFilters();
getTables().applyTableColumns();
getCondFormats().finalizeImport();
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