[ooo-build-commit] patches/dev300

Kohei Yoshida kohei at kemper.freedesktop.org
Sat Dec 12 22:01:55 PST 2009


 patches/dev300/oox-calc-export-row-limit.diff | 2730 --------------------------
 1 file changed, 2730 deletions(-)

New commits:
commit 8ba207724d7d8964a491ed0bc9802f8003c17d7f
Author: Kohei Yoshida <kyoshida at novell.com>
Date:   Sun Dec 13 01:01:09 2009 -0500

    Removed an obsolete patch.
    
    * patches/dev300/oox-calc-export-row-limit.diff: no longer used.

diff --git a/patches/dev300/oox-calc-export-row-limit.diff b/patches/dev300/oox-calc-export-row-limit.diff
deleted file mode 100644
index 2a311a1..0000000
--- a/patches/dev300/oox-calc-export-row-limit.diff
+++ /dev/null
@@ -1,2730 +0,0 @@
-From ec416334c40c7e0f31b3b0541447c212a1727cf8 Mon Sep 17 00:00:00 2001
-From: Jan Nieuwenhuizen <janneke at gnu.org>
-Date: Fri, 5 Jun 2009 15:51:45 +0200
-Subject: [PATCH] [OOXML]: use 32 bits for xlsx row export.  Fixes 65536 row limit, n#504623.
-
-Also, fix export of Formulas in the last row (off by one bug),
-Note content and Hyperlinks below 65536.
-
-A lot of files are touched to add explitic #includes of copied
-headers (xladdress.hxx, xlconst.hxx etc).
-
-Original filter/inc headers are touched, only to add an include
-guard to ascertain we're not including original versions of
-copied headers.
-
-   * Modified     sc/source/filter/inc/xetable.hxx
-   * Modified     sc/source/filter/inc/xladdress.hxx
-   * Modified     sc/source/filter/inc/xlconst.hxx
-   * Modified     sc/source/filter/inc/xlformula.hxx
-   * Modified     sc/source/filter/inc/xetable.hxx
-   * Modified     sc/source/filter/inc/xladdress.hxx
-   * Modified     sc/source/filter/inc/xlconst.hxx
-   * Modified     sc/source/filter/inc/xlformula.hxx
-   * Modified     sc/source/filter/inc/XclExpChangeTrack.hxx
-   * Modified     sc/source/filter/inc/excrecds.hxx
-   * Modified     sc/source/filter/xlsx/makefile.mk
-   * Modified     sc/source/filter/inc/xestream.hxx
-   * Modified     sc/source/filter/excel/colrowst.cxx
-   * Modified     sc/source/filter/excel/excdoc.cxx
-   * Modified     sc/source/filter/excel/excel.cxx
-   * Modified     sc/source/filter/excel/excform.cxx
-   * Modified     sc/source/filter/excel/excform8.cxx
-   * Modified     sc/source/filter/excel/excimp8.cxx
-   * Modified     sc/source/filter/excel/exctools.cxx
-   * Modified     sc/source/filter/excel/expop2.cxx
-   * Modified     sc/source/filter/excel/impop.cxx
-   * Modified     sc/source/filter/excel/namebuff.cxx
-   * Modified     sc/source/filter/excel/read.cxx
-   * Modified     sc/source/filter/xcl97/xcl97esc.cxx
-   * Modified     sc/source/filter/excel/xechart.cxx
-   * Modified     sc/source/filter/excel/xecontent.cxx
-   * Modified     sc/source/filter/excel/xeescher.cxx
-   * Modified     sc/source/filter/excel/xeformula.cxx
-   * Modified     sc/source/filter/excel/xehelper.cxx
-   * Modified     sc/source/filter/excel/xelink.cxx
-   * Modified     sc/source/filter/excel/xename.cxx
-   * Modified     sc/source/filter/excel/xepage.cxx
-   * Modified     sc/source/filter/excel/xepivot.cxx
-   * Modified     sc/source/filter/excel/xerecord.cxx
-   * Modified     sc/source/filter/excel/xeroot.cxx
-   * Modified     sc/source/filter/excel/xestream.cxx
-   * Modified     sc/source/filter/excel/xetable.cxx
-   * Modified     sc/source/filter/excel/xeview.cxx
-   * Modified     sc/source/filter/excel/xichart.cxx
-   * Modified     sc/source/filter/excel/xicontent.cxx
-   * Modified     sc/source/filter/excel/xiescher.cxx
-   * Modified     sc/source/filter/excel/xiformula.cxx
-   * Modified     sc/source/filter/excel/xihelper.cxx
-   * Modified     sc/source/filter/excel/xilink.cxx
-   * Modified     sc/source/filter/excel/xiname.cxx
-   * Modified     sc/source/filter/excel/xipage.cxx
-   * Modified     sc/source/filter/excel/xipivot.cxx
-   * Modified     sc/source/filter/excel/xiroot.cxx
-   * Modified     sc/source/filter/excel/xistream.cxx
-   * Modified     sc/source/filter/excel/xistring.cxx
-   * Modified     sc/source/filter/excel/xistyle.cxx
-   * Modified     sc/source/filter/excel/xiview.cxx
-   * Modified     sc/source/filter/excel/xladdress.cxx
-   * Modified     sc/source/filter/excel/xlchart.cxx
-   * Modified     sc/source/filter/excel/xlescher.cxx
-   * Modified     sc/source/filter/excel/xlformula.cxx
-   * Modified     sc/source/filter/excel/xlpage.cxx
-   * Modified     sc/source/filter/excel/xlpivot.cxx
-   * Modified     sc/source/filter/excel/xlroot.cxx
-   * Modified     sc/source/filter/excel/xlstyle.cxx
-   * Modified     sc/source/filter/excel/xlview.cxx
----
- sc/source/filter/inc/xetable.hxx            |    4 +
- sc/source/filter/inc/xladdress.hxx          |    4 +
- sc/source/filter/inc/xlconst.hxx            |    4 +
- sc/source/filter/inc/xlformula.hxx          |    4 +
- sc/source/filter/inc/inc/xetable.hxx       | 1092 +++++++++++++++++++++++++++
- sc/source/filter/inc/inc/xladdress.hxx     |  200 +++++
- sc/source/filter/inc/inc/xlconst.hxx       |  236 ++++++
- sc/source/filter/inc/inc/xlformula.hxx     |  477 ++++++++++++
- sc/source/filter/inc/XclExpChangeTrack.hxx |    6 +-
- sc/source/filter/inc/excrecds.hxx          |    3 +
- sc/source/filter/xlsx/makefile.mk           |    2 +
- sc/source/filter/inc/xestream.hxx          |    3 +
- sc/source/filter/excel/colrowst.cxx     |    3 +-
- sc/source/filter/excel/excdoc.cxx       |    4 +
- sc/source/filter/excel/excel.cxx        |    3 +
- sc/source/filter/excel/excform.cxx      |    3 +
- sc/source/filter/excel/excform8.cxx     |    3 +
- sc/source/filter/excel/excimp8.cxx      |    3 +
- sc/source/filter/excel/exctools.cxx     |    2 +-
- sc/source/filter/excel/expop2.cxx       |    3 +
- sc/source/filter/excel/impop.cxx        |    3 +
- sc/source/filter/excel/namebuff.cxx     |    3 +
- sc/source/filter/excel/read.cxx         |    3 +
- sc/source/filter/xcl97/xcl97esc.cxx     |    3 +
- sc/source/filter/excel/xechart.cxx      |    3 +
- sc/source/filter/excel/xecontent.cxx    |    5 +-
- sc/source/filter/excel/xeescher.cxx     |   12 +-
- sc/source/filter/excel/xeformula.cxx    |   28 +-
- sc/source/filter/excel/xehelper.cxx     |    5 +-
- sc/source/filter/excel/xelink.cxx       |    3 +
- sc/source/filter/excel/xename.cxx       |    3 +
- sc/source/filter/excel/xepage.cxx       |    5 +-
- sc/source/filter/excel/xepivot.cxx      |    6 +-
- sc/source/filter/excel/xerecord.cxx     |    3 +
- sc/source/filter/excel/xeroot.cxx       |    3 +
- sc/source/filter/excel/xestream.cxx     |    4 +-
- sc/source/filter/excel/xetable.cxx      |   36 +-
- sc/source/filter/excel/xeview.cxx       |    3 +
- sc/source/filter/excel/xichart.cxx      |    3 +
- sc/source/filter/excel/xicontent.cxx    |    3 +
- sc/source/filter/excel/xiescher.cxx     |    3 +
- sc/source/filter/excel/xiformula.cxx    |    2 +
- sc/source/filter/excel/xihelper.cxx     |    5 +-
- sc/source/filter/excel/xilink.cxx       |    3 +
- sc/source/filter/excel/xiname.cxx       |    3 +
- sc/source/filter/excel/xipage.cxx       |    3 +
- sc/source/filter/excel/xipivot.cxx      |    3 +
- sc/source/filter/excel/xiroot.cxx       |    3 +
- sc/source/filter/excel/xistream.cxx     |    3 +
- sc/source/filter/excel/xistring.cxx     |    3 +
- sc/source/filter/excel/xistyle.cxx      |    3 +
- sc/source/filter/excel/xiview.cxx       |    3 +
- sc/source/filter/excel/xladdress.cxx    |    2 +-
- sc/source/filter/excel/xlchart.cxx      |    3 +
- sc/source/filter/excel/xlescher.cxx     |    2 +-
- sc/source/filter/excel/xlformula.cxx    |    2 +-
- sc/source/filter/excel/xlpage.cxx       |    1 +
- sc/source/filter/excel/xlpivot.cxx      |    3 +
- sc/source/filter/excel/xlroot.cxx       |    1 +
- sc/source/filter/excel/xlstyle.cxx      |    1 +
- sc/source/filter/excel/xlview.cxx       |    1 +
- 61 files changed, 2199 insertions(+), 50 deletions(-)
- create mode 100644 sc/source/filter/inc/inc/xetable.hxx
- create mode 100644 sc/source/filter/inc/inc/xladdress.hxx
- create mode 100644 sc/source/filter/inc/inc/xlconst.hxx
- create mode 100644 sc/source/filter/inc/inc/xlformula.hxx
-
-diff --git sc/source/filter/inc/inc/xetable.hxx sc/source/filter/inc/inc/xetable.hxx
-new file mode 100644
-index 0000000..7a30a2f
---- /dev/null
-+++ sc/source/filter/inc/inc/xetable.hxx
-@@ -0,0 +1,1092 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: xetable.hxx,v $
-+ * $Revision: 1.11 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SC_XETABLE_HXX
-+#define SC_XETABLE_HXX
-+
-+#include "xltable.hxx"
-+
-+#include <deque>
-+#include <tools/mempool.hxx>
-+#include "xladdress.hxx"
-+#include "xerecord.hxx"
-+#include "xestring.hxx"
-+#include "xeformula.hxx"
-+#include "xestyle.hxx"
-+
-+/* ============================================================================
-+Export of cell tables including row and column description.
-+- Managing all used and formatted cells in a sheet.
-+- Row and column properties, i.e. width/height, visibility.
-+- Find default row formatting and default column formatting.
-+- Merged cell ranges.
-+============================================================================ */
-+
-+// ============================================================================
-+// Helper records for cell records
-+// ============================================================================
-+
-+/** Represents a STRING record that contains the result of a string formula. */
-+class XclExpStringRec : public XclExpRecord
-+{
-+public:
-+    explicit            XclExpStringRec( const XclExpRoot& rRoot, const String& rResult );
-+
-+private:
-+    virtual void        WriteBody( XclExpStream& rStrm );
-+
-+private:
-+    XclExpStringRef     mxResult;
-+};
-+
-+// Additional records for special formula ranges ==============================
-+
-+/** Base record for additional range formula records (i.e. ARRAY, SHRFMLA). */
-+class XclExpRangeFmlaBase : public XclExpRecord
-+{
-+public:
-+    /** Returns true, if the passed cell position is equal to own base position. */
-+    bool IsBasePos( sal_uInt16 nXclCol, sal_uInt32 nXclRow ) const;
-+
-+    /** Derived classes create the token array for a corresponding FORMULA cell record. */
-+    virtual XclTokenArrayRef CreateCellTokenArray( const XclExpRoot& rRoot ) const = 0;
-+    /** Derived classes return true, if the own formula contains volatile functions. */
-+    virtual bool        IsVolatile() const = 0;
-+
-+protected:
-+    /** Constructs the record with a single cell. */
-+    explicit            XclExpRangeFmlaBase(
-+                            sal_uInt16 nRecId, sal_uInt32 nRecSize, const ScAddress& rScPos );
-+    /** Constructs the record with a cell range. */
-+    explicit            XclExpRangeFmlaBase(
-+                            sal_uInt16 nRecId, sal_uInt32 nRecSize, const ScRange& rScRange );
-+
-+    /** Extends the cell range to include the passed cell address. */
-+    void                Extend( const ScAddress& rScPos );
-+
-+    /** Writes the range address covered by this record. */
-+    void                WriteRangeAddress( XclExpStream& rStrm ) const;
-+
-+protected:
-+    XclRange            maXclRange;     /// Range described by this record.
-+    XclAddress          maBaseXclPos;   /// Address of base cell (first FORMULA record).
-+};
-+
-+typedef ScfRef< XclExpRangeFmlaBase > XclExpRangeFmlaRef;
-+
-+// Array formulas =============================================================
-+
-+class ScTokenArray;
-+
-+/** Represents an ARRAY record that contains the token array of a matrix formula.
-+
-+    An ARRAY record is stored following the first FORMULA record that is part
-+    of a matrix formula. All FORMULA records of a matrix formula contain a
-+    reference to the ARRAY record, while the ARRAY record contains the formula
-+    token array used by all formulas.
-+ */
-+class XclExpArray : public XclExpRangeFmlaBase
-+{
-+public:
-+    explicit            XclExpArray( XclTokenArrayRef xTokArr, const ScRange& rScRange );
-+
-+    /** Creates and returns the token array for a corresponding FORMULA cell record. */
-+    virtual XclTokenArrayRef CreateCellTokenArray( const XclExpRoot& rRoot ) const;
-+    /** Returns true, if the array formula contains volatile functions. */
-+    virtual bool        IsVolatile() const;
-+
-+private:
-+    virtual void        WriteBody( XclExpStream& rStrm );
-+
-+private:
-+    XclTokenArrayRef    mxTokArr;       /// The token array of a matrix formula.
-+};
-+
-+typedef ScfRef< XclExpArray > XclExpArrayRef;
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Caches all ARRAY records. */
-+class XclExpArrayBuffer : protected XclExpRoot
-+{
-+public:
-+    explicit            XclExpArrayBuffer( const XclExpRoot& rRoot );
-+
-+    /** Inserts a new ARRAY record into the buffer and returns it. */
-+    XclExpArrayRef      CreateArray( const ScTokenArray& rScTokArr, const ScRange& rScRange );
-+    /** Tries to find an ARRAY record that corresponds to an ocMatRef token. */
-+    XclExpArrayRef      FindArray( const ScTokenArray& rScTokArr ) const;
-+
-+private:
-+    typedef ::std::map< ScAddress, XclExpArrayRef > XclExpArrayMap;
-+    XclExpArrayMap      maRecMap;       /// Map containing the ARRAY records.
-+};
-+
-+// Shared formulas ============================================================
-+
-+/** Represents a SHRFMLA record that contains the token array of a shared formula.
-+
-+    A SHRFMLA record is stored following the first FORMULA record that is part
-+    of a shared formula. All FORMULA records of a shared formula contain a
-+    reference to the SHRFMLA record, while the SHRFMLA record contains the
-+    formula token array used by all formulas.
-+ */
-+class XclExpShrfmla : public XclExpRangeFmlaBase
-+{
-+public:
-+    /** Creates a SHRFMLA record that consists of the passed cell address only. */
-+    explicit            XclExpShrfmla( XclTokenArrayRef xTokArr, const ScAddress& rScPos );
-+
-+    /** Extends the cell range to include the passed cell address. */
-+    void                ExtendRange( const ScAddress& rScPos );
-+
-+    /** Creates and returns the token array for a corresponding FORMULA cell record. */
-+    virtual XclTokenArrayRef CreateCellTokenArray( const XclExpRoot& rRoot ) const;
-+    /** Returns true, if the shared formula contains volatile functions. */
-+    virtual bool        IsVolatile() const;
-+
-+private:
-+    virtual void        WriteBody( XclExpStream& rStrm );
-+
-+private:
-+    XclTokenArrayRef    mxTokArr;       /// The token array of a shared formula.
-+    sal_uInt8           mnUsedCount;    /// Number of FORMULA records referring to this record.
-+};
-+
-+typedef ScfRef< XclExpShrfmla > XclExpShrfmlaRef;
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Caches all SHRFMLA records and provides functions to update their ranges. */
-+class XclExpShrfmlaBuffer : protected XclExpRoot
-+{
-+public:
-+    explicit            XclExpShrfmlaBuffer( const XclExpRoot& rRoot );
-+
-+    /** Tries to create a new or to update an existing SHRFMLA record.
-+        @return  An empty reference, if the passed token array does not contain
-+            a shared formula. If the token array is a shared formula, this
-+            function updates its cell range to include the passed cell position,
-+            if there is a SHRFMLA record for the passed token array; otherwise
-+            this function creates and returns a new SHRFMLA record. */
-+    XclExpShrfmlaRef    CreateOrExtendShrfmla(
-+                            const ScTokenArray& rScTokArr, const ScAddress& rScPos );
-+
-+private:
-+    typedef ::std::map< const ScTokenArray*, XclExpShrfmlaRef > XclExpShrfmlaMap;
-+    XclExpShrfmlaMap    maRecMap;       /// Map containing the SHRFMLA records.
-+};
-+
-+// Multiple operations ========================================================
-+
-+struct XclMultipleOpRefs;
-+
-+/** Represents a TABLEOP record for a multiple operations range. */
-+class XclExpTableop : public XclExpRangeFmlaBase
-+{
-+public:
-+    explicit            XclExpTableop( const ScAddress& rScPos,
-+                            const XclMultipleOpRefs& rRefs, sal_uInt8 nScMode );
-+
-+    /** Returns true, if the cell range has been extended to the passed position.
-+        @descr  All references passed in rRefs must fit the ranges passed in the constructor. */
-+    bool                TryExtend( const ScAddress& rScPos, const XclMultipleOpRefs& rRefs );
-+
-+    /** Finalizes the record. Tests on valid cell range and reference addresses. */
-+    void                Finalize();
-+
-+    /** Creates and returns the token array for a corresponding FORMULA cell record. */
-+    virtual XclTokenArrayRef CreateCellTokenArray( const XclExpRoot& rRoot ) const;
-+    /** Returns true, if the multiple operations range is volatile. */
-+    virtual bool        IsVolatile() const;
-+    /** Writes the record if it is valid. */
-+    virtual void        Save( XclExpStream& rStrm );
-+
-+private:
-+    /** Returns true, if the passed cell position can be appended to this record. */
-+    bool IsAppendable( sal_uInt16 nXclCol, sal_uInt32 nXclRow ) const;
-+
-+    /** Writes the contents of the TABLEOP record. */
-+    virtual void        WriteBody( XclExpStream& rStrm );
-+
-+private:
-+    SCTAB               mnScTab;        /// Sheet index of this record.
-+    sal_uInt16          mnLastAppXclCol;/// Column index of last appended cell.
-+    sal_uInt16          mnColInpXclCol; /// Column index of column input cell.
-+    sal_uInt32          mnColInpXclRow; /// Row index of column input cell.
-+    sal_uInt16          mnRowInpXclCol; /// Column index of row input cell.
-+    sal_uInt32          mnRowInpXclRow; /// Row index of row input cell.
-+    sal_uInt8           mnScMode;       /// Type of the multiple operation (Calc constant).
-+    bool                mbValid;        /// true = Contains valid references.
-+};
-+
-+typedef ScfRef< XclExpTableop > XclExpTableopRef;
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Contains all created TABLEOP records and supports creating or updating them. */
-+class XclExpTableopBuffer : protected XclExpRoot
-+{
-+public:
-+    explicit            XclExpTableopBuffer( const XclExpRoot& rRoot );
-+
-+    /** Tries to update an existing or to create a new TABLEOP record.
-+        @return  Reference to the TABLEOP record for this cell (existing or new),
-+            or an empty reference, if rScTokArr does not contain a multiple
-+            operations formula. */
-+    XclExpTableopRef    CreateOrExtendTableop(
-+                            const ScTokenArray& rScTokArr, const ScAddress& rScPos );
-+
-+    /** Finalizes all contained TABLEOP records. */
-+    void                Finalize();
-+
-+private:
-+    /** Tries to create a new TABLEOP record, if rRefs contains valid references. */
-+    XclExpTableopRef    TryCreate( const ScAddress& rScPos, const XclMultipleOpRefs& rRefs );
-+
-+private:
-+    typedef XclExpRecordList< XclExpTableop > XclExpTableopList;
-+    XclExpTableopList   maTableopList;  /// List of all TABLEOP records.
-+};
-+
-+// ============================================================================
-+// Cell records
-+// ============================================================================
-+
-+/** The base class of all cell records. */
-+class XclExpCellBase : public XclExpRecord
-+{
-+public:
-+    /** Returns the (first) address of the cell(s). */
-+    inline const XclAddress& GetXclPos() const { return maXclPos; }
-+    /** Returns the (first) Excel column index of the cell(s). */
-+    inline sal_uInt16   GetXclCol() const { return maXclPos.mnCol; }
-+    /** Returns the Excel row index of the cell. */
-+    inline sal_uInt32   GetXclRow() const { return maXclPos.mnRow; }
-+
-+    /** Derived classes return the column index of the last contained cell. */
-+    virtual sal_uInt16  GetLastXclCol() const = 0;
-+    /** Derived classes return the XF identifier of the first contained cell. */
-+    virtual sal_uInt32  GetFirstXFId() const = 0;
-+    /** Derived classes return true, if this record does not contain at least one valid cell. */
-+    virtual bool        IsEmpty() const = 0;
-+    /** Derived classes return whether the cell contains multi-line text. */
-+    virtual bool        IsMultiLineText() const;
-+
-+    /** Derived classes try to merge the contents of the passed cell to own data. */
-+    virtual bool        TryMerge( const XclExpCellBase& rCell );
-+    /** Derived classes convert the XF identifier(s) into the Excel XF index(es).
-+        @param rXFIndexes  The converted XF index(es) are inserted here. */
-+    virtual void        ConvertXFIndexes( const XclExpRoot& rRoot ) = 0;
-+    /** Derived classes for blank cells insert the Excel XF index(es) into the passed vector. */
-+    virtual void        GetBlankXFIndexes( ScfUInt16Vec& rXFIndexes ) const;
-+    /** Derived classes for blank cells remove unused Excel XF index(es). */
-+    virtual void        RemoveUnusedBlankCells( const ScfUInt16Vec& rXFIndexes );
-+
-+protected:
-+    explicit            XclExpCellBase(
-+                            sal_uInt16 nRecId, sal_Size nContSize, const XclAddress& rXclPos );
-+
-+    /** Sets this record to a new column position. */
-+    inline void         SetXclCol( sal_uInt16 nXclCol ) { maXclPos.mnCol = nXclCol; }
-+    /** Sets this record to a new row position. */
-+    inline void         SetXclRow( sal_uInt32 nXclRow ) { maXclPos.mnRow = nXclRow; }
-+
-+private:
-+    XclAddress          maXclPos;       /// Address of the cell.
-+};
-+
-+typedef ScfRef< XclExpCellBase > XclExpCellRef;
-+
-+// Single cell records ========================================================
-+
-+/** Base class for all cell records not supporting multiple contents. */
-+class XclExpSingleCellBase : public XclExpCellBase
-+{
-+public:
-+    /** Returns the last column, which is equal to the first column for single cells. */
-+    virtual sal_uInt16  GetLastXclCol() const;
-+    /** Return the XF identifier of the cell. */
-+    virtual sal_uInt32  GetFirstXFId() const;
-+    /** Returns true, if this record does not contain at least one valid cell. */
-+    virtual bool        IsEmpty() const;
-+    /** Converts the XF identifier into the Excel XF index. */
-+    virtual void        ConvertXFIndexes( const XclExpRoot& rRoot );
-+    /** Writes cell address, XF index, and calls WriteContents() for each cell. */
-+    virtual void        Save( XclExpStream& rStrm );
-+
-+protected:
-+    explicit            XclExpSingleCellBase( sal_uInt16 nRecId, sal_Size nContSize,
-+                            const XclAddress& rXclPos, sal_uInt32 nXFId );
-+
-+    explicit            XclExpSingleCellBase( const XclExpRoot& rRoot,
-+                            sal_uInt16 nRecId, sal_Size nContSize, const XclAddress& rXclPos,
-+                            const ScPatternAttr* pPattern, sal_Int16 nScript, sal_uInt32 nForcedXFId );
-+
-+    inline void         SetContSize( sal_Size nContSize ) { mnContSize = nContSize; }
-+    inline sal_Size     GetContSize() const { return mnContSize; }
-+
-+    inline void         SetXFId( sal_uInt32 nXFId ) { maXFId.mnXFId = nXFId; }
-+    inline sal_uInt32   GetXFId() const { return maXFId.mnXFId; }
-+
-+private:
-+    /** Writes cell address, XF index, and calls WriteContents() for each cell. */
-+    virtual void        WriteBody( XclExpStream& rStrm );
-+    /** Derived classes write the contents of the specified cell (without XF index). */
-+    virtual void        WriteContents( XclExpStream& rStrm ) = 0;
-+
-+private:
-+    XclExpXFId          maXFId;         /// The XF identifier of the cell formatting.
-+    sal_Size            mnContSize;     /// The size of the cell contents.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Represents a NUMBER record that describes a cell with a double value. */
-+class XclExpNumberCell : public XclExpSingleCellBase
-+{
-+    DECL_FIXEDMEMPOOL_NEWDEL( XclExpNumberCell )
-+
-+public:
-+    explicit            XclExpNumberCell( const XclExpRoot& rRoot, const XclAddress& rXclPos,
-+                            const ScPatternAttr* pPattern, sal_uInt32 nForcedXFId,
-+                            double fValue );
-+
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+private:
-+    virtual void        WriteContents( XclExpStream& rStrm );
-+
-+private:
-+    double              mfValue;        /// The cell value.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Represents a BOOLERR record that describes a cell with a Boolean value. */
-+class XclExpBooleanCell : public XclExpSingleCellBase
-+{
-+    DECL_FIXEDMEMPOOL_NEWDEL( XclExpBooleanCell )
-+
-+public:
-+    explicit            XclExpBooleanCell( const XclExpRoot rRoot, const XclAddress& rXclPos,
-+                            const ScPatternAttr* pPattern, sal_uInt32 nForcedXFId,
-+                            bool bValue );
-+
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+private:
-+    virtual void        WriteContents( XclExpStream& rStrm );
-+
-+private:
-+    bool                mbValue;        /// The cell value.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Represents a BOOLERR record that describes a cell with an error code. */
-+class XclExpErrorCell : public XclExpSingleCellBase
-+{
-+    DECL_FIXEDMEMPOOL_NEWDEL( XclExpErrorCell )
-+
-+public:
-+    explicit            XclExpErrorCell( const XclExpRoot rRoot, const XclAddress& rXclPos,
-+                            const ScPatternAttr* pPattern, sal_uInt32 nForcedXFId,
-+                            sal_uInt8 nErrCode );
-+
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+private:
-+    virtual void        WriteContents( XclExpStream& rStrm );
-+
-+private:
-+    sal_uInt8           mnErrCode;      /// The error code.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+class ScStringCell;
-+class ScEditCell;
-+class XclExpHyperlinkHelper;
-+
-+/** Represents a text cell record.
-+
-+    May contain a BIFF2-BIFF7 LABEL record for a simple string, or a BIFF2-BIFF7
-+    RSTRING record for a formatted string, or a BIFF8 LABELSST string for any
-+    string (simply stores a reference to the Shared String Table).
-+ */
-+class XclExpLabelCell : public XclExpSingleCellBase
-+{
-+    DECL_FIXEDMEMPOOL_NEWDEL( XclExpLabelCell )
-+
-+public:
-+    /** Constructs the record from an unformatted Calc string cell. */
-+    explicit            XclExpLabelCell( const XclExpRoot& rRoot, const XclAddress& rXclPos,
-+                            const ScPatternAttr* pPattern, sal_uInt32 nForcedXFId,
-+                            const ScStringCell& rCell );
-+
-+    /** Constructs the record from a formatted Calc edit cell. */
-+    explicit            XclExpLabelCell( const XclExpRoot& rRoot, const XclAddress& rXclPos,
-+                            const ScPatternAttr* pPattern, sal_uInt32 nForcedXFId,
-+                            const ScEditCell& rCell, XclExpHyperlinkHelper& rHlinkHelper );
-+
-+    /** Returns true if the cell contains multi-line text. */
-+    virtual bool        IsMultiLineText() const;
-+
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+private:
-+    /** Initializes the record contents. Called from constructors. */
-+    void                Init( const XclExpRoot& rRoot,
-+                            const ScPatternAttr* pPattern, XclExpStringRef xText );
-+
-+    virtual void        WriteContents( XclExpStream& rStrm );
-+
-+private:
-+    XclExpStringRef     mxText;         /// The cell text.
-+    sal_uInt32          mnSstIndex;     /// Index into Shared String Table (only used for BIFF8).
-+    bool                mbLineBreak;    /// True = cell has automatic linebreaks enabled.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+class ScFormulaCell;
-+
-+/** Represents a FORMULA record that describes a cell with a formula. */
-+class XclExpFormulaCell : public XclExpSingleCellBase
-+{
-+    DECL_FIXEDMEMPOOL_NEWDEL( XclExpFormulaCell )
-+
-+public:
-+    explicit            XclExpFormulaCell( const XclExpRoot& rRoot, const XclAddress& rXclPos,
-+                            const ScPatternAttr* pPattern, sal_uInt32 nForcedXFId,
-+                            const ScFormulaCell& rScFmlaCell,
-+                            XclExpArrayBuffer& rArrayBfr,
-+                            XclExpShrfmlaBuffer& rShrfmlaBfr,
-+                            XclExpTableopBuffer& rTableopBfr );
-+
-+    /** Writes the FORMULA record and additional records related to the formula. */
-+    virtual void        Save( XclExpStream& rStrm );
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+
-+private:
-+    virtual void        WriteContents( XclExpStream& rStrm );
-+
-+private:
-+    ScFormulaCell&      mrScFmlaCell;   /// The Calc formula cell.
-+    XclTokenArrayRef    mxTokArr;       /// The token array of the formula.
-+    XclExpRangeFmlaRef  mxAddRec;       /// Additional record for matrix/shared formulas.
-+    XclExpRecordRef     mxStringRec;    /// STRING record for string result.
-+};
-+
-+// Multiple cell records ======================================================
-+
-+struct XclExpMultiXFId : public XclExpXFId
-+{
-+    sal_uInt16          mnCount;        /// Number of XF identifiers.
-+
-+    inline explicit     XclExpMultiXFId( sal_uInt32 nXFId, sal_uInt16 nCount = 1 ) :
-+                            XclExpXFId( nXFId ), mnCount( nCount ) {}
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Base class for all cell records supporting multiple contents. */
-+class XclExpMultiCellBase : public XclExpCellBase
-+{
-+public:
-+    /** Returns the column index of the last cell this record describes. */
-+    virtual sal_uInt16  GetLastXclCol() const;
-+    /** Return the XF identifier of the first contained cell. */
-+    virtual sal_uInt32  GetFirstXFId() const;
-+    /** Returns true, if this record does not contain at least one valid cell. */
-+    virtual bool        IsEmpty() const;
-+
-+    /** Convert all XF identifiers into the Excel XF indexes. */
-+    virtual void        ConvertXFIndexes( const XclExpRoot& rRoot );
-+    /** Writes the record, calls WriteContents() for each contained cell.
-+        @descr  May write several records, if unused XF indexes are contained. */
-+    virtual void        Save( XclExpStream& rStrm );
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+
-+protected:
-+    explicit            XclExpMultiCellBase( sal_uInt16 nRecId, sal_uInt16 nMulRecId,
-+                            sal_Size nContSize, const XclAddress& rXclPos );
-+
-+    /** Sets the size of the remaining contents of one cell (without the XF index). */
-+    inline void         SetContSize( sal_Size nContSize ) { mnContSize = nContSize; }
-+    /** Returns the size of the remaining contents of one cell (without the XF index). */
-+    inline sal_Size     GetContSize() const { return mnContSize; }
-+
-+    /** Returns the number of cells this record represents. */
-+    sal_uInt16          GetCellCount() const;
-+
-+    /** Appends the passed XF identifier nCount times to the list of XF identifiers. */
-+    void                AppendXFId( const XclExpMultiXFId& rXFId );
-+    /** Appends the passed cell format nCount times to the list of XF identifiers. */
-+    void                AppendXFId( const XclExpRoot& rRoot,
-+                            const ScPatternAttr* pPattern, sal_uInt16 nScript,
-+                            sal_uInt32 nForcedXFId, sal_uInt16 nCount = 1 );
-+
-+    /** Tries to merge the XF ID list of the passed cell with the own list. */
-+    bool                TryMergeXFIds( const XclExpMultiCellBase& rCell );
-+    /** Inserts the Excel XF index(es) into the passed vector. */
-+    void                GetXFIndexes( ScfUInt16Vec& rXFIndexes ) const;
-+
-+    /** Removes unused Excel XF index(es).
-+        @param rXFIndexes  Specifies which XF indexes are used. */
-+    void                RemoveUnusedXFIndexes( const ScfUInt16Vec& rXFIndexes );
-+
-+private:
-+    /** Derived classes write the remaining contents of the specified cell (without XF index).
-+        @param nRelCol  Relative column index (starts with 0 for first cell of this record). */
-+    virtual void        WriteContents( XclExpStream& rStrm, sal_uInt16 nRelCol ) = 0;
-+    virtual void        WriteXmlContents( XclExpXmlStream& rStrm, const XclAddress& rAddress, sal_uInt32 nXFId, sal_uInt16 nRelCol ) = 0;
-+
-+private:
-+    typedef ::std::deque< XclExpMultiXFId > XclExpMultiXFIdDeq;
-+
-+    sal_uInt16          mnMulRecId;     /// Record ID for multiple record variant.
-+    sal_Size            mnContSize;     /// Data size of contents for one cell
-+    XclExpMultiXFIdDeq  maXFIds;        /// The XF identifiers of the cell formatting.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Represents a BLANK or MULBLANK record that describes empty but formatted cells. */
-+class XclExpBlankCell : public XclExpMultiCellBase
-+{
-+    DECL_FIXEDMEMPOOL_NEWDEL( XclExpBlankCell )
-+
-+public:
-+    explicit            XclExpBlankCell( const XclAddress& rXclPos, const XclExpMultiXFId& rXFId );
-+
-+    explicit            XclExpBlankCell( const XclExpRoot& rRoot,
-+                            const XclAddress& rXclPos, sal_uInt16 nLastXclCol,
-+                            const ScPatternAttr* pPattern, sal_uInt32 nForcedXFId );
-+
-+    /** Tries to merge the contents of the passed cell to own data. */
-+    virtual bool        TryMerge( const XclExpCellBase& rCell );
-+    /** Inserts the Excel XF index(es) into the passed vector. */
-+    virtual void        GetBlankXFIndexes( ScfUInt16Vec& rXFIndexes ) const;
-+    /** Tries to remove unused Excel XF index(es). */
-+    virtual void        RemoveUnusedBlankCells( const ScfUInt16Vec& rXFIndexes );
-+
-+private:
-+    /** Writes the remaining contents of the specified cell (without XF index). */
-+    virtual void        WriteContents( XclExpStream& rStrm, sal_uInt16 nRelCol );
-+    virtual void        WriteXmlContents( XclExpXmlStream& rStrm, const XclAddress& rAddress, sal_uInt32 nXFId, sal_uInt16 nRelCol );
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Represents an RK or MULRK record that describes cells with a compressed double values. */
-+class XclExpRkCell : public XclExpMultiCellBase
-+{
-+    DECL_FIXEDMEMPOOL_NEWDEL( XclExpRkCell )
-+
-+public:
-+    explicit            XclExpRkCell( const XclExpRoot& rRoot, const XclAddress& rXclPos,
-+                            const ScPatternAttr* pPattern, sal_uInt32 nForcedXFId,
-+                            sal_Int32 nRkValue );
-+
-+    /** Tries to merge the contents of the passed cell to own data. */
-+    virtual bool        TryMerge( const XclExpCellBase& rCell );
-+
-+private:
-+    /** Writes the remaining contents of the specified cell (without XF index). */
-+    virtual void        WriteContents( XclExpStream& rStrm, sal_uInt16 nRelCol );
-+    virtual void        WriteXmlContents( XclExpXmlStream& rStrm, const XclAddress& rAddress, sal_uInt32 nXFId, sal_uInt16 nRelCol );
-+
-+private:
-+    ScfInt32Vec         maRkValues;     /// The cell values.
-+};
-+
-+// ============================================================================
-+// Rows and Columns
-+// ============================================================================
-+
-+class ScOutlineArray;
-+
-+/** Base class for buffers containing row or column outline data. */
-+class XclExpOutlineBuffer
-+{
-+public:
-+    /** Returns true, if a collapsed group ends at the last processed position. */
-+    inline bool         IsCollapsed() const { return mbCurrCollapse; }
-+    /** Returns the highest level of an open group at the last processed position. */
-+    inline sal_uInt8    GetLevel() const { return ::std::min( mnCurrLevel, EXC_OUTLINE_MAX ); }
-+
-+protected:
-+    /** Constructs the outline buffer.
-+        @param bRows  true = Process row ouline array; false = Process column outline array. */
-+    explicit            XclExpOutlineBuffer( const XclExpRoot& rRoot, bool bRows );
-+
-+    /** Updates the current state by processing the settings at the passed Calc position. */
-+    void                UpdateColRow( SCCOLROW nScPos );
-+
-+private:
-+    /** Data about an outline level. */
-+    struct XclExpLevelInfo
-+    {
-+        SCCOLROW            mnScEndPos;         /// The end position of a group in a level.
-+        bool                mbHidden;           /// true = Group in this level is hidden.
-+        inline explicit     XclExpLevelInfo() : mnScEndPos( 0 ), mbHidden( false ) {}
-+    };
-+    typedef ::std::vector< XclExpLevelInfo > XclExpLevelInfoVec;
-+
-+    const ScOutlineArray* mpScOLArray;      /// Pointer to Calc outline array.
-+    XclExpLevelInfoVec  maLevelInfos;       /// Info for current row and all levels.
-+    sal_uInt8           mnCurrLevel;        /// Highest level of an open group for current position.
-+    bool                mbCurrCollapse;     /// true = Collapsed group ends at current position.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** The outline buffer for column outlines. */
-+class XclExpColOutlineBuffer : public XclExpOutlineBuffer
-+{
-+public:
-+    inline explicit     XclExpColOutlineBuffer( const XclExpRoot& rRoot ) :
-+                            XclExpOutlineBuffer( rRoot, false ) {}
-+
-+    /** Updates the current state by processing the settings of the passed Calc column. */
-+    inline void         Update( SCCOL nScCol )
-+                            { UpdateColRow( static_cast< SCCOLROW >( nScCol ) ); }
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** The outline buffer for row outlines. */
-+class XclExpRowOutlineBuffer : public XclExpOutlineBuffer
-+{
-+public:
-+    inline explicit     XclExpRowOutlineBuffer( const XclExpRoot& rRoot ) :
-+                            XclExpOutlineBuffer( rRoot, true ) {}
-+
-+    /** Updates the current state by processing the settings of the passed Calc row. */
-+    inline void         Update( SCROW nScRow )
-+                            { UpdateColRow( static_cast< SCCOLROW >( nScRow ) ); }
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Represents a GUTS record containing the level count of row and column outlines. */
-+class XclExpGuts : public XclExpRecord
-+{
-+public:
-+    explicit            XclExpGuts( const XclExpRoot& rRoot );
-+
-+private:
-+    virtual void        WriteBody( XclExpStream& rStrm );
-+
-+private:
-+    sal_uInt16          mnColLevels;    /// Number of visible column outline levels.
-+    sal_uInt16          mnColWidth;     /// Width of column outline area (pixels).
-+    sal_uInt16          mnRowLevels;    /// Number of visible row outline levels.
-+    sal_uInt16          mnRowWidth;     /// Width of row outline area (pixels).
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Represents a DIMENSIONS record containing the used area of a sheet. */
-+class XclExpDimensions : public XclExpRecord
-+{
-+public:
-+    explicit            XclExpDimensions( const XclExpRoot& rRoot );
-+
-+    /** Sets the used area to the record. */
-+    void                SetDimensions(
-+                            sal_uInt16 nFirstUsedXclCol, sal_uInt32 nFirstUsedXclRow,
-+                            sal_uInt16 nFirstFreeXclCol, sal_uInt32 nFirstFreeXclRow );
-+
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+private:
-+    /** Writes the contents of the DIMENSIONS record. */
-+    virtual void        WriteBody( XclExpStream& rStrm );
-+
-+private:
-+    sal_uInt32          mnFirstUsedXclRow;  /// First used row.
-+    sal_uInt32          mnFirstFreeXclRow;  /// First unused row after used area.
-+    sal_uInt16          mnFirstUsedXclCol;  /// First used column.
-+    sal_uInt16          mnFirstFreeXclCol;  /// First free column after used area.
-+};
-+
-+// ============================================================================
-+
-+/** Represents the DEFCOLWIDTH record containing the default column width of a sheet.
-+
-+    Excel stores the default column width in entire character widths of the '0'
-+    character using the application default font (i.e. the default width is 10,
-+    if the '0' character fits 10 times into a cell in a column with default
-+    width.
-+
-+    The IsDefWidth() function returns true, if the passed width (measured in
-+    1/256 of the width of the '0' character) could be converted exactly to the
-+    default width. If the passed width is rounded up or down to get the default
-+    width, the function returns false.
-+ */
-+class XclExpDefcolwidth : public XclExpUInt16Record, protected XclExpRoot
-+{
-+public:
-+    explicit            XclExpDefcolwidth( const XclExpRoot& rRoot );
-+
-+    /** Returns true, if the own default width exactly matches the passed width. */
-+    bool                IsDefWidth( sal_uInt16 nXclColWidth ) const;
-+
-+    /** Sets the passed column width (in 1/256 character width) as default width. */
-+    void                SetDefWidth( sal_uInt16 nXclColWidth );
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Contains the column settings for a range of columns.
-+
-+    After construction the record contains a temporary XF identifier returned
-+    from the XF buffer. After creating the entire Excel document in memory, the
-+    ConvertXFIndexes() function converts it into the real Excel XF index.
-+ */
-+class XclExpColinfo : public XclExpRecord, protected XclExpRoot
-+{
-+public:
-+    /** Constructs the record with the settings in the Calc document. */
-+    explicit            XclExpColinfo( const XclExpRoot& rRoot,
-+                            SCCOL nScCol, SCROW nLastScRow,
-+                            XclExpColOutlineBuffer& rOutlineBfr );
-+
-+    /** Converts the XF identifier into the Excel XF index, returns the latter. */
-+    sal_uInt16          ConvertXFIndexes();
-+
-+    /** Tries to merge this record with the passed record.
-+        @descr  Possible, if passed record directly follows this record and has equal contents.
-+        @return  true = This record is equal to passed record and has been updated. */
-+    bool                TryMerge( const XclExpColinfo& rColInfo );
-+
-+    /** Returns the Excel width of the column(s). */
-+    inline sal_uInt16   GetColWidth() const { return mnWidth; }
-+    /** Returns the final Excel XF index of the column(s). */
-+    inline sal_uInt16   GetXFIndex() const { return maXFId.mnXFIndex; }
-+    /** Returns the number of columns represented by this record. */
-+    inline sal_uInt16   GetColCount() const { return mnLastXclCol - mnFirstXclCol + 1; }
-+
-+    /** Returns true, if the column has default format and width. */
-+    bool                IsDefault( const XclExpDefcolwidth& rDefColWidth ) const;
-+
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+
-+private:
-+    /** Writes the contents of this COLINFO record. */
-+    virtual void        WriteBody( XclExpStream& rStrm );
-+
-+private:
-+    XclExpXFId          maXFId;             /// The XF identifier for column default format.
-+    sal_uInt16          mnWidth;            /// Excel width of the column.
-+    sal_uInt16          mnFlags;            /// Additional column flags.
-+    sal_uInt16          mnFirstXclCol;      /// Index to first column.
-+    sal_uInt16          mnLastXclCol;       /// Index to last column.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Contains COLINFO records for all columns of a Calc sheet.
-+
-+    On construction one COLINFO record per column is created. After creating
-+    the entire Excel document in memory, the ConvertXFIndexes() function converts
-+    all temporary XF identifiers into real Excel XF indexes and merges all equal
-+    COLINFO records together.
-+ */
-+class XclExpColinfoBuffer : public XclExpRecordBase, protected XclExpRoot
-+{
-+public:
-+    explicit            XclExpColinfoBuffer( const XclExpRoot& rRoot );
-+
-+    /** Initializes the buffer: finds settings and formatting of all columns.
-+        @param nLastScRow  Last row used to find default formatting. */
-+    void                Initialize( SCROW nLastScRow );
-+    /** Converts the XF identifiers into the Excel XF indexes and merges equal columns.
-+        @param rXFIndexes  Returns the final XF indexes of all columns. */
-+    void                Finalize( ScfUInt16Vec& rXFIndexes );
-+
-+    /** Writes all COLINFO records of this buffer. */
-+    virtual void        Save( XclExpStream& rStrm );
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+
-+private:
-+    typedef XclExpRecordList< XclExpColinfo >   XclExpColinfoList;
-+    typedef XclExpColinfoList::RecordRefType    XclExpColinfoRef;
-+
-+    XclExpColinfoList   maColInfos;         /// List of COLINFO records.
-+    XclExpDefcolwidth   maDefcolwidth;      /// The DEFCOLWIDTH record.
-+    XclExpColOutlineBuffer maOutlineBfr;    /// Buffer for column outline groups.
-+};
-+
-+// ============================================================================
-+
-+class XclExpRow;
-+
-+/** Contains all possible default row settings. */
-+struct XclExpDefaultRowData
-+{
-+    sal_uInt16          mnFlags;            /// Default flags for unspecified rows.
-+    sal_uInt16          mnHeight;           /// Default height for unspecified rows.
-+
-+    explicit            XclExpDefaultRowData();
-+    explicit            XclExpDefaultRowData( const XclExpRow& rRow );
-+
-+    /** Returns true, if rows are hidden by default. */
-+    inline bool         IsHidden() const { return ::get_flag( mnFlags, EXC_DEFROW_HIDDEN ); }
-+    /** Returns true, if the rows have a manually set height by default. */
-+    inline bool         IsUnsynced() const { return ::get_flag( mnFlags, EXC_DEFROW_UNSYNCED ); }
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Represents a DEFROWHEIGHT record containing default format for unused rows. */
-+class XclExpDefrowheight : public XclExpRecord
-+{
-+public:
-+    explicit            XclExpDefrowheight();
-+
-+    /** Sets the passed default data as current record contents. */
-+    void                SetDefaultData( const XclExpDefaultRowData& rDefData );
-+
-+private:
-+    /** Writes the contents of the record. */
-+    virtual void        WriteBody( XclExpStream& rStrm );
-+
-+private:
-+    XclExpDefaultRowData maDefData;         /// Record data.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Represents a ROW record and additionally contains all cells records of a row.
-+
-+    This class contains all cell records of a row in a spreadsheet. There are 2
-+    cell records in Excel that support storing a range of cells in one record
-+    (MULBLANK for multiple blank cells, and MULRK for multiple RK values). The
-+    insertion functions try to merge a new inserted cell with existing
-+    neighbors, if this is supported by the current type of cell record.
-+
-+    The Finalize() function converts the XF identifiers of all cell records to
-+    the final Excel XF indexes. Then a default
-+ */
-+class XclExpRow : public XclExpRecord, protected XclExpRoot
-+{
-+public:
-+    /** Constructs the ROW record and converts the Calc row settings.
-+        @param bAlwaysEmpty  true = This row will not be filled with blank cells
-+            in the Finalize() function. */
-+    explicit XclExpRow( const XclExpRoot& rRoot, sal_uInt32 nXclRow,
-+                        XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty );
-+
-+    /** Returns the excel row index of this ROW record. */
-+    inline sal_uInt32   GetXclRow() const { return mnXclRow; }
-+    /** Returns the height of the row in twips. */
-+    inline sal_uInt16   GetHeight() const { return mnHeight; }
-+    /** Returns true, if this row does not contain at least one valid cell. */
-+    inline bool         IsEmpty() const { return maCellList.IsEmpty(); }
-+    /** Returns true, if this row is hidden. */
-+    inline bool         IsHidden() const { return ::get_flag( mnFlags, EXC_ROW_HIDDEN ); }
-+    /** Returns true, if this row contains a manually set height. */
-+    inline bool         IsUnsynced() const { return ::get_flag( mnFlags, EXC_ROW_UNSYNCED ); }
-+    /** Returns true, if this row is enabled (will be exported). */
-+    inline bool         IsEnabled() const { return mbEnabled; }
-+
-+    /** Appends the passed cell object to this row. */
-+    void                AppendCell( XclExpCellRef xCell, bool bIsMergedBase );
-+
-+    /** Converts all XF identifiers into the Excel XF indexes. */
-+    void                Finalize( const ScfUInt16Vec& rColXFIndexes );
-+
-+    /** Returns the column index of the first used cell in this row.
-+        @descr  This function can only be called after Finalize(). */
-+    sal_uInt16          GetFirstUsedXclCol() const;
-+    /** Returns the column index of the first unused cell following all used cells in this row.
-+        @descr  This function can only be called after Finalize(). */
-+    sal_uInt16          GetFirstFreeXclCol() const;
-+
-+    /** Returns true, if this row may be omitted by using the DEFROWHEIGHT record.
-+        @descr  A row may be omitted, if it does not contain any cell or
-+        explicit default cell formatting, and is not part of an outline.
-+        This function can only be called after Finalize(). */
-+    bool                IsDefaultable() const;
-+    /** Disables this row, if it is defaultable and has the passed default format.
-+        @descr  Disabled rows will not be saved.
-+            This function can only be called after Finalize(). */
-+    void                DisableIfDefault( const XclExpDefaultRowData& rDefRowData );
-+
-+    /** Writes all cell records of this row. */
-+    void                WriteCellList( XclExpStream& rStrm );
-+
-+    /** Writes the ROW record if the row is not disabled (see DisableIfDefault() function). */
-+    virtual void        Save( XclExpStream& rStrm );
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+
-+private:
-+    /** Initializes the record data. Called from constructors. */
-+    void                Init( sal_uInt32 nXclRow, XclExpRowOutlineBuffer* pOutlineBfr );
-+    /** Inserts a cell at the specified list position, tries to merge with neighbors. */
-+    void                InsertCell( XclExpCellRef xCell, size_t nPos, bool bIsMergedBase );
-+
-+    /** Writes the contents of the ROW record. */
-+    virtual void        WriteBody( XclExpStream& rStrm );
-+
-+private:
-+    typedef XclExpRecordList< XclExpCellBase > XclExpCellList;
-+
-+    XclExpCellList      maCellList;         /// List of cell records for this row.
-+    sal_uInt32          mnXclRow;           /// Excel row index of this row.
-+    sal_uInt16          mnHeight;           /// Row height in twips.
-+    sal_uInt16          mnFlags;            /// Flags for the ROW record.
-+    sal_uInt16          mnXFIndex;          /// Default row formatting.
-+    sal_uInt16          mnOutlineLevel;     /// Outline Level (for OOXML)
-+    bool                mbAlwaysEmpty;      /// true = Do not add blank cells in Finalize().
-+    bool                mbEnabled;          /// true = Write this ROW record.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Collects all rows which contain all cells of a sheet.
-+
-+    This row buffer automatically creates ROW records when cells are inserted
-+    with the AppendCell() function. It is possible to force creation of more
-+    ROW records with the CreateRows() function. In both cases, all preceding
-+    missing ROW records are inserted too.
-+ */
-+class XclExpRowBuffer : public XclExpRecordBase, protected XclExpRoot
-+{
-+public:
-+    explicit            XclExpRowBuffer( const XclExpRoot& rRoot );
-+
-+    /** Appends the passed cell object to the row that the cell specifies. */
-+    void                AppendCell( XclExpCellRef xCell, bool bIsMergedBase );
-+    /** Forces insertion of all ROW records before the passed row. */
-+    void                CreateRows( SCROW nFirstFreeScRow );
-+
-+    /** Converts all XF identifiers into the Excel XF indexes and calculates default formats.
-+        @param rDefRowData  (out-param) The default row format is returned here.
-+        @param rColXFIndexes  The column default XF indexes. */
-+    void                Finalize( XclExpDefaultRowData& rDefRowData, const ScfUInt16Vec& rColXFIndexes );
-+
-+    /** Writes the DIMENSIONS record, all ROW records and all cell records. */
-+    virtual void        Save( XclExpStream& rStrm );
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+
-+    XclExpDimensions*   GetDimensions();
-+
-+private:
-+    /** Returns access to the specified ROW record. Inserts preceding missing ROW records.
-+        @param bRowAlwaysEmpty  true = Created rows will not be filled with blank cells
-+            in the XclExpRow::Finalize() function. */
-+    XclExpRow& GetOrCreateRow( sal_uInt32 nXclRow, bool bRowAlwaysEmpty );
-+
-+private:
-+    typedef XclExpRecordList< XclExpRow >   XclExpRowList;
-+    typedef XclExpRowList::RecordRefType    XclExpRowRef;
-+
-+    XclExpRowList       maRowList;          /// List of all ROW records.
-+    XclExpRowOutlineBuffer maOutlineBfr;    /// Buffer for row outline groups.
-+    XclExpDimensions    maDimensions;       /// DIMENSIONS record for used area.
-+    XclExpRow*          mpLastUsedRow;      /// Last used row for faster access.
-+    sal_uInt32          mnLastUsedXclRow;   /// Last used row for faster access.
-+};
-+
-+// ============================================================================
-+// Cell Table
-+// ============================================================================
-+
-+class XclExpNote;
-+class XclExpMergedcells;
-+class XclExpHyperlink;
-+class XclExpDval;
-+
-+/** This class contains the cell contents and more of an entire sheet.
-+
-+    The cell table includes the settings and default formatting of all columns,
-+    the settings and default formatting of all used rows, and the contents of
-+    all cells of one sheet in a spreadsheet document.
-+
-+    The constructor does all the work creating the cell table. It reads the
-+    Calc sheet and converts all columns, rows, and cells to Excel record data.
-+    Additioanlly, hyperlink records, note records, additional records for
-+    formula cells, data validation records, and outline records are created.
-+
-+    The Finalize() function does even more work. It calculates default column
-+    settings and removes column records that are equal to this default. The
-+    same happens with rows: A default format is calculated for each row, and
-+    all blank cells in this row that have the same format are removed. Then,
-+    the most used row settings are calculated, and all empty rows that have the
-+    same settings are removed too.
-+
-+    Records that are not stored inside the cell table area in an Excel file
-+    (i.e. DEFROWHEIGHT record, NOTE records, MERGEDCELLS record, HLINK records,
-+    DVAL and DV records for data validation) can be accessed with the function
-+    CreateRecord(). It returns the reference to the respective record (or
-+    record list) which can be inserted into a record list.
-+ */
-+class XclExpCellTable : public XclExpRecordBase, protected XclExpRoot
-+{
-+public:
-+    explicit            XclExpCellTable( const XclExpRoot& rRoot );
-+
-+    /** Converts all XF identifiers into the Excel XF indexes and calculates default formats. */
-+    void                Finalize();
-+
-+    /** Returns the reference to an internal record specified by the passed record id.
-+        @param nRecId  The record identifier that specifies which record is
-+            returned. Possible values are: EXC_ID_DEFROWHEIGHT, EXC_ID_NOTE,
-+            EXC_ID_MERGEDCELLS, EXC_ID_HLINK, EXC_ID_DVAL. */
-+    XclExpRecordRef     CreateRecord( sal_uInt16 nRecId ) const;
-+    /** Saves the entire cell table. */
-+    virtual void        Save( XclExpStream& rStrm );
-+    virtual void        SaveXml( XclExpXmlStream& rStrm );
-+
-+private:
-+    typedef XclExpRecordList< XclExpNote >      XclExpNoteList;
-+    typedef XclExpRecordList< XclExpHyperlink > XclExpHyperlinkList;
-+
-+    typedef ScfRef< XclExpDefrowheight >        XclExpDefrowhRef;
-+    typedef ScfRef< XclExpNoteList >            XclExpNoteListRef;
-+    typedef ScfRef< XclExpMergedcells >         XclExpMergedcellsRef;
-+    typedef ScfRef< XclExpHyperlinkList >       XclExpHyperlinkRef;
-+    typedef ScfRef< XclExpDval >                XclExpDvalRef;
-+
-+    XclExpColinfoBuffer maColInfoBfr;       /// Buffer for column formatting.
-+    XclExpRowBuffer     maRowBfr;           /// Rows and cell records.
-+    XclExpArrayBuffer   maArrayBfr;         /// Buffer for ARRAY records.
-+    XclExpShrfmlaBuffer maShrfmlaBfr;       /// Buffer for SHRFMLA records.
-+    XclExpTableopBuffer maTableopBfr;       /// Buffer for TABLEOP records.
-+    XclExpDefrowhRef    mxDefrowheight;     /// DEFROWHEIGHT record for default row format.
-+    XclExpRecordRef     mxGuts;             /// GUTS record for outline areas.
-+    XclExpNoteListRef   mxNoteList;         /// List of NOTE records.
-+    XclExpMergedcellsRef mxMergedcells;     /// MERGEDCELLS record for merged cell ranges.
-+    XclExpHyperlinkRef  mxHyperlinkList;    /// List of HLINK records.
-+    XclExpDvalRef       mxDval;             /// Data validation with DVAL and DV records.
-+};
-+
-+#endif
-+
-diff --git sc/source/filter/inc/inc/xladdress.hxx sc/source/filter/inc/inc/xladdress.hxx
-new file mode 100644
-index 0000000..79ccc28
---- /dev/null
-+++ sc/source/filter/inc/inc/xladdress.hxx
-@@ -0,0 +1,200 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: xladdress.hxx,v $
-+ * $Revision: 1.6 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SC_XLADDRESS_HXX
-+#define SC_XLADDRESS_HXX
-+
-+#include <vector>
-+#include "address.hxx"
-+
-+class ScRangeList;
-+class XclImpStream;
-+class XclExpStream;
-+
-+// ============================================================================
-+
-+/** A 2D cell address struct with Excel column and row indexes. */
-+struct XclAddress
-+{
-+    sal_uInt16          mnCol;
-+    sal_uInt32          mnRow;
-+
-+    inline explicit     XclAddress( ScAddress::Uninitialized ) {}
-+    inline explicit     XclAddress() : mnCol( 0 ), mnRow( 0 ) {}
-+    inline explicit     XclAddress( sal_uInt16 nCol, sal_uInt32 nRow ) : mnCol( nCol ), mnRow( nRow ) {}
-+
-+    inline void         Set( sal_uInt16 nCol, sal_uInt32 nRow ) { mnCol = nCol; mnRow = nRow; }
-+
-+    void                Read( XclImpStream& rStrm, bool bCol16Bit = true );
-+    void                Write( XclExpStream& rStrm, bool bCol16Bit = true ) const;
-+};
-+
-+inline bool operator==( const XclAddress& rL, const XclAddress& rR )
-+{
-+    return (rL.mnCol == rR.mnCol) && (rL.mnRow == rR.mnRow);
-+}
-+
-+inline bool operator<( const XclAddress& rL, const XclAddress& rR )
-+{
-+    return (rL.mnCol < rR.mnCol) || ((rL.mnCol == rR.mnCol) && (rL.mnRow < rR.mnRow));
-+}
-+
-+inline XclImpStream& operator>>( XclImpStream& rStrm, XclAddress& rXclPos )
-+{
-+    rXclPos.Read( rStrm );
-+    return rStrm;
-+}
-+
-+inline XclExpStream& operator<<( XclExpStream& rStrm, const XclAddress& rXclPos )
-+{
-+    rXclPos.Write( rStrm );
-+    return rStrm;
-+}
-+
-+// ----------------------------------------------------------------------------
-+
-+/** A 2D cell range address struct with Excel column and row indexes. */
-+struct XclRange
-+{
-+    XclAddress          maFirst;
-+    XclAddress          maLast;
-+
-+    inline explicit     XclRange( ScAddress::Uninitialized e ) : maFirst( e ), maLast( e ) {}
-+    inline explicit     XclRange() {}
-+    inline explicit     XclRange( const XclAddress& rPos ) : maFirst( rPos ), maLast( rPos ) {}
-+    inline explicit     XclRange( const XclAddress& rFirst, const XclAddress& rLast ) : maFirst( rFirst ), maLast( rLast ) {}
-+    inline explicit     XclRange( sal_uInt16 nCol1, sal_uInt32 nRow1, sal_uInt16 nCol2, sal_uInt32 nRow2 ) :
-+                            maFirst( nCol1, nRow1 ), maLast( nCol2, nRow2 ) {}
-+
-+    inline void         Set( const XclAddress& rFirst, const XclAddress& rLast )
-+                            { maFirst = rFirst; maLast = rLast; }
-+    inline void         Set( sal_uInt16 nCol1, sal_uInt32 nRow1, sal_uInt16 nCol2, sal_uInt32 nRow2 )
-+                            { maFirst.Set( nCol1, nRow1 ); maLast.Set( nCol2, nRow2 ); }
-+
-+    inline sal_uInt16   GetColCount() const { return maLast.mnCol - maFirst.mnCol + 1; }
-+    inline sal_uInt32   GetRowCount() const { return maLast.mnRow - maFirst.mnRow + 1; }
-+    bool                Contains( const XclAddress& rPos ) const;
-+
-+    void                Read( XclImpStream& rStrm, bool bCol16Bit = true );
-+    void                Write( XclExpStream& rStrm, bool bCol16Bit = true ) const;
-+};
-+
-+inline bool operator==( const XclRange& rL, const XclRange& rR )
-+{
-+    return (rL.maFirst == rR.maFirst) && (rL.maLast == rR.maLast);
-+}
-+
-+inline bool operator<( const XclRange& rL, const XclRange& rR )
-+{
-+    return (rL.maFirst < rR.maFirst) || ((rL.maFirst == rR.maFirst) && (rL.maLast < rR.maLast));
-+}
-+
-+inline XclImpStream& operator>>( XclImpStream& rStrm, XclRange& rXclRange )
-+{
-+    rXclRange.Read( rStrm );
-+    return rStrm;
-+}
-+
-+inline XclExpStream& operator<<( XclExpStream& rStrm, const XclRange& rXclRange )
-+{
-+    rXclRange.Write( rStrm );
-+    return rStrm;
-+}
-+
-+// ----------------------------------------------------------------------------
-+
-+/** A 2D cell range address list with Excel column and row indexes. */
-+class XclRangeList : public ::std::vector< XclRange >
-+{
-+public:
-+    inline explicit     XclRangeList() {}
-+
-+    XclRange            GetEnclosingRange() const;
-+
-+    void                Read( XclImpStream& rStrm, bool bCol16Bit = true );
-+    void                Write( XclExpStream& rStrm, bool bCol16Bit = true ) const;
-+    void                WriteSubList( XclExpStream& rStrm,
-+                            size_t nBegin, size_t nCount, bool bCol16Bit = true ) const;
-+};
-+
-+inline XclImpStream& operator>>( XclImpStream& rStrm, XclRangeList& rXclRanges )
-+{
-+    rXclRanges.Read( rStrm );
-+    return rStrm;
-+}
-+
-+inline XclExpStream& operator<<( XclExpStream& rStrm, const XclRangeList& rXclRanges )
-+{
-+    rXclRanges.Write( rStrm );
-+    return rStrm;
-+}
-+
-+// ============================================================================
-+
-+class XclTracer;
-+
-+/** Base class for import/export address converters. */
-+class XclAddressConverterBase
-+{
-+public:
-+    explicit            XclAddressConverterBase( XclTracer& rTracer, const ScAddress& rMaxPos );
-+    virtual             ~XclAddressConverterBase();
-+
-+    /** Returns whether the "some columns have been cut" warning box should be shown. */
-+    inline bool         IsColTruncated() const { return mbColTrunc; }
-+    /** Returns whether the "some rows have been cut" warning box should be shown. */
-+    inline bool         IsRowTruncated() const { return mbRowTrunc; }
-+    /** Returns whether the "some sheets have been cut" warning box should be shown. */
-+    inline bool         IsTabTruncated() const { return mbTabTrunc; }
-+
-+    // ------------------------------------------------------------------------
-+
-+    /** Checks if the passed sheet index is valid.
-+        @param nScTab  The sheet index to check.
-+        @param bWarn  true = Sets the internal flag that produces a warning box
-+            after loading/saving the file, if the sheet index is not valid.
-+        @return  true = Sheet index in nScTab is valid. */
-+    bool                CheckScTab( SCTAB nScTab, bool bWarn );
-+
-+    // ------------------------------------------------------------------------
-+protected:
-+    XclTracer&          mrTracer;       /// Tracer for invalid addresses.
-+    ScAddress           maMaxPos;       /// Default maximum position.
-+    sal_uInt16          mnMaxCol;       /// Maximum column index, as 16-bit value.
-+    sal_uInt32          mnMaxRow;       /// Maximum row index
-+    bool                mbColTrunc;     /// Flag for "columns truncated" warning box.
-+    bool                mbRowTrunc;     /// Flag for "rows truncated" warning box.
-+    bool                mbTabTrunc;     /// Flag for "tables truncated" warning box.
-+};
-+
-+// ============================================================================
-+
-+#endif
-+
-diff --git sc/source/filter/inc/inc/xlconst.hxx sc/source/filter/inc/inc/xlconst.hxx
-new file mode 100644
-index 0000000..bec17d3
---- /dev/null
-+++ sc/source/filter/inc/inc/xlconst.hxx
-@@ -0,0 +1,236 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: xlconst.hxx,v $
-+ * $Revision: 1.29 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SC_XLCONST_HXX
-+#define SC_XLCONST_HXX
-+
-+#include "address.hxx"
-+
-+// Common =====================================================================
-+
-+// BIFF versions --------------------------------------------------------------
-+
-+/** An enumeration for all Excel file format types (BIFF types). */
-+enum XclBiff
-+{
-+    EXC_BIFF2 = 0,              /// MS Excel 2.1
-+    EXC_BIFF3,                  /// MS Excel 3.0
-+    EXC_BIFF4,                  /// MS Excel 4.0
-+    EXC_BIFF5,                  /// MS Excel 5.0, MS Excel 7.0 (95)
-+    EXC_BIFF8,                  /// MS Excel 8.0 (97), 9.0 (2000), 10.0 (XP), 11.0 (2003)
-+    EXC_BIFF_UNKNOWN            /// Unknown BIFF version.
-+};
-+
-+/** An enumeration for all Excel output format types. */
-+enum XclOutput
-+{
-+    EXC_OUTPUT_BINARY,          /// MS Excel binary .xls
-+    EXC_OUTPUT_XML_2007,        /// MS Excel 2007 .xlsx
-+};
-+
-+// Excel sheet dimensions -----------------------------------------------------
-+
-+const SCCOL EXC_MAXCOL2                     = 255;
-+const SCROW EXC_MAXROW2                     = 16383;
-+const SCTAB EXC_MAXTAB2                     = 0;
-+
-+const SCCOL EXC_MAXCOL3                     = EXC_MAXCOL2;
-+const SCROW EXC_MAXROW3                     = EXC_MAXROW2;
-+const SCTAB EXC_MAXTAB3                     = EXC_MAXTAB2;
-+
-+const SCCOL EXC_MAXCOL4                     = EXC_MAXCOL3;
-+const SCROW EXC_MAXROW4                     = EXC_MAXROW3;
-+const SCTAB EXC_MAXTAB4                     = 32767;
-+
-+const SCCOL EXC_MAXCOL5                     = EXC_MAXCOL4;
-+const SCROW EXC_MAXROW5                     = EXC_MAXROW4;
-+const SCTAB EXC_MAXTAB5                     = EXC_MAXTAB4;
-+
-+const SCCOL EXC_MAXCOL8                     = EXC_MAXCOL5;
-+const SCROW EXC_MAXROW8                     = MAXROWCOUNT_DEFINE;
-+const SCTAB EXC_MAXTAB8                     = EXC_MAXTAB5;
-+
-+const sal_uInt16 EXC_NOTAB                  = SAL_MAX_UINT16;   /// An invalid Excel sheet index, for common use.
-+const SCTAB SCTAB_INVALID                   = SCTAB_MAX;        /// An invalid Calc sheet index, for common use.
-+const SCTAB SCTAB_GLOBAL                    = SCTAB_MAX;        /// A Calc sheet index for the workbook globals.
-+
-+// Storage/stream names -------------------------------------------------------
-+
-+#define EXC_STORAGE_OLE_LINKED              CREATE_STRING( "LNK" )
-+#define EXC_STORAGE_OLE_EMBEDDED            CREATE_STRING( "MBD" )
-+#define EXC_STORAGE_VBA_PROJECT             CREATE_STRING( "_VBA_PROJECT_CUR" )
-+#define EXC_STORAGE_VBA                     CREATE_STRING( "VBA" )
-+
-+#define EXC_STREAM_BOOK                     CREATE_STRING( "Book" )
-+#define EXC_STREAM_WORKBOOK                 CREATE_STRING( "Workbook" )
-+#define EXC_STREAM_CTLS                     CREATE_STRING( "Ctls" )
-+
-+// Encoded URLs ---------------------------------------------------------------
-+
-+const sal_Unicode EXC_URLSTART_ENCODED      = '\x01';   /// Encoded URL.
-+const sal_Unicode EXC_URLSTART_SELF         = '\x02';   /// Reference to own workbook.
-+const sal_Unicode EXC_URLSTART_SELFENCODED  = '\x03';   /// Encoded self reference.
-+const sal_Unicode EXC_URLSTART_OWNDOC       = '\x04';   /// Reference to own workbook (BIFF5/BIFF7).
-+
-+const sal_Unicode EXC_URL_DOSDRIVE          = '\x01';   /// DOS drive letter or UNC server name.
-+const sal_Unicode EXC_URL_DRIVEROOT         = '\x02';   /// Root directory of current drive.
-+const sal_Unicode EXC_URL_SUBDIR            = '\x03';   /// Directory name delimiter.
-+const sal_Unicode EXC_URL_PARENTDIR         = '\x04';   /// Parent directory.
-+const sal_Unicode EXC_URL_RAW               = '\x05';   /// Unencoded URL.
-+const sal_Unicode EXC_URL_SHEETNAME         = '\x09';   /// Sheet name starts here (BIFF4).
-+
-+const sal_Unicode EXC_DDE_DELIM             = '\x03';   /// DDE application-topic delimiter
-+
-+// Error codes ----------------------------------------------------------------
-+
-+const sal_uInt8 EXC_ERR_NULL                = 0x00;
-+const sal_uInt8 EXC_ERR_DIV0                = 0x07;
-+const sal_uInt8 EXC_ERR_VALUE               = 0x0F;
-+const sal_uInt8 EXC_ERR_REF                 = 0x17;
-+const sal_uInt8 EXC_ERR_NAME                = 0x1D;
-+const sal_uInt8 EXC_ERR_NUM                 = 0x24;
-+const sal_uInt8 EXC_ERR_NA                  = 0x2A;
-+
-+// Cached values list (EXTERNNAME, ptgArray, ...) -----------------------------
-+
-+const sal_uInt8 EXC_CACHEDVAL_EMPTY         = 0x00;
-+const sal_uInt8 EXC_CACHEDVAL_DOUBLE        = 0x01;
-+const sal_uInt8 EXC_CACHEDVAL_STRING        = 0x02;
-+const sal_uInt8 EXC_CACHEDVAL_BOOL          = 0x04;
-+const sal_uInt8 EXC_CACHEDVAL_ERROR         = 0x10;
-+
-+// RK values ------------------------------------------------------------------
-+
-+const sal_Int32 EXC_RK_100FLAG              = 0x00000001;
-+const sal_Int32 EXC_RK_INTFLAG              = 0x00000002;
-+const sal_Int32 EXC_RK_VALUEMASK            = 0xFFFFFFFC;
-+
-+const sal_Int32 EXC_RK_DBL                  = 0x00000000;
-+const sal_Int32 EXC_RK_DBL100               = EXC_RK_100FLAG;
-+const sal_Int32 EXC_RK_INT                  = EXC_RK_INTFLAG;
-+const sal_Int32 EXC_RK_INT100               = EXC_RK_100FLAG | EXC_RK_INTFLAG;
-+
-+// Measures -------------------------------------------------------------------
-+
-+const sal_Int32 EXC_POINTS_PER_INCH         = 72;
-+const sal_Int32 EXC_TWIPS_PER_INCH          = EXC_POINTS_PER_INCH * 20;
-+
-+const sal_uInt8 EXC_ORIENT_NONE             = 0;        /// Text orientation: not rotated.
-+const sal_uInt8 EXC_ORIENT_STACKED          = 1;        /// Text orientation: vertically stacked.
-+const sal_uInt8 EXC_ORIENT_90CCW            = 2;        /// Text orientation: 90 deg counterclockwise.
-+const sal_uInt8 EXC_ORIENT_90CW             = 3;        /// Text orientation: 90 deg clockwise.
-+
-+const sal_uInt8 EXC_ROT_NONE                = 0;        /// Text rotation: not rotated.
-+const sal_uInt8 EXC_ROT_90CCW               = 90;       /// Text rotation: 90 deg counterclockwise.
-+const sal_uInt8 EXC_ROT_90CW                = 180;      /// Text rotation: 90 deg clockwise.
-+const sal_uInt8 EXC_ROT_STACKED             = 255;      /// Text rotation: vertically stacked.
-+
-+// Records (ordered by lowest record ID) ======================================
-+
-+// (0x0009, 0x0209, 0x0409, 0x0809) BOF ---------------------------------------
-+
-+const sal_uInt16 EXC_ID2_BOF                = 0x0009;
-+const sal_uInt16 EXC_ID3_BOF                = 0x0209;
-+const sal_uInt16 EXC_ID4_BOF                = 0x0409;
-+const sal_uInt16 EXC_ID5_BOF                = 0x0809;
-+
-+const sal_uInt16 EXC_BOF_BIFF2              = 0x0200;
-+const sal_uInt16 EXC_BOF_BIFF3              = 0x0300;
-+const sal_uInt16 EXC_BOF_BIFF4              = 0x0400;
-+const sal_uInt16 EXC_BOF_BIFF5              = 0x0500;
-+const sal_uInt16 EXC_BOF_BIFF8              = 0x0600;
-+
-+const sal_uInt16 EXC_BOF_GLOBALS            = 0x0005;   /// BIFF5-BIFF8 workbook globals.
-+const sal_uInt16 EXC_BOF_VBMODULE           = 0x0006;   /// BIFF5-BIFF8 Visual BASIC module.
-+const sal_uInt16 EXC_BOF_SHEET              = 0x0010;   /// Regular worksheet.
-+const sal_uInt16 EXC_BOF_CHART              = 0x0020;   /// Chart sheet.
-+const sal_uInt16 EXC_BOF_MACROSHEET         = 0x0040;   /// Macro sheet.
-+const sal_uInt16 EXC_BOF_WORKSPACE          = 0x0100;   /// Workspace.
-+const sal_uInt16 EXC_BOF_UNKNOWN            = 0xFFFF;   /// Internal use only.
-+
-+// (0x000A) EOF ---------------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_EOF                 = 0x000A;
-+
-+// (0x0012) PROTECT -----------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_PROTECT             = 0x0012;
-+
-+// (0x0013) PASSWORD ----------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_PASSWORD            = 0x0013;
-+
-+// (0x0019) WINDOWPROTECT -----------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_WINDOWPROTECT       = 0x0019;
-+
-+// (0x0042) CODEPAGE ----------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_CODEPAGE            = 0x0042;
-+
-+// (0x0081) WSBOOL ------------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_WSBOOL              = 0x0081;
-+
-+const sal_uInt16 EXC_WSBOOL_ROWBELOW        = 0x0040;
-+const sal_uInt16 EXC_WSBOOL_COLBELOW        = 0x0080;
-+const sal_uInt16 EXC_WSBOOL_FITTOPAGE       = 0x0100;
-+
-+const sal_uInt16 EXC_WSBOOL_DEFAULTFLAGS    = 0x04C1;
-+
-+// (0x008C) COUNTRY -----------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_COUNTRY             = 0x008C;
-+
-+// (0x009B) FILTERMODE --------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_FILTERMODE          = 0x009B;
-+
-+// (0x009D) AUTOFILTERINFO ----------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_AUTOFILTERINFO      = 0x009D;
-+
-+// (0x009E) AUTOFILTER --------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_AUTOFILTER          = 0x009E;
-+
-+// (0x0160) USESELFS ----------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_USESELFS            = 0x0160;
-+
-+// (0x01AA,0x01AB) USERSVIEWBEGIN, USERSVIEWEND -------------------------------
-+
-+const sal_uInt16 EXC_ID_USERSVIEWBEGIN      = 0x01AA;
-+const sal_uInt16 EXC_ID_USERSVIEWEND        = 0x01AB;
-+
-+// ============================================================================
-+
-+#endif
-+
-diff --git sc/source/filter/inc/inc/xlformula.hxx sc/source/filter/inc/inc/xlformula.hxx
-new file mode 100644
-index 0000000..d8ffa5a
---- /dev/null
-+++ sc/source/filter/inc/inc/xlformula.hxx
-@@ -0,0 +1,477 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: xlformula.hxx,v $
-+ * $Revision: 1.14 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SC_XLFORMULA_HXX
-+#define SC_XLFORMULA_HXX
-+
-+#include <map>
-+#include "address.hxx"
-+#include "formula/opcode.hxx"
-+#include "ftools.hxx"
-+
-+// Constants ==================================================================
-+
-+const size_t EXC_TOKARR_MAXLEN              = 4096;     /// Maximum size of a token array.
-+
-+// Token class flags ----------------------------------------------------------
-+
-+const sal_uInt8 EXC_TOKCLASS_MASK           = 0x60;
-+const sal_uInt8 EXC_TOKCLASS_INOP_FLAG      = 0x80;     /// Used in operators (internal flag).
-+
-+const sal_uInt8 EXC_TOKCLASS_NONE           = 0x00;     /// 00-1F: Base tokens.
-+const sal_uInt8 EXC_TOKCLASS_REF            = 0x20;     /// 20-3F: Reference class tokens.
-+const sal_uInt8 EXC_TOKCLASS_VAL            = 0x40;     /// 40-5F: Value class tokens.
-+const sal_uInt8 EXC_TOKCLASS_ARR            = 0x60;     /// 60-7F: Array class tokens.
-+
-+const sal_uInt8 EXC_TOKCLASS_ANY_IN_REFOP   = EXC_TOKCLASS_INOP_FLAG | EXC_TOKCLASS_NONE;
-+const sal_uInt8 EXC_TOKCLASS_REF_IN_VALOP   = EXC_TOKCLASS_INOP_FLAG | EXC_TOKCLASS_REF;
-+const sal_uInt8 EXC_TOKCLASS_VAL_IN_VALOP   = EXC_TOKCLASS_INOP_FLAG | EXC_TOKCLASS_VAL;
-+const sal_uInt8 EXC_TOKCLASS_ARR_IN_VALOP   = EXC_TOKCLASS_INOP_FLAG | EXC_TOKCLASS_ARR;
-+
-+// Base tokens ----------------------------------------------------------------
-+
-+const sal_uInt8 EXC_TOKID_MASK              = 0x1F;
-+
-+const sal_uInt8 EXC_TOKID_NONE              = 0x00;     /// Placeholder for invalid token id.
-+const sal_uInt8 EXC_TOKID_EXP               = 0x01;     /// Array or shared formula reference.
-+const sal_uInt8 EXC_TOKID_TBL               = 0x02;     /// Multiple operation reference.
-+const sal_uInt8 EXC_TOKID_ADD               = 0x03;     /// Addition operator.
-+const sal_uInt8 EXC_TOKID_SUB               = 0x04;     /// Subtraction operator.
-+const sal_uInt8 EXC_TOKID_MUL               = 0x05;     /// Multiplication operator.
-+const sal_uInt8 EXC_TOKID_DIV               = 0x06;     /// Division operator.
-+const sal_uInt8 EXC_TOKID_POWER             = 0x07;     /// Power operator.
-+const sal_uInt8 EXC_TOKID_CONCAT            = 0x08;     /// String concatenation operator.
-+const sal_uInt8 EXC_TOKID_LT                = 0x09;     /// Less than operator.
-+const sal_uInt8 EXC_TOKID_LE                = 0x0A;     /// Less than or equal operator.
-+const sal_uInt8 EXC_TOKID_EQ                = 0x0B;     /// Equal operator.
-+const sal_uInt8 EXC_TOKID_GE                = 0x0C;     /// Greater than or equal operator.
-+const sal_uInt8 EXC_TOKID_GT                = 0x0D;     /// Greater than operator.
-+const sal_uInt8 EXC_TOKID_NE                = 0x0E;     /// Not equal operator.
-+const sal_uInt8 EXC_TOKID_ISECT             = 0x0F;     /// Intersection operator.
-+const sal_uInt8 EXC_TOKID_LIST              = 0x10;     /// List operator.
-+const sal_uInt8 EXC_TOKID_RANGE             = 0x11;     /// Range operator.
-+const sal_uInt8 EXC_TOKID_UPLUS             = 0x12;     /// Unary plus.
-+const sal_uInt8 EXC_TOKID_UMINUS            = 0x13;     /// Unary minus.
-+const sal_uInt8 EXC_TOKID_PERCENT           = 0x14;     /// Percent sign.
-+const sal_uInt8 EXC_TOKID_PAREN             = 0x15;     /// Parentheses.
-+const sal_uInt8 EXC_TOKID_MISSARG           = 0x16;     /// Missing argument.
-+const sal_uInt8 EXC_TOKID_STR               = 0x17;     /// String constant.
-+const sal_uInt8 EXC_TOKID_NLR               = 0x18;     /// Natural language reference (NLR).
-+const sal_uInt8 EXC_TOKID_ATTR              = 0x19;     /// Special attribute.
-+const sal_uInt8 EXC_TOKID_SHEET             = 0x1A;     /// Start of a sheet reference (BIFF2-BIFF4).
-+const sal_uInt8 EXC_TOKID_ENDSHEET          = 0x1B;     /// End of a sheet reference (BIFF2-BIFF4).
-+const sal_uInt8 EXC_TOKID_ERR               = 0x1C;     /// Error constant.
-+const sal_uInt8 EXC_TOKID_BOOL              = 0x1D;     /// Boolean constant.
-+const sal_uInt8 EXC_TOKID_INT               = 0x1E;     /// Integer constant.
-+const sal_uInt8 EXC_TOKID_NUM               = 0x1F;     /// Floating-point constant.
-+
-+// Base IDs of classified tokens ----------------------------------------------
-+
-+const sal_uInt8 EXC_TOKID_ARRAY             = 0x00;     /// Array constant.
-+const sal_uInt8 EXC_TOKID_FUNC              = 0x01;     /// Function, fixed number of arguments.
-+const sal_uInt8 EXC_TOKID_FUNCVAR           = 0x02;     /// Function, variable number of arguments.
-+const sal_uInt8 EXC_TOKID_NAME              = 0x03;     /// Defined name.
-+const sal_uInt8 EXC_TOKID_REF               = 0x04;     /// 2D cell reference.
-+const sal_uInt8 EXC_TOKID_AREA              = 0x05;     /// 2D area reference.
-+const sal_uInt8 EXC_TOKID_MEMAREA           = 0x06;     /// Constant reference subexpression.
-+const sal_uInt8 EXC_TOKID_MEMERR            = 0x07;     /// Deleted reference subexpression.
-+const sal_uInt8 EXC_TOKID_MEMNOMEM          = 0x08;     /// Constant reference subexpression without result.
-+const sal_uInt8 EXC_TOKID_MEMFUNC           = 0x09;     /// Variable reference subexpression.
-+const sal_uInt8 EXC_TOKID_REFERR            = 0x0A;     /// Deleted 2D cell reference.
-+const sal_uInt8 EXC_TOKID_AREAERR           = 0x0B;     /// Deleted 2D area reference.
-+const sal_uInt8 EXC_TOKID_REFN              = 0x0C;     /// Relative 2D cell reference (in names).
-+const sal_uInt8 EXC_TOKID_AREAN             = 0x0D;     /// Relative 2D area reference (in names).
-+const sal_uInt8 EXC_TOKID_MEMAREAN          = 0x0E;     /// Reference subexpression (in names).
-+const sal_uInt8 EXC_TOKID_MEMNOMEMN         = 0x0F;     /// Reference subexpression (in names) without result.
-+const sal_uInt8 EXC_TOKID_FUNCCE            = 0x18;
-+const sal_uInt8 EXC_TOKID_NAMEX             = 0x19;     /// External reference.
-+const sal_uInt8 EXC_TOKID_REF3D             = 0x1A;     /// 3D cell reference.
-+const sal_uInt8 EXC_TOKID_AREA3D            = 0x1B;     /// 3D area reference.
-+const sal_uInt8 EXC_TOKID_REFERR3D          = 0x1C;     /// Deleted 3D cell reference.
-+const sal_uInt8 EXC_TOKID_AREAERR3D         = 0x1D;     /// Deleted 3D area reference
-+
-+// specific token constants ---------------------------------------------------
-+
-+const sal_uInt16 EXC_TOK_STR_MAXLEN         = 255;      /// Maximum string length of a tStr token.
-+
-+const sal_uInt8 EXC_TOK_BOOL_FALSE          = 0;        /// FALSE value of a tBool token.
-+const sal_uInt8 EXC_TOK_BOOL_TRUE           = 1;        /// TRUE value of a tBool token.
-+
-+const sal_uInt8 EXC_TOK_ATTR_VOLATILE       = 0x01;     /// Volatile function.
-+const sal_uInt8 EXC_TOK_ATTR_IF             = 0x02;     /// Start of true condition in IF function.
-+const sal_uInt8 EXC_TOK_ATTR_CHOOSE         = 0x04;     /// Jump array of CHOOSE function.
-+const sal_uInt8 EXC_TOK_ATTR_GOTO           = 0x08;     /// Jump to token.
-+const sal_uInt8 EXC_TOK_ATTR_SUM            = 0x10;     /// SUM function with one parameter.
-+const sal_uInt8 EXC_TOK_ATTR_ASSIGN         = 0x20;     /// BASIC style assignment.
-+const sal_uInt8 EXC_TOK_ATTR_SPACE          = 0x40;     /// Spaces in formula representation.
-+
-+const sal_uInt8 EXC_TOK_ATTR_SPACE_SP       = 0x00;     /// Spaces before next token.
-+const sal_uInt8 EXC_TOK_ATTR_SPACE_BR       = 0x01;     /// Line breaks before next token.
-+const sal_uInt8 EXC_TOK_ATTR_SPACE_SP_OPEN  = 0x02;     /// Spaces before opening parenthesis.
-+const sal_uInt8 EXC_TOK_ATTR_SPACE_BR_OPEN  = 0x03;     /// Line breaks before opening parenthesis.
-+const sal_uInt8 EXC_TOK_ATTR_SPACE_SP_CLOSE = 0x04;     /// Spaces before closing parenthesis.
-+const sal_uInt8 EXC_TOK_ATTR_SPACE_BR_CLOSE = 0x05;     /// Line breaks before closing parenthesis.
-+const sal_uInt8 EXC_TOK_ATTR_SPACE_SP_PRE   = 0x06;     /// Spaces before formula (BIFF3).
-+
-+const sal_uInt16 EXC_TOK_FUNCVAR_CMD        = 0x8000;   /// Macro command.
-+const sal_uInt16 EXC_TOK_FUNCVAR_INDEXMASK  = 0x7FFF;   /// Mask for function/command index.
-+const sal_uInt8 EXC_TOK_FUNCVAR_PROMPT      = 0x80;     /// User prompt for macro commands.
-+const sal_uInt8 EXC_TOK_FUNCVAR_COUNTMASK   = 0x7F;     /// Mask for parameter count.
-+
-+const sal_uInt16 EXC_TOK_REF_COLREL         = 0x4000;   /// True = Column is relative.
-+const sal_uInt32 EXC_TOK_REF_ROWREL         = 0x8000;   /// True = Row is relative.
-+
-+const sal_uInt8 EXC_TOK_NLR_ERR             = 0x01;     /// NLR: Invalid/deleted.
-+const sal_uInt8 EXC_TOK_NLR_ROWR            = 0x02;     /// NLR: Row index.
-+const sal_uInt8 EXC_TOK_NLR_COLR            = 0x03;     /// NLR: Column index.
-+const sal_uInt8 EXC_TOK_NLR_ROWV            = 0x06;     /// NLR: Value in row.
-+const sal_uInt8 EXC_TOK_NLR_COLV            = 0x07;     /// NLR: Value in column.
-+const sal_uInt8 EXC_TOK_NLR_RANGE           = 0x0A;     /// NLR: Range.
-+const sal_uInt8 EXC_TOK_NLR_SRANGE          = 0x0B;     /// Stacked NLR: Range.
-+const sal_uInt8 EXC_TOK_NLR_SROWR           = 0x0C;     /// Stacked NLR: Row index.
-+const sal_uInt8 EXC_TOK_NLR_SCOLR           = 0x0D;     /// Stacked NLR: Column index.
-+const sal_uInt8 EXC_TOK_NLR_SROWV           = 0x0E;     /// Stacked NLR: Value in row.
-+const sal_uInt8 EXC_TOK_NLR_SCOLV           = 0x0F;     /// Stacked NLR: Value in column.
-+const sal_uInt8 EXC_TOK_NLR_RANGEERR        = 0x10;     /// NLR: Invalid/deleted range.
-+const sal_uInt8 EXC_TOK_NLR_SXNAME          = 0x1D;     /// NLR: Pivot table name.
-+const sal_uInt16 EXC_TOK_NLR_REL            = 0x8000;   /// True = Natural language ref is relative.
-+
-+const sal_uInt32 EXC_TOK_NLR_ADDREL         = 0x80000000;   /// NLR relative (in appended data).
-+const sal_uInt32 EXC_TOK_NLR_ADDMASK        = 0x3FFFFFFF;   /// Mask for number of appended ranges.
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Type of a formula. */
-+enum XclFormulaType
-+{
-+    EXC_FMLATYPE_CELL,          /// Simple cell formula, also used in change tracking.
-+    EXC_FMLATYPE_MATRIX,        /// Matrix (array) formula.
-+    EXC_FMLATYPE_SHARED,        /// Shared formula.
-+    EXC_FMLATYPE_CONDFMT,       /// Conditional format.
-+    EXC_FMLATYPE_DATAVAL,       /// Data validation.
-+    EXC_FMLATYPE_NAME,          /// Defined name.
-+    EXC_FMLATYPE_CHART,         /// Chart source ranges.
-+    EXC_FMLATYPE_CONTROL,       /// Spreadsheet links in form controls.
-+    EXC_FMLATYPE_WQUERY,        /// Web query source range.
-+    EXC_FMLATYPE_LISTVAL        /// List (cell range) validation.
-+};
-+
-+// Function data ==============================================================
-+
-+const sal_uInt8 EXC_FUNC_MAXPARAM           = 30;       /// Maximum parameter count.
-+
-+const sal_uInt8 EXC_FUNC_PAR_CALCONLY       = 0xFD;     /// Placeholder for a parameter existing in Calc, but not in Excel.
-+const sal_uInt8 EXC_FUNC_PAR_EXCELONLY      = 0xFE;     /// Placeholder for a parameter existing in Excel, but not in Calc.
-+const sal_uInt8 EXC_FUNC_PAR_INVALID        = 0xFF;     /// Placeholder for an invalid token class.
-+
-+const sal_uInt8 EXC_FUNCINFO_CLASSCOUNT     = 5;        /// Number of token class entries.
-+
-+const sal_uInt8 EXC_FUNCFLAG_VOLATILE       = 0x01;     /// Result is volatile (e.g. NOW() function).
-+const sal_uInt8 EXC_FUNCFLAG_IMPORTONLY     = 0x02;     /// Only used in import filter.
-+const sal_uInt8 EXC_FUNCFLAG_EXPORTONLY     = 0x04;     /// Only used in export filter.
-+
-+// selected function IDs
-+const sal_uInt16 EXC_FUNCID_IF              = 1;
-+const sal_uInt16 EXC_FUNCID_SUM             = 4;
-+const sal_uInt16 EXC_FUNCID_AND             = 36;
-+const sal_uInt16 EXC_FUNCID_OR              = 37;
-+const sal_uInt16 EXC_FUNCID_CHOOSE          = 100;
-+const sal_uInt16 EXC_FUNCID_EXTERNCALL      = 255;
-+
-+/** Represents information for a spreadsheet function for import and export.
-+
-+    The member mpnParamClass contains an array of token classes for each
-+    parameter of the function. The last existing (non-null) value in this array
-+    is used for all following parameters used in a function. Additionally to
-+    the three actual token classes, this array may contain the special values
-+    EXC_FUNC_PAR_CALCONLY, EXC_FUNC_PAR_EXCELONLY, and EXC_FUNC_PAR_INVALID.
-+    The former two specify parameters only existing in one of the applications.
-+    EXC_FUNC_PAR_INVALID is simply a terminator for the array to prevent that
-+    the last token class or special value is repeated for additional parameters.
-+ */
-+struct XclFunctionInfo
-+{
-+    OpCode              meOpCode;           /// Calc function opcode.
-+    sal_uInt16          mnXclFunc;          /// Excel function index.
-+    sal_uInt8           mnMinParamCount;    /// Minimum number of parameters.
-+    sal_uInt8           mnMaxParamCount;    /// Maximum number of parameters.
-+    sal_uInt8           mnRetClass;         /// Token class of the return value.
-+    sal_uInt8           mpnParamClass[ EXC_FUNCINFO_CLASSCOUNT ]; /// Expected token classes of parameters.
-+    sal_uInt8           mnFlags;            /// Additional flags.
-+    const sal_Char*     mpcMacroName;       /// Function name, if simulated by a macro call (UTF-8).
-+
-+    /** Returns true, if the function is volatile. */
-+    inline bool         IsVolatile() const { return ::get_flag( mnFlags, EXC_FUNCFLAG_VOLATILE ); }
-+    /** Returns true, if the function is simulated by a macro call. */
-+    inline bool         IsMacroFunc() const { return mpcMacroName != 0; }
-+    /** Returns the name of the external function as string. */
-+    String              GetMacroFuncName() const;
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+class XclRoot;
-+
-+/** Provides access to function info structs for all available functions. */
-+class XclFunctionProvider
-+{
-+public:
-+    explicit            XclFunctionProvider( const XclRoot& rRoot );
-+
-+    /** Returns the function data for an Excel function index, or 0 on error. */
-+    const XclFunctionInfo* GetFuncInfoFromXclFunc( sal_uInt16 nXclFunc ) const;
-+    /** Returns the function data for an Excel function simulated by a macro call, or 0 on error. */
-+    const XclFunctionInfo* GetFuncInfoFromXclMacroName( const String& rXclMacroName ) const;
-+    /** Returns the function data for a Calc opcode, or 0 on error. */
-+    const XclFunctionInfo* GetFuncInfoFromOpCode( OpCode eOpCode ) const;
-+
-+private:
-+    void                FillXclFuncMap( const XclFunctionInfo* pBeg, const XclFunctionInfo* pEnd );
-+    void                FillScFuncMap( const XclFunctionInfo* pBeg, const XclFunctionInfo* pEnd );
-+
-+private:
-+    typedef ::std::map< sal_uInt16, const XclFunctionInfo* >    XclFuncMap;
-+    typedef ::std::map< String, const XclFunctionInfo* >        XclMacroNameMap;
-+    typedef ::std::map< OpCode, const XclFunctionInfo* >        ScFuncMap;
-+
-+    XclFuncMap          maXclFuncMap;       /// Maps Excel function indexes to function data.
-+    XclMacroNameMap     maXclMacroNameMap;  /// Maps macro function names to function data.
-+    ScFuncMap           maScFuncMap;        /// Maps Calc opcodes to function data.
-+};
-+
-+// Token array ================================================================
-+
-+class XclImpStream;
-+class XclExpStream;
-+
-+/** Binary representation of an Excel token array. */
-+class XclTokenArray
-+{
-+public:
-+    /** Creates an empty token array. */
-+    explicit            XclTokenArray( bool bVolatile = false );
-+    /** Creates a token array, swaps passed token vector into own data. */
-+    explicit            XclTokenArray( ScfUInt8Vec& rTokVec, bool bVolatile = false, 
-+                                       ScfUInt8Vec* pExtensionTokens = NULL);
-+
-+    /** Returns true, if the token array is empty. */
-+    inline bool         Empty() const { return maTokVec.empty(); }
-+    /** Returns the size of the token array in bytes. */
-+    sal_uInt16          GetSize() const;
-+    /** Returns read-only access to the byte vector storing token data. */
-+    inline const sal_uInt8* GetData() const { return maTokVec.empty() ? 0 : &maTokVec.front(); }
-+    /** Returns true, if the formula contains a volatile function. */
-+    inline bool         IsVolatile() const { return mbVolatile; }
-+
-+    /** Reads the size field of the token array. */
-+    void                ReadSize( XclImpStream& rStrm );
-+    /** Reads the tokens of the token array (without size field). */
-+    void                ReadArray( XclImpStream& rStrm );
-+    /** Reads size field and the tokens. */
-+    void                Read( XclImpStream& rStrm );
-+
-+    /** Writes the size field of the token array. */
-+    void                WriteSize( XclExpStream& rStrm ) const;
-+    /** Writes the tokens of the token array (without size field). */
-+    void                WriteArray( XclExpStream& rStrm ) const;
-+    /** Writes size field and the tokens. */
-+    void                Write( XclExpStream& rStrm ) const;
-+
-+    /** Compares this token array with the passed. */
-+    bool                operator==( const XclTokenArray& rTokArr ) const;
-+
-+private:
-+    ScfUInt8Vec         maTokVec;       /// Byte vector containing token data.
-+    ScfUInt8Vec         maExtensions;   /// Byte vector of extensions (eg inline arrays)
-+    bool                mbVolatile;     /// True = Formula contains volatile function.
-+};
-+
-+typedef ScfRef< XclTokenArray > XclTokenArrayRef;
-+
-+/** Calls the Read() function at the passed token array. */
-+XclImpStream& operator>>( XclImpStream& rStrm, XclTokenArray& rTokArr );
-+/** Calls the Read() function at the passed token array. */
-+XclImpStream& operator>>( XclImpStream& rStrm, XclTokenArrayRef& rxTokArr );
-+/** Calls the Write() function at the passed token array. */
-+XclExpStream& operator<<( XclExpStream& rStrm, const XclTokenArray& rTokArr );
-+/** Calls the Write() function at the passed token array. */
-+XclExpStream& operator<<( XclExpStream& rStrm, const XclTokenArrayRef& rxTokArr );
-+
-+// ----------------------------------------------------------------------------
-+
-+namespace formula
-+{
-+    class FormulaToken;
-+}
-+class ScTokenArray;
-+
-+/** Special token array iterator for the Excel filters.
-+
-+    Iterates over a Calc token array without modifying it (therefore the
-+    iterator can be used with constant token arrays).
-+
-+    Usage: Construct a new iterator object and pass a Calc token array, or use
-+    the Init() function to assign another Calc token array. As long as the Is()
-+    function returns true, the accessor functions can be used to get the
-+    current Calc token.
-+ */
-+class XclTokenArrayIterator
-+{
-+public:
-+    explicit            XclTokenArrayIterator();
-+    explicit            XclTokenArrayIterator( const ScTokenArray& rScTokArr, bool bSkipSpaces );
-+    /** Copy constructor that allowa to change the skip-spaces mode. */
-+    explicit            XclTokenArrayIterator( const XclTokenArrayIterator& rTokArrIt, bool bSkipSpaces );
-+
-+    void                Init();
-+    void                Init( const ScTokenArray& rScTokArr, bool bSkipSpaces );
-+
-+    inline bool         Is() const { return mppScToken != 0; }
-+    inline bool         operator!() const { return !Is(); }
-+    inline const formula::FormulaToken* Get() const { return mppScToken ? *mppScToken : 0; }
-+    inline const formula::FormulaToken* operator->() const { return Get(); }
-+    inline const formula::FormulaToken& operator*() const { return *Get(); }
-+
-+    XclTokenArrayIterator& operator++();
-+
-+private:
-+    void                NextRawToken();
-+    void                SkipSpaces();
-+
-+private:
-+    const formula::FormulaToken*const* mppScTokenBeg;     /// Pointer to first token pointer of token array.
-+    const formula::FormulaToken*const* mppScTokenEnd;     /// Pointer behind last token pointer of token array.
-+    const formula::FormulaToken*const* mppScToken;        /// Pointer to current token pointer of token array.
-+    bool                mbSkipSpaces;       /// true = Skip whitespace tokens.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Contains all cell references that can be extracted from a multiple operations formula. */
-+struct XclMultipleOpRefs
-+{
-+    ScAddress           maFmlaScPos;        /// Position of the (first) formula cell.
-+    ScAddress           maColFirstScPos;
-+    ScAddress           maColRelScPos;
-+    ScAddress           maRowFirstScPos;
-+    ScAddress           maRowRelScPos;
-+    bool                mbDblRefMode;       /// true = One formula with row and column values.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** A helper with Excel specific token array functions.
-+
-+    The purpose to not add these functions to ScTokenArray is to prevent code
-+    changes in low-level Calc headers and to keep the Excel specific source
-+    code in the filter directory. Deriving from ScTokenArray is not viable
-+    because that would need expensive copy-constructions of the token arrays.
-+ */
-+class XclTokenArrayHelper
-+{
-+public:
-+    // token identifiers ------------------------------------------------------
-+
-+    /** Returns the base token ID of the passed (classified) token ID. */
-+    inline static sal_uInt8 GetBaseTokenId( sal_uInt8 nTokenId ) { return nTokenId & EXC_TOKID_MASK; }
-+    /** Returns the classified token ID from a base ID and the token class. */
-+    inline static sal_uInt8 GetTokenId( sal_uInt8 nBaseId, sal_uInt8 nTokenClass );
-+
-+    /** Returns the token class of the passed token ID. */
-+    inline static sal_uInt8 GetTokenClass( sal_uInt8 nTokenId ) { return nTokenId & EXC_TOKCLASS_MASK; }
-+    /** Changes the token class in the passed classified token ID. */
-+    inline static void ChangeTokenClass( sal_uInt8& rnTokenId, sal_uInt8 nTokenClass );
-+
-+    // strings and string lists -----------------------------------------------
-+
-+    /** Tries to extract a string from the passed token.
-+        @param rString  (out-parameter) The string contained in the token.
-+        @return  true = Passed token is a string token, rString parameter is valid. */
-+    static bool         GetTokenString( String& rString, const formula::FormulaToken& rScToken );
-+
-+    /** Parses the passed formula and tries to find a single string token, i.e. "abc".
-+        @param rString  (out-parameter) The string contained in the formula.
-+        @return  true = String token found, rString parameter is valid. */
-+    static bool         GetString( String& rString, const ScTokenArray& rScTokArr );
-+
-+    /** Parses the passed formula and tries to find a string token list, i.e. "abc";"def";"ghi".
-+        @descr  Returns the unquoted (!) strings in a single string, separated with the
-+        passed character. If a comma is specified, the function will return abc,def,ghi from
-+        the example above.
-+        @param rStringList  (out-parameter) All strings contained in the formula as list.
-+        @param cSep  List separator character.
-+        @return  true = String token list found, rString parameter is valid. */
-+    static bool         GetStringList( String& rStringList, const ScTokenArray& rScTokArr, sal_Unicode cSep );
-+
-+    /** Tries to convert a formula that consists of a single string token to a list of strings.
-+        @descr  Example: The formula ="abc\ndef\nghi" will be converted to the formula
-+        ="abc";"def";"ghi", if the LF character is specified as separator.
-+        @param rScTokArr  (in/out-parameter) The token array to modify.
-+        @param cStringSep  The separator in the source string.
-+        @param bTrimLeadingSpaces  true = remove leading spaces from each token. */
-+    static void         ConvertStringToList( ScTokenArray& rScTokArr, sal_Unicode cStringSep, bool bTrimLeadingSpaces );
-+
-+    // shared formulas --------------------------------------------------------
-+
-+    /** Tries to extract the definition of a shared formula from the passed token array.
-+        @descr  Shared formulas are stored as hidden defined names in Calc. This
-+        function looks if the passed token array consists of the reference to
-+        such a hidden defined name and returns its definition on success. */
-+    static const ScTokenArray* GetSharedFormula( const XclRoot& rRoot, const ScTokenArray& rScTokArr );
-+
-+    // multiple operations ----------------------------------------------------
-+
-+    /** Parses the passed formula and tries to extract references of a multiple operation.
-+        @descr  Requires that the formula contains a single MULTIPLE.OPERATION function call.
-+        Spaces in the formula are silently ignored.
-+        @return  true = Multiple operation found, and all references successfully extracted. */
-+    static bool         GetMultipleOpRefs( XclMultipleOpRefs& rRefs, const ScTokenArray& rScTokArr );
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+inline sal_uInt8 XclTokenArrayHelper::GetTokenId( sal_uInt8 nBaseId, sal_uInt8 nTokenClass )
-+{
-+    DBG_ASSERT( !::get_flag( nBaseId, static_cast< sal_uInt8 >( ~EXC_TOKID_MASK ) ), "XclTokenArrayHelper::GetTokenId - invalid token ID" );
-+    DBG_ASSERT( !::get_flag( nTokenClass, static_cast< sal_uInt8 >( ~EXC_TOKCLASS_MASK ) ), "XclTokenArrayHelper::GetTokenId - invalid token class" );
-+    return nBaseId | nTokenClass;
-+}
-+
-+inline void XclTokenArrayHelper::ChangeTokenClass( sal_uInt8& rnTokenId, sal_uInt8 nTokenClass )
-+{
-+    DBG_ASSERT( !::get_flag( nTokenClass, static_cast< sal_uInt8 >( ~EXC_TOKCLASS_MASK ) ), "XclTokenArrayHelper::ChangeTokenClass - invalid token class" );
-+    ::set_flag( rnTokenId, EXC_TOKCLASS_MASK, false );
-+    ::set_flag( rnTokenId, nTokenClass );
-+}
-+
-+// ============================================================================
-+
-+#endif
-+
-diff --git sc/source/filter/inc/XclExpChangeTrack.hxx sc/source/filter/inc/XclExpChangeTrack.hxx
-index 59ec5db..0c6a0d7 100644
---- sc/source/filter/inc/XclExpChangeTrack.hxx
-+++ sc/source/filter/inc/XclExpChangeTrack.hxx
-@@ -426,14 +426,14 @@ public:
- 
- inline void XclExpChTrAction::Write2DAddress( XclExpStream& rStrm, const ScAddress& rAddress ) const
- {
--	rStrm	<< (sal_uInt16)	rAddress.Row()
-+	rStrm	<< (sal_uInt32)	rAddress.Row()
- 			<< (sal_uInt16)	rAddress.Col();
- }
- 
- inline void XclExpChTrAction::Write2DRange( XclExpStream& rStrm, const ScRange& rRange ) const
- {
--	rStrm	<< (sal_uInt16)	rRange.aStart.Row()
--			<< (sal_uInt16)	rRange.aEnd.Row()
-+	rStrm	<< (sal_uInt32)	rRange.aStart.Row()
-+			<< (sal_uInt32)	rRange.aEnd.Row()
- 			<< (sal_uInt16)	rRange.aStart.Col()
- 			<< (sal_uInt16)	rRange.aEnd.Col();
- }
-diff --git sc/source/filter/excel/exctools.cxx sc/source/filter/excel/exctools.cxx
-index 4243edf..365b31a 100644
---- sc/source/filter/excel/exctools.cxx
-+++ sc/source/filter/excel/exctools.cxx
-@@ -390,7 +390,7 @@ void ExcScenario::Apply( const XclImpRoot& rRoot, const BOOL bLast )
- 	while( p )
- 	{
- 		UINT16			nCol = p->nCol;
--		UINT16			nRow = p->nRow;
-+		sal_uInt32 nRow = p->nRow;
- 		String			aVal = p->GetValue();
- 
- 		r.ApplyFlagsTab( nCol, nRow, nCol, nRow, nNewTab, SC_MF_SCENARIO );
-diff --git sc/source/filter/excel/xecontent.cxx sc/source/filter/excel/xecontent.cxx
-index 9b8986e..3117555 100644
---- sc/source/filter/excel/xecontent.cxx
-+++ sc/source/filter/excel/xecontent.cxx
-@@ -526,7 +529,7 @@ String XclExpHyperlink::BuildFileName(
- void XclExpHyperlink::WriteBody( XclExpStream& rStrm )
- {
-     sal_uInt16 nXclCol = static_cast< sal_uInt16 >( maScPos.Col() );
--    sal_uInt16 nXclRow = static_cast< sal_uInt16 >( maScPos.Row() );
-+    sal_uInt32 nXclRow = static_cast< sal_uInt32 >( maScPos.Row() );
-     rStrm   << nXclRow << nXclRow << nXclCol << nXclCol;
-     WriteEmbeddedData( rStrm );
- }
-diff --git sc/source/filter/excel/xeescher.cxx sc/source/filter/excel/xeescher.cxx
-index d3d10ff..43c6f54 100644
---- sc/source/filter/excel/xeescher.cxx
-+++ sc/source/filter/excel/xeescher.cxx
-@@ -948,14 +948,14 @@ void XclExpNote::WriteXml( sal_Int32 nAuthorId, XclExpXmlStream& rStrm )
-             FSEND );
-     rComments->startElement( XML_text, FSEND );
-     // OOXTODO: phoneticPr, rPh, r
--#if 0
--    rComments->startElement( XML_t, FSEND );
--    rComments->writeEscaped( XclXmlUtils::ToOUString( maOrigNoteText ) );
--    rComments->endElement ( XML_t );
--#else
-     if( mpNoteContents.is() )
-         mpNoteContents->WriteXml( rStrm );
--#endif
-+    else
-+    {
-+        rComments->startElement( XML_t, FSEND );
-+        rComments->writeEscaped( XclXmlUtils::ToOUString( maOrigNoteText ) );
-+        rComments->endElement ( XML_t );
-+    }
-     rComments->endElement( XML_text );
-     rComments->endElement( XML_comment );
- }
-diff --git a/sc/source/filter/excel/xeformula.cxx sc/source/filter/excel/xeformula.cxx
-index 849ac08..69dd726 100644
---- sc/source/filter/excel/xeformula.cxx
-+++ sc/source/filter/excel/xeformula.cxx
-@@ -494,7 +494,7 @@ private:
-     const SCsCOL        mnMaxScCol;     /// Maximum column index in Calc itself.
-     const SCsROW        mnMaxScRow;     /// Maximum row index in Calc itself.
-     const sal_uInt16    mnMaxColMask;   /// Mask to delete invalid bits in column fields.
--    const sal_uInt16    mnMaxRowMask;   /// Mask to delete invalid bits in row fields.
-+    const sal_uInt32    mnMaxRowMask;   /// Mask to delete invalid bits in row fields.
- };
- 
- // ----------------------------------------------------------------------------
-@@ -508,7 +508,7 @@ XclExpFmlaCompImpl::XclExpFmlaCompImpl( const XclExpRoot& rRoot ) :
-     mnMaxScCol( static_cast< SCsCOL >( rRoot.GetScMaxPos().Col() ) ),
-     mnMaxScRow( static_cast< SCsROW >( rRoot.GetScMaxPos().Row() ) ),
-     mnMaxColMask( static_cast< sal_uInt16 >( rRoot.GetXclMaxPos().Col() ) ),
--    mnMaxRowMask( static_cast< sal_uInt16 >( rRoot.GetXclMaxPos().Row() ) )
-+    mnMaxRowMask( static_cast< sal_uInt32 >( rRoot.GetXclMaxPos().Row() ) )
- {
-     // build the configuration map
-     for( const XclExpCompConfig* pEntry = spConfigTable; pEntry != STATIC_TABLE_END( spConfigTable ); ++pEntry )
-@@ -1316,7 +1316,10 @@ void XclExpFmlaCompImpl::ProcessMatrix( const XclExpScToken& rTokData )
-         // create the tArray token
-         AppendOperandTokenId( GetTokenId( EXC_TOKID_ARRAY, EXC_TOKCLASS_ARR ), rTokData.mnSpaces );
-         Append( static_cast< sal_uInt8 >( (meBiff == EXC_BIFF8) ? (nCols - 1) : nCols ) );
--        Append( static_cast< sal_uInt16 >( (meBiff == EXC_BIFF8) ? (nRows - 1) : nRows ) );
-+         if (meBiff == EXC_BIFF8)
-+             Append( static_cast< sal_uInt16 > ( nRows - 1 ) );
-+         else
-+             Append( static_cast< sal_uInt16 > ( nRows - 1 ) );
-         Append( static_cast< sal_uInt32 >( 0 ) );
- 
-         // create the extended data containing the array values
-@@ -1835,7 +1838,7 @@ void XclExpFmlaCompImpl::ConvertRefData(
-             rnScRow = mnMaxAbsRow;
-         else if( (rnScRow < 0) || (rnScRow > mnMaxAbsRow) )
-             rRefData.SetRowDeleted( TRUE );
--        rXclPos.mnRow = static_cast< sal_uInt16 >( rnScRow ) & mnMaxRowMask;
-+        rXclPos.mnRow = static_cast< sal_uInt32 >( rnScRow ) & mnMaxRowMask;
-     }
-     else
-     {
-@@ -1846,8 +1849,8 @@ void XclExpFmlaCompImpl::ConvertRefData(
-         rXclPos.mnCol = static_cast< sal_uInt16 >( nXclRelCol ) & mnMaxColMask;
- 
-         // convert row index (2-step-cast ScsROW->sal_Int16->sal_uInt16 to get all bits correctly)
--        sal_Int16 nXclRelRow = static_cast< sal_Int16 >( rRefData.IsRowRel() ? rRefData.nRelRow : rRefData.nRow );
--        rXclPos.mnRow = static_cast< sal_uInt16 >( nXclRelRow ) & mnMaxRowMask;
-+        sal_Int32 nXclRelRow = static_cast< sal_Int32 >( rRefData.IsRowRel() ? rRefData.nRelRow : rRefData.nRow );
-+        rXclPos.mnRow = static_cast< sal_uInt32 >( nXclRelRow ) & mnMaxRowMask;
- 
-         // resolve relative tab index if possible
-         if( rRefData.IsTabRel() && !IsInGlobals() && (GetCurrScTab() < GetDoc().GetTableCount()) )
-@@ -1863,9 +1866,16 @@ void XclExpFmlaCompImpl::ConvertRefData(
-     }
-     else
-     {
--        sal_uInt16& rnRelField = (meBiff <= EXC_BIFF5) ? rXclPos.mnRow : rXclPos.mnCol;
--        ::set_flag( rnRelField, EXC_TOK_REF_COLREL, rRefData.IsColRel() );
--        ::set_flag( rnRelField, EXC_TOK_REF_ROWREL, rRefData.IsRowRel() );
-+        if (meBiff <= EXC_BIFF5)
-+        {
-+            ::set_flag( rXclPos.mnRow, EXC_TOK_REF_ROWREL, rRefData.IsColRel() );
-+            ::set_flag( rXclPos.mnRow, EXC_TOK_REF_ROWREL, rRefData.IsRowRel() );
-+        }
-+        else
-+        {
-+            ::set_flag( rXclPos.mnCol, EXC_TOK_REF_COLREL, rRefData.IsColRel() );
-+            ::set_flag( rXclPos.mnCol, EXC_TOK_REF_COLREL, rRefData.IsRowRel() );
-+        }
-     }
- }
- 
-diff --git sc/source/filter/excel/xehelper.cxx sc/source/filter/excel/xehelper.cxx
-index 7dbe4b8..ca3fc38 100644
---- sc/source/filter/excel/xehelper.cxx
-+++ sc/source/filter/excel/xehelper.cxx
-@@ -159,7 +162,7 @@ namespace {
- inline void lclFillAddress( XclAddress& rXclPos, SCCOL nScCol, SCROW nScRow )
- {
-     rXclPos.mnCol = static_cast< sal_uInt16 >( nScCol );
--    rXclPos.mnRow = static_cast< sal_uInt16 >( nScRow );
-+    rXclPos.mnRow = static_cast< sal_uInt32 >( nScRow );
- }
- 
- } // namespace
-diff --git sc/source/filter/excel/xepage.cxx sc/source/filter/excel/xepage.cxx
-index f99b732..d79e950 100644
---- sc/source/filter/excel/xepage.cxx
-+++ sc/source/filter/excel/xepage.cxx
-@@ -310,7 +313,7 @@ XclExpPageSettings::XclExpPageSettings( const XclExpRoot& rRoot ) :
-     set<SCROW> aRowBreaks;
-     rDoc.GetAllRowBreaks(aRowBreaks, nScTab, false, true);
- 
--    SCROW nMaxRow = numeric_limits<sal_uInt16>::max();
-+    SCROW nMaxRow = numeric_limits<sal_uInt32>::max();
-     for (set<SCROW>::const_iterator itr = aRowBreaks.begin(), itrEnd = aRowBreaks.end(); itr != itrEnd; ++itr)
-     {
-         SCROW nRow = *itr;
-diff --git sc/source/filter/excel/xepivot.cxx sc/source/filter/excel/xepivot.cxx
-index c19bee2..57409c1 100644
---- sc/source/filter/excel/xepivot.cxx
-+++ sc/source/filter/excel/xepivot.cxx
-@@ -1593,9 +1593,9 @@ void XclExpPivotTable::Finalize()
- 
-     // update output range (initialized in ctor)
-     sal_uInt16& rnXclCol1 = maPTInfo.maOutXclRange.maFirst.mnCol;
--    sal_uInt16& rnXclRow1 = maPTInfo.maOutXclRange.maFirst.mnRow;
-+    sal_uInt32& rnXclRow1 = maPTInfo.maOutXclRange.maFirst.mnRow;
-     sal_uInt16& rnXclCol2 = maPTInfo.maOutXclRange.maLast.mnCol;
--    sal_uInt16& rnXclRow2 = maPTInfo.maOutXclRange.maLast.mnRow;
-+    sal_uInt32& rnXclRow2 = maPTInfo.maOutXclRange.maLast.mnRow;
-     // exclude page fields from output range
-     rnXclRow1 = rnXclRow1 + maPTInfo.mnPageFields;
-     // exclude filter button from output range
-@@ -1607,7 +1607,7 @@ void XclExpPivotTable::Finalize()
- 
-     // data area
-     sal_uInt16& rnDataXclCol = maPTInfo.maDataXclPos.mnCol;
--    sal_uInt16& rnDataXclRow = maPTInfo.maDataXclPos.mnRow;
-+    sal_uInt32& rnDataXclRow = maPTInfo.maDataXclPos.mnRow;
-     rnDataXclCol = rnXclCol1 + maPTInfo.mnRowFields;
-     rnDataXclRow = rnXclRow1 + maPTInfo.mnColFields + 1;
-     if( maDataFields.empty() )
-diff --git sc/source/filter/excel/xestream.cxx sc/source/filter/excel/xestream.cxx
-index 14bc6b4..0568512 100644
---- sc/source/filter/excel/xestream.cxx
-+++ sc/source/filter/excel/xestream.cxx
-@@ -802,8 +802,8 @@ static ScAddress lcl_ToAddress( const XclAddress& rAddress )
-     // For some reason, ScRange::Format() returns omits row numbers if 
-     // the row is >= MAXROW or the column is >= MAXCOL, and Excel doesn't 
-     // like "A:IV" (i.e. no row numbers).  Prevent this.
--    aAddress.SetRow( std::min<sal_Int32>( rAddress.mnRow, MAXROW-1 ) );
--    aAddress.SetCol( static_cast<sal_Int16>(std::min<sal_Int32>( rAddress.mnCol, MAXCOL-1 )) );
-+    aAddress.SetRow( std::min<sal_Int32>( rAddress.mnRow, MAXROW ) );
-+    aAddress.SetCol( static_cast<sal_Int16>(std::min<sal_Int32>( rAddress.mnCol, MAXCOL )) );
- 
-     return aAddress;
- }
-diff --git sc/source/filter/excel/xetable.cxx sc/source/filter/excel/xetable.cxx
-index 92dd71e..bf7af82 100644
---- sc/source/filter/excel/xetable.cxx
-+++ sc/source/filter/excel/xetable.cxx
-@@ -81,7 +81,7 @@ XclExpRangeFmlaBase::XclExpRangeFmlaBase(
-     maXclRange( ScAddress::UNINITIALIZED ),
-     maBaseXclPos( ScAddress::UNINITIALIZED )
- {
--    maBaseXclPos.Set( static_cast< sal_uInt16 >( rScPos.Col() ), static_cast< sal_uInt16 >( rScPos.Row() ) );
-+    maBaseXclPos.Set( static_cast< sal_uInt16 >( rScPos.Col() ), static_cast< sal_uInt32 >( rScPos.Row() ) );
-     maXclRange.maFirst = maXclRange.maLast = maBaseXclPos;
- }
- 
-@@ -93,13 +93,13 @@ XclExpRangeFmlaBase::XclExpRangeFmlaBase(
- {
-     maXclRange.Set(
-         static_cast< sal_uInt16 >( rScRange.aStart.Col() ),
--        static_cast< sal_uInt16 >( rScRange.aStart.Row() ),
-+        static_cast< sal_uInt32 >( rScRange.aStart.Row() ),
-         static_cast< sal_uInt16 >( rScRange.aEnd.Col() ),
--        static_cast< sal_uInt16 >( rScRange.aEnd.Row() ) );
-+        static_cast< sal_uInt32 >( rScRange.aEnd.Row() ) );
-     maBaseXclPos = maXclRange.maFirst;
- }
- 
--bool XclExpRangeFmlaBase::IsBasePos( sal_uInt16 nXclCol, sal_uInt16 nXclRow ) const
-+bool XclExpRangeFmlaBase::IsBasePos( sal_uInt16 nXclCol, sal_uInt32 nXclRow ) const
- {
-     return (maBaseXclPos.mnCol == nXclCol) && (maBaseXclPos.mnRow == nXclRow);
- }
-@@ -107,7 +107,7 @@ bool XclExpRangeFmlaBase::IsBasePos( sal_uInt16 nXclCol, sal_uInt16 nXclRow ) co
- void XclExpRangeFmlaBase::Extend( const ScAddress& rScPos )
- {
-     sal_uInt16 nXclCol = static_cast< sal_uInt16 >( rScPos.Col() );
--    sal_uInt16 nXclRow = static_cast< sal_uInt16 >( rScPos.Row() );
-+    sal_uInt32 nXclRow = static_cast< sal_uInt32 >( rScPos.Row() );
-     maXclRange.maFirst.mnCol = ::std::min( maXclRange.maFirst.mnCol, nXclCol );
-     maXclRange.maFirst.mnRow = ::std::min( maXclRange.maFirst.mnRow, nXclRow );
-     maXclRange.maLast.mnCol  = ::std::max( maXclRange.maLast.mnCol,  nXclCol );
-@@ -252,9 +252,9 @@ XclExpTableop::XclExpTableop( const ScAddress& rScPos,
-     XclExpRangeFmlaBase( EXC_ID3_TABLEOP, 16, rScPos ),
-     mnLastAppXclCol( static_cast< sal_uInt16 >( rScPos.Col() ) ),
-     mnColInpXclCol( static_cast< sal_uInt16 >( rRefs.maColFirstScPos.Col() ) ),
--    mnColInpXclRow( static_cast< sal_uInt16 >( rRefs.maColFirstScPos.Row() ) ),
-+    mnColInpXclRow( static_cast< sal_uInt32 >( rRefs.maColFirstScPos.Row() ) ),
-     mnRowInpXclCol( static_cast< sal_uInt16 >( rRefs.maRowFirstScPos.Col() ) ),
--    mnRowInpXclRow( static_cast< sal_uInt16 >( rRefs.maRowFirstScPos.Row() ) ),
-+    mnRowInpXclRow( static_cast< sal_uInt32 >( rRefs.maRowFirstScPos.Row() ) ),
-     mnScMode( nScMode ),
-     mbValid( false )
- {
-@@ -263,7 +263,7 @@ XclExpTableop::XclExpTableop( const ScAddress& rScPos,
- bool XclExpTableop::TryExtend( const ScAddress& rScPos, const XclMultipleOpRefs& rRefs )
- {
-     sal_uInt16 nXclCol = static_cast< sal_uInt16 >( rScPos.Col() );
--    sal_uInt16 nXclRow = static_cast< sal_uInt16 >( rScPos.Row() );
-+    sal_uInt32 nXclRow = static_cast< sal_uInt32 >( rScPos.Row() );
- 
-     bool bOk = IsAppendable( nXclCol, nXclRow );
-     if( bOk )
-@@ -374,7 +374,7 @@ void XclExpTableop::Save( XclExpStream& rStrm )
-         XclExpRangeFmlaBase::Save( rStrm );
- }
- 
--bool XclExpTableop::IsAppendable( sal_uInt16 nXclCol, sal_uInt16 nXclRow ) const
-+bool XclExpTableop::IsAppendable( sal_uInt16 nXclCol, sal_uInt32 nXclRow ) const
- {
-     return  ((nXclCol == mnLastAppXclCol + 1) && (nXclRow == maXclRange.maFirst.mnRow)) ||
-             ((nXclCol == mnLastAppXclCol + 1) && (nXclCol <= maXclRange.maLast.mnCol) && (nXclRow == maXclRange.maLast.mnRow)) ||
-@@ -1747,7 +1747,7 @@ void XclExpDefrowheight::WriteBody( XclExpStream& rStrm )
- 
- // ----------------------------------------------------------------------------
- 
--XclExpRow::XclExpRow( const XclExpRoot& rRoot, sal_uInt16 nXclRow,
-+XclExpRow::XclExpRow( const XclExpRoot& rRoot, sal_uInt32 nXclRow,
-         XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty ) :
-     XclExpRecord( EXC_ID3_ROW, 16 ),
-     XclExpRoot( rRoot ),
-@@ -2061,7 +2061,7 @@ void XclExpRowBuffer::AppendCell( XclExpCellRef xCell, bool bIsMergedBase )
- void XclExpRowBuffer::CreateRows( SCROW nFirstFreeScRow )
- {
-     if( nFirstFreeScRow > 0 )
--        GetOrCreateRow( static_cast< sal_uInt16 >( nFirstFreeScRow - 1 ), true );
-+        GetOrCreateRow( static_cast< sal_uInt32 >( nFirstFreeScRow - 1 ), true );
- }
- 
- void XclExpRowBuffer::Finalize( XclExpDefaultRowData& rDefRowData, const ScfUInt16Vec& rColXFIndexes )
-@@ -2092,7 +2092,7 @@ void XclExpRowBuffer::Finalize( XclExpDefaultRowData& rDefRowData, const ScfUInt
-         #i59220# Tolerance of +-128 rows for inserted/removed rows. */
-     if( (nDefaultXclRow < 31872) || (nDefaultXclRow > 32128) )
-     {
--        sal_uInt16 nLastXclRow = static_cast< sal_uInt16 >( GetMaxPos().Row() );
-+        sal_uInt32 nLastXclRow = static_cast< sal_uInt32 >( GetMaxPos().Row() );
-         if( nDefaultXclRow <= nLastXclRow )
-         {
-             // create a dummy ROW record and fill aMaxDefData
-@@ -2154,7 +2154,7 @@ void XclExpRowBuffer::Finalize( XclExpDefaultRowData& rDefRowData, const ScfUInt
-         // find used row range
-         if( xRow->IsEnabled() )
-         {
--            sal_uInt16 nXclRow = xRow->GetXclRow();
-+            sal_uInt32 nXclRow = xRow->GetXclRow();
-             nFirstUsedXclRow = ::std::min< sal_uInt32 >( nFirstUsedXclRow, nXclRow );
-             nFirstFreeXclRow = ::std::max< sal_uInt32 >( nFirstFreeXclRow, nXclRow + 1 );
-         }
-@@ -2177,7 +2177,7 @@ void XclExpRowBuffer::Save( XclExpStream& rStrm )
-     // save in blocks of 32 rows, each block contains first all ROWs, then all cells
-     size_t nSize = maRowList.GetSize();
-     size_t nBlockStart = 0;
--    sal_uInt16 nStartXclRow = (nSize == 0) ? 0 : maRowList.GetRecord( 0 )->GetXclRow();
-+    sal_uInt32 nStartXclRow = (nSize == 0) ? 0 : maRowList.GetRecord( 0 )->GetXclRow();
- 
-     while( nBlockStart < nSize )
-     {
-@@ -2227,7 +2227,7 @@ XclExpDimensions* XclExpRowBuffer::GetDimensions()
-     return &maDimensions;
- }
- 
--XclExpRow& XclExpRowBuffer::GetOrCreateRow( sal_uInt16 nXclRow, bool bRowAlwaysEmpty )
-+XclExpRow& XclExpRowBuffer::GetOrCreateRow( sal_uInt32 nXclRow, bool bRowAlwaysEmpty )
- {
-     if( !mpLastUsedRow || (mnLastUsedXclRow != nXclRow) )
-     {
-@@ -2235,7 +2235,7 @@ XclExpRow& XclExpRowBuffer::GetOrCreateRow( sal_uInt16 nXclRow, bool bRowAlwaysE
-         // do not use sal_uInt16 for nFirstFreeXclRow, would cause loop in full sheets
-         for( size_t nFirstFreeXclRow = maRowList.GetSize(); nFirstFreeXclRow <= nXclRow; ++nFirstFreeXclRow )
-             maRowList.AppendNewRecord( new XclExpRow(
--                GetRoot(), static_cast< sal_uInt16 >( nFirstFreeXclRow ), maOutlineBfr, bRowAlwaysEmpty ) );
-+                GetRoot(), static_cast< sal_uInt32 >( nFirstFreeXclRow ), maOutlineBfr, bRowAlwaysEmpty ) );
- 
-         mpLastUsedRow = maRowList.GetRecord( nXclRow ).get();
-         mnLastUsedXclRow = nXclRow;
-@@ -2320,7 +2320,7 @@ XclExpCellTable::XclExpCellTable( const XclExpRoot& rRoot ) :
-         SCCOL nLastScCol = aIt.GetEndCol();
-         ScAddress aScPos( nScCol, nScRow, nScTab );
- 
--        XclAddress aXclPos( static_cast< sal_uInt16 >( nScCol ), static_cast< sal_uInt16 >( nScRow ) );
-+        XclAddress aXclPos( static_cast< sal_uInt16 >( nScCol ), static_cast< sal_uInt32 >( nScRow ) );
-         sal_uInt16 nLastXclCol = static_cast< sal_uInt16 >( nLastScCol );
- 
-         const ScBaseCell* pScCell = aIt.GetCell();
-diff --git sc/source/filter/excel/xihelper.cxx sc/source/filter/excel/xihelper.cxx
-index 0e44ba6..d2fd000 100644
---- sc/source/filter/excel/xihelper.cxx
-+++ sc/source/filter/excel/xihelper.cxx
-@@ -126,7 +129,7 @@ bool XclImpAddressConverter::ConvertRange( ScRange& rScRange,
- 
-         // check & correct end position
-         sal_uInt16 nXclCol2 = rXclRange.maLast.mnCol;
--        sal_uInt16 nXclRow2 = rXclRange.maLast.mnRow;
-+        sal_uInt32 nXclRow2 = rXclRange.maLast.mnRow;
-         if( !CheckAddress( rXclRange.maLast, bWarn ) )
-         {
-             nXclCol2 = ::std::min( nXclCol2, mnMaxCol );
-diff --git sc/source/filter/excel/xlescher.cxx sc/source/filter/excel/xlescher.cxx
-index a2a64b8..841eeb7 100644
---- sc/source/filter/excel/xlescher.cxx
-+++ sc/source/filter/excel/xlescher.cxx
-@@ -138,7 +138,7 @@ void lclGetColFromX(
- /** Calculates an object row position from a drawing layer Y position (in twips). */
- void lclGetRowFromY(
-         ScDocument& rDoc, SCTAB nScTab,
--        sal_uInt16& rnXclRow, sal_uInt16& rnOffset, sal_uInt16 nXclStartRow,
-+        sal_uInt32& rnXclRow, sal_uInt16& rnOffset, sal_uInt32 nXclStartRow,
-         long& rnStartH, long nY, double fScale )
- {
-     // rnStartH in conjunction with nXclStartRow is used as buffer for previously calculated height
-diff -pur sc/source/filter/inc/xetable.hxx sc/source/filter/inc/xetable.hxx
---- sc/source/filter/inc/xetable.hxx	2009-10-16 10:32:55.000000000 +0200
-+++ sc/source/filter/inc/xetable.hxx	2009-10-23 15:19:13.456138907 +0200
-@@ -73,7 +73,7 @@ class XclExpRangeFmlaBase : public XclEx
- {
- public:
-     /** Returns true, if the passed cell position is equal to own base position. */
--    bool                IsBasePos( sal_uInt16 nXclCol, sal_uInt16 nXclRow ) const;
-+    bool IsBasePos( sal_uInt16 nXclCol, sal_uInt32 nXclRow ) const;
- 
-     /** Derived classes create the token array for a corresponding FORMULA cell record. */
-     virtual XclTokenArrayRef CreateCellTokenArray( const XclExpRoot& rRoot ) const = 0;
-@@ -231,7 +231,7 @@ public:
- 
- private:
-     /** Returns true, if the passed cell position can be appended to this record. */
--    bool                IsAppendable( sal_uInt16 nXclCol, sal_uInt16 nXclRow ) const;
-+    bool IsAppendable( sal_uInt16 nXclCol, sal_uInt32 nXclRow ) const;
- 
-     /** Writes the contents of the TABLEOP record. */
-     virtual void        WriteBody( XclExpStream& rStrm );
-@@ -240,9 +240,9 @@ private:
-     SCTAB               mnScTab;        /// Sheet index of this record.
-     sal_uInt16          mnLastAppXclCol;/// Column index of last appended cell.
-     sal_uInt16          mnColInpXclCol; /// Column index of column input cell.
--    sal_uInt16          mnColInpXclRow; /// Row index of column input cell.
-+    sal_uInt32          mnColInpXclRow; /// Row index of column input cell.
-     sal_uInt16          mnRowInpXclCol; /// Column index of row input cell.
--    sal_uInt16          mnRowInpXclRow; /// Row index of row input cell.
-+    sal_uInt32          mnRowInpXclRow; /// Row index of row input cell.
-     sal_uInt8           mnScMode;       /// Type of the multiple operation (Calc constant).
-     bool                mbValid;        /// true = Contains valid references.
- };
-@@ -289,7 +289,7 @@ public:
-     /** Returns the (first) Excel column index of the cell(s). */
-     inline sal_uInt16   GetXclCol() const { return maXclPos.mnCol; }
-     /** Returns the Excel row index of the cell. */
--    inline sal_uInt16   GetXclRow() const { return maXclPos.mnRow; }
-+    inline sal_uInt32   GetXclRow() const { return maXclPos.mnRow; }
- 
-     /** Derived classes return the column index of the last contained cell. */
-     virtual sal_uInt16  GetLastXclCol() const = 0;
-@@ -317,7 +317,7 @@ protected:
-     /** Sets this record to a new column position. */
-     inline void         SetXclCol( sal_uInt16 nXclCol ) { maXclPos.mnCol = nXclCol; }
-     /** Sets this record to a new row position. */
--    inline void         SetXclRow( sal_uInt16 nXclRow ) { maXclPos.mnRow = nXclRow; }
-+    inline void         SetXclRow( sal_uInt32 nXclRow ) { maXclPos.mnRow = nXclRow; }
- 
- private:
-     XclAddress          maXclPos;       /// Address of the cell.
-@@ -900,11 +900,11 @@ public:
-     /** Constructs the ROW record and converts the Calc row settings.
-         @param bAlwaysEmpty  true = This row will not be filled with blank cells
-             in the Finalize() function. */
--    explicit            XclExpRow( const XclExpRoot& rRoot, sal_uInt16 nXclRow,
--                            XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty );
-+    explicit XclExpRow( const XclExpRoot& rRoot, sal_uInt32 nXclRow,
-+                        XclExpRowOutlineBuffer& rOutlineBfr, bool bAlwaysEmpty );
- 
-     /** Returns the excel row index of this ROW record. */
--    inline sal_uInt16   GetXclRow() const { return mnXclRow; }
-+    inline sal_uInt32   GetXclRow() const { return mnXclRow; }
-     /** Returns the height of the row in twips. */
-     inline sal_uInt16   GetHeight() const { return mnHeight; }
-     /** Returns true, if this row does not contain at least one valid cell. */
-@@ -948,7 +948,7 @@ public:
- 
- private:
-     /** Initializes the record data. Called from constructors. */
--    void                Init( sal_uInt16 nXclRow, XclExpRowOutlineBuffer* pOutlineBfr );
-+    void                Init( sal_uInt32 nXclRow, XclExpRowOutlineBuffer* pOutlineBfr );
-     /** Inserts a cell at the specified list position, tries to merge with neighbors. */
-     void                InsertCell( XclExpCellRef xCell, size_t nPos, bool bIsMergedBase );
- 
-@@ -959,7 +959,7 @@ private:
-     typedef XclExpRecordList< XclExpCellBase > XclExpCellList;
- 
-     XclExpCellList      maCellList;         /// List of cell records for this row.
--    sal_uInt16          mnXclRow;           /// Excel row index of this row.
-+    sal_uInt32          mnXclRow;           /// Excel row index of this row.
-     sal_uInt16          mnHeight;           /// Row height in twips.
-     sal_uInt16          mnFlags;            /// Flags for the ROW record.
-     sal_uInt16          mnXFIndex;          /// Default row formatting.
-@@ -1002,7 +1002,7 @@ private:
-     /** Returns access to the specified ROW record. Inserts preceding missing ROW records.
-         @param bRowAlwaysEmpty  true = Created rows will not be filled with blank cells
-             in the XclExpRow::Finalize() function. */
--    XclExpRow&          GetOrCreateRow( sal_uInt16 nXclRow, bool bRowAlwaysEmpty );
-+    XclExpRow& GetOrCreateRow( sal_uInt32 nXclRow, bool bRowAlwaysEmpty );
- 
- private:
-     typedef XclExpRecordList< XclExpRow >   XclExpRowList;
-@@ -1012,7 +1012,7 @@ private:
-     XclExpRowOutlineBuffer maOutlineBfr;    /// Buffer for row outline groups.
-     XclExpDimensions    maDimensions;       /// DIMENSIONS record for used area.
-     XclExpRow*          mpLastUsedRow;      /// Last used row for faster access.
--    sal_uInt16          mnLastUsedXclRow;   /// Last used row for faster access.
-+    sal_uInt32          mnLastUsedXclRow;   /// Last used row for faster access.
- };
- 
- // ============================================================================
-diff -pur sc/source/filter/inc/xladdress.hxx sc/source/filter/inc/xladdress.hxx
---- sc/source/filter/inc/xladdress.hxx	2009-10-16 10:32:55.000000000 +0200
-+++ sc/source/filter/inc/xladdress.hxx	2009-10-23 15:19:13.456138907 +0200
-@@ -44,13 +44,13 @@ class XclExpStream;
- struct XclAddress
- {
-     sal_uInt16          mnCol;
--    sal_uInt16          mnRow;
-+    sal_uInt32          mnRow;
- 
-     inline explicit     XclAddress( ScAddress::Uninitialized ) {}
-     inline explicit     XclAddress() : mnCol( 0 ), mnRow( 0 ) {}
--    inline explicit     XclAddress( sal_uInt16 nCol, sal_uInt16 nRow ) : mnCol( nCol ), mnRow( nRow ) {}
-+    inline explicit     XclAddress( sal_uInt16 nCol, sal_uInt32 nRow ) : mnCol( nCol ), mnRow( nRow ) {}
- 
--    inline void         Set( sal_uInt16 nCol, sal_uInt16 nRow ) { mnCol = nCol; mnRow = nRow; }
-+    inline void         Set( sal_uInt16 nCol, sal_uInt32 nRow ) { mnCol = nCol; mnRow = nRow; }
- 
-     void                Read( XclImpStream& rStrm, bool bCol16Bit = true );
-     void                Write( XclExpStream& rStrm, bool bCol16Bit = true ) const;
-@@ -90,16 +90,16 @@ struct XclRange
-     inline explicit     XclRange() {}
-     inline explicit     XclRange( const XclAddress& rPos ) : maFirst( rPos ), maLast( rPos ) {}
-     inline explicit     XclRange( const XclAddress& rFirst, const XclAddress& rLast ) : maFirst( rFirst ), maLast( rLast ) {}
--    inline explicit     XclRange( sal_uInt16 nCol1, sal_uInt16 nRow1, sal_uInt16 nCol2, sal_uInt16 nRow2 ) :
-+    inline explicit     XclRange( sal_uInt16 nCol1, sal_uInt32 nRow1, sal_uInt16 nCol2, sal_uInt32 nRow2 ) :
-                             maFirst( nCol1, nRow1 ), maLast( nCol2, nRow2 ) {}
- 
-     inline void         Set( const XclAddress& rFirst, const XclAddress& rLast )
-                             { maFirst = rFirst; maLast = rLast; }
--    inline void         Set( sal_uInt16 nCol1, sal_uInt16 nRow1, sal_uInt16 nCol2, sal_uInt16 nRow2 )
-+    inline void         Set( sal_uInt16 nCol1, sal_uInt32 nRow1, sal_uInt16 nCol2, sal_uInt32 nRow2 )
-                             { maFirst.Set( nCol1, nRow1 ); maLast.Set( nCol2, nRow2 ); }
- 
-     inline sal_uInt16   GetColCount() const { return maLast.mnCol - maFirst.mnCol + 1; }
--    inline sal_uInt16   GetRowCount() const { return maLast.mnRow - maFirst.mnRow + 1; }
-+    inline sal_uInt32   GetRowCount() const { return maLast.mnRow - maFirst.mnRow + 1; }
-     bool                Contains( const XclAddress& rPos ) const;
- 
-     void                Read( XclImpStream& rStrm, bool bCol16Bit = true );
-@@ -188,7 +188,7 @@ protected:
-     XclTracer&          mrTracer;       /// Tracer for invalid addresses.
-     ScAddress           maMaxPos;       /// Default maximum position.
-     sal_uInt16          mnMaxCol;       /// Maximum column index, as 16-bit value.
--    sal_uInt16          mnMaxRow;       /// Maximum row index, as 16-bit value.
-+    sal_uInt32          mnMaxRow;       /// Maximum row index
-     bool                mbColTrunc;     /// Flag for "columns truncated" warning box.
-     bool                mbRowTrunc;     /// Flag for "rows truncated" warning box.
-     bool                mbTabTrunc;     /// Flag for "tables truncated" warning box.
-diff -pur sc/source/filter/inc/xlconst.hxx sc/source/filter/inc/xlconst.hxx
---- sc/source/filter/inc/xlconst.hxx	2009-10-16 10:32:55.000000000 +0200
-+++ sc/source/filter/inc/xlconst.hxx	2009-10-23 15:19:13.466128493 +0200
-@@ -74,7 +74,7 @@ const SCROW EXC_MAXROW5                 
- const SCTAB EXC_MAXTAB5                     = EXC_MAXTAB4;
- 
- const SCCOL EXC_MAXCOL8                     = EXC_MAXCOL5;
--const SCROW EXC_MAXROW8                     = 65535;
-+const SCROW EXC_MAXROW8                     = MAXROWCOUNT_DEFINE;
- const SCTAB EXC_MAXTAB8                     = EXC_MAXTAB5;
- 
- const sal_uInt16 EXC_NOTAB                  = SAL_MAX_UINT16;   /// An invalid Excel sheet index, for common use.
-diff -pur sc/source/filter/inc/xlformula.hxx sc/source/filter/inc/xlformula.hxx
---- sc/source/filter/inc/xlformula.hxx	2009-10-16 10:32:55.000000000 +0200
-+++ sc/source/filter/inc/xlformula.hxx	2009-10-23 15:19:13.466128493 +0200
-@@ -139,7 +146,7 @@ const sal_uInt8 EXC_TOK_FUNCVAR_PROMPT  
- const sal_uInt8 EXC_TOK_FUNCVAR_COUNTMASK   = 0x7F;     /// Mask for parameter count.
- 
- const sal_uInt16 EXC_TOK_REF_COLREL         = 0x4000;   /// True = Column is relative.
--const sal_uInt16 EXC_TOK_REF_ROWREL         = 0x8000;   /// True = Row is relative.
-+const sal_uInt32 EXC_TOK_REF_ROWREL         = 0x8000;   /// True = Row is relative.
- 
- const sal_uInt8 EXC_TOK_NLR_ERR             = 0x01;     /// NLR: Invalid/deleted.
- const sal_uInt8 EXC_TOK_NLR_ROWR            = 0x02;     /// NLR: Row index.
--- 
-1.6.0.rc1.49.g98a8


More information about the ooo-build-commit mailing list