[Libreoffice-commits] .: Branch 'libreoffice-3-4' - oox/inc oox/source

Kohei Yoshida kohei at kemper.freedesktop.org
Mon May 9 11:51:13 PDT 2011


 oox/inc/oox/xls/workbookhelper.hxx  |    6 ++++++
 oox/source/token/properties.txt     |    1 +
 oox/source/xls/autofilterbuffer.cxx |    3 +--
 oox/source/xls/tablebuffer.cxx      |    2 +-
 oox/source/xls/workbookhelper.cxx   |   31 ++++++++++++++++++++++++++++++-
 5 files changed, 39 insertions(+), 4 deletions(-)

New commits:
commit ad9bdba22c39fd7f8e78569a2ba4734dcc9e22a0
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Thu May 5 18:17:52 2011 +0200

    make OOXML import use sheet local db data
    
    Signed-off-by: Kohei Yoshida <kyoshida at novell.com>

diff --git a/oox/inc/oox/xls/workbookhelper.hxx b/oox/inc/oox/xls/workbookhelper.hxx
index 9403453..3e2ca49 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 f8447b6..693ccb1 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 9f5ea11..39b69a7 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 c285d75..621e7c8 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 8cd127b..c30dce3 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: */


More information about the Libreoffice-commits mailing list