summaryrefslogtreecommitdiff
path: root/oox/inc/oox
diff options
context:
space:
mode:
Diffstat (limited to 'oox/inc/oox')
-rw-r--r--oox/inc/oox/dump/biffdumper.hxx13
-rw-r--r--oox/inc/oox/dump/dumperbase.hxx13
-rw-r--r--oox/inc/oox/dump/xlsbdumper.hxx1
-rwxr-xr-xoox/inc/oox/ole/axbinaryreader.hxx188
-rw-r--r--oox/inc/oox/ole/axcontrol.hxx34
-rw-r--r--oox/inc/oox/ole/axcontrolfragment.hxx4
-rw-r--r--oox/inc/oox/xls/biffhelper.hxx27
-rw-r--r--oox/inc/oox/xls/worksheetfragment.hxx2
8 files changed, 257 insertions, 25 deletions
diff --git a/oox/inc/oox/dump/biffdumper.hxx b/oox/inc/oox/dump/biffdumper.hxx
index a7f021ed5244..5b772d4a13f1 100644
--- a/oox/inc/oox/dump/biffdumper.hxx
+++ b/oox/inc/oox/dump/biffdumper.hxx
@@ -415,12 +415,25 @@ private:
sal_uInt16 dumpFormatIdx( const String& rName = EMPTY_STRING );
sal_uInt16 dumpXfIdx( const String& rName = EMPTY_STRING, bool bBiff2Style = false );
+ template< typename Type >
+ inline Type dumpExtColorType() { return dumpDec< Type >( "color-type", "EXTCOLOR-TYPE" ); }
+ void dumpExtColorValue( sal_uInt32 nColorType );
+ void dumpExtColor( const String& rName = EMPTY_STRING );
+ void dumpExtCfColor( const String& rName = EMPTY_STRING );
+ void dumpExtGradientHead();
+
::rtl::OUString dumpPivotString( const String& rName, sal_uInt16 nStrLen );
::rtl::OUString dumpPivotString( const String& rName );
sal_uInt16 dumpCellHeader( bool bBiff2Style = false );
void dumpBoolErr();
+ void dumpCfRuleProp();
+ void dumpXfExtProp();
+ void dumpDxfProp();
+ void dumpDxf12Prop();
+ void dumpCfRule12Param( sal_uInt16 nSubType );
+
void dumpFontRec();
void dumpFormatRec();
void dumpXfRec();
diff --git a/oox/inc/oox/dump/dumperbase.hxx b/oox/inc/oox/dump/dumperbase.hxx
index 9a791942ce4e..28cc42ab8604 100644
--- a/oox/inc/oox/dump/dumperbase.hxx
+++ b/oox/inc/oox/dump/dumperbase.hxx
@@ -1901,19 +1901,6 @@ protected:
const ObjectBase& rParent,
const BinaryInputStreamRef& rxBaseStrm,
const ::rtl::OUString& rSysFileName,
- const BinaryInputStreamRef& rxRecStrm,
- const String& rRecNames,
- const String& rSimpleRecs = EMPTY_STRING );
- void construct(
- const OutputObjectBase& rParent,
- const BinaryInputStreamRef& rxBaseStrm,
- const BinaryInputStreamRef& rxRecStrm,
- const String& rRecNames,
- const String& rSimpleRecs = EMPTY_STRING );
- void construct(
- const ObjectBase& rParent,
- const BinaryInputStreamRef& rxBaseStrm,
- const ::rtl::OUString& rSysFileName,
const String& rRecNames,
const String& rSimpleRecs = EMPTY_STRING );
void construct(
diff --git a/oox/inc/oox/dump/xlsbdumper.hxx b/oox/inc/oox/dump/xlsbdumper.hxx
index dafa3901ea6e..6575606fcfb5 100644
--- a/oox/inc/oox/dump/xlsbdumper.hxx
+++ b/oox/inc/oox/dump/xlsbdumper.hxx
@@ -211,6 +211,7 @@ protected:
virtual void implDumpRecordBody();
private:
+ void dumpGradientHead();
void dumpCellHeader( bool bWithColumn );
private:
diff --git a/oox/inc/oox/ole/axbinaryreader.hxx b/oox/inc/oox/ole/axbinaryreader.hxx
new file mode 100755
index 000000000000..6bd8a085e783
--- /dev/null
+++ b/oox/inc/oox/ole/axbinaryreader.hxx
@@ -0,0 +1,188 @@
+/*************************************************************************
+ *
+ * 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: axbinaryreader.hxx,v $
+ * $Revision: 1.1 $
+ *
+ * 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 OOX_OLE_AXBINARYREADER_HXX
+#define OOX_OLE_AXBINARYREADER_HXX
+
+#include "oox/helper/binaryinputstream.hxx"
+#include "oox/helper/containerhelper.hxx"
+
+namespace oox {
+namespace ole {
+
+// ============================================================================
+
+/** A wrapper for an unseekable binary input stream. */
+class AxAlignedInputStream : public BinaryInputStream
+{
+public:
+ explicit AxAlignedInputStream( BinaryInputStream& rInStrm );
+
+ /** Return the current stream position (relative to position at construction time). */
+ virtual sal_Int64 tell() const;
+ /** Seeks the stream to the passed position, if it is behind the current position. */
+ virtual void seek( sal_Int64 nPos );
+
+ /** Reads nBytes bytes to the passed sequence.
+ @return Number of bytes really read. */
+ virtual sal_Int32 readData( StreamDataSequence& orData, sal_Int32 nBytes );
+ /** Reads nBytes bytes to the (existing) buffer opMem.
+ @return Number of bytes really read. */
+ virtual sal_Int32 readMemory( void* opMem, sal_Int32 nBytes );
+ /** Seeks the stream forward by the passed number of bytes. */
+ virtual void skip( sal_Int32 nBytes );
+
+ /** Aligns the stream to a multiple of the passed size. */
+ void align( size_t nSize );
+
+ /** Aligns the stream according to the passed type and reads an atomar value. */
+ template< typename Type >
+ inline Type readAligned() { align( sizeof( Type ) ); return readValue< Type >(); }
+ /** Aligns the stream according to the passed type and skips the size of the type. */
+ template< typename Type >
+ inline void skipAligned() { align( sizeof( Type ) ); skip( sizeof( Type ) ); }
+
+private:
+ BinaryInputStream& mrInStrm; /// The wrapped input stream.
+ sal_Int64 mnStrmPos; /// Tracks relative position in the stream.
+};
+
+// ============================================================================
+
+/** Import helper to read simple and complex ActiveX form control properties
+ from a binary input stream. */
+class AxBinaryPropertyReader
+{
+public:
+ explicit AxBinaryPropertyReader( BinaryInputStream& rInStrm, bool b64BitPropFlags = false );
+
+ /** Reads the next integer property value from the stream, if the
+ respective flag in the property mask is set. */
+ template< typename StreamType, typename DataType >
+ inline void readIntProperty( DataType& ornValue )
+ { if( startNextProperty() ) ornValue = maInStrm.readAligned< StreamType >(); }
+ /** Reads the next boolean property value from the stream, if the
+ respective flag in the property mask is set. */
+ void readBoolProperty( bool& orbValue, bool bReverse = false );
+ /** Reads the next pair property from the stream, if the respective flag in
+ the property mask is set. */
+ void readPairProperty( sal_Int32& ornValue1, sal_Int32& ornValue2 );
+ /** Reads the next string property from the stream, if the respective flag
+ in the property mask is set. */
+ void readStringProperty( ::rtl::OUString& orValue );
+ /** Reads the next picture property from the stream, if the respective flag
+ in the property mask is set. */
+ void readPictureProperty( StreamDataSequence& orPicData );
+
+ /** Skips the next integer property value in the stream, if the respective
+ flag in the property mask is set. */
+ template< typename StreamType >
+ inline void skipIntProperty() { if( startNextProperty() ) maInStrm.skipAligned< StreamType >(); }
+ /** Skips the next boolean property value in the stream, if the respective
+ flag in the property mask is set. */
+ inline void skipBoolProperty() { startNextProperty(); }
+ /** Skips the next string property in the stream, if the respective flag in
+ the property mask is set. */
+ inline void skipStringProperty() { readStringProperty( maDummyString ); }
+ /** Skips the next picture property in the stream, if the respective flag
+ in the property mask is set. */
+ inline void skipPictureProperty() { readPictureProperty( maDummyPicData ); }
+ /** Has to be called for undefined properties. If the respective flag in
+ the mask is set, the property import cannot be finished successfully. */
+ inline void skipUndefinedProperty() { ensureValid( !startNextProperty() ); }
+
+ /** Final processing, reads contents of all complex properties. */
+ bool finalizeImport();
+
+private:
+ bool ensureValid( bool bCondition = true );
+ bool startNextProperty();
+
+private:
+ /** Base class for complex properties such as string, point, size, GUID, picture. */
+ struct ComplexProperty
+ {
+ virtual ~ComplexProperty();
+ virtual bool readProperty( AxAlignedInputStream& rInStrm ) = 0;
+ };
+
+ /** Complex property for a 32-bit value pair, e.g. point or size. */
+ struct PairProperty : public ComplexProperty
+ {
+ sal_Int32& mrnValue1;
+ sal_Int32& mrnValue2;
+
+ inline explicit PairProperty( sal_Int32& rnValue1, sal_Int32& rnValue2 ) :
+ mrnValue1( rnValue1 ), mrnValue2( rnValue2 ) {}
+ virtual bool readProperty( AxAlignedInputStream& rInStrm );
+ };
+
+ /** Complex property for a string value. */
+ struct StringProperty : public ComplexProperty
+ {
+ ::rtl::OUString& mrValue;
+ sal_uInt32 mnSize;
+
+ inline explicit StringProperty( ::rtl::OUString& rValue, sal_uInt32 nSize ) :
+ mrValue( rValue ), mnSize( nSize ) {}
+ virtual bool readProperty( AxAlignedInputStream& rInStrm );
+ };
+
+ /** Stream property for a picture or mouse icon. */
+ struct PictureProperty : public ComplexProperty
+ {
+ StreamDataSequence& mrPicData;
+
+ inline explicit PictureProperty( StreamDataSequence& rPicData ) :
+ mrPicData( rPicData ) {}
+ virtual bool readProperty( AxAlignedInputStream& rInStrm );
+ };
+
+ typedef RefVector< ComplexProperty > ComplexPropVector;
+
+private:
+ AxAlignedInputStream maInStrm; /// The input stream to read from.
+ ComplexPropVector maLargeProps; /// Stores info for all used large properties.
+ ComplexPropVector maStreamProps; /// Stores info for all used stream data properties.
+ StreamDataSequence maDummyPicData; /// Dummy picture for unsupported properties.
+ ::rtl::OUString maDummyString; /// Dummy string for unsupported properties.
+ sal_Int64 mnPropFlags; /// Flags specifying existing properties.
+ sal_Int64 mnNextProp; /// Next property to read.
+ sal_Int64 mnPropsEnd; /// End position of simple/large properties.
+ bool mbValid; /// True = stream still valid.
+};
+
+// ============================================================================
+
+} // namespace ole
+} // namespace oox
+
+#endif
+
diff --git a/oox/inc/oox/ole/axcontrol.hxx b/oox/inc/oox/ole/axcontrol.hxx
index 4c34b5447bff..538e8aee961d 100644
--- a/oox/inc/oox/ole/axcontrol.hxx
+++ b/oox/inc/oox/ole/axcontrol.hxx
@@ -32,15 +32,16 @@
#define OOX_OLE_AXCONTROL_HXX
#include <memory>
-#include <rtl/ustring.hxx>
-#include <com/sun/star/uno/Reference.hxx>
#include "oox/helper/binarystreambase.hxx"
namespace com { namespace sun { namespace star {
namespace awt { class XControlModel; }
} } }
-namespace oox { class PropertyMap; }
+namespace oox {
+ class BinaryInputStream;
+ class PropertyMap;
+}
namespace oox {
namespace ole {
@@ -58,7 +59,9 @@ public:
/** Derived classes set specific OOXML properties at the model structure. */
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
/** Derived classes set binary data (picture, mouse icon) at the model structure. */
- virtual void importPictureData( sal_Int32 nPropId, const StreamDataSequence& rDataSeq );
+ virtual void importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm );
+ /** Derived classes import a form control model from the passed input stream. */
+ virtual void importBinaryModel( BinaryInputStream& rInStrm );
/** Derived classes return the UNO service name used to construct the control component. */
virtual ::rtl::OUString getServiceName() const = 0;
@@ -81,6 +84,7 @@ public:
explicit AxFontDataModel();
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
+ virtual void importBinaryModel( BinaryInputStream& rInStrm );
virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
private:
@@ -100,7 +104,8 @@ public:
virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
- virtual void importPictureData( sal_Int32 nPropId, const StreamDataSequence& rDataSeq );
+ virtual void importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm );
+ virtual void importBinaryModel( BinaryInputStream& rInStrm );
virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
private:
@@ -122,6 +127,7 @@ public:
virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
+ virtual void importBinaryModel( BinaryInputStream& rInStrm );
virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
private:
@@ -143,7 +149,8 @@ public:
virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
- virtual void importPictureData( sal_Int32 nPropId, const StreamDataSequence& rDataSeq );
+ virtual void importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm );
+ virtual void importBinaryModel( BinaryInputStream& rInStrm );
virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
private:
@@ -166,7 +173,8 @@ public:
explicit AxMorphDataModel();
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
- virtual void importPictureData( sal_Int32 nPropId, const StreamDataSequence& rDataSeq );
+ virtual void importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm );
+ virtual void importBinaryModel( BinaryInputStream& rInStrm );
virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
protected:
@@ -266,6 +274,7 @@ public:
virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
+ virtual void importBinaryModel( BinaryInputStream& rInStrm );
virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
private:
@@ -289,6 +298,7 @@ public:
virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
+ virtual void importBinaryModel( BinaryInputStream& rInStrm );
virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
private:
@@ -317,6 +327,13 @@ public:
/** Creates and returns the internal control model according to the passed
MS class identifier. */
AxControlModelBase* createModel( const ::rtl::OUString& rClassId );
+ /** Imports a form control model from the passed input stream. */
+ void importBinaryModel( BinaryInputStream& rInStrm );
+
+ /** Returns the internal control model. */
+ inline const AxControlModelBase* getModel() const { return mxModel.get(); }
+ /** Returns the MS class identifier used to create the internal control model. */
+ inline const ::rtl::OUString& getClassId() const { return maClassId; }
/** Creates and returns the UNO form component object for this control and
inserts it into the form wrapped by the passed helper. */
@@ -325,7 +342,8 @@ public:
private:
::std::auto_ptr< AxControlModelBase > mxModel;
- ::rtl::OUString maName;
+ ::rtl::OUString maClassId; /// Class identifier of the control model.
+ ::rtl::OUString maName; /// Name of the control.
};
// ============================================================================
diff --git a/oox/inc/oox/ole/axcontrolfragment.hxx b/oox/inc/oox/ole/axcontrolfragment.hxx
index d97691e67d64..a99e8b79caed 100644
--- a/oox/inc/oox/ole/axcontrolfragment.hxx
+++ b/oox/inc/oox/ole/axcontrolfragment.hxx
@@ -45,7 +45,9 @@ class AxControlModelBase;
class AxControlPropertyContext : public ::oox::core::ContextHandler2
{
public:
- explicit AxControlPropertyContext( ::oox::core::FragmentHandler2& rFragment, AxControlModelBase& rModel );
+ explicit AxControlPropertyContext(
+ ::oox::core::FragmentHandler2& rFragment,
+ AxControlModelBase& rModel );
virtual ::oox::core::ContextHandlerRef
onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs );
diff --git a/oox/inc/oox/xls/biffhelper.hxx b/oox/inc/oox/xls/biffhelper.hxx
index 60efb9e856a6..c013240647a9 100644
--- a/oox/inc/oox/xls/biffhelper.hxx
+++ b/oox/inc/oox/xls/biffhelper.hxx
@@ -269,11 +269,16 @@ const sal_uInt16 BIFF3_ID_BOF = 0x0209;
const sal_uInt16 BIFF4_ID_BOF = 0x0409;
const sal_uInt16 BIFF5_ID_BOF = 0x0809;
const sal_uInt16 BIFF_ID_BOOKBOOL = 0x00DA;
+const sal_uInt16 BIFF_ID_BOOKEXT = 0x0863;
const sal_uInt16 BIFF2_ID_BOOLERR = 0x0005;
const sal_uInt16 BIFF3_ID_BOOLERR = 0x0205;
const sal_uInt16 BIFF_ID_BOTTOMMARGIN = 0x0029;
const sal_uInt16 BIFF_ID_CALCCOUNT = 0x000C;
const sal_uInt16 BIFF_ID_CALCMODE = 0x000D;
+const sal_uInt16 BIFF_ID_CFHEADER = 0x01B0;
+const sal_uInt16 BIFF_ID_CFRULE = 0x01B1;
+const sal_uInt16 BIFF_ID_CFRULE12 = 0x087A;
+const sal_uInt16 BIFF_ID_CFRULEEXT = 0x087B;
const sal_uInt16 BIFF_ID_CH3DDATAFORMAT = 0x105F;
const sal_uInt16 BIFF_ID_CHAREA = 0x101A;
const sal_uInt16 BIFF_ID_CHAREAFORMAT = 0x100A;
@@ -289,6 +294,7 @@ const sal_uInt16 BIFF_ID_CHCHARTLINE = 0x101C;
const sal_uInt16 BIFF_ID_CHDATAFORMAT = 0x1006;
const sal_uInt16 BIFF_ID_CHDEFAULTTEXT = 0x1024;
const sal_uInt16 BIFF_ID_CHDROPBAR = 0x103D;
+const sal_uInt16 BIFF_ID_CHECKCOMPAT = 0x088C;
const sal_uInt16 BIFF_ID_CHEND = 0x1034;
const sal_uInt16 BIFF_ID_CHESCHERFORMAT = 0x1066;
const sal_uInt16 BIFF_ID_CHFONT = 0x1026;
@@ -335,15 +341,15 @@ const sal_uInt16 BIFF_ID_CHTEXT = 0x1025;
const sal_uInt16 BIFF_ID_CHTICK = 0x101E;
const sal_uInt16 BIFF_ID_CHTYPEGROUP = 0x1014;
const sal_uInt16 BIFF_ID_CHVALUERANGE = 0x101F;
-const sal_uInt16 BIFF_ID_CFHEADER = 0x01B0;
-const sal_uInt16 BIFF_ID_CFRULE = 0x01B1;
const sal_uInt16 BIFF_ID_CODENAME = 0x01BA;
const sal_uInt16 BIFF_ID_CODEPAGE = 0x0042;
const sal_uInt16 BIFF_ID_COLINFO = 0x007D;
const sal_uInt16 BIFF_ID_COLUMNDEFAULT = 0x0020;
const sal_uInt16 BIFF_ID_COLWIDTH = 0x0024;
+const sal_uInt16 BIFF_ID_COMPRESSPICS = 0x089B;
const sal_uInt16 BIFF_ID_CONT = 0x003C;
const sal_uInt16 BIFF_ID_COORDLIST = 0x00A9;
+const sal_uInt16 BIFF_ID_COUNTRY = 0x008C;
const sal_uInt16 BIFF_ID_CRN = 0x005A;
const sal_uInt16 BIFF2_ID_DATATABLE = 0x0036;
const sal_uInt16 BIFF3_ID_DATATABLE = 0x0236;
@@ -351,6 +357,7 @@ const sal_uInt16 BIFF2_ID_DATATABLE2 = 0x0037;
const sal_uInt16 BIFF_ID_DATAVALIDATION = 0x01BE;
const sal_uInt16 BIFF_ID_DATAVALIDATIONS = 0x01B2;
const sal_uInt16 BIFF_ID_DATEMODE = 0x0022;
+const sal_uInt16 BIFF_ID_DBCELL = 0x00D7;
const sal_uInt16 BIFF_ID_DCONBINAME = 0x01B5;
const sal_uInt16 BIFF_ID_DCONNAME = 0x0052;
const sal_uInt16 BIFF_ID_DCONREF = 0x0051;
@@ -363,6 +370,7 @@ const sal_uInt16 BIFF3_ID_DEFROWHEIGHT = 0x0225;
const sal_uInt16 BIFF_ID_DELTA = 0x0010;
const sal_uInt16 BIFF2_ID_DIMENSION = 0x0000;
const sal_uInt16 BIFF3_ID_DIMENSION = 0x0200;
+const sal_uInt16 BIFF_ID_DXF = 0x088D;
const sal_uInt16 BIFF_ID_EOF = 0x000A;
const sal_uInt16 BIFF_ID_EXTERNALBOOK = 0x01AE;
const sal_uInt16 BIFF2_ID_EXTERNALNAME = 0x0023;
@@ -377,19 +385,24 @@ const sal_uInt16 BIFF3_ID_FONT = 0x0231;
const sal_uInt16 BIFF5_ID_FONT = 0x0031;
const sal_uInt16 BIFF_ID_FONTCOLOR = 0x0045;
const sal_uInt16 BIFF_ID_FOOTER = 0x0015;
+const sal_uInt16 BIFF_ID_FORCEFULLCALC = 0x08A3;
const sal_uInt16 BIFF2_ID_FORMAT = 0x001E;
const sal_uInt16 BIFF4_ID_FORMAT = 0x041E;
const sal_uInt16 BIFF2_ID_FORMULA = 0x0006;
const sal_uInt16 BIFF3_ID_FORMULA = 0x0206;
const sal_uInt16 BIFF4_ID_FORMULA = 0x0406;
const sal_uInt16 BIFF5_ID_FORMULA = 0x0006;
+const sal_uInt16 BIFF_ID_GUTS = 0x0080;
const sal_uInt16 BIFF_ID_HCENTER = 0x0083;
const sal_uInt16 BIFF_ID_HEADER = 0x0014;
+const sal_uInt16 BIFF_ID_HEADERFOOTER = 0x089C;
const sal_uInt16 BIFF_ID_HIDEOBJ = 0x008D;
const sal_uInt16 BIFF_ID_HORPAGEBREAKS = 0x001B;
const sal_uInt16 BIFF_ID_HYPERLINK = 0x01B8;
const sal_uInt16 BIFF3_ID_IMGDATA = 0x007F;
const sal_uInt16 BIFF8_ID_IMGDATA = 0x00E9;
+const sal_uInt16 BIFF2_ID_INDEX = 0x000B;
+const sal_uInt16 BIFF3_ID_INDEX = 0x020B;
const sal_uInt16 BIFF2_ID_INTEGER = 0x0002;
const sal_uInt16 BIFF_ID_INTERFACEHDR = 0x00E1;
const sal_uInt16 BIFF_ID_ITERATION = 0x0011;
@@ -403,6 +416,7 @@ const sal_uInt16 BIFF_ID_MERGEDCELLS = 0x00E5;
const sal_uInt16 BIFF_ID_MSODRAWING = 0x00EC;
const sal_uInt16 BIFF_ID_MSODRAWINGGROUP = 0x00EB;
const sal_uInt16 BIFF_ID_MSODRAWINGSEL = 0x00ED;
+const sal_uInt16 BIFF_ID_MTHREADSETTINGS = 0x089A;
const sal_uInt16 BIFF_ID_MULTBLANK = 0x00BE;
const sal_uInt16 BIFF_ID_MULTRK = 0x00BD;
const sal_uInt16 BIFF_ID_NOTE = 0x001C;
@@ -410,6 +424,7 @@ const sal_uInt16 BIFF2_ID_NUMBER = 0x0003;
const sal_uInt16 BIFF3_ID_NUMBER = 0x0203;
const sal_uInt16 BIFF_ID_OBJ = 0x005D;
const sal_uInt16 BIFF_ID_OBJECTPROTECT = 0x0063;
+const sal_uInt16 BIFF_ID_PAGELAYOUTVIEW = 0x088B;
const sal_uInt16 BIFF_ID_PAGESETUP = 0x00A1;
const sal_uInt16 BIFF_ID_PALETTE = 0x0092;
const sal_uInt16 BIFF_ID_PANE = 0x0041;
@@ -448,6 +463,7 @@ const sal_uInt16 BIFF_ID_PTFITEM = 0x00B2;
const sal_uInt16 BIFF_ID_PTPAGEFIELDS = 0x00B6;
const sal_uInt16 BIFF_ID_PTROWCOLFIELDS = 0x00B4;
const sal_uInt16 BIFF_ID_PTROWCOLITEMS = 0x00B5;
+const sal_uInt16 BIFF_ID_RECALCID = 0x01C1;
const sal_uInt16 BIFF_ID_REFMODE = 0x000F;
const sal_uInt16 BIFF_ID_RIGHTMARGIN = 0x0027;
const sal_uInt16 BIFF_ID_RK = 0x027E;
@@ -461,11 +477,12 @@ const sal_uInt16 BIFF_ID_SCL = 0x00A0;
const sal_uInt16 BIFF_ID_SCENPROTECT = 0x00DD;
const sal_uInt16 BIFF_ID_SCREENTIP = 0x0800;
const sal_uInt16 BIFF_ID_SELECTION = 0x001D;
+const sal_uInt16 BIFF_ID_SHAREDFEATHEAD = 0x0867;
const sal_uInt16 BIFF_ID_SHAREDFMLA = 0x04BC;
const sal_uInt16 BIFF_ID_SHEET = 0x0085;
+const sal_uInt16 BIFF_ID_SHEETEXT = 0x0862;
const sal_uInt16 BIFF_ID_SHEETHEADER = 0x008F;
const sal_uInt16 BIFF_ID_SHEETPR = 0x0081;
-const sal_uInt16 BIFF_ID_SHEETPROTECTION = 0x0867;
const sal_uInt16 BIFF_ID_SST = 0x00FC;
const sal_uInt16 BIFF_ID_STANDARDWIDTH = 0x0099;
const sal_uInt16 BIFF2_ID_STRING = 0x0007;
@@ -473,6 +490,8 @@ const sal_uInt16 BIFF3_ID_STRING = 0x0207;
const sal_uInt16 BIFF_ID_STYLE = 0x0293;
const sal_uInt16 BIFF_ID_STYLEEXT = 0x0892;
const sal_uInt16 BIFF_ID_SXEXT = 0x00DC;
+const sal_uInt16 BIFF_ID_TABLESTYLES = 0x088E;
+const sal_uInt16 BIFF_ID_THEME = 0x0896;
const sal_uInt16 BIFF_ID_TOPMARGIN = 0x0028;
const sal_uInt16 BIFF_ID_TXO = 0x01B6;
const sal_uInt16 BIFF_ID_UNCALCED = 0x005E;
@@ -488,6 +507,8 @@ const sal_uInt16 BIFF2_ID_XF = 0x0043;
const sal_uInt16 BIFF3_ID_XF = 0x0243;
const sal_uInt16 BIFF4_ID_XF = 0x0443;
const sal_uInt16 BIFF5_ID_XF = 0x00E0;
+const sal_uInt16 BIFF_ID_XFCRC = 0x087C;
+const sal_uInt16 BIFF_ID_XFEXT = 0x087D;
const sal_uInt16 BIFF_ID_UNKNOWN = SAL_MAX_UINT16;
diff --git a/oox/inc/oox/xls/worksheetfragment.hxx b/oox/inc/oox/xls/worksheetfragment.hxx
index 110851ea9521..91250146f2ae 100644
--- a/oox/inc/oox/xls/worksheetfragment.hxx
+++ b/oox/inc/oox/xls/worksheetfragment.hxx
@@ -182,6 +182,8 @@ private:
void importPTDefinition();
/** Imports the SCENARIOS record and the following scenarios. */
void importScenarios();
+ /** Imports the SHAREDFEATHEAD record. */
+ void importSharedFeatHead();
/** Imports the STANDARDWIDTH record and sets standard column width. */
void importStandardWidth();