2
2
3
3
namespace PhpOffice \PhpSpreadsheet \Writer \Ods ;
4
4
5
+ use PhpOffice \PhpSpreadsheet \Cell \CellAddress ;
6
+ use PhpOffice \PhpSpreadsheet \Spreadsheet ;
5
7
use PhpOffice \PhpSpreadsheet \Cell \Coordinate ;
6
8
use PhpOffice \PhpSpreadsheet \Shared \XMLWriter ;
9
+ use PhpOffice \PhpSpreadsheet \Worksheet \Worksheet ;
7
10
8
11
class Settings extends WriterPart
9
12
{
@@ -45,28 +48,9 @@ public function write(): string
45
48
$ objWriter ->text ('view1 ' );
46
49
$ objWriter ->endElement (); // ViewId
47
50
$ objWriter ->startElement ('config:config-item-map-named ' );
48
- $ objWriter ->writeAttribute ('config:name ' , 'Tables ' );
49
- foreach ($ spreadsheet ->getWorksheetIterator () as $ ws ) {
50
- $ objWriter ->startElement ('config:config-item-map-entry ' );
51
- $ objWriter ->writeAttribute ('config:name ' , $ ws ->getTitle ());
52
- $ selected = $ ws ->getSelectedCells ();
53
- if (preg_match ('/^([a-z]+)([0-9]+)/i ' , $ selected , $ matches ) === 1 ) {
54
- $ colSel = Coordinate::columnIndexFromString ($ matches [1 ]) - 1 ;
55
- $ rowSel = (int ) $ matches [2 ] - 1 ;
56
- $ objWriter ->startElement ('config:config-item ' );
57
- $ objWriter ->writeAttribute ('config:name ' , 'CursorPositionX ' );
58
- $ objWriter ->writeAttribute ('config:type ' , 'int ' );
59
- $ objWriter ->text ($ colSel );
60
- $ objWriter ->endElement ();
61
- $ objWriter ->startElement ('config:config-item ' );
62
- $ objWriter ->writeAttribute ('config:name ' , 'CursorPositionY ' );
63
- $ objWriter ->writeAttribute ('config:type ' , 'int ' );
64
- $ objWriter ->text ($ rowSel );
65
- $ objWriter ->endElement ();
66
- }
67
- $ objWriter ->endElement (); // config:config-item-map-entry
68
- }
69
- $ objWriter ->endElement (); // config:config-item-map-named
51
+
52
+ $ this ->writeAllWorksheetSettings ($ objWriter , $ spreadsheet );
53
+
70
54
$ wstitle = $ spreadsheet ->getActiveSheet ()->getTitle ();
71
55
$ objWriter ->startElement ('config:config-item ' );
72
56
$ objWriter ->writeAttribute ('config:name ' , 'ActiveTable ' );
@@ -85,4 +69,112 @@ public function write(): string
85
69
86
70
return $ objWriter ->getData ();
87
71
}
72
+
73
+ private function writeAllWorksheetSettings (XMLWriter $ objWriter , Spreadsheet $ spreadsheet ): void
74
+ {
75
+ $ objWriter ->writeAttribute ('config:name ' , 'Tables ' );
76
+
77
+ foreach ($ spreadsheet ->getWorksheetIterator () as $ worksheet ) {
78
+ $ this ->writeWorksheetSettings ($ objWriter , $ worksheet );
79
+ }
80
+
81
+ $ objWriter ->endElement (); // config:config-item-map-entry Tables
82
+ }
83
+
84
+ private function writeWorksheetSettings (XMLWriter $ objWriter , Worksheet $ worksheet ): void
85
+ {
86
+ $ objWriter ->startElement ('config:config-item-map-entry ' );
87
+ $ objWriter ->writeAttribute ('config:name ' , $ worksheet ->getTitle ());
88
+
89
+ $ this ->writeSelectedCells ($ objWriter , $ worksheet );
90
+ if ($ worksheet ->getFreezePane () !== null ) {
91
+ $ this ->writeFreezePane ($ objWriter , $ worksheet );
92
+ }
93
+
94
+ $ objWriter ->endElement (); // config:config-item-map-entry Worksheet
95
+ }
96
+
97
+ private function writeSelectedCells (XMLWriter $ objWriter , Worksheet $ worksheet ): void
98
+ {
99
+ $ selected = $ worksheet ->getSelectedCells ();
100
+ if (preg_match ('/^([a-z]+)([0-9]+)/i ' , $ selected , $ matches ) === 1 ) {
101
+ $ colSel = Coordinate::columnIndexFromString ($ matches [1 ]) - 1 ;
102
+ $ rowSel = (int )$ matches [2 ] - 1 ;
103
+ $ objWriter ->startElement ('config:config-item ' );
104
+ $ objWriter ->writeAttribute ('config:name ' , 'CursorPositionX ' );
105
+ $ objWriter ->writeAttribute ('config:type ' , 'int ' );
106
+ $ objWriter ->text ($ colSel );
107
+ $ objWriter ->endElement ();
108
+ $ objWriter ->startElement ('config:config-item ' );
109
+ $ objWriter ->writeAttribute ('config:name ' , 'CursorPositionY ' );
110
+ $ objWriter ->writeAttribute ('config:type ' , 'int ' );
111
+ $ objWriter ->text ($ rowSel );
112
+ $ objWriter ->endElement ();
113
+ }
114
+ }
115
+
116
+ private function writeFreezePane (XMLWriter $ objWriter , Worksheet $ worksheet ): void
117
+ {
118
+ $ freezePane = CellAddress::fromCellAddress ($ worksheet ->getFreezePane ());
119
+ $ columnId = $ freezePane ->columnId ();
120
+ $ columnName = $ freezePane ->columnName ();
121
+ $ row = $ freezePane ->rowId ();
122
+
123
+ var_dump ($ freezePane ->cellAddress (), $ freezePane ->columnName (), $ freezePane ->columnId (), $ freezePane ->rowId ());
124
+
125
+ if ($ columnId > 1 ) {
126
+ $ objWriter ->startElement ('config:config-item ' );
127
+ $ objWriter ->writeAttribute ('config:name ' , 'HorizontalSplitMode ' );
128
+ $ objWriter ->writeAttribute ('config:type ' , 'short ' );
129
+ $ objWriter ->text (2 );
130
+ $ objWriter ->endElement ();
131
+ $ objWriter ->startElement ('config:config-item ' );
132
+ $ objWriter ->writeAttribute ('config:name ' , 'HorizontalSplitPosition ' );
133
+ $ objWriter ->writeAttribute ('config:type ' , 'int ' );
134
+ $ objWriter ->text ($ columnId - 1 );
135
+ $ objWriter ->endElement ();
136
+ $ objWriter ->startElement ('config:config-item ' );
137
+ $ objWriter ->writeAttribute ('config:name ' , 'PositionLeft ' );
138
+ $ objWriter ->writeAttribute ('config:type ' , 'short ' );
139
+ $ objWriter ->text (0 );
140
+ $ objWriter ->endElement ();
141
+ $ objWriter ->startElement ('config:config-item ' );
142
+ $ objWriter ->writeAttribute ('config:name ' , 'PositionRight ' );
143
+ $ objWriter ->writeAttribute ('config:type ' , 'int ' );
144
+ $ objWriter ->text ($ columnId - 1 );
145
+ $ objWriter ->endElement ();
146
+
147
+ for ($ column = 'A ' ; $ column !== $ columnName ; ++$ column ) {
148
+ $ worksheet ->getColumnDimension ($ column )->setAutoSize (true );
149
+ }
150
+ }
151
+ if ($ row > 1 ) {
152
+ $ objWriter ->startElement ('config:config-item ' );
153
+ $ objWriter ->writeAttribute ('config:name ' , 'VerticalSplitMode ' );
154
+ $ objWriter ->writeAttribute ('config:type ' , 'short ' );
155
+ $ objWriter ->text (2 );
156
+ $ objWriter ->endElement ();
157
+ $ objWriter ->startElement ('config:config-item ' );
158
+ $ objWriter ->writeAttribute ('config:name ' , 'VerticalSplitPosition ' );
159
+ $ objWriter ->writeAttribute ('config:type ' , 'int ' );
160
+ $ objWriter ->text ($ row - 1 );
161
+ $ objWriter ->endElement ();
162
+ $ objWriter ->startElement ('config:config-item ' );
163
+ $ objWriter ->writeAttribute ('config:name ' , 'PositionTop ' );
164
+ $ objWriter ->writeAttribute ('config:type ' , 'short ' );
165
+ $ objWriter ->text (0 );
166
+ $ objWriter ->endElement ();
167
+ $ objWriter ->startElement ('config:config-item ' );
168
+ $ objWriter ->writeAttribute ('config:name ' , 'PositionBottom ' );
169
+ $ objWriter ->writeAttribute ('config:type ' , 'int ' );
170
+ $ objWriter ->text ($ row - 1 );
171
+ $ objWriter ->endElement ();
172
+ }
173
+
174
+ $ objWriter ->startElement ('config:config-item ' );
175
+ $ objWriter ->writeAttribute ('config:name ' , 'ActiveSplitRange ' );
176
+ $ objWriter ->writeAttribute ('config:type ' , 'short ' );
177
+ $ objWriter ->text (3 );
178
+ $ objWriter ->endElement ();
179
+ }
88
180
}
0 commit comments