summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2011-05-05 18:17:52 +0200
committerKohei Yoshida <kyoshida@novell.com>2011-05-09 14:43:14 -0400
commitad9bdba22c39fd7f8e78569a2ba4734dcc9e22a0 (patch)
tree274353e71cce6589cc0104c3ead98014f9336b67
parent3f2c70f6b314b329fe2a3d58a034354cd0fee32b (diff)
make OOXML import use sheet local db data
Signed-off-by: Kohei Yoshida <kyoshida@novell.com>
-rw-r--r--oox/inc/oox/xls/workbookhelper.hxx6
-rw-r--r--oox/source/token/properties.txt1
-rw-r--r--oox/source/xls/autofilterbuffer.cxx3
-rw-r--r--oox/source/xls/tablebuffer.cxx2
-rw-r--r--oox/source/xls/workbookhelper.cxx32
5 files changed, 40 insertions, 4 deletions
diff --git a/oox/inc/oox/xls/workbookhelper.hxx b/oox/inc/oox/xls/workbookhelper.hxx
index 940345340..3e2ca49c0 100644
--- a/oox/inc/oox/xls/workbookhelper.hxx
+++ b/oox/inc/oox/xls/workbookhelper.hxx
@@ -201,6 +201,12 @@ public:
::rtl::OUString& orName,
const ::com::sun::star::table::CellRangeAddress& rRangeAddr ) const;
+ /** Creates and returns an unnamed database range on-the-fly in the Calc document.
+ The range will not be buffered in the global table buffer. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XDatabaseRange >
+ createUnnamedDatabaseRangeObject(
+ const ::com::sun::star::table::CellRangeAddress& rRangeAddr ) 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(
diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt
index f8447b64a..693ccb1be 100644
--- a/oox/source/token/properties.txt
+++ b/oox/source/token/properties.txt
@@ -463,6 +463,7 @@ TransitionType
Transparency
TriState
Type
+UnnamedDatabaseRanges
URL
Url
UseFilterCriteriaSource
diff --git a/oox/source/xls/autofilterbuffer.cxx b/oox/source/xls/autofilterbuffer.cxx
index 9f5ea11cd..39b69a7b7 100644
--- a/oox/source/xls/autofilterbuffer.cxx
+++ b/oox/source/xls/autofilterbuffer.cxx
@@ -772,8 +772,7 @@ void AutoFilterBuffer::finalizeImport( sal_Int16 nSheet )
if( pFilterDBName->getAbsoluteRange( aFilterRange ) && (aFilterRange.Sheet == nSheet) )
{
// use the same name for the database range as used for the defined name '_FilterDatabase'
- OUString aDBRangeName = pFilterDBName->getCalcName();
- Reference< XDatabaseRange > xDatabaseRange = createDatabaseRangeObject( aDBRangeName, aFilterRange );
+ Reference< XDatabaseRange > xDatabaseRange = createUnnamedDatabaseRangeObject( aFilterRange );
// first, try to create an auto filter
bool bHasAutoFilter = finalizeImport( xDatabaseRange );
// no success: try to create an advanced filter
diff --git a/oox/source/xls/tablebuffer.cxx b/oox/source/xls/tablebuffer.cxx
index c285d75cf..621e7c828 100644
--- a/oox/source/xls/tablebuffer.cxx
+++ b/oox/source/xls/tablebuffer.cxx
@@ -94,7 +94,7 @@ void Table::finalizeImport()
if( (maModel.mnId > 0) && (maModel.maDisplayName.getLength() > 0) ) try
{
maDBRangeName = maModel.maDisplayName;
- Reference< XDatabaseRange > xDatabaseRange( createDatabaseRangeObject( maDBRangeName, maModel.maRange ), UNO_SET_THROW );
+ Reference< XDatabaseRange > xDatabaseRange( createUnnamedDatabaseRangeObject( maModel.maRange ), UNO_SET_THROW );
maDestRange = xDatabaseRange->getDataArea();
// get formula token index of the database range
diff --git a/oox/source/xls/workbookhelper.cxx b/oox/source/xls/workbookhelper.cxx
index 8cd127bdc..c30dce35f 100644
--- a/oox/source/xls/workbookhelper.cxx
+++ b/oox/source/xls/workbookhelper.cxx
@@ -33,6 +33,7 @@
#include <com/sun/star/document/XActionLockable.hpp>
#include <com/sun/star/sheet/XDatabaseRange.hpp>
#include <com/sun/star/sheet/XDatabaseRanges.hpp>
+#include <com/sun/star/sheet/XUnnamedDatabaseRanges.hpp>
#include <com/sun/star/sheet/XNamedRange.hpp>
#include <com/sun/star/sheet/XNamedRanges.hpp>
#include <com/sun/star/sheet/XSpreadsheet.hpp>
@@ -140,6 +141,8 @@ public:
Reference< XNamedRange > createNamedRangeObject( OUString& orName, sal_Int32 nNameFlags ) const;
/** Creates and returns a database range on-the-fly in the Calc document. */
Reference< XDatabaseRange > createDatabaseRangeObject( OUString& orName, const CellRangeAddress& rRangeAddr ) const;
+ /** Creates and returns an unnamed database range on-the-fly in the Calc document. */
+ Reference< XDatabaseRange > createUnnamedDatabaseRangeObject( const CellRangeAddress& rRangeAddr ) const;
/** Creates and returns a com.sun.star.style.Style object for cells or pages. */
Reference< XStyle > createStyleObject( OUString& orStyleName, bool bPageStyle ) const;
@@ -400,6 +403,28 @@ Reference< XDatabaseRange > WorkbookData::createDatabaseRangeObject( OUString& o
return xDatabaseRange;
}
+Reference< XDatabaseRange > WorkbookData::createUnnamedDatabaseRangeObject( const CellRangeAddress& rRangeAddr ) const
+{
+ // validate cell range
+ CellRangeAddress aDestRange = rRangeAddr;
+ bool bValidRange = getAddressConverter().validateCellRange( aDestRange, true, true );
+
+ // create database range and insert it into the Calc document
+ Reference< XDatabaseRange > xDatabaseRange;
+ PropertySet aDocProps( mxDoc );
+ Reference< XUnnamedDatabaseRanges > xDatabaseRanges( aDocProps.getAnyProperty( PROP_UnnamedDatabaseRanges ), UNO_QUERY_THROW );
+ if( bValidRange ) try
+ {
+ xDatabaseRanges->setByTable( aDestRange );
+ xDatabaseRange.set( xDatabaseRanges->getByTable( aDestRange.Sheet ), UNO_QUERY );
+ }
+ catch( Exception& )
+ {
+ }
+ OSL_ENSURE( xDatabaseRange.is(), "WorkbookData::createDatabaseRangeObject - cannot create database range" );
+ return xDatabaseRange;
+}
+
Reference< XStyle > WorkbookData::createStyleObject( OUString& orStyleName, bool bPageStyle ) const
{
Reference< XStyle > xStyle;
@@ -748,6 +773,11 @@ Reference< XDatabaseRange > WorkbookHelper::createDatabaseRangeObject( OUString&
return mrBookData.createDatabaseRangeObject( orName, rRangeAddr );
}
+Reference< XDatabaseRange > WorkbookHelper::createUnnamedDatabaseRangeObject( const CellRangeAddress& rRangeAddr ) const
+{
+ return mrBookData.createUnnamedDatabaseRangeObject( rRangeAddr );
+}
+
Reference< XStyle > WorkbookHelper::createStyleObject( OUString& orStyleName, bool bPageStyle ) const
{
return mrBookData.createStyleObject( orStyleName, bPageStyle );
@@ -947,4 +977,4 @@ bool WorkbookHelperRoot::isValid() const
} // namespace xls
} // namespace oox
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ \ No newline at end of file
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */