1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* 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_XLS_WORKSHEETBUFFER_HXX
#define OOX_XLS_WORKSHEETBUFFER_HXX
#include <utility>
#include "oox/helper/refmap.hxx"
#include "oox/helper/refvector.hxx"
#include "oox/xls/workbookhelper.hxx"
namespace com { namespace sun { namespace star {
namespace i18n { class XCharacterClassification; }
} } }
namespace oox {
namespace xls {
// ============================================================================
/** Contains data from the 'sheet' element describing a sheet in the workbook. */
struct SheetInfoModel
{
::rtl::OUString maRelId; /// Relation identifier for the sheet substream.
::rtl::OUString maName; /// Original name of the sheet.
sal_Int64 mnBiffHandle; /// BIFF record handle of the sheet substream.
sal_Int32 mnSheetId; /// Sheet identifier.
sal_Int32 mnState; /// Visibility state.
explicit SheetInfoModel();
};
// ============================================================================
/** Stores information about all sheets in a spreadsheet document.
Information about sheets includes the sheet name, the visibility state, and
for the OOXML filter, the relation identifier of the sheet used to obtain
the related worksheet fragment.
*/
class WorksheetBuffer : public WorkbookHelper
{
public:
explicit WorksheetBuffer( const WorkbookHelper& rHelper );
/** Returns the base file name without path and file extension. */
static ::rtl::OUString getBaseFileName( const ::rtl::OUString& rUrl );
/** Initializes the buffer for single sheet files (BIFF2-BIFF4). */
void initializeSingleSheet();
/** Imports the attributes of a sheet element. */
void importSheet( const AttributeList& rAttribs );
/** Imports the SHEET record from the passed BIFF12 stream. */
void importSheet( SequenceInputStream& rStrm );
/** Imports the SHEET record from the passed BIFF stream. */
void importSheet( BiffInputStream& rStrm );
/** Inserts a new empty sheet into the document. Looks for an unused name.
@return Index of the new sheet in the Calc document. */
sal_Int16 insertEmptySheet( const ::rtl::OUString& rPreferredName, bool bVisible );
/** Returns the number of original sheets contained in the workbook. */
sal_Int32 getWorksheetCount() const;
/** Returns the OOXML relation identifier of the specified worksheet. */
::rtl::OUString getWorksheetRelId( sal_Int32 nWorksheet ) const;
/** Returns the BIFF record handle of the associated sheet substream. */
sal_Int64 getBiffRecordHandle( sal_Int32 nWorksheet ) const;
/** Returns the Calc index of the specified worksheet. */
sal_Int16 getCalcSheetIndex( sal_Int32 nWorksheet ) const;
/** Returns the finalized name of the specified worksheet. */
::rtl::OUString getCalcSheetName( sal_Int32 nWorksheet ) const;
/** Returns the Calc index of the sheet with the passed original worksheet name. */
sal_Int16 getCalcSheetIndex( const ::rtl::OUString& rWorksheetName ) const;
/** Returns the finalized name of the sheet with the passed worksheet name. */
::rtl::OUString getCalcSheetName( const ::rtl::OUString& rWorksheetName ) const;
private:
struct SheetInfo : public SheetInfoModel
{
::rtl::OUString maCalcName;
::rtl::OUString maCalcQuotedName;
sal_Int16 mnCalcSheet;
explicit SheetInfo( const SheetInfoModel& rModel, sal_Int16 nCalcSheet, const ::rtl::OUString& rCalcName );
};
typedef ::std::pair< sal_Int16, ::rtl::OUString > IndexNamePair;
/** Creates a new sheet in the Calc document. Does not insert anything in the own lists. */
IndexNamePair createSheet( const ::rtl::OUString& rPreferredName, sal_Int32 nSheetPos, bool bVisible );
/** Creates a new sheet in the Calc document and inserts the related SheetInfo. */
void insertSheet( const SheetInfoModel& rModel );
private:
typedef RefVector< SheetInfo > SheetInfoVector;
SheetInfoVector maSheetInfos;
typedef RefMap< ::rtl::OUString, SheetInfo, IgnoreCaseCompare > SheetInfoMap;
SheetInfoMap maSheetInfosByName;
};
// ============================================================================
} // namespace xls
} // namespace oox
#endif
|