Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# Copyright (c) 2010-2020 openpyxl 

2 

3from openpyxl.descriptors.serialisable import Serialisable 

4from openpyxl.descriptors import ( 

5 Typed, 

6 Integer, 

7 NoneSet, 

8 Set, 

9 Float, 

10 Bool, 

11 DateTime, 

12 String, 

13 Alias, 

14 Bool, 

15 Sequence, 

16) 

17 

18from openpyxl.descriptors.excel import ExtensionList, Relation 

19from openpyxl.descriptors.nested import NestedInteger 

20from openpyxl.descriptors.sequence import NestedSequence 

21from openpyxl.xml.constants import SHEET_MAIN_NS 

22from openpyxl.xml.functions import tostring 

23from openpyxl.packaging.relationship import ( 

24 RelationshipList, 

25 Relationship, 

26 get_rels_path 

27) 

28 

29from openpyxl.worksheet.filters import ( 

30 AutoFilter, 

31 CellRange, 

32 ColorFilter, 

33 CustomFilter, 

34 CustomFilters, 

35 DateGroupItem, 

36 DynamicFilter, 

37 FilterColumn, 

38 Filters, 

39 IconFilter, 

40 SortCondition, 

41 SortState, 

42 Top10, 

43) 

44 

45 

46class HierarchyUsage(Serialisable): 

47 

48 tagname = "hierarchyUsage" 

49 

50 hierarchyUsage = Integer() 

51 

52 def __init__(self, 

53 hierarchyUsage=None, 

54 ): 

55 self.hierarchyUsage = hierarchyUsage 

56 

57 

58class ColHierarchiesUsage(Serialisable): 

59 

60 tagname = "colHierarchiesUsage" 

61 

62 colHierarchyUsage = Sequence(expected_type=HierarchyUsage, ) 

63 

64 __elements__ = ('colHierarchyUsage',) 

65 __attrs__ = ('count', ) 

66 

67 def __init__(self, 

68 count=None, 

69 colHierarchyUsage=(), 

70 ): 

71 self.colHierarchyUsage = colHierarchyUsage 

72 

73 

74 @property 

75 def count(self): 

76 return len(self.colHierarchyUsage) 

77 

78 

79class RowHierarchiesUsage(Serialisable): 

80 

81 tagname = "rowHierarchiesUsage" 

82 

83 rowHierarchyUsage = Sequence(expected_type=HierarchyUsage, ) 

84 

85 __elements__ = ('rowHierarchyUsage',) 

86 __attrs__ = ('count', ) 

87 

88 def __init__(self, 

89 count=None, 

90 rowHierarchyUsage=(), 

91 ): 

92 self.rowHierarchyUsage = rowHierarchyUsage 

93 

94 @property 

95 def count(self): 

96 return len(self.rowHierarchyUsage) 

97 

98 

99class PivotFilter(Serialisable): 

100 

101 tagname = "filter" 

102 

103 fld = Integer() 

104 mpFld = Integer(allow_none=True) 

105 type = Set(values=(['unknown', 'count', 'percent', 'sum', 'captionEqual', 

106 'captionNotEqual', 'captionBeginsWith', 'captionNotBeginsWith', 

107 'captionEndsWith', 'captionNotEndsWith', 'captionContains', 

108 'captionNotContains', 'captionGreaterThan', 'captionGreaterThanOrEqual', 

109 'captionLessThan', 'captionLessThanOrEqual', 'captionBetween', 

110 'captionNotBetween', 'valueEqual', 'valueNotEqual', 'valueGreaterThan', 

111 'valueGreaterThanOrEqual', 'valueLessThan', 'valueLessThanOrEqual', 

112 'valueBetween', 'valueNotBetween', 'dateEqual', 'dateNotEqual', 

113 'dateOlderThan', 'dateOlderThanOrEqual', 'dateNewerThan', 

114 'dateNewerThanOrEqual', 'dateBetween', 'dateNotBetween', 'tomorrow', 

115 'today', 'yesterday', 'nextWeek', 'thisWeek', 'lastWeek', 'nextMonth', 

116 'thisMonth', 'lastMonth', 'nextQuarter', 'thisQuarter', 'lastQuarter', 

117 'nextYear', 'thisYear', 'lastYear', 'yearToDate', 'Q1', 'Q2', 'Q3', 'Q4', 

118 'M1', 'M2', 'M3', 'M4', 'M5', 'M6', 'M7', 'M8', 'M9', 'M10', 'M11', 

119 'M12'])) 

120 evalOrder = Integer(allow_none=True) 

121 id = Integer() 

122 iMeasureHier = Integer(allow_none=True) 

123 iMeasureFld = Integer(allow_none=True) 

124 name = String(allow_none=True) 

125 description = String(allow_none=True) 

126 stringValue1 = String(allow_none=True) 

127 stringValue2 = String(allow_none=True) 

128 autoFilter = Typed(expected_type=AutoFilter, ) 

129 extLst = Typed(expected_type=ExtensionList, allow_none=True) 

130 

131 __elements__ = ('autoFilter',) 

132 

133 def __init__(self, 

134 fld=None, 

135 mpFld=None, 

136 type=None, 

137 evalOrder=None, 

138 id=None, 

139 iMeasureHier=None, 

140 iMeasureFld=None, 

141 name=None, 

142 description=None, 

143 stringValue1=None, 

144 stringValue2=None, 

145 autoFilter=None, 

146 extLst=None, 

147 ): 

148 self.fld = fld 

149 self.mpFld = mpFld 

150 self.type = type 

151 self.evalOrder = evalOrder 

152 self.id = id 

153 self.iMeasureHier = iMeasureHier 

154 self.iMeasureFld = iMeasureFld 

155 self.name = name 

156 self.description = description 

157 self.stringValue1 = stringValue1 

158 self.stringValue2 = stringValue2 

159 self.autoFilter = autoFilter 

160 

161 

162class PivotFilters(Serialisable): 

163 

164 count = Integer() 

165 filter = Typed(expected_type=PivotFilter, allow_none=True) 

166 

167 __elements__ = ('filter',) 

168 

169 def __init__(self, 

170 count=None, 

171 filter=None, 

172 ): 

173 self.filter = filter 

174 

175 

176class PivotTableStyle(Serialisable): 

177 

178 tagname = "pivotTableStyleInfo" 

179 

180 name = String(allow_none=True) 

181 showRowHeaders = Bool() 

182 showColHeaders = Bool() 

183 showRowStripes = Bool() 

184 showColStripes = Bool() 

185 showLastColumn = Bool() 

186 

187 def __init__(self, 

188 name=None, 

189 showRowHeaders=None, 

190 showColHeaders=None, 

191 showRowStripes=None, 

192 showColStripes=None, 

193 showLastColumn=None, 

194 ): 

195 self.name = name 

196 self.showRowHeaders = showRowHeaders 

197 self.showColHeaders = showColHeaders 

198 self.showRowStripes = showRowStripes 

199 self.showColStripes = showColStripes 

200 self.showLastColumn = showLastColumn 

201 

202 

203class MemberList(Serialisable): 

204 

205 tagname = "members" 

206 

207 level = Integer(allow_none=True) 

208 member = NestedSequence(expected_type=String, attribute="name") 

209 

210 __elements__ = ('member',) 

211 

212 def __init__(self, 

213 count=None, 

214 level=None, 

215 member=(), 

216 ): 

217 self.level = level 

218 self.member = member 

219 

220 @property 

221 def count(self): 

222 return len(self.member) 

223 

224 

225class MemberProperty(Serialisable): 

226 

227 tagname = "mps" 

228 

229 name = String(allow_none=True) 

230 showCell = Bool(allow_none=True) 

231 showTip = Bool(allow_none=True) 

232 showAsCaption = Bool(allow_none=True) 

233 nameLen = Integer(allow_none=True) 

234 pPos = Integer(allow_none=True) 

235 pLen = Integer(allow_none=True) 

236 level = Integer(allow_none=True) 

237 field = Integer() 

238 

239 def __init__(self, 

240 name=None, 

241 showCell=None, 

242 showTip=None, 

243 showAsCaption=None, 

244 nameLen=None, 

245 pPos=None, 

246 pLen=None, 

247 level=None, 

248 field=None, 

249 ): 

250 self.name = name 

251 self.showCell = showCell 

252 self.showTip = showTip 

253 self.showAsCaption = showAsCaption 

254 self.nameLen = nameLen 

255 self.pPos = pPos 

256 self.pLen = pLen 

257 self.level = level 

258 self.field = field 

259 

260 

261class PivotHierarchy(Serialisable): 

262 

263 tagname = "pivotHierarchy" 

264 

265 outline = Bool() 

266 multipleItemSelectionAllowed = Bool() 

267 subtotalTop = Bool() 

268 showInFieldList = Bool() 

269 dragToRow = Bool() 

270 dragToCol = Bool() 

271 dragToPage = Bool() 

272 dragToData = Bool() 

273 dragOff = Bool() 

274 includeNewItemsInFilter = Bool() 

275 caption = String(allow_none=True) 

276 mps = NestedSequence(expected_type=MemberProperty, count=True) 

277 members = Typed(expected_type=MemberList, allow_none=True) 

278 extLst = Typed(expected_type=ExtensionList, allow_none=True) 

279 

280 __elements__ = ('mps', 'members',) 

281 

282 def __init__(self, 

283 outline=None, 

284 multipleItemSelectionAllowed=None, 

285 subtotalTop=None, 

286 showInFieldList=None, 

287 dragToRow=None, 

288 dragToCol=None, 

289 dragToPage=None, 

290 dragToData=None, 

291 dragOff=None, 

292 includeNewItemsInFilter=None, 

293 caption=None, 

294 mps=(), 

295 members=None, 

296 extLst=None, 

297 ): 

298 self.outline = outline 

299 self.multipleItemSelectionAllowed = multipleItemSelectionAllowed 

300 self.subtotalTop = subtotalTop 

301 self.showInFieldList = showInFieldList 

302 self.dragToRow = dragToRow 

303 self.dragToCol = dragToCol 

304 self.dragToPage = dragToPage 

305 self.dragToData = dragToData 

306 self.dragOff = dragOff 

307 self.includeNewItemsInFilter = includeNewItemsInFilter 

308 self.caption = caption 

309 self.mps = mps 

310 self.members = members 

311 self.extLst = extLst 

312 

313 

314class Reference(Serialisable): 

315 

316 tagname = "reference" 

317 

318 field = Integer(allow_none=True) 

319 selected = Bool(allow_none=True) 

320 byPosition = Bool(allow_none=True) 

321 relative = Bool(allow_none=True) 

322 defaultSubtotal = Bool(allow_none=True) 

323 sumSubtotal = Bool(allow_none=True) 

324 countASubtotal = Bool(allow_none=True) 

325 avgSubtotal = Bool(allow_none=True) 

326 maxSubtotal = Bool(allow_none=True) 

327 minSubtotal = Bool(allow_none=True) 

328 productSubtotal = Bool(allow_none=True) 

329 countSubtotal = Bool(allow_none=True) 

330 stdDevSubtotal = Bool(allow_none=True) 

331 stdDevPSubtotal = Bool(allow_none=True) 

332 varSubtotal = Bool(allow_none=True) 

333 varPSubtotal = Bool(allow_none=True) 

334 x = NestedInteger(allow_none=True, attribute="v") 

335 extLst = Typed(expected_type=ExtensionList, allow_none=True) 

336 

337 __elements__ = ('x',) 

338 

339 def __init__(self, 

340 field=None, 

341 count=None, 

342 selected=None, 

343 byPosition=None, 

344 relative=None, 

345 defaultSubtotal=None, 

346 sumSubtotal=None, 

347 countASubtotal=None, 

348 avgSubtotal=None, 

349 maxSubtotal=None, 

350 minSubtotal=None, 

351 productSubtotal=None, 

352 countSubtotal=None, 

353 stdDevSubtotal=None, 

354 stdDevPSubtotal=None, 

355 varSubtotal=None, 

356 varPSubtotal=None, 

357 x=None, 

358 extLst=None, 

359 ): 

360 self.field = field 

361 self.selected = selected 

362 self.byPosition = byPosition 

363 self.relative = relative 

364 self.defaultSubtotal = defaultSubtotal 

365 self.sumSubtotal = sumSubtotal 

366 self.countASubtotal = countASubtotal 

367 self.avgSubtotal = avgSubtotal 

368 self.maxSubtotal = maxSubtotal 

369 self.minSubtotal = minSubtotal 

370 self.productSubtotal = productSubtotal 

371 self.countSubtotal = countSubtotal 

372 self.stdDevSubtotal = stdDevSubtotal 

373 self.stdDevPSubtotal = stdDevPSubtotal 

374 self.varSubtotal = varSubtotal 

375 self.varPSubtotal = varPSubtotal 

376 self.x = x 

377 

378 

379 @property 

380 def count(self): 

381 return len(self.field) 

382 

383 

384class PivotArea(Serialisable): 

385 

386 tagname = "pivotArea" 

387 

388 references = NestedSequence(expected_type=Reference, count=True) 

389 extLst = Typed(expected_type=ExtensionList, allow_none=True) 

390 field = Integer(allow_none=True) 

391 type = NoneSet(values=(['normal', 'data', 'all', 'origin', 'button', 

392 'topEnd', 'topRight'])) 

393 dataOnly = Bool(allow_none=True) 

394 labelOnly = Bool(allow_none=True) 

395 grandRow = Bool(allow_none=True) 

396 grandCol = Bool(allow_none=True) 

397 cacheIndex = Bool(allow_none=True) 

398 outline = Bool(allow_none=True) 

399 offset = String(allow_none=True) 

400 collapsedLevelsAreSubtotals = Bool(allow_none=True) 

401 axis = NoneSet(values=(['axisRow', 'axisCol', 'axisPage', 'axisValues'])) 

402 fieldPosition = Integer(allow_none=True) 

403 

404 __elements__ = ('references',) 

405 

406 def __init__(self, 

407 references=(), 

408 extLst=None, 

409 field=None, 

410 type="normal", 

411 dataOnly=True, 

412 labelOnly=None, 

413 grandRow=None, 

414 grandCol=None, 

415 cacheIndex=None, 

416 outline=True, 

417 offset=None, 

418 collapsedLevelsAreSubtotals=None, 

419 axis=None, 

420 fieldPosition=None, 

421 ): 

422 self.references = references 

423 self.extLst = extLst 

424 self.field = field 

425 self.type = type 

426 self.dataOnly = dataOnly 

427 self.labelOnly = labelOnly 

428 self.grandRow = grandRow 

429 self.grandCol = grandCol 

430 self.cacheIndex = cacheIndex 

431 self.outline = outline 

432 self.offset = offset 

433 self.collapsedLevelsAreSubtotals = collapsedLevelsAreSubtotals 

434 self.axis = axis 

435 self.fieldPosition = fieldPosition 

436 

437 

438class ChartFormat(Serialisable): 

439 

440 tagname = "chartFormat" 

441 

442 chart = Integer() 

443 format = Integer() 

444 series = Bool() 

445 pivotArea = Typed(expected_type=PivotArea, ) 

446 

447 __elements__ = ('pivotArea',) 

448 

449 def __init__(self, 

450 chart=None, 

451 format=None, 

452 series=None, 

453 pivotArea=None, 

454 ): 

455 self.chart = chart 

456 self.format = format 

457 self.series = series 

458 self.pivotArea = pivotArea 

459 

460 

461class ConditionalFormat(Serialisable): 

462 

463 tagname = "conditionalFormat" 

464 

465 scope = Set(values=(['selection', 'data', 'field'])) 

466 type = NoneSet(values=(['all', 'row', 'column'])) 

467 priority = Integer() 

468 pivotAreas = NestedSequence(expected_type=PivotArea) 

469 extLst = Typed(expected_type=ExtensionList, allow_none=True) 

470 

471 __elements__ = ('pivotAreas',) 

472 

473 def __init__(self, 

474 scope=None, 

475 type=None, 

476 priority=None, 

477 pivotAreas=(), 

478 extLst=None, 

479 ): 

480 self.scope = scope 

481 self.type = type 

482 self.priority = priority 

483 self.pivotAreas = pivotAreas 

484 self.extLst = extLst 

485 

486 

487class Format(Serialisable): 

488 

489 tagname = "format" 

490 

491 action = NoneSet(values=(['blank', 'formatting', 'drill', 'formula'])) 

492 dxfId = Integer(allow_none=True) 

493 pivotArea = Typed(expected_type=PivotArea, ) 

494 extLst = Typed(expected_type=ExtensionList, allow_none=True) 

495 

496 __elements__ = ('pivotArea',) 

497 

498 def __init__(self, 

499 action="formatting", 

500 dxfId=None, 

501 pivotArea=None, 

502 extLst=None, 

503 ): 

504 self.action = action 

505 self.dxfId = dxfId 

506 self.pivotArea = pivotArea 

507 self.extLst = extLst 

508 

509 

510class DataField(Serialisable): 

511 

512 tagname = "dataField" 

513 

514 name = String(allow_none=True) 

515 fld = Integer() 

516 subtotal = Set(values=(['average', 'count', 'countNums', 'max', 'min', 

517 'product', 'stdDev', 'stdDevp', 'sum', 'var', 'varp'])) 

518 showDataAs = Set(values=(['normal', 'difference', 'percent', 

519 'percentDiff', 'runTotal', 'percentOfRow', 'percentOfCol', 

520 'percentOfTotal', 'index'])) 

521 baseField = Integer() 

522 baseItem = Integer() 

523 numFmtId = Integer(allow_none=True) 

524 extLst = Typed(expected_type=ExtensionList, allow_none=True) 

525 

526 __elements__ = () 

527 

528 

529 def __init__(self, 

530 name=None, 

531 fld=None, 

532 subtotal="sum", 

533 showDataAs="normal", 

534 baseField=-1, 

535 baseItem=1048832, 

536 numFmtId=None, 

537 extLst=None, 

538 ): 

539 self.name = name 

540 self.fld = fld 

541 self.subtotal = subtotal 

542 self.showDataAs = showDataAs 

543 self.baseField = baseField 

544 self.baseItem = baseItem 

545 self.numFmtId = numFmtId 

546 self.extLst = extLst 

547 

548 

549class PageField(Serialisable): 

550 

551 tagname = "pageField" 

552 

553 fld = Integer() 

554 item = Integer(allow_none=True) 

555 hier = Integer(allow_none=True) 

556 name = String(allow_none=True) 

557 cap = String(allow_none=True) 

558 extLst = Typed(expected_type=ExtensionList, allow_none=True) 

559 

560 __elements__ = () 

561 

562 def __init__(self, 

563 fld=None, 

564 item=None, 

565 hier=None, 

566 name=None, 

567 cap=None, 

568 extLst=None, 

569 ): 

570 self.fld = fld 

571 self.item = item 

572 self.hier = hier 

573 self.name = name 

574 self.cap = cap 

575 self.extLst = extLst 

576 

577 

578class RowColItem(Serialisable): 

579 

580 tagname = "i" 

581 

582 t = Set(values=(['data', 'default', 'sum', 'countA', 'avg', 'max', 'min', 

583 'product', 'count', 'stdDev', 'stdDevP', 'var', 'varP', 'grand', 

584 'blank'])) 

585 r = Integer() 

586 i = Integer() 

587 x = NestedInteger(allow_none=True, attribute="v") 

588 

589 __elements__ = ('x',) 

590 

591 def __init__(self, 

592 t="data", 

593 r=0, 

594 i=0, 

595 x=None, 

596 ): 

597 self.t = t 

598 self.r = r 

599 self.i = i 

600 self.x = x 

601 

602 

603class RowColField(Serialisable): 

604 

605 tagname = "field" 

606 

607 x = Integer() 

608 

609 def __init__(self, 

610 x=None, 

611 ): 

612 self.x = x 

613 

614 

615class AutoSortScope(Serialisable): 

616 

617 pivotArea = Typed(expected_type=PivotArea, ) 

618 

619 __elements__ = ('pivotArea',) 

620 

621 def __init__(self, 

622 pivotArea=None, 

623 ): 

624 self.pivotArea = pivotArea 

625 

626 

627class FieldItem(Serialisable): 

628 

629 tagname = "item" 

630 

631 n = String(allow_none=True) 

632 t = Set(values=(['data', 'default', 'sum', 'countA', 'avg', 'max', 'min', 

633 'product', 'count', 'stdDev', 'stdDevP', 'var', 'varP', 'grand', 

634 'blank'])) 

635 h = Bool(allow_none=True) 

636 s = Bool(allow_none=True) 

637 sd = Bool(allow_none=True) 

638 f = Bool(allow_none=True) 

639 m = Bool(allow_none=True) 

640 c = Bool(allow_none=True) 

641 x = Integer(allow_none=True) 

642 d = Bool(allow_none=True) 

643 e = Bool(allow_none=True) 

644 

645 def __init__(self, 

646 n=None, 

647 t="data", 

648 h=None, 

649 s=None, 

650 sd=True, 

651 f=None, 

652 m=None, 

653 c=None, 

654 x=None, 

655 d=None, 

656 e=None, 

657 ): 

658 self.n = n 

659 self.t = t 

660 self.h = h 

661 self.s = s 

662 self.sd = sd 

663 self.f = f 

664 self.m = m 

665 self.c = c 

666 self.x = x 

667 self.d = d 

668 self.e = e 

669 

670 

671class PivotField(Serialisable): 

672 

673 tagname = "pivotField" 

674 

675 items = NestedSequence(expected_type=FieldItem, count=True) 

676 autoSortScope = Typed(expected_type=AutoSortScope, allow_none=True) 

677 extLst = Typed(expected_type=ExtensionList, allow_none=True) 

678 name = String(allow_none=True) 

679 axis = NoneSet(values=(['axisRow', 'axisCol', 'axisPage', 'axisValues'])) 

680 dataField = Bool(allow_none=True) 

681 subtotalCaption = String(allow_none=True) 

682 showDropDowns = Bool(allow_none=True) 

683 hiddenLevel = Bool(allow_none=True) 

684 uniqueMemberProperty = String(allow_none=True) 

685 compact = Bool(allow_none=True) 

686 allDrilled = Bool(allow_none=True) 

687 numFmtId = Integer(allow_none=True) 

688 outline = Bool(allow_none=True) 

689 subtotalTop = Bool(allow_none=True) 

690 dragToRow = Bool(allow_none=True) 

691 dragToCol = Bool(allow_none=True) 

692 multipleItemSelectionAllowed = Bool(allow_none=True) 

693 dragToPage = Bool(allow_none=True) 

694 dragToData = Bool(allow_none=True) 

695 dragOff = Bool(allow_none=True) 

696 showAll = Bool(allow_none=True) 

697 insertBlankRow = Bool(allow_none=True) 

698 serverField = Bool(allow_none=True) 

699 insertPageBreak = Bool(allow_none=True) 

700 autoShow = Bool(allow_none=True) 

701 topAutoShow = Bool(allow_none=True) 

702 hideNewItems = Bool(allow_none=True) 

703 measureFilter = Bool(allow_none=True) 

704 includeNewItemsInFilter = Bool(allow_none=True) 

705 itemPageCount = Integer(allow_none=True) 

706 sortType = Set(values=(['manual', 'ascending', 'descending'])) 

707 dataSourceSort = Bool(allow_none=True) 

708 nonAutoSortDefault = Bool(allow_none=True) 

709 rankBy = Integer(allow_none=True) 

710 defaultSubtotal = Bool(allow_none=True) 

711 sumSubtotal = Bool(allow_none=True) 

712 countASubtotal = Bool(allow_none=True) 

713 avgSubtotal = Bool(allow_none=True) 

714 maxSubtotal = Bool(allow_none=True) 

715 minSubtotal = Bool(allow_none=True) 

716 productSubtotal = Bool(allow_none=True) 

717 countSubtotal = Bool(allow_none=True) 

718 stdDevSubtotal = Bool(allow_none=True) 

719 stdDevPSubtotal = Bool(allow_none=True) 

720 varSubtotal = Bool(allow_none=True) 

721 varPSubtotal = Bool(allow_none=True) 

722 showPropCell = Bool(allow_none=True) 

723 showPropTip = Bool(allow_none=True) 

724 showPropAsCaption = Bool(allow_none=True) 

725 defaultAttributeDrillState = Bool(allow_none=True) 

726 

727 __elements__ = ('items', 'autoSortScope',) 

728 

729 def __init__(self, 

730 items=(), 

731 autoSortScope=None, 

732 name=None, 

733 axis=None, 

734 dataField=None, 

735 subtotalCaption=None, 

736 showDropDowns=True, 

737 hiddenLevel=None, 

738 uniqueMemberProperty=None, 

739 compact=True, 

740 allDrilled=None, 

741 numFmtId=None, 

742 outline=True, 

743 subtotalTop=True, 

744 dragToRow=True, 

745 dragToCol=True, 

746 multipleItemSelectionAllowed=None, 

747 dragToPage=True, 

748 dragToData=True, 

749 dragOff=True, 

750 showAll=True, 

751 insertBlankRow=None, 

752 serverField=None, 

753 insertPageBreak=None, 

754 autoShow=None, 

755 topAutoShow=True, 

756 hideNewItems=None, 

757 measureFilter=None, 

758 includeNewItemsInFilter=None, 

759 itemPageCount=10, 

760 sortType="manual", 

761 dataSourceSort=None, 

762 nonAutoSortDefault=None, 

763 rankBy=None, 

764 defaultSubtotal=True, 

765 sumSubtotal=None, 

766 countASubtotal=None, 

767 avgSubtotal=None, 

768 maxSubtotal=None, 

769 minSubtotal=None, 

770 productSubtotal=None, 

771 countSubtotal=None, 

772 stdDevSubtotal=None, 

773 stdDevPSubtotal=None, 

774 varSubtotal=None, 

775 varPSubtotal=None, 

776 showPropCell=None, 

777 showPropTip=None, 

778 showPropAsCaption=None, 

779 defaultAttributeDrillState=None, 

780 extLst=None, 

781 ): 

782 self.items = items 

783 self.autoSortScope = autoSortScope 

784 self.name = name 

785 self.axis = axis 

786 self.dataField = dataField 

787 self.subtotalCaption = subtotalCaption 

788 self.showDropDowns = showDropDowns 

789 self.hiddenLevel = hiddenLevel 

790 self.uniqueMemberProperty = uniqueMemberProperty 

791 self.compact = compact 

792 self.allDrilled = allDrilled 

793 self.numFmtId = numFmtId 

794 self.outline = outline 

795 self.subtotalTop = subtotalTop 

796 self.dragToRow = dragToRow 

797 self.dragToCol = dragToCol 

798 self.multipleItemSelectionAllowed = multipleItemSelectionAllowed 

799 self.dragToPage = dragToPage 

800 self.dragToData = dragToData 

801 self.dragOff = dragOff 

802 self.showAll = showAll 

803 self.insertBlankRow = insertBlankRow 

804 self.serverField = serverField 

805 self.insertPageBreak = insertPageBreak 

806 self.autoShow = autoShow 

807 self.topAutoShow = topAutoShow 

808 self.hideNewItems = hideNewItems 

809 self.measureFilter = measureFilter 

810 self.includeNewItemsInFilter = includeNewItemsInFilter 

811 self.itemPageCount = itemPageCount 

812 self.sortType = sortType 

813 self.dataSourceSort = dataSourceSort 

814 self.nonAutoSortDefault = nonAutoSortDefault 

815 self.rankBy = rankBy 

816 self.defaultSubtotal = defaultSubtotal 

817 self.sumSubtotal = sumSubtotal 

818 self.countASubtotal = countASubtotal 

819 self.avgSubtotal = avgSubtotal 

820 self.maxSubtotal = maxSubtotal 

821 self.minSubtotal = minSubtotal 

822 self.productSubtotal = productSubtotal 

823 self.countSubtotal = countSubtotal 

824 self.stdDevSubtotal = stdDevSubtotal 

825 self.stdDevPSubtotal = stdDevPSubtotal 

826 self.varSubtotal = varSubtotal 

827 self.varPSubtotal = varPSubtotal 

828 self.showPropCell = showPropCell 

829 self.showPropTip = showPropTip 

830 self.showPropAsCaption = showPropAsCaption 

831 self.defaultAttributeDrillState = defaultAttributeDrillState 

832 

833 

834class Location(Serialisable): 

835 

836 tagname = "location" 

837 

838 ref = String() 

839 firstHeaderRow = Integer() 

840 firstDataRow = Integer() 

841 firstDataCol = Integer() 

842 rowPageCount = Integer(allow_none=True) 

843 colPageCount = Integer(allow_none=True) 

844 

845 def __init__(self, 

846 ref=None, 

847 firstHeaderRow=None, 

848 firstDataRow=None, 

849 firstDataCol=None, 

850 rowPageCount=None, 

851 colPageCount=None, 

852 ): 

853 self.ref = ref 

854 self.firstHeaderRow = firstHeaderRow 

855 self.firstDataRow = firstDataRow 

856 self.firstDataCol = firstDataCol 

857 self.rowPageCount = rowPageCount 

858 self.colPageCount = colPageCount 

859 

860 

861class TableDefinition(Serialisable): 

862 

863 mime_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml" 

864 rel_type = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotTable" 

865 _id = 1 

866 _path = "/xl/pivotTables/pivotTable{0}.xml" 

867 

868 tagname = "pivotTableDefinition" 

869 cache = None 

870 

871 name = String() 

872 cacheId = Integer() 

873 dataOnRows = Bool() 

874 dataPosition = Integer(allow_none=True) 

875 dataCaption = String() 

876 grandTotalCaption = String(allow_none=True) 

877 errorCaption = String(allow_none=True) 

878 showError = Bool() 

879 missingCaption = String(allow_none=True) 

880 showMissing = Bool() 

881 pageStyle = String(allow_none=True) 

882 pivotTableStyle = String(allow_none=True) 

883 vacatedStyle = String(allow_none=True) 

884 tag = String(allow_none=True) 

885 updatedVersion = Integer() 

886 minRefreshableVersion = Integer() 

887 asteriskTotals = Bool() 

888 showItems = Bool() 

889 editData = Bool() 

890 disableFieldList = Bool() 

891 showCalcMbrs = Bool() 

892 visualTotals = Bool() 

893 showMultipleLabel = Bool() 

894 showDataDropDown = Bool() 

895 showDrill = Bool() 

896 printDrill = Bool() 

897 showMemberPropertyTips = Bool() 

898 showDataTips = Bool() 

899 enableWizard = Bool() 

900 enableDrill = Bool() 

901 enableFieldProperties = Bool() 

902 preserveFormatting = Bool() 

903 useAutoFormatting = Bool() 

904 pageWrap = Integer() 

905 pageOverThenDown = Bool() 

906 subtotalHiddenItems = Bool() 

907 rowGrandTotals = Bool() 

908 colGrandTotals = Bool() 

909 fieldPrintTitles = Bool() 

910 itemPrintTitles = Bool() 

911 mergeItem = Bool() 

912 showDropZones = Bool() 

913 createdVersion = Integer() 

914 indent = Integer() 

915 showEmptyRow = Bool() 

916 showEmptyCol = Bool() 

917 showHeaders = Bool() 

918 compact = Bool() 

919 outline = Bool() 

920 outlineData = Bool() 

921 compactData = Bool() 

922 published = Bool() 

923 gridDropZones = Bool() 

924 immersive = Bool() 

925 multipleFieldFilters = Bool() 

926 chartFormat = Integer() 

927 rowHeaderCaption = String(allow_none=True) 

928 colHeaderCaption = String(allow_none=True) 

929 fieldListSortAscending = Bool() 

930 mdxSubqueries = Bool() 

931 customListSort = Bool(allow_none=True) 

932 autoFormatId = Integer(allow_none=True) 

933 applyNumberFormats = Bool() 

934 applyBorderFormats = Bool() 

935 applyFontFormats = Bool() 

936 applyPatternFormats = Bool() 

937 applyAlignmentFormats = Bool() 

938 applyWidthHeightFormats = Bool() 

939 location = Typed(expected_type=Location, ) 

940 pivotFields = NestedSequence(expected_type=PivotField, count=True) 

941 rowFields = NestedSequence(expected_type=RowColField, count=True) 

942 rowItems = NestedSequence(expected_type=RowColItem, count=True) 

943 colFields = NestedSequence(expected_type=RowColField, count=True) 

944 colItems = NestedSequence(expected_type=RowColItem, count=True) 

945 pageFields = NestedSequence(expected_type=PageField, count=True) 

946 dataFields = NestedSequence(expected_type=DataField, count=True) 

947 formats = NestedSequence(expected_type=Format, count=True) 

948 conditionalFormats = NestedSequence(expected_type=ConditionalFormat, count=True) 

949 chartFormats = NestedSequence(expected_type=ChartFormat, count=True) 

950 pivotHierarchies = NestedSequence(expected_type=PivotHierarchy, count=True) 

951 pivotTableStyleInfo = Typed(expected_type=PivotTableStyle, allow_none=True) 

952 filters = NestedSequence(expected_type=PivotFilter, count=True) 

953 rowHierarchiesUsage = Typed(expected_type=RowHierarchiesUsage, allow_none=True) 

954 colHierarchiesUsage = Typed(expected_type=ColHierarchiesUsage, allow_none=True) 

955 extLst = Typed(expected_type=ExtensionList, allow_none=True) 

956 id = Relation() 

957 

958 __elements__ = ('location', 'pivotFields', 'rowFields', 'rowItems', 

959 'colFields', 'colItems', 'pageFields', 'dataFields', 'formats', 

960 'conditionalFormats', 'chartFormats', 'pivotHierarchies', 

961 'pivotTableStyleInfo', 'filters', 'rowHierarchiesUsage', 

962 'colHierarchiesUsage',) 

963 

964 def __init__(self, 

965 name=None, 

966 cacheId=None, 

967 dataOnRows=False, 

968 dataPosition=None, 

969 dataCaption=None, 

970 grandTotalCaption=None, 

971 errorCaption=None, 

972 showError=False, 

973 missingCaption=None, 

974 showMissing=True, 

975 pageStyle=None, 

976 pivotTableStyle=None, 

977 vacatedStyle=None, 

978 tag=None, 

979 updatedVersion=0, 

980 minRefreshableVersion=0, 

981 asteriskTotals=False, 

982 showItems=True, 

983 editData=False, 

984 disableFieldList=False, 

985 showCalcMbrs=True, 

986 visualTotals=True, 

987 showMultipleLabel=True, 

988 showDataDropDown=True, 

989 showDrill=True, 

990 printDrill=False, 

991 showMemberPropertyTips=True, 

992 showDataTips=True, 

993 enableWizard=True, 

994 enableDrill=True, 

995 enableFieldProperties=True, 

996 preserveFormatting=True, 

997 useAutoFormatting=False, 

998 pageWrap=0, 

999 pageOverThenDown=False, 

1000 subtotalHiddenItems=False, 

1001 rowGrandTotals=True, 

1002 colGrandTotals=True, 

1003 fieldPrintTitles=False, 

1004 itemPrintTitles=False, 

1005 mergeItem=False, 

1006 showDropZones=True, 

1007 createdVersion=0, 

1008 indent=1, 

1009 showEmptyRow=False, 

1010 showEmptyCol=False, 

1011 showHeaders=True, 

1012 compact=True, 

1013 outline=False, 

1014 outlineData=False, 

1015 compactData=True, 

1016 published=False, 

1017 gridDropZones=False, 

1018 immersive=True, 

1019 multipleFieldFilters=None, 

1020 chartFormat=0, 

1021 rowHeaderCaption=None, 

1022 colHeaderCaption=None, 

1023 fieldListSortAscending=None, 

1024 mdxSubqueries=None, 

1025 customListSort=None, 

1026 autoFormatId=None, 

1027 applyNumberFormats=False, 

1028 applyBorderFormats=False, 

1029 applyFontFormats=False, 

1030 applyPatternFormats=False, 

1031 applyAlignmentFormats=False, 

1032 applyWidthHeightFormats=False, 

1033 location=None, 

1034 pivotFields=(), 

1035 rowFields=(), 

1036 rowItems=(), 

1037 colFields=(), 

1038 colItems=(), 

1039 pageFields=(), 

1040 dataFields=(), 

1041 formats=(), 

1042 conditionalFormats=(), 

1043 chartFormats=(), 

1044 pivotHierarchies=(), 

1045 pivotTableStyleInfo=None, 

1046 filters=(), 

1047 rowHierarchiesUsage=None, 

1048 colHierarchiesUsage=None, 

1049 extLst=None, 

1050 id=None, 

1051 ): 

1052 self.name = name 

1053 self.cacheId = cacheId 

1054 self.dataOnRows = dataOnRows 

1055 self.dataPosition = dataPosition 

1056 self.dataCaption = dataCaption 

1057 self.grandTotalCaption = grandTotalCaption 

1058 self.errorCaption = errorCaption 

1059 self.showError = showError 

1060 self.missingCaption = missingCaption 

1061 self.showMissing = showMissing 

1062 self.pageStyle = pageStyle 

1063 self.pivotTableStyle = pivotTableStyle 

1064 self.vacatedStyle = vacatedStyle 

1065 self.tag = tag 

1066 self.updatedVersion = updatedVersion 

1067 self.minRefreshableVersion = minRefreshableVersion 

1068 self.asteriskTotals = asteriskTotals 

1069 self.showItems = showItems 

1070 self.editData = editData 

1071 self.disableFieldList = disableFieldList 

1072 self.showCalcMbrs = showCalcMbrs 

1073 self.visualTotals = visualTotals 

1074 self.showMultipleLabel = showMultipleLabel 

1075 self.showDataDropDown = showDataDropDown 

1076 self.showDrill = showDrill 

1077 self.printDrill = printDrill 

1078 self.showMemberPropertyTips = showMemberPropertyTips 

1079 self.showDataTips = showDataTips 

1080 self.enableWizard = enableWizard 

1081 self.enableDrill = enableDrill 

1082 self.enableFieldProperties = enableFieldProperties 

1083 self.preserveFormatting = preserveFormatting 

1084 self.useAutoFormatting = useAutoFormatting 

1085 self.pageWrap = pageWrap 

1086 self.pageOverThenDown = pageOverThenDown 

1087 self.subtotalHiddenItems = subtotalHiddenItems 

1088 self.rowGrandTotals = rowGrandTotals 

1089 self.colGrandTotals = colGrandTotals 

1090 self.fieldPrintTitles = fieldPrintTitles 

1091 self.itemPrintTitles = itemPrintTitles 

1092 self.mergeItem = mergeItem 

1093 self.showDropZones = showDropZones 

1094 self.createdVersion = createdVersion 

1095 self.indent = indent 

1096 self.showEmptyRow = showEmptyRow 

1097 self.showEmptyCol = showEmptyCol 

1098 self.showHeaders = showHeaders 

1099 self.compact = compact 

1100 self.outline = outline 

1101 self.outlineData = outlineData 

1102 self.compactData = compactData 

1103 self.published = published 

1104 self.gridDropZones = gridDropZones 

1105 self.immersive = immersive 

1106 self.multipleFieldFilters = multipleFieldFilters 

1107 self.chartFormat = chartFormat 

1108 self.rowHeaderCaption = rowHeaderCaption 

1109 self.colHeaderCaption = colHeaderCaption 

1110 self.fieldListSortAscending = fieldListSortAscending 

1111 self.mdxSubqueries = mdxSubqueries 

1112 self.customListSort = customListSort 

1113 self.autoFormatId = autoFormatId 

1114 self.applyNumberFormats = applyNumberFormats 

1115 self.applyBorderFormats = applyBorderFormats 

1116 self.applyFontFormats = applyFontFormats 

1117 self.applyPatternFormats = applyPatternFormats 

1118 self.applyAlignmentFormats = applyAlignmentFormats 

1119 self.applyWidthHeightFormats = applyWidthHeightFormats 

1120 self.location = location 

1121 self.pivotFields = pivotFields 

1122 self.rowFields = rowFields 

1123 self.rowItems = rowItems 

1124 self.colFields = colFields 

1125 self.colItems = colItems 

1126 self.pageFields = pageFields 

1127 self.dataFields = dataFields 

1128 self.formats = formats 

1129 self.conditionalFormats = conditionalFormats 

1130 self.chartFormats = chartFormats 

1131 self.pivotHierarchies = pivotHierarchies 

1132 self.pivotTableStyleInfo = pivotTableStyleInfo 

1133 self.filters = filters 

1134 self.rowHierarchiesUsage = rowHierarchiesUsage 

1135 self.colHierarchiesUsage = colHierarchiesUsage 

1136 self.extLst = extLst 

1137 self.id = id 

1138 

1139 

1140 def to_tree(self): 

1141 tree = super(TableDefinition, self).to_tree() 

1142 tree.set("xmlns", SHEET_MAIN_NS) 

1143 return tree 

1144 

1145 

1146 @property 

1147 def path(self): 

1148 return self._path.format(self._id) 

1149 

1150 

1151 def _write(self, archive, manifest): 

1152 """ 

1153 Add to zipfile and update manifest 

1154 """ 

1155 self._write_rels(archive, manifest) 

1156 xml = tostring(self.to_tree()) 

1157 archive.writestr(self.path[1:], xml) 

1158 manifest.append(self) 

1159 

1160 

1161 def _write_rels(self, archive, manifest): 

1162 """ 

1163 Write the relevant child objects and add links 

1164 """ 

1165 if self.cache is None: 

1166 return 

1167 

1168 rels = RelationshipList() 

1169 r = Relationship(Type=self.cache.rel_type, Target=self.cache.path) 

1170 rels.append(r) 

1171 self.id = r.id 

1172 if self.cache.path[1:] not in archive.namelist(): 

1173 self.cache._write(archive, manifest) 

1174 

1175 path = get_rels_path(self.path) 

1176 xml = tostring(rels.to_tree()) 

1177 archive.writestr(path[1:], xml)