1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sc.hxx"
26
27
28
29 // INCLUDE ---------------------------------------------------------------
30 #include "XMLStylesImportHelper.hxx"
31 #include "xmlimprt.hxx"
32 #include <tools/debug.hxx>
33 #include <com/sun/star/util/NumberFormat.hpp>
34
35 using namespace com::sun::star;
36
AddStyleNumberFormat(const rtl::OUString & rStyleName,const sal_Int32 nNumberFormat)37 void ScMyStyleNumberFormats::AddStyleNumberFormat(const rtl::OUString& rStyleName, const sal_Int32 nNumberFormat)
38 {
39 aSet.insert(ScMyStyleNumberFormat(rStyleName, nNumberFormat));
40 }
41
GetStyleNumberFormat(const rtl::OUString & rStyleName)42 sal_Int32 ScMyStyleNumberFormats::GetStyleNumberFormat(const rtl::OUString& rStyleName)
43 {
44 ScMyStyleNumberFormat aStyleNumberFormat(rStyleName);
45 ScMyStyleNumberFormatSet::iterator aItr(aSet.find(aStyleNumberFormat));
46 if (aItr == aSet.end())
47 return -1;
48 else
49 return aItr->nNumberFormat;
50 }
51
ScMyStyleRanges()52 ScMyStyleRanges::ScMyStyleRanges()
53 :
54 pTextList(NULL),
55 pNumberList(NULL),
56 pTimeList(NULL),
57 pDateTimeList(NULL),
58 pPercentList(NULL),
59 pLogicalList(NULL),
60 pUndefinedList(NULL),
61 pCurrencyList(NULL)
62 {
63 }
64
~ScMyStyleRanges()65 ScMyStyleRanges::~ScMyStyleRanges()
66 {
67 if (pTextList)
68 delete pTextList;
69 if (pNumberList)
70 delete pNumberList;
71 if (pTimeList)
72 delete pTimeList;
73 if (pDateTimeList)
74 delete pDateTimeList;
75 if (pPercentList)
76 delete pPercentList;
77 if (pLogicalList)
78 delete pLogicalList;
79 if (pUndefinedList)
80 delete pUndefinedList;
81 if (pCurrencyList)
82 delete pCurrencyList;
83 }
84
AddRange(const ScRange & rRange,ScRangeList * pList,const rtl::OUString * pStyleName,const sal_Int16 nType,ScXMLImport & rImport,const sal_uInt32 nMaxRanges)85 void ScMyStyleRanges::AddRange(const ScRange& rRange, ScRangeList* pList,
86 const rtl::OUString* pStyleName, const sal_Int16 nType,
87 ScXMLImport& rImport, const sal_uInt32 nMaxRanges)
88 {
89 pList->Join(rRange);
90 DBG_ASSERT(nMaxRanges > 0, "MaxRanges to less");
91 if (pList->Count() > nMaxRanges)
92 {
93 sal_Int32 nCount(pList->Count());
94 ScRange* pRange(NULL);
95 for (sal_Int32 i = 0; i < nCount; ++i)
96 {
97 pRange = pList->GetObject(i);
98 if (pRange && (pRange->aEnd.Row() + 1 < rRange.aStart.Row()))
99 {
100 rImport.SetStyleToRange(*pRange, pStyleName, nType, NULL);
101 delete pRange;
102 pRange = NULL;
103 pList->Remove(i);
104 }
105 }
106 }
107 }
108
AddCurrencyRange(const ScRange & rRange,ScRangeListRef xList,const rtl::OUString * pStyleName,const rtl::OUString * pCurrency,ScXMLImport & rImport,const sal_uInt32 nMaxRanges)109 void ScMyStyleRanges::AddCurrencyRange(const ScRange& rRange, ScRangeListRef xList,
110 const rtl::OUString* pStyleName, const rtl::OUString* pCurrency,
111 ScXMLImport& rImport, const sal_uInt32 nMaxRanges)
112 {
113 xList->Join(rRange);
114 DBG_ASSERT(nMaxRanges > 0, "MaxRanges to less");
115 if (xList->Count() > nMaxRanges)
116 {
117 sal_Int32 nCount(xList->Count());
118 ScRange* pRange(NULL);
119 for (sal_Int32 i = 0; i < nCount; ++i)
120 {
121 pRange = xList->GetObject(i);
122 if (pRange && (pRange->aEnd.Row() + 1 < rRange.aStart.Row()))
123 {
124 rImport.SetStyleToRange(*pRange, pStyleName, util::NumberFormat::CURRENCY, pCurrency);
125 delete pRange;
126 pRange = NULL;
127 xList->Remove(i);
128 }
129 }
130 }
131 }
132
AddRange(const ScRange & rRange,const rtl::OUString * pStyleName,const sal_Int16 nType,ScXMLImport & rImport,const sal_uInt32 nMaxRanges)133 void ScMyStyleRanges::AddRange(const ScRange& rRange,
134 const rtl::OUString* pStyleName, const sal_Int16 nType,
135 ScXMLImport& rImport, const sal_uInt32 nMaxRanges)
136 {
137 switch (nType)
138 {
139 case util::NumberFormat::NUMBER:
140 {
141 if (!pNumberList)
142 pNumberList = new ScRangeList();
143 AddRange(rRange, pNumberList, pStyleName, nType, rImport, nMaxRanges);
144 }
145 break;
146 case util::NumberFormat::TEXT:
147 {
148 if (!pTextList)
149 pTextList = new ScRangeList();
150 AddRange(rRange, pTextList, pStyleName, nType, rImport, nMaxRanges);
151 }
152 break;
153 case util::NumberFormat::TIME:
154 {
155 if (!pTimeList)
156 pTimeList = new ScRangeList();
157 AddRange(rRange, pTimeList, pStyleName, nType, rImport, nMaxRanges);
158 }
159 break;
160 case util::NumberFormat::DATETIME:
161 {
162 if (!pDateTimeList)
163 pDateTimeList = new ScRangeList();
164 AddRange(rRange, pDateTimeList, pStyleName, nType, rImport, nMaxRanges);
165 }
166 break;
167 case util::NumberFormat::PERCENT:
168 {
169 if (!pPercentList)
170 pPercentList = new ScRangeList();
171 AddRange(rRange, pPercentList, pStyleName, nType, rImport, nMaxRanges);
172 }
173 break;
174 case util::NumberFormat::LOGICAL:
175 {
176 if (!pLogicalList)
177 pLogicalList = new ScRangeList();
178 AddRange(rRange, pLogicalList, pStyleName, nType, rImport, nMaxRanges);
179 }
180 break;
181 case util::NumberFormat::UNDEFINED:
182 {
183 if (!pUndefinedList)
184 pUndefinedList = new ScRangeList();
185 AddRange(rRange, pUndefinedList, pStyleName, nType, rImport, nMaxRanges);
186 }
187 break;
188 default:
189 {
190 DBG_ERROR("wrong type");
191 }
192 break;
193 }
194 }
195
AddCurrencyRange(const ScRange & rRange,const rtl::OUString * pStyleName,const rtl::OUString * pCurrency,ScXMLImport & rImport,const sal_uInt32 nMaxRanges)196 void ScMyStyleRanges::AddCurrencyRange(const ScRange& rRange,
197 const rtl::OUString* pStyleName, const rtl::OUString* pCurrency,
198 ScXMLImport& rImport, const sal_uInt32 nMaxRanges)
199 {
200 if (!pCurrencyList)
201 pCurrencyList = new ScMyCurrencyStylesSet();
202 ScMyCurrencyStyle aStyle;
203 if (pCurrency)
204 aStyle.sCurrency = *pCurrency;
205 ScMyCurrencyStylesSet::iterator aItr(pCurrencyList->find(aStyle));
206 if (aItr == pCurrencyList->end())
207 {
208 std::pair<ScMyCurrencyStylesSet::iterator, bool> aPair(pCurrencyList->insert(aStyle));
209 if (aPair.second)
210 {
211 aItr = aPair.first;
212 AddCurrencyRange(rRange, aItr->xRanges, pStyleName, pCurrency, rImport, nMaxRanges);
213 }
214 }
215 else
216 aItr->xRanges->Join(rRange);
217 }
218
InsertColRow(const ScRange & rRange,const SCsCOL nDx,const SCsROW nDy,const SCsTAB nDz,ScDocument * pDoc)219 void ScMyStyleRanges::InsertColRow(const ScRange& rRange, const SCsCOL nDx, const SCsROW nDy,
220 const SCsTAB nDz, ScDocument* pDoc)
221 {
222 UpdateRefMode aRefMode(URM_INSDEL);
223 if (pNumberList)
224 pNumberList->UpdateReference(aRefMode, pDoc, rRange, nDx, nDy, nDz);
225 if (pTextList)
226 pTextList->UpdateReference(aRefMode, pDoc, rRange, nDx, nDy, nDz);
227 if (pTimeList)
228 pTimeList->UpdateReference(aRefMode, pDoc, rRange, nDx, nDy, nDz);
229 if (pDateTimeList)
230 pDateTimeList->UpdateReference(aRefMode, pDoc, rRange, nDx, nDy, nDz);
231 if (pPercentList)
232 pPercentList->UpdateReference(aRefMode, pDoc, rRange, nDx, nDy, nDz);
233 if (pLogicalList)
234 pLogicalList->UpdateReference(aRefMode, pDoc, rRange, nDx, nDy, nDz);
235 if (pUndefinedList)
236 pUndefinedList->UpdateReference(aRefMode, pDoc, rRange, nDx, nDy, nDz);
237 if (pCurrencyList)
238 {
239 ScMyCurrencyStylesSet::iterator aItr(pCurrencyList->begin());
240 ScMyCurrencyStylesSet::iterator aEndItr(pCurrencyList->end());
241 while (aItr != aEndItr)
242 {
243 aItr->xRanges->UpdateReference(aRefMode, pDoc, rRange, nDx, nDy, nDz);
244 ++aItr;
245 }
246 }
247 }
248
InsertRow(const sal_Int32 nRow,const sal_Int32 nTab,ScDocument * pDoc)249 void ScMyStyleRanges::InsertRow(const sal_Int32 nRow, const sal_Int32 nTab, ScDocument* pDoc)
250 {
251 InsertColRow(ScRange(0, static_cast<SCROW>(nRow), static_cast<SCTAB>(nTab),
252 MAXCOL, MAXROW, static_cast<SCTAB>(nTab)), 0, 1, 0, pDoc);
253 }
254
InsertCol(const sal_Int32 nCol,const sal_Int32 nTab,ScDocument * pDoc)255 void ScMyStyleRanges::InsertCol(const sal_Int32 nCol, const sal_Int32 nTab, ScDocument* pDoc)
256 {
257 InsertColRow(ScRange(static_cast<SCCOL>(nCol), 0, static_cast<SCTAB>(nTab),
258 MAXCOL, MAXROW, static_cast<SCTAB>(nTab)), 1, 0, 0, pDoc);
259 }
260
SetStylesToRanges(ScRangeList * pList,const rtl::OUString * pStyleName,const sal_Int16 nCellType,const rtl::OUString * pCurrency,ScXMLImport & rImport)261 void ScMyStyleRanges::SetStylesToRanges(ScRangeList* pList,
262 const rtl::OUString* pStyleName, const sal_Int16 nCellType,
263 const rtl::OUString* pCurrency, ScXMLImport& rImport)
264 {
265 sal_Int32 nCount(pList->Count());
266 for (sal_Int32 i = 0; i < nCount; ++i)
267 rImport.SetStyleToRange(*pList->GetObject(i), pStyleName, nCellType, pCurrency);
268 }
269
SetStylesToRanges(ScRangeListRef xList,const rtl::OUString * pStyleName,const sal_Int16 nCellType,const rtl::OUString * pCurrency,ScXMLImport & rImport)270 void ScMyStyleRanges::SetStylesToRanges(ScRangeListRef xList,
271 const rtl::OUString* pStyleName, const sal_Int16 nCellType,
272 const rtl::OUString* pCurrency, ScXMLImport& rImport)
273 {
274 sal_Int32 nCount(xList->Count());
275 for (sal_Int32 i = 0; i < nCount; ++i)
276 rImport.SetStyleToRange(*xList->GetObject(i), pStyleName, nCellType, pCurrency);
277 }
278
SetStylesToRanges(const rtl::OUString * pStyleName,ScXMLImport & rImport)279 void ScMyStyleRanges::SetStylesToRanges(const rtl::OUString* pStyleName, ScXMLImport& rImport)
280 {
281 if (pNumberList)
282 SetStylesToRanges(pNumberList, pStyleName, util::NumberFormat::NUMBER, NULL, rImport);
283 if (pTextList)
284 SetStylesToRanges(pTextList, pStyleName, util::NumberFormat::TEXT, NULL, rImport);
285 if (pTimeList)
286 SetStylesToRanges(pTimeList, pStyleName, util::NumberFormat::TIME, NULL, rImport);
287 if (pDateTimeList)
288 SetStylesToRanges(pDateTimeList, pStyleName, util::NumberFormat::DATETIME, NULL, rImport);
289 if (pPercentList)
290 SetStylesToRanges(pPercentList, pStyleName, util::NumberFormat::PERCENT, NULL, rImport);
291 if (pLogicalList)
292 SetStylesToRanges(pLogicalList, pStyleName, util::NumberFormat::LOGICAL, NULL, rImport);
293 if (pUndefinedList)
294 SetStylesToRanges(pUndefinedList, pStyleName, util::NumberFormat::UNDEFINED, NULL, rImport);
295 if (pCurrencyList)
296 {
297 ScMyCurrencyStylesSet::iterator aItr(pCurrencyList->begin());
298 ScMyCurrencyStylesSet::iterator aEndItr(pCurrencyList->end());
299 while (aItr != aEndItr)
300 {
301 SetStylesToRanges(aItr->xRanges, pStyleName, util::NumberFormat::CURRENCY, &aItr->sCurrency, rImport);
302 ++aItr;
303 }
304 }
305 }
306
307 //----------------------------------------------------------------------------
308
ScMyStylesImportHelper(ScXMLImport & rTempImport)309 ScMyStylesImportHelper::ScMyStylesImportHelper(ScXMLImport& rTempImport)
310 :
311 aRowDefaultStyle(aCellStyles.end()),
312 rImport(rTempImport),
313 pStyleName(NULL),
314 pPrevStyleName(NULL),
315 pCurrency(NULL),
316 pPrevCurrency(NULL),
317 nMaxRanges(0),
318 bPrevRangeAdded(sal_True)
319 {
320 }
321
~ScMyStylesImportHelper()322 ScMyStylesImportHelper::~ScMyStylesImportHelper()
323 {
324 if (pPrevStyleName)
325 delete pPrevStyleName;
326 if (pPrevCurrency)
327 delete pPrevCurrency;
328 if (pStyleName)
329 delete pStyleName;
330 if (pCurrency)
331 delete pCurrency;
332 }
333
ResetAttributes()334 void ScMyStylesImportHelper::ResetAttributes()
335 {
336 if (pPrevStyleName)
337 delete pPrevStyleName;
338 if (pPrevCurrency)
339 delete pPrevCurrency;
340 pPrevStyleName = pStyleName;
341 pPrevCurrency = pCurrency;
342 nPrevCellType = nCellType;
343 pStyleName = NULL;
344 pCurrency = NULL;
345 nCellType = 0;
346 }
347
GetIterator(const rtl::OUString * pStyleNameP)348 ScMyStylesSet::iterator ScMyStylesImportHelper::GetIterator(const rtl::OUString* pStyleNameP)
349 {
350 ScMyStyle aStyle;
351 if (pStyleNameP)
352 aStyle.sStyleName = *pStyleNameP;
353 else
354 {
355 DBG_ERROR("here is no stylename given");
356 }
357 ScMyStylesSet::iterator aItr(aCellStyles.find(aStyle));
358 if (aItr == aCellStyles.end())
359 {
360 std::pair<ScMyStylesSet::iterator, bool> aPair(aCellStyles.insert(aStyle));
361 if (aPair.second)
362 aItr = aPair.first;
363 else
364 {
365 DBG_ERROR("not possible to insert style");
366 return aCellStyles.end();
367 }
368 }
369 return aItr;
370 }
371
AddDefaultRange(const ScRange & rRange)372 void ScMyStylesImportHelper::AddDefaultRange(const ScRange& rRange)
373 {
374 DBG_ASSERT(aRowDefaultStyle != aCellStyles.end(), "no row default style");
375 if (!aRowDefaultStyle->sStyleName.getLength())
376 {
377 SCCOL nStartCol(rRange.aStart.Col());
378 SCCOL nEndCol(rRange.aEnd.Col());
379 if (aColDefaultStyles.size() > sal::static_int_cast<sal_uInt32>(nStartCol))
380 {
381 ScMyStylesSet::iterator aPrevItr(aColDefaultStyles[nStartCol]);
382 DBG_ASSERT(aColDefaultStyles.size() > sal::static_int_cast<sal_uInt32>(nEndCol), "to much columns");
383 for (SCCOL i = nStartCol + 1; (i <= nEndCol) && (i < sal::static_int_cast<SCCOL>(aColDefaultStyles.size())); ++i)
384 {
385 if (aPrevItr != aColDefaultStyles[i])
386 {
387 DBG_ASSERT(aPrevItr != aCellStyles.end(), "no column default style");
388 ScRange aRange(rRange);
389 aRange.aStart.SetCol(nStartCol);
390 aRange.aEnd.SetCol(i - 1);
391 if (pPrevStyleName)
392 delete pPrevStyleName;
393 pPrevStyleName = new rtl::OUString(aPrevItr->sStyleName);
394 AddSingleRange(aRange);
395 nStartCol = i;
396 aPrevItr = aColDefaultStyles[i];
397 }
398 }
399 if (aPrevItr != aCellStyles.end())
400 {
401 ScRange aRange(rRange);
402 aRange.aStart.SetCol(nStartCol);
403 if (pPrevStyleName)
404 delete pPrevStyleName;
405 pPrevStyleName = new rtl::OUString(aPrevItr->sStyleName);
406 AddSingleRange(aRange);
407 }
408 else
409 {
410 DBG_ERRORFILE("no column default style");
411 }
412 }
413 else
414 {
415 DBG_ERRORFILE("to much columns");
416 }
417 }
418 else
419 {
420 if (pPrevStyleName)
421 delete pPrevStyleName;
422 pPrevStyleName = new rtl::OUString(aRowDefaultStyle->sStyleName);
423 AddSingleRange(rRange);
424 }
425 }
426
AddSingleRange(const ScRange & rRange)427 void ScMyStylesImportHelper::AddSingleRange(const ScRange& rRange)
428 {
429 if (nMaxRanges == 0)
430 nMaxRanges = aColDefaultStyles.size();
431 ScMyStylesSet::iterator aItr(GetIterator(pPrevStyleName));
432 if (aItr != aCellStyles.end())
433 {
434 if (nPrevCellType != util::NumberFormat::CURRENCY)
435 aItr->xRanges->AddRange(rRange, pPrevStyleName, nPrevCellType,
436 rImport, nMaxRanges);
437 else
438 aItr->xRanges->AddCurrencyRange(rRange, pPrevStyleName, pPrevCurrency,
439 rImport, nMaxRanges);
440 }
441 }
442
AddRange()443 void ScMyStylesImportHelper::AddRange()
444 {
445 if (pPrevStyleName && pPrevStyleName->getLength())
446 AddSingleRange(aPrevRange);
447 else
448 AddDefaultRange(aPrevRange);
449 ResetAttributes();
450 }
451
AddColumnStyle(const rtl::OUString & sStyleName,const sal_Int32 nColumn,const sal_Int32 nRepeat)452 void ScMyStylesImportHelper::AddColumnStyle(const rtl::OUString& sStyleName, const sal_Int32 nColumn, const sal_Int32 nRepeat)
453 {
454 (void)nColumn; // avoid warning in product version
455 DBG_ASSERT(static_cast<sal_uInt32>(nColumn) == aColDefaultStyles.size(), "some columns are absent");
456 ScMyStylesSet::iterator aItr(GetIterator(&sStyleName));
457 DBG_ASSERT(aItr != aCellStyles.end(), "no column default style");
458 aColDefaultStyles.reserve(aColDefaultStyles.size() + nRepeat);
459 for (sal_Int32 i = 0; i < nRepeat; ++i)
460 aColDefaultStyles.push_back(aItr);
461 }
462
SetRowStyle(const rtl::OUString & sStyleName)463 void ScMyStylesImportHelper::SetRowStyle(const rtl::OUString& sStyleName)
464 {
465 aRowDefaultStyle = GetIterator(&sStyleName);
466 }
467
SetAttributes(rtl::OUString * pStyleNameP,rtl::OUString * pCurrencyP,const sal_Int16 nCellTypeP)468 void ScMyStylesImportHelper::SetAttributes(rtl::OUString* pStyleNameP,
469 rtl::OUString* pCurrencyP, const sal_Int16 nCellTypeP)
470 {
471 if (this->pStyleName)
472 delete this->pStyleName;
473 if (this->pCurrency)
474 delete this->pCurrency;
475 this->pStyleName = pStyleNameP;
476 this->pCurrency = pCurrencyP;
477 this->nCellType = nCellTypeP;
478 }
479
AddRange(const ScRange & rRange)480 void ScMyStylesImportHelper::AddRange(const ScRange& rRange)
481 {
482 if (!bPrevRangeAdded)
483 {
484 sal_Bool bAddRange(sal_False);
485 if (nCellType == nPrevCellType &&
486 IsEqual(pStyleName, pPrevStyleName) &&
487 IsEqual(pCurrency, pPrevCurrency))
488 {
489 if (rRange.aStart.Row() == aPrevRange.aStart.Row())
490 {
491 if (rRange.aEnd.Row() == aPrevRange.aEnd.Row())
492 {
493 DBG_ASSERT(aPrevRange.aEnd.Col() + 1 == rRange.aStart.Col(), "something wents wrong");
494 aPrevRange.aEnd.SetCol(rRange.aEnd.Col());
495 }
496 else
497 bAddRange = sal_True;
498 }
499 else
500 {
501 if (rRange.aStart.Col() == aPrevRange.aStart.Col() &&
502 rRange.aEnd.Col() == aPrevRange.aEnd.Col())
503 {
504 DBG_ASSERT(aPrevRange.aEnd.Row() + 1 == rRange.aStart.Row(), "something wents wrong");
505 aPrevRange.aEnd.SetRow(rRange.aEnd.Row());
506 }
507 else
508 bAddRange = sal_True;
509 }
510 }
511 else
512 bAddRange = sal_True;
513 if (bAddRange)
514 {
515 AddRange();
516 aPrevRange = rRange;
517 }
518 }
519 else
520 {
521 aPrevRange = rRange;
522 ResetAttributes();
523 bPrevRangeAdded = sal_False;
524 }
525 }
526
AddCell(const com::sun::star::table::CellAddress & rAddress)527 void ScMyStylesImportHelper::AddCell(const com::sun::star::table::CellAddress& rAddress)
528 {
529 ScAddress aScAddress( static_cast<SCCOL>(rAddress.Column), static_cast<SCROW>(rAddress.Row), rAddress.Sheet );
530 ScRange aScRange( aScAddress, aScAddress );
531 AddRange(aScRange);
532 }
533
InsertRow(const sal_Int32 nRow,const sal_Int32 nTab,ScDocument * pDoc)534 void ScMyStylesImportHelper::InsertRow(const sal_Int32 nRow, const sal_Int32 nTab, ScDocument* pDoc)
535 {
536 rImport.LockSolarMutex();
537 ScMyStylesSet::iterator aItr(aCellStyles.begin());
538 ScMyStylesSet::iterator aEndItr(aCellStyles.end());
539 while (aItr != aEndItr)
540 {
541 aItr->xRanges->InsertRow(nRow, nTab, pDoc);
542 ++aItr;
543 }
544 rImport.UnlockSolarMutex();
545 }
546
InsertCol(const sal_Int32 nCol,const sal_Int32 nTab,ScDocument * pDoc)547 void ScMyStylesImportHelper::InsertCol(const sal_Int32 nCol, const sal_Int32 nTab, ScDocument* pDoc)
548 {
549 rImport.LockSolarMutex();
550 ScMyStylesSet::iterator aItr(aCellStyles.begin());
551 ScMyStylesSet::iterator aEndItr(aCellStyles.end());
552 while (aItr != aEndItr)
553 {
554 aItr->xRanges->InsertCol(nCol, nTab, pDoc);
555 ++aItr;
556 }
557 rImport.UnlockSolarMutex();
558 }
559
EndTable()560 void ScMyStylesImportHelper::EndTable()
561 {
562 if (!bPrevRangeAdded)
563 {
564 AddRange();
565 bPrevRangeAdded = sal_True;
566 }
567 nMaxRanges = 0;
568 }
569
SetStylesToRanges()570 void ScMyStylesImportHelper::SetStylesToRanges()
571 {
572 ScMyStylesSet::iterator aItr(aCellStyles.begin());
573 ScMyStylesSet::iterator aEndItr(aCellStyles.end());
574 while (aItr != aEndItr)
575 {
576 aItr->xRanges->SetStylesToRanges(&aItr->sStyleName, rImport);
577 ++aItr;
578 }
579 aColDefaultStyles.clear();
580 aCellStyles.clear();
581 nMaxRanges = 0;
582 }
583
584