1*ca5ec200SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*ca5ec200SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*ca5ec200SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*ca5ec200SAndrew Rist * distributed with this work for additional information
6*ca5ec200SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*ca5ec200SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*ca5ec200SAndrew Rist * "License"); you may not use this file except in compliance
9*ca5ec200SAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*ca5ec200SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*ca5ec200SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*ca5ec200SAndrew Rist * software distributed under the License is distributed on an
15*ca5ec200SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*ca5ec200SAndrew Rist * KIND, either express or implied. See the License for the
17*ca5ec200SAndrew Rist * specific language governing permissions and limitations
18*ca5ec200SAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*ca5ec200SAndrew Rist *************************************************************/
21*ca5ec200SAndrew Rist
22*ca5ec200SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #include "oox/xls/workbooksettings.hxx"
25cdf0e10cSrcweir
26cdf0e10cSrcweir #include <com/sun/star/sheet/XCalculatable.hpp>
27cdf0e10cSrcweir #include <com/sun/star/util/Date.hpp>
28cdf0e10cSrcweir #include <com/sun/star/util/XNumberFormatsSupplier.hpp>
29cdf0e10cSrcweir #include <comphelper/mediadescriptor.hxx>
30cdf0e10cSrcweir #include "oox/core/filterbase.hxx"
31cdf0e10cSrcweir #include "oox/helper/attributelist.hxx"
32cdf0e10cSrcweir #include "oox/helper/propertyset.hxx"
33cdf0e10cSrcweir #include "oox/xls/biffinputstream.hxx"
34cdf0e10cSrcweir #include "oox/xls/unitconverter.hxx"
35cdf0e10cSrcweir
36cdf0e10cSrcweir namespace oox {
37cdf0e10cSrcweir namespace xls {
38cdf0e10cSrcweir
39cdf0e10cSrcweir // ============================================================================
40cdf0e10cSrcweir
41cdf0e10cSrcweir using namespace ::com::sun::star::beans;
42cdf0e10cSrcweir using namespace ::com::sun::star::sheet;
43cdf0e10cSrcweir using namespace ::com::sun::star::uno;
44cdf0e10cSrcweir using namespace ::com::sun::star::util;
45cdf0e10cSrcweir
46cdf0e10cSrcweir using ::comphelper::MediaDescriptor;
47cdf0e10cSrcweir using ::oox::core::CodecHelper;
48cdf0e10cSrcweir using ::rtl::OUString;
49cdf0e10cSrcweir
50cdf0e10cSrcweir // ============================================================================
51cdf0e10cSrcweir
52cdf0e10cSrcweir namespace {
53cdf0e10cSrcweir
54cdf0e10cSrcweir const sal_uInt32 BIFF12_WORKBOOKPR_DATE1904 = 0x00000001;
55cdf0e10cSrcweir const sal_uInt32 BIFF12_WORKBOOKPR_STRIPEXT = 0x00000080;
56cdf0e10cSrcweir
57cdf0e10cSrcweir const sal_uInt16 BIFF12_CALCPR_A1 = 0x0002;
58cdf0e10cSrcweir const sal_uInt16 BIFF12_CALCPR_ITERATE = 0x0004;
59cdf0e10cSrcweir const sal_uInt16 BIFF12_CALCPR_FULLPRECISION = 0x0008;
60cdf0e10cSrcweir const sal_uInt16 BIFF12_CALCPR_CALCCOMPLETED = 0x0010;
61cdf0e10cSrcweir const sal_uInt16 BIFF12_CALCPR_CALCONSAVE = 0x0020;
62cdf0e10cSrcweir const sal_uInt16 BIFF12_CALCPR_CONCURRENT = 0x0040;
63cdf0e10cSrcweir const sal_uInt16 BIFF12_CALCPR_MANUALPROC = 0x0080;
64cdf0e10cSrcweir
65cdf0e10cSrcweir // no predefined constants for show objects mode
66cdf0e10cSrcweir const sal_Int16 API_SHOWMODE_SHOW = 0; /// Show drawing objects.
67cdf0e10cSrcweir const sal_Int16 API_SHOWMODE_HIDE = 1; /// Hide drawing objects.
68cdf0e10cSrcweir const sal_Int16 API_SHOWMODE_PLACEHOLDER = 2; /// Show placeholders for drawing objects.
69cdf0e10cSrcweir
70cdf0e10cSrcweir } // namespace
71cdf0e10cSrcweir
72cdf0e10cSrcweir // ============================================================================
73cdf0e10cSrcweir
FileSharingModel()74cdf0e10cSrcweir FileSharingModel::FileSharingModel() :
75cdf0e10cSrcweir mnPasswordHash( 0 ),
76cdf0e10cSrcweir mbRecommendReadOnly( false )
77cdf0e10cSrcweir {
78cdf0e10cSrcweir }
79cdf0e10cSrcweir
80cdf0e10cSrcweir // ============================================================================
81cdf0e10cSrcweir
WorkbookSettingsModel()82cdf0e10cSrcweir WorkbookSettingsModel::WorkbookSettingsModel() :
83cdf0e10cSrcweir mnShowObjectMode( XML_all ),
84cdf0e10cSrcweir mnUpdateLinksMode( XML_userSet ),
85cdf0e10cSrcweir mnDefaultThemeVer( -1 ),
86cdf0e10cSrcweir mbDateMode1904( false ),
87cdf0e10cSrcweir mbSaveExtLinkValues( true )
88cdf0e10cSrcweir {
89cdf0e10cSrcweir }
90cdf0e10cSrcweir
setBiffObjectMode(sal_uInt16 nObjMode)91cdf0e10cSrcweir void WorkbookSettingsModel::setBiffObjectMode( sal_uInt16 nObjMode )
92cdf0e10cSrcweir {
93cdf0e10cSrcweir static const sal_Int32 spnObjModes[] = { XML_all, XML_placeholders, XML_none };
94cdf0e10cSrcweir mnShowObjectMode = STATIC_ARRAY_SELECT( spnObjModes, nObjMode, XML_all );
95cdf0e10cSrcweir }
96cdf0e10cSrcweir
97cdf0e10cSrcweir // ============================================================================
98cdf0e10cSrcweir
CalcSettingsModel()99cdf0e10cSrcweir CalcSettingsModel::CalcSettingsModel() :
100cdf0e10cSrcweir mfIterateDelta( 0.001 ),
101cdf0e10cSrcweir mnCalcId( -1 ),
102cdf0e10cSrcweir mnRefMode( XML_A1 ),
103cdf0e10cSrcweir mnCalcMode( XML_auto ),
104cdf0e10cSrcweir mnIterateCount( 100 ),
105cdf0e10cSrcweir mnProcCount( -1 ),
106cdf0e10cSrcweir mbCalcOnSave( true ),
107cdf0e10cSrcweir mbCalcCompleted( true ),
108cdf0e10cSrcweir mbFullPrecision( true ),
109cdf0e10cSrcweir mbIterate( false ),
110cdf0e10cSrcweir mbConcurrent( true ),
111cdf0e10cSrcweir mbUseNlr( false )
112cdf0e10cSrcweir {
113cdf0e10cSrcweir }
114cdf0e10cSrcweir
115cdf0e10cSrcweir // ============================================================================
116cdf0e10cSrcweir
WorkbookSettings(const WorkbookHelper & rHelper)117cdf0e10cSrcweir WorkbookSettings::WorkbookSettings( const WorkbookHelper& rHelper ) :
118cdf0e10cSrcweir WorkbookHelper( rHelper )
119cdf0e10cSrcweir {
120cdf0e10cSrcweir }
121cdf0e10cSrcweir
importFileSharing(const AttributeList & rAttribs)122cdf0e10cSrcweir void WorkbookSettings::importFileSharing( const AttributeList& rAttribs )
123cdf0e10cSrcweir {
124cdf0e10cSrcweir maFileSharing.maUserName = rAttribs.getXString( XML_userName, OUString() );
125cdf0e10cSrcweir maFileSharing.mnPasswordHash = CodecHelper::getPasswordHash( rAttribs, XML_reservationPassword );
126cdf0e10cSrcweir maFileSharing.mbRecommendReadOnly = rAttribs.getBool( XML_readOnlyRecommended, false );
127cdf0e10cSrcweir }
128cdf0e10cSrcweir
importWorkbookPr(const AttributeList & rAttribs)129cdf0e10cSrcweir void WorkbookSettings::importWorkbookPr( const AttributeList& rAttribs )
130cdf0e10cSrcweir {
131cdf0e10cSrcweir maBookSettings.maCodeName = rAttribs.getString( XML_codeName, OUString() );
132cdf0e10cSrcweir maBookSettings.mnShowObjectMode = rAttribs.getToken( XML_showObjects, XML_all );
133cdf0e10cSrcweir maBookSettings.mnUpdateLinksMode = rAttribs.getToken( XML_updateLinks, XML_userSet );
134cdf0e10cSrcweir maBookSettings.mnDefaultThemeVer = rAttribs.getInteger( XML_defaultThemeVersion, -1 );
135cdf0e10cSrcweir maBookSettings.mbSaveExtLinkValues = rAttribs.getBool( XML_saveExternalLinkValues, true );
136cdf0e10cSrcweir setDateMode( rAttribs.getBool( XML_date1904, false ) );
137cdf0e10cSrcweir }
138cdf0e10cSrcweir
importCalcPr(const AttributeList & rAttribs)139cdf0e10cSrcweir void WorkbookSettings::importCalcPr( const AttributeList& rAttribs )
140cdf0e10cSrcweir {
141cdf0e10cSrcweir maCalcSettings.mfIterateDelta = rAttribs.getDouble( XML_iterateDelta, 0.0001 );
142cdf0e10cSrcweir maCalcSettings.mnCalcId = rAttribs.getInteger( XML_calcId, -1 );
143cdf0e10cSrcweir maCalcSettings.mnRefMode = rAttribs.getToken( XML_refMode, XML_A1 );
144cdf0e10cSrcweir maCalcSettings.mnCalcMode = rAttribs.getToken( XML_calcMode, XML_auto );
145cdf0e10cSrcweir maCalcSettings.mnIterateCount = rAttribs.getInteger( XML_iterateCount, 100 );
146cdf0e10cSrcweir maCalcSettings.mnProcCount = rAttribs.getInteger( XML_concurrentManualCount, -1 );
147cdf0e10cSrcweir maCalcSettings.mbCalcOnSave = rAttribs.getBool( XML_calcOnSave, true );
148cdf0e10cSrcweir maCalcSettings.mbCalcCompleted = rAttribs.getBool( XML_calcCompleted, true );
149cdf0e10cSrcweir maCalcSettings.mbFullPrecision = rAttribs.getBool( XML_fullPrecision, true );
150cdf0e10cSrcweir maCalcSettings.mbIterate = rAttribs.getBool( XML_iterate, false );
151cdf0e10cSrcweir maCalcSettings.mbConcurrent = rAttribs.getBool( XML_concurrentCalc, true );
152cdf0e10cSrcweir }
153cdf0e10cSrcweir
importFileSharing(SequenceInputStream & rStrm)154cdf0e10cSrcweir void WorkbookSettings::importFileSharing( SequenceInputStream& rStrm )
155cdf0e10cSrcweir {
156cdf0e10cSrcweir maFileSharing.mbRecommendReadOnly = rStrm.readuInt16() != 0;
157cdf0e10cSrcweir rStrm >> maFileSharing.mnPasswordHash >> maFileSharing.maUserName;
158cdf0e10cSrcweir }
159cdf0e10cSrcweir
importWorkbookPr(SequenceInputStream & rStrm)160cdf0e10cSrcweir void WorkbookSettings::importWorkbookPr( SequenceInputStream& rStrm )
161cdf0e10cSrcweir {
162cdf0e10cSrcweir sal_uInt32 nFlags;
163cdf0e10cSrcweir rStrm >> nFlags >> maBookSettings.mnDefaultThemeVer >> maBookSettings.maCodeName;
164cdf0e10cSrcweir maBookSettings.setBiffObjectMode( extractValue< sal_uInt16 >( nFlags, 13, 2 ) );
165cdf0e10cSrcweir // set flag means: strip external link values
166cdf0e10cSrcweir maBookSettings.mbSaveExtLinkValues = !getFlag( nFlags, BIFF12_WORKBOOKPR_STRIPEXT );
167cdf0e10cSrcweir setDateMode( getFlag( nFlags, BIFF12_WORKBOOKPR_DATE1904 ) );
168cdf0e10cSrcweir }
169cdf0e10cSrcweir
importCalcPr(SequenceInputStream & rStrm)170cdf0e10cSrcweir void WorkbookSettings::importCalcPr( SequenceInputStream& rStrm )
171cdf0e10cSrcweir {
172cdf0e10cSrcweir sal_Int32 nCalcMode, nProcCount;
173cdf0e10cSrcweir sal_uInt16 nFlags;
174cdf0e10cSrcweir rStrm >> maCalcSettings.mnCalcId >> nCalcMode >> maCalcSettings.mnIterateCount >> maCalcSettings.mfIterateDelta >> nProcCount >> nFlags;
175cdf0e10cSrcweir
176cdf0e10cSrcweir static const sal_Int32 spnCalcModes[] = { XML_manual, XML_auto, XML_autoNoTable };
177cdf0e10cSrcweir maCalcSettings.mnRefMode = getFlagValue( nFlags, BIFF12_CALCPR_A1, XML_A1, XML_R1C1 );
178cdf0e10cSrcweir maCalcSettings.mnCalcMode = STATIC_ARRAY_SELECT( spnCalcModes, nCalcMode, XML_auto );
179cdf0e10cSrcweir maCalcSettings.mnProcCount = getFlagValue< sal_Int32 >( nFlags, BIFF12_CALCPR_MANUALPROC, nProcCount, -1 );
180cdf0e10cSrcweir maCalcSettings.mbCalcOnSave = getFlag( nFlags, BIFF12_CALCPR_CALCONSAVE );
181cdf0e10cSrcweir maCalcSettings.mbCalcCompleted = getFlag( nFlags, BIFF12_CALCPR_CALCCOMPLETED );
182cdf0e10cSrcweir maCalcSettings.mbFullPrecision = getFlag( nFlags, BIFF12_CALCPR_FULLPRECISION );
183cdf0e10cSrcweir maCalcSettings.mbIterate = getFlag( nFlags, BIFF12_CALCPR_ITERATE );
184cdf0e10cSrcweir maCalcSettings.mbConcurrent = getFlag( nFlags, BIFF12_CALCPR_CONCURRENT );
185cdf0e10cSrcweir }
186cdf0e10cSrcweir
setSaveExtLinkValues(bool bSaveExtLinks)187cdf0e10cSrcweir void WorkbookSettings::setSaveExtLinkValues( bool bSaveExtLinks )
188cdf0e10cSrcweir {
189cdf0e10cSrcweir maBookSettings.mbSaveExtLinkValues = bSaveExtLinks;
190cdf0e10cSrcweir }
191cdf0e10cSrcweir
importBookBool(BiffInputStream & rStrm)192cdf0e10cSrcweir void WorkbookSettings::importBookBool( BiffInputStream& rStrm )
193cdf0e10cSrcweir {
194cdf0e10cSrcweir // value of 0 means save external values, value of 1 means strip external values
195cdf0e10cSrcweir maBookSettings.mbSaveExtLinkValues = rStrm.readuInt16() == 0;
196cdf0e10cSrcweir }
197cdf0e10cSrcweir
importCalcCount(BiffInputStream & rStrm)198cdf0e10cSrcweir void WorkbookSettings::importCalcCount( BiffInputStream& rStrm )
199cdf0e10cSrcweir {
200cdf0e10cSrcweir maCalcSettings.mnIterateCount = rStrm.readuInt16();
201cdf0e10cSrcweir }
202cdf0e10cSrcweir
importCalcMode(BiffInputStream & rStrm)203cdf0e10cSrcweir void WorkbookSettings::importCalcMode( BiffInputStream& rStrm )
204cdf0e10cSrcweir {
205cdf0e10cSrcweir sal_Int16 nCalcMode = rStrm.readInt16() + 1;
206cdf0e10cSrcweir static const sal_Int32 spnCalcModes[] = { XML_autoNoTable, XML_manual, XML_auto };
207cdf0e10cSrcweir maCalcSettings.mnCalcMode = STATIC_ARRAY_SELECT( spnCalcModes, nCalcMode, XML_auto );
208cdf0e10cSrcweir }
209cdf0e10cSrcweir
importCodeName(BiffInputStream & rStrm)210cdf0e10cSrcweir void WorkbookSettings::importCodeName( BiffInputStream& rStrm )
211cdf0e10cSrcweir {
212cdf0e10cSrcweir maBookSettings.maCodeName = rStrm.readUniString();
213cdf0e10cSrcweir }
214cdf0e10cSrcweir
importDateMode(BiffInputStream & rStrm)215cdf0e10cSrcweir void WorkbookSettings::importDateMode( BiffInputStream& rStrm )
216cdf0e10cSrcweir {
217cdf0e10cSrcweir setDateMode( rStrm.readuInt16() != 0 );
218cdf0e10cSrcweir }
219cdf0e10cSrcweir
importDelta(BiffInputStream & rStrm)220cdf0e10cSrcweir void WorkbookSettings::importDelta( BiffInputStream& rStrm )
221cdf0e10cSrcweir {
222cdf0e10cSrcweir rStrm >> maCalcSettings.mfIterateDelta;
223cdf0e10cSrcweir }
224cdf0e10cSrcweir
importFileSharing(BiffInputStream & rStrm)225cdf0e10cSrcweir void WorkbookSettings::importFileSharing( BiffInputStream& rStrm )
226cdf0e10cSrcweir {
227cdf0e10cSrcweir maFileSharing.mbRecommendReadOnly = rStrm.readuInt16() != 0;
228cdf0e10cSrcweir rStrm >> maFileSharing.mnPasswordHash;
229cdf0e10cSrcweir if( getBiff() == BIFF8 )
230cdf0e10cSrcweir {
231cdf0e10cSrcweir sal_uInt16 nStrLen = rStrm.readuInt16();
232cdf0e10cSrcweir // there is no string flags field if string is empty
233cdf0e10cSrcweir if( nStrLen > 0 )
234cdf0e10cSrcweir maFileSharing.maUserName = rStrm.readUniStringBody( nStrLen );
235cdf0e10cSrcweir }
236cdf0e10cSrcweir else
237cdf0e10cSrcweir {
238cdf0e10cSrcweir maFileSharing.maUserName = rStrm.readByteStringUC( false, getTextEncoding() );
239cdf0e10cSrcweir }
240cdf0e10cSrcweir }
241cdf0e10cSrcweir
importHideObj(BiffInputStream & rStrm)242cdf0e10cSrcweir void WorkbookSettings::importHideObj( BiffInputStream& rStrm )
243cdf0e10cSrcweir {
244cdf0e10cSrcweir maBookSettings.setBiffObjectMode( rStrm.readuInt16() );
245cdf0e10cSrcweir }
246cdf0e10cSrcweir
importIteration(BiffInputStream & rStrm)247cdf0e10cSrcweir void WorkbookSettings::importIteration( BiffInputStream& rStrm )
248cdf0e10cSrcweir {
249cdf0e10cSrcweir maCalcSettings.mbIterate = rStrm.readuInt16() != 0;
250cdf0e10cSrcweir }
251cdf0e10cSrcweir
importPrecision(BiffInputStream & rStrm)252cdf0e10cSrcweir void WorkbookSettings::importPrecision( BiffInputStream& rStrm )
253cdf0e10cSrcweir {
254cdf0e10cSrcweir maCalcSettings.mbFullPrecision = rStrm.readuInt16() != 0;
255cdf0e10cSrcweir }
256cdf0e10cSrcweir
importRefMode(BiffInputStream & rStrm)257cdf0e10cSrcweir void WorkbookSettings::importRefMode( BiffInputStream& rStrm )
258cdf0e10cSrcweir {
259cdf0e10cSrcweir maCalcSettings.mnRefMode = (rStrm.readuInt16() == 0) ? XML_R1C1 : XML_A1;
260cdf0e10cSrcweir }
261cdf0e10cSrcweir
importSaveRecalc(BiffInputStream & rStrm)262cdf0e10cSrcweir void WorkbookSettings::importSaveRecalc( BiffInputStream& rStrm )
263cdf0e10cSrcweir {
264cdf0e10cSrcweir maCalcSettings.mbCalcOnSave = rStrm.readuInt16() != 0;
265cdf0e10cSrcweir }
266cdf0e10cSrcweir
importUncalced(BiffInputStream &)267cdf0e10cSrcweir void WorkbookSettings::importUncalced( BiffInputStream& )
268cdf0e10cSrcweir {
269cdf0e10cSrcweir // existence of this record indicates incomplete recalc
270cdf0e10cSrcweir maCalcSettings.mbCalcCompleted = false;
271cdf0e10cSrcweir }
272cdf0e10cSrcweir
importUsesElfs(BiffInputStream & rStrm)273cdf0e10cSrcweir void WorkbookSettings::importUsesElfs( BiffInputStream& rStrm )
274cdf0e10cSrcweir {
275cdf0e10cSrcweir maCalcSettings.mbUseNlr = rStrm.readuInt16() != 0;
276cdf0e10cSrcweir }
277cdf0e10cSrcweir
finalizeImport()278cdf0e10cSrcweir void WorkbookSettings::finalizeImport()
279cdf0e10cSrcweir {
280cdf0e10cSrcweir // default settings
281cdf0e10cSrcweir PropertySet aPropSet( getDocument() );
282cdf0e10cSrcweir switch( getFilterType() )
283cdf0e10cSrcweir {
284cdf0e10cSrcweir case FILTER_OOXML:
285cdf0e10cSrcweir case FILTER_BIFF:
286cdf0e10cSrcweir aPropSet.setProperty( PROP_IgnoreCase, true ); // always in Excel
287cdf0e10cSrcweir aPropSet.setProperty( PROP_RegularExpressions, false ); // not supported in Excel
288cdf0e10cSrcweir break;
289cdf0e10cSrcweir case FILTER_UNKNOWN:
290cdf0e10cSrcweir break;
291cdf0e10cSrcweir }
292cdf0e10cSrcweir
293cdf0e10cSrcweir // write protection
294cdf0e10cSrcweir if( maFileSharing.mbRecommendReadOnly || (maFileSharing.mnPasswordHash != 0) ) try
295cdf0e10cSrcweir {
296cdf0e10cSrcweir getBaseFilter().getMediaDescriptor()[ CREATE_OUSTRING( "ReadOnly" ) ] <<= true;
297cdf0e10cSrcweir
298cdf0e10cSrcweir Reference< XPropertySet > xDocumentSettings( getBaseFilter().getModelFactory()->createInstance(
299cdf0e10cSrcweir CREATE_OUSTRING( "com.sun.star.document.Settings" ) ), UNO_QUERY_THROW );
300cdf0e10cSrcweir PropertySet aSettingsProp( xDocumentSettings );
301cdf0e10cSrcweir if( maFileSharing.mbRecommendReadOnly )
302cdf0e10cSrcweir aSettingsProp.setProperty( PROP_LoadReadonly, true );
303cdf0e10cSrcweir // if( maFileSharing.mnPasswordHash != 0 )
304cdf0e10cSrcweir // aSettingsProp.setProperty( PROP_ModifyPasswordHash, static_cast< sal_Int32 >( maFileSharing.mnPasswordHash ) );
305cdf0e10cSrcweir }
306cdf0e10cSrcweir catch( Exception& )
307cdf0e10cSrcweir {
308cdf0e10cSrcweir }
309cdf0e10cSrcweir
310cdf0e10cSrcweir // calculation settings
311cdf0e10cSrcweir Date aNullDate = getNullDate();
312cdf0e10cSrcweir
313cdf0e10cSrcweir aPropSet.setProperty( PROP_NullDate, aNullDate );
314cdf0e10cSrcweir aPropSet.setProperty( PROP_IsIterationEnabled, maCalcSettings.mbIterate );
315cdf0e10cSrcweir aPropSet.setProperty( PROP_IterationCount, maCalcSettings.mnIterateCount );
316cdf0e10cSrcweir aPropSet.setProperty( PROP_IterationEpsilon, maCalcSettings.mfIterateDelta );
317cdf0e10cSrcweir aPropSet.setProperty( PROP_CalcAsShown, !maCalcSettings.mbFullPrecision );
318cdf0e10cSrcweir aPropSet.setProperty( PROP_LookUpLabels, maCalcSettings.mbUseNlr );
319cdf0e10cSrcweir
320cdf0e10cSrcweir Reference< XNumberFormatsSupplier > xNumFmtsSupp( getDocument(), UNO_QUERY );
321cdf0e10cSrcweir if( xNumFmtsSupp.is() )
322cdf0e10cSrcweir {
323cdf0e10cSrcweir PropertySet aNumFmtProp( xNumFmtsSupp->getNumberFormatSettings() );
324cdf0e10cSrcweir aNumFmtProp.setProperty( PROP_NullDate, aNullDate );
325cdf0e10cSrcweir }
326cdf0e10cSrcweir
327cdf0e10cSrcweir Reference< XCalculatable > xCalculatable( getDocument(), UNO_QUERY );
328cdf0e10cSrcweir if( xCalculatable.is() )
329cdf0e10cSrcweir xCalculatable->enableAutomaticCalculation( (maCalcSettings.mnCalcMode == XML_auto) || (maCalcSettings.mnCalcMode == XML_autoNoTable) );
330cdf0e10cSrcweir
331cdf0e10cSrcweir // VBA code name
332cdf0e10cSrcweir aPropSet.setProperty( PROP_CodeName, maBookSettings.maCodeName );
333cdf0e10cSrcweir }
334cdf0e10cSrcweir
getApiShowObjectMode() const335cdf0e10cSrcweir sal_Int16 WorkbookSettings::getApiShowObjectMode() const
336cdf0e10cSrcweir {
337cdf0e10cSrcweir switch( maBookSettings.mnShowObjectMode )
338cdf0e10cSrcweir {
339cdf0e10cSrcweir case XML_all: return API_SHOWMODE_SHOW;
340cdf0e10cSrcweir case XML_none: return API_SHOWMODE_HIDE;
341cdf0e10cSrcweir // #i80528# placeholders not supported anymore, but this is handled internally in Calc
342cdf0e10cSrcweir case XML_placeholders: return API_SHOWMODE_PLACEHOLDER;
343cdf0e10cSrcweir }
344cdf0e10cSrcweir return API_SHOWMODE_SHOW;
345cdf0e10cSrcweir }
346cdf0e10cSrcweir
getNullDate() const347cdf0e10cSrcweir Date WorkbookSettings::getNullDate() const
348cdf0e10cSrcweir {
349cdf0e10cSrcweir static const Date saDate1900( 30, 12, 1899 ), saDate1904( 1, 1, 1904 );
350cdf0e10cSrcweir return maBookSettings.mbDateMode1904 ? saDate1904 : saDate1900;
351cdf0e10cSrcweir }
352cdf0e10cSrcweir
setDateMode(bool bDateMode1904)353cdf0e10cSrcweir void WorkbookSettings::setDateMode( bool bDateMode1904 )
354cdf0e10cSrcweir {
355cdf0e10cSrcweir maBookSettings.mbDateMode1904 = bDateMode1904;
356cdf0e10cSrcweir getUnitConverter().finalizeNullDate( getNullDate() );
357cdf0e10cSrcweir }
358cdf0e10cSrcweir
359cdf0e10cSrcweir // ============================================================================
360cdf0e10cSrcweir
361cdf0e10cSrcweir } // namespace xls
362cdf0e10cSrcweir } // namespace oox
363