| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef SC_XLTOOLS_HXX |
| #define SC_XLTOOLS_HXX |
| |
| #include "address.hxx" |
| #include "ftools.hxx" |
| |
| class SfxObjectShell; |
| |
| // BIFF versions ============================================================== |
| |
| #define DBG_ERROR_BIFF() DBG_ERRORFILE( "Unknown BIFF type!" ) |
| #define DBG_ASSERT_BIFF( c ) DBG_ASSERT( c, "Unknown BIFF type!" ) |
| |
| // Enumerations =============================================================== |
| |
| /** An enumeration for all Excel error codes and the values true and false. */ |
| enum XclBoolError |
| { |
| xlErrNull, /// The error code #NULL! |
| xlErrDiv0, /// The error code #DIV/0! |
| xlErrValue, /// The error code #VALUE! |
| xlErrRef, /// The error code #REF! |
| xlErrName, /// The error code #NAME? |
| xlErrNum, /// The error code #NUM! |
| xlErrNA, /// The error code #N/A! |
| xlErrTrue, /// The Boolean value true. |
| xlErrFalse, /// The Boolean value false. |
| xlErrUnknown /// For unknown codes and values. |
| }; |
| |
| // GUID import/export ========================================================= |
| |
| class XclImpStream; |
| class XclExpStream; |
| |
| /** This struct stores a GUID (class ID) and supports reading, writing and comparison. */ |
| struct XclGuid |
| { |
| sal_uInt8 mpnData[ 16 ]; /// Stores GUID always in little endian. |
| |
| explicit XclGuid(); |
| explicit XclGuid( |
| sal_uInt32 nData1, |
| sal_uInt16 nData2, sal_uInt16 nData3, |
| sal_uInt8 nData41, sal_uInt8 nData42, |
| sal_uInt8 nData43, sal_uInt8 nData44, |
| sal_uInt8 nData45, sal_uInt8 nData46, |
| sal_uInt8 nData47, sal_uInt8 nData48 ); |
| }; |
| |
| bool operator==( const XclGuid& rCmp1, const XclGuid& rCmp2 ); |
| inline bool operator!=( const XclGuid& rCmp1, const XclGuid& rCmp2 ) { return !(rCmp1 == rCmp2); } |
| bool operator<( const XclGuid& rCmp1, const XclGuid& rCmp2 ); |
| |
| XclImpStream& operator>>( XclImpStream& rStrm, XclGuid& rGuid ); |
| XclExpStream& operator<<( XclExpStream& rStrm, const XclGuid& rGuid ); |
| |
| // Excel Tools ================================================================ |
| |
| class SvStream; |
| class ScDocument; |
| |
| /** This class contains static helper methods for the Excel import and export filters. */ |
| class XclTools : ScfNoInstance |
| { |
| public: |
| // GUID's ----------------------------------------------------------------- |
| |
| static const XclGuid maGuidStdLink; /// GUID of StdLink (HLINK record). |
| static const XclGuid maGuidUrlMoniker; /// GUID of URL moniker (HLINK record). |
| static const XclGuid maGuidFileMoniker; /// GUID of file moniker (HLINK record). |
| |
| // numeric conversion ----------------------------------------------------- |
| |
| /** Calculates the double value from an RK value (encoded integer or double). */ |
| static double GetDoubleFromRK( sal_Int32 nRKValue ); |
| /** Calculates an RK value (encoded integer or double) from a double value. |
| @param rnRKValue Returns the calculated RK value. |
| @param fValue The double value. |
| @return true = An RK value could be created. */ |
| static bool GetRKFromDouble( sal_Int32& rnRKValue, double fValue ); |
| |
| /** Calculates an angle (in 1/100 of degrees) from an Excel angle value. |
| @param nRotForStacked This value will be returned, if nXclRot contains 'stacked'. */ |
| static sal_Int32 GetScRotation( sal_uInt16 nXclRot, sal_Int32 nRotForStacked ); |
| /** Calculates the Excel angle value from an angle in 1/100 of degrees. */ |
| static sal_uInt8 GetXclRotation( sal_Int32 nScRot ); |
| |
| /** Calculates BIFF8 rotation angle from BIFF2-BIFF5 text orientation. */ |
| static sal_uInt8 GetXclRotFromOrient( sal_uInt8 nXclOrient ); |
| /** Calculates BIFF2-BIFF5 text orientation from BIFF8 rotation angle. */ |
| static sal_uInt8 GetXclOrientFromRot( sal_uInt16 nXclRot ); |
| |
| /** Converts a Calc error code to an Excel error code. */ |
| static sal_uInt8 GetXclErrorCode( sal_uInt16 nScError ); |
| /** Converts an Excel error code to a Calc error code. */ |
| static sal_uInt16 GetScErrorCode( sal_uInt8 nXclError ); |
| |
| /** Converts the passed BIFF error to a double containing the respective Calc error code. */ |
| static double ErrorToDouble( sal_uInt8 nXclError ); |
| /** Gets a translated error code or Boolean value from Excel error codes. |
| @param rfDblValue Returns 0.0 for error codes or the value of a Boolean (0.0 or 1.0). |
| @param bErrorOrBool false = nError is a Boolean value; true = is an error value. |
| @param nValue The error code or Boolean value. */ |
| static XclBoolError ErrorToEnum( double& rfDblValue, sal_uInt8 bErrOrBool, sal_uInt8 nValue ); |
| |
| /** Returns the length in twips calculated from a length in inches. */ |
| static sal_uInt16 GetTwipsFromInch( double fInches ); |
| /** Returns the length in twips calculated from a length in 1/100 mm. */ |
| static sal_uInt16 GetTwipsFromHmm( sal_Int32 nHmm ); |
| |
| /** Returns the length in inches calculated from a length in twips. */ |
| static double GetInchFromTwips( sal_Int32 nTwips ); |
| /** Returns the length in inches calculated from a length in 1/100 mm. */ |
| static double GetInchFromHmm( sal_Int32 nHmm ); |
| |
| /** Returns the length in 1/100 mm calculated from a length in inches. */ |
| static sal_Int32 GetHmmFromInch( double fInches ); |
| /** Returns the length in 1/100 mm calculated from a length in twips. */ |
| static sal_Int32 GetHmmFromTwips( sal_Int32 nTwips ); |
| |
| /** Returns the Calc column width (twips) for the passed Excel width. |
| @param nScCharWidth Width of the '0' character in Calc (twips). */ |
| static sal_uInt16 GetScColumnWidth( sal_uInt16 nXclWidth, long nScCharWidth ); |
| /** Returns the Excel column width for the passed Calc width (twips). |
| @param nScCharWidth Width of the '0' character in Calc (twips). */ |
| static sal_uInt16 GetXclColumnWidth( sal_uInt16 nScWidth, long nScCharWidth ); |
| |
| /** Returns a correction value to convert column widths from/to default column widths. |
| @param nXclDefFontHeight Excel height of application default font. */ |
| static double GetXclDefColWidthCorrection( long nXclDefFontHeight ); |
| |
| // formatting ------------------------------------------------------------- |
| |
| /** Returns the best fitting color for an Excel pattern area format. */ |
| static Color GetPatternColor( const Color& rPattColor, const Color& rBackColor, sal_uInt16 nXclPattern ); |
| |
| // text encoding ---------------------------------------------------------- |
| |
| /** Returns a text encoding from an Excel code page. |
| @return The corresponding text encoding or RTL_TEXTENCODING_DONTKNOW. */ |
| static rtl_TextEncoding GetTextEncoding( sal_uInt16 nCodePage ); |
| |
| /** Returns an Excel code page from a text encoding. */ |
| static sal_uInt16 GetXclCodePage( rtl_TextEncoding eTextEnc ); |
| |
| // font names ------------------------------------------------------------- |
| |
| /** Returns the matching Excel font name for a passed Calc font name. */ |
| static String GetXclFontName( const String& rFontName ); |
| |
| // built-in defined names ------------------------------------------------- |
| |
| /** Returns the raw English UI representation of a built-in defined name used in NAME records. |
| @param cBuiltIn Excel index of the built-in name. */ |
| static String GetXclBuiltInDefName( sal_Unicode cBuiltIn ); |
| /** Returns the Calc UI representation of a built-in defined name used in NAME records. |
| @descr Adds a prefix to the representation returned by GetXclBuiltInDefName(). |
| @param cBuiltIn Excel index of the built-in name. */ |
| static String GetBuiltInDefName( sal_Unicode cBuiltIn ); |
| /** Returns the Excel built-in name index of the passed defined name from Calc. |
| @descr Ignores any characters following a valid representation of a built-in name. |
| @param pcBuiltIn (out-param) If not 0, the index of the built-in name will be returned here. |
| @return true = passed string is a built-in name; false = user-defined name. */ |
| static sal_Unicode GetBuiltInDefNameIndex( const String& rDefName ); |
| |
| // built-in style names --------------------------------------------------- |
| |
| /** Returns the specified built-in cell style name. |
| @param nStyleId The identifier of the built-in style. |
| @param rName Default name for unknown styles. |
| @param nLevel The zero-based outline level for RowLevel and ColLevel styles. |
| @return The style name or an empty string, if the parameters are not valid. */ |
| static String GetBuiltInStyleName( sal_uInt8 nStyleId, const String& rName, sal_uInt8 nLevel ); |
| /** Returns the passed style name with a special built-in prefix. */ |
| static String GetBuiltInStyleName( const String& rStyleName ); |
| /** Returns true, if the passed string is a name of an Excel built-in style. |
| @param pnStyleId If not 0, the found style identifier will be returned here. |
| @param pnNextChar If not 0, the index of the char after the evaluated substring will be returned here. */ |
| static bool IsBuiltInStyleName( const String& rStyleName, sal_uInt8* pnStyleId = 0, xub_StrLen* pnNextChar = 0 ); |
| /** Returns the Excel built-in style identifier of a passed style name. |
| @param rnStyleId The style identifier is returned here. |
| @param rnLevel The zero-based outline level for RowLevel and ColLevel styles is returned here. |
| @param rStyleName The style name to examine. |
| @return true = passed string is a built-in style name, false = user style. */ |
| static bool GetBuiltInStyleId( |
| sal_uInt8& rnStyleId, sal_uInt8& rnLevel, |
| const String& rStyleName ); |
| |
| // conditional formatting style names ------------------------------------- |
| |
| /** Returns the style name for a single condition of a conditional formatting. |
| @param nScTab The current Calc sheet index. |
| @param nFormat The zero-based index of the conditional formatting. |
| @param nCondition The zero-based index of the condition. |
| @return A style sheet name in the form "Excel_CondFormat_<sheet>_<format>_<condition>". */ |
| static String GetCondFormatStyleName( SCTAB nScTab, sal_Int32 nFormat, sal_uInt16 nCondition ); |
| /** Returns true, if the passed string is a name of a conditional format style created by Excel import. |
| @param pnNextChar If not 0, the index of the char after the evaluated substring will be returned here. */ |
| static bool IsCondFormatStyleName( const String& rStyleName, xub_StrLen* pnNextChar = 0 ); |
| |
| // stream handling -------------------------------------------------------- |
| |
| /** Skips a substream (BOF/EOF record block). Includes all embedded substreams. */ |
| static void SkipSubStream( XclImpStream& rStrm ); |
| |
| // Basic macro names ------------------------------------------------------ |
| |
| /** Returns the full StarBasic macro URL from an Excel macro name. */ |
| static ::rtl::OUString GetSbMacroUrl( const String& rMacroName, SfxObjectShell* pDocShell = 0 ); |
| /** Returns the full StarBasic macro URL from an Excel module and macro name. */ |
| static ::rtl::OUString GetSbMacroUrl( const String& rModuleName, const String& rMacroName, SfxObjectShell* pDocShell = 0 ); |
| /** Returns the Excel macro name from a full StarBasic macro URL. */ |
| static String GetXclMacroName( const ::rtl::OUString& rSbMacroUrl ); |
| |
| // ------------------------------------------------------------------------ |
| private: |
| static const String maDefNamePrefix; /// Prefix for built-in defined names. |
| static const String maStyleNamePrefix1; /// Prefix for built-in cell style names. |
| static const String maStyleNamePrefix2; /// Prefix for built-in cell style names from OOX filter. |
| static const String maCFStyleNamePrefix1; /// Prefix for cond. formatting style names. |
| static const String maCFStyleNamePrefix2; /// Prefix for cond. formatting style names from OOX filter. |
| static const ::rtl::OUString maSbMacroPrefix; /// Prefix for StarBasic macros. |
| static const ::rtl::OUString maSbMacroSuffix; /// Suffix for StarBasic macros. |
| }; |
| |
| // read/write colors ---------------------------------------------------------- |
| |
| /** Reads a color from the passed stream. |
| @descr The color has the format (all values 8-bit): Red, Green, Blue, 0. */ |
| XclImpStream& operator>>( XclImpStream& rStrm, Color& rColor ); |
| |
| /** Reads a color to the passed stream. |
| @descr The color has the format (all values 8-bit): Red, Green, Blue, 0. */ |
| XclExpStream& operator<<( XclExpStream& rStrm, const Color& rColor ); |
| |
| // ============================================================================ |
| |
| #endif |
| |