Skip to main content

excelize_rs/xml/
pivot_table.rs

1//! PivotTable definition part (`xl/pivotTables/pivotTableN.xml`).
2//!
3//! Ported from Go `xmlPivotTable.go`.
4
5use serde::{Deserialize, Serialize};
6
7use super::common::XlsxExtLst;
8
9/// Directly maps the `pivotTableDefinition` root element.
10#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
11#[serde(rename = "pivotTableDefinition")]
12pub struct XlsxPivotTableDefinition {
13    #[serde(rename = "@xmlns", default, skip_serializing_if = "Option::is_none")]
14    pub xmlns: Option<String>,
15    #[serde(rename = "@name")]
16    pub name: String,
17    #[serde(rename = "@cacheId")]
18    pub cache_id: i64,
19    #[serde(
20        rename = "@applyNumberFormats",
21        default,
22        skip_serializing_if = "Option::is_none"
23    )]
24    pub apply_number_formats: Option<bool>,
25    #[serde(
26        rename = "@applyBorderFormats",
27        default,
28        skip_serializing_if = "Option::is_none"
29    )]
30    pub apply_border_formats: Option<bool>,
31    #[serde(
32        rename = "@applyFontFormats",
33        default,
34        skip_serializing_if = "Option::is_none"
35    )]
36    pub apply_font_formats: Option<bool>,
37    #[serde(
38        rename = "@applyPatternFormats",
39        default,
40        skip_serializing_if = "Option::is_none"
41    )]
42    pub apply_pattern_formats: Option<bool>,
43    #[serde(
44        rename = "@applyAlignmentFormats",
45        default,
46        skip_serializing_if = "Option::is_none"
47    )]
48    pub apply_alignment_formats: Option<bool>,
49    #[serde(
50        rename = "@applyWidthHeightFormats",
51        default,
52        skip_serializing_if = "Option::is_none"
53    )]
54    pub apply_width_height_formats: Option<bool>,
55    #[serde(
56        rename = "@dataOnRows",
57        default,
58        skip_serializing_if = "Option::is_none"
59    )]
60    pub data_on_rows: Option<bool>,
61    #[serde(
62        rename = "@dataPosition",
63        default,
64        skip_serializing_if = "Option::is_none"
65    )]
66    pub data_position: Option<i64>,
67    #[serde(rename = "@dataCaption")]
68    pub data_caption: String,
69    #[serde(
70        rename = "@grandTotalCaption",
71        default,
72        skip_serializing_if = "Option::is_none"
73    )]
74    pub grand_total_caption: Option<String>,
75    #[serde(
76        rename = "@errorCaption",
77        default,
78        skip_serializing_if = "Option::is_none"
79    )]
80    pub error_caption: Option<String>,
81    #[serde(
82        rename = "@showError",
83        default,
84        skip_serializing_if = "Option::is_none"
85    )]
86    pub show_error: Option<bool>,
87    #[serde(
88        rename = "@missingCaption",
89        default,
90        skip_serializing_if = "Option::is_none"
91    )]
92    pub missing_caption: Option<String>,
93    #[serde(
94        rename = "@showMissing",
95        default,
96        skip_serializing_if = "Option::is_none"
97    )]
98    pub show_missing: Option<bool>,
99    #[serde(
100        rename = "@pageStyle",
101        default,
102        skip_serializing_if = "Option::is_none"
103    )]
104    pub page_style: Option<String>,
105    #[serde(
106        rename = "@pivotTableStyle",
107        default,
108        skip_serializing_if = "Option::is_none"
109    )]
110    pub pivot_table_style: Option<String>,
111    #[serde(
112        rename = "@vacatedStyle",
113        default,
114        skip_serializing_if = "Option::is_none"
115    )]
116    pub vacated_style: Option<String>,
117    #[serde(rename = "@tag", default, skip_serializing_if = "Option::is_none")]
118    pub tag: Option<String>,
119    #[serde(
120        rename = "@updatedVersion",
121        default,
122        skip_serializing_if = "Option::is_none"
123    )]
124    pub updated_version: Option<i64>,
125    #[serde(
126        rename = "@minRefreshableVersion",
127        default,
128        skip_serializing_if = "Option::is_none"
129    )]
130    pub min_refreshable_version: Option<i64>,
131    #[serde(
132        rename = "@asteriskTotals",
133        default,
134        skip_serializing_if = "Option::is_none"
135    )]
136    pub asterisk_totals: Option<bool>,
137    #[serde(
138        rename = "@showItems",
139        default,
140        skip_serializing_if = "Option::is_none"
141    )]
142    pub show_items: Option<bool>,
143    #[serde(rename = "@editData", default, skip_serializing_if = "Option::is_none")]
144    pub edit_data: Option<bool>,
145    #[serde(
146        rename = "@disableFieldList",
147        default,
148        skip_serializing_if = "Option::is_none"
149    )]
150    pub disable_field_list: Option<bool>,
151    #[serde(
152        rename = "@showCalcMbrs",
153        default,
154        skip_serializing_if = "Option::is_none"
155    )]
156    pub show_calc_mbrs: Option<bool>,
157    #[serde(
158        rename = "@visualTotals",
159        default,
160        skip_serializing_if = "Option::is_none"
161    )]
162    pub visual_totals: Option<bool>,
163    #[serde(
164        rename = "@showMultipleLabel",
165        default,
166        skip_serializing_if = "Option::is_none"
167    )]
168    pub show_multiple_label: Option<bool>,
169    #[serde(
170        rename = "@showDataDropDown",
171        default,
172        skip_serializing_if = "Option::is_none"
173    )]
174    pub show_data_drop_down: Option<bool>,
175    #[serde(
176        rename = "@showDrill",
177        default,
178        skip_serializing_if = "Option::is_none"
179    )]
180    pub show_drill: Option<bool>,
181    #[serde(
182        rename = "@printDrill",
183        default,
184        skip_serializing_if = "Option::is_none"
185    )]
186    pub print_drill: Option<bool>,
187    #[serde(
188        rename = "@showMemberPropertyTips",
189        default,
190        skip_serializing_if = "Option::is_none"
191    )]
192    pub show_member_property_tips: Option<bool>,
193    #[serde(
194        rename = "@showDataTips",
195        default,
196        skip_serializing_if = "Option::is_none"
197    )]
198    pub show_data_tips: Option<bool>,
199    #[serde(
200        rename = "@enableWizard",
201        default,
202        skip_serializing_if = "Option::is_none"
203    )]
204    pub enable_wizard: Option<bool>,
205    #[serde(
206        rename = "@enableDrill",
207        default,
208        skip_serializing_if = "Option::is_none"
209    )]
210    pub enable_drill: Option<bool>,
211    #[serde(
212        rename = "@enableFieldProperties",
213        default,
214        skip_serializing_if = "Option::is_none"
215    )]
216    pub enable_field_properties: Option<bool>,
217    #[serde(
218        rename = "@preserveFormatting",
219        default,
220        skip_serializing_if = "Option::is_none"
221    )]
222    pub preserve_formatting: Option<bool>,
223    #[serde(
224        rename = "@useAutoFormatting",
225        default,
226        skip_serializing_if = "Option::is_none"
227    )]
228    pub use_auto_formatting: Option<bool>,
229    #[serde(rename = "@pageWrap", default, skip_serializing_if = "Option::is_none")]
230    pub page_wrap: Option<i64>,
231    #[serde(
232        rename = "@pageOverThenDown",
233        default,
234        skip_serializing_if = "Option::is_none"
235    )]
236    pub page_over_then_down: Option<bool>,
237    #[serde(
238        rename = "@subtotalHiddenItems",
239        default,
240        skip_serializing_if = "Option::is_none"
241    )]
242    pub subtotal_hidden_items: Option<bool>,
243    #[serde(
244        rename = "@rowGrandTotals",
245        default,
246        skip_serializing_if = "Option::is_none"
247    )]
248    pub row_grand_totals: Option<bool>,
249    #[serde(
250        rename = "@colGrandTotals",
251        default,
252        skip_serializing_if = "Option::is_none"
253    )]
254    pub col_grand_totals: Option<bool>,
255    #[serde(
256        rename = "@fieldPrintTitles",
257        default,
258        skip_serializing_if = "Option::is_none"
259    )]
260    pub field_print_titles: Option<bool>,
261    #[serde(
262        rename = "@itemPrintTitles",
263        default,
264        skip_serializing_if = "Option::is_none"
265    )]
266    pub item_print_titles: Option<bool>,
267    #[serde(
268        rename = "@mergeItem",
269        default,
270        skip_serializing_if = "Option::is_none"
271    )]
272    pub merge_item: Option<bool>,
273    #[serde(
274        rename = "@showDropZones",
275        default,
276        skip_serializing_if = "Option::is_none"
277    )]
278    pub show_drop_zones: Option<bool>,
279    #[serde(
280        rename = "@createdVersion",
281        default,
282        skip_serializing_if = "Option::is_none"
283    )]
284    pub created_version: Option<i64>,
285    #[serde(rename = "@indent", default, skip_serializing_if = "Option::is_none")]
286    pub indent: Option<i64>,
287    #[serde(
288        rename = "@showEmptyRow",
289        default,
290        skip_serializing_if = "Option::is_none"
291    )]
292    pub show_empty_row: Option<bool>,
293    #[serde(
294        rename = "@showEmptyCol",
295        default,
296        skip_serializing_if = "Option::is_none"
297    )]
298    pub show_empty_col: Option<bool>,
299    #[serde(
300        rename = "@showHeaders",
301        default,
302        skip_serializing_if = "Option::is_none"
303    )]
304    pub show_headers: Option<bool>,
305    #[serde(rename = "@compact", default, skip_serializing_if = "Option::is_none")]
306    pub compact: Option<bool>,
307    #[serde(rename = "@outline", default, skip_serializing_if = "Option::is_none")]
308    pub outline: Option<bool>,
309    #[serde(
310        rename = "@outlineData",
311        default,
312        skip_serializing_if = "Option::is_none"
313    )]
314    pub outline_data: Option<bool>,
315    #[serde(
316        rename = "@compactData",
317        default,
318        skip_serializing_if = "Option::is_none"
319    )]
320    pub compact_data: Option<bool>,
321    #[serde(
322        rename = "@published",
323        default,
324        skip_serializing_if = "Option::is_none"
325    )]
326    pub published: Option<bool>,
327    #[serde(
328        rename = "@gridDropZones",
329        default,
330        skip_serializing_if = "Option::is_none"
331    )]
332    pub grid_drop_zones: Option<bool>,
333    #[serde(
334        rename = "@immersive",
335        default,
336        skip_serializing_if = "Option::is_none"
337    )]
338    pub immersive: Option<bool>,
339    #[serde(
340        rename = "@multipleFieldFilters",
341        default,
342        skip_serializing_if = "Option::is_none"
343    )]
344    pub multiple_field_filters: Option<bool>,
345    #[serde(
346        rename = "@chartFormat",
347        default,
348        skip_serializing_if = "Option::is_none"
349    )]
350    pub chart_format: Option<i64>,
351    #[serde(
352        rename = "@rowHeaderCaption",
353        default,
354        skip_serializing_if = "Option::is_none"
355    )]
356    pub row_header_caption: Option<String>,
357    #[serde(
358        rename = "@colHeaderCaption",
359        default,
360        skip_serializing_if = "Option::is_none"
361    )]
362    pub col_header_caption: Option<String>,
363    #[serde(
364        rename = "@fieldListSortAscending",
365        default,
366        skip_serializing_if = "Option::is_none"
367    )]
368    pub field_list_sort_ascending: Option<bool>,
369    #[serde(
370        rename = "@mdxSubqueries",
371        default,
372        skip_serializing_if = "Option::is_none"
373    )]
374    pub mdx_subqueries: Option<bool>,
375    #[serde(
376        rename = "@customListSort",
377        default,
378        skip_serializing_if = "Option::is_none"
379    )]
380    pub custom_list_sort: Option<bool>,
381    #[serde(rename = "location", default, skip_serializing_if = "Option::is_none")]
382    pub location: Option<XlsxLocation>,
383    #[serde(
384        rename = "pivotFields",
385        default,
386        skip_serializing_if = "Option::is_none"
387    )]
388    pub pivot_fields: Option<XlsxPivotFields>,
389    #[serde(rename = "rowFields", default, skip_serializing_if = "Option::is_none")]
390    pub row_fields: Option<XlsxRowFields>,
391    #[serde(rename = "rowItems", default, skip_serializing_if = "Option::is_none")]
392    pub row_items: Option<XlsxRowItems>,
393    #[serde(rename = "colFields", default, skip_serializing_if = "Option::is_none")]
394    pub col_fields: Option<XlsxColFields>,
395    #[serde(rename = "colItems", default, skip_serializing_if = "Option::is_none")]
396    pub col_items: Option<XlsxColItems>,
397    #[serde(
398        rename = "pageFields",
399        default,
400        skip_serializing_if = "Option::is_none"
401    )]
402    pub page_fields: Option<XlsxPageFields>,
403    #[serde(
404        rename = "dataFields",
405        default,
406        skip_serializing_if = "Option::is_none"
407    )]
408    pub data_fields: Option<XlsxDataFields>,
409    #[serde(
410        rename = "conditionalFormats",
411        default,
412        skip_serializing_if = "Option::is_none"
413    )]
414    pub conditional_formats: Option<XlsxConditionalFormats>,
415    #[serde(
416        rename = "pivotTableStyleInfo",
417        default,
418        skip_serializing_if = "Option::is_none"
419    )]
420    pub pivot_table_style_info: Option<XlsxPivotTableStyleInfo>,
421}
422
423/// Represents location information for the PivotTable.
424#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
425#[serde(rename = "location")]
426pub struct XlsxLocation {
427    #[serde(rename = "@ref")]
428    pub r#ref: String,
429    #[serde(rename = "@firstHeaderRow")]
430    pub first_header_row: i64,
431    #[serde(rename = "@firstDataRow")]
432    pub first_data_row: i64,
433    #[serde(rename = "@firstDataCol")]
434    pub first_data_col: i64,
435    #[serde(
436        rename = "@rowPageCount",
437        default,
438        skip_serializing_if = "Option::is_none"
439    )]
440    pub row_page_count: Option<i64>,
441    #[serde(
442        rename = "@colPageCount",
443        default,
444        skip_serializing_if = "Option::is_none"
445    )]
446    pub col_page_count: Option<i64>,
447}
448
449/// Represents the collection of fields that appear on the PivotTable.
450#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
451#[serde(rename = "pivotFields")]
452pub struct XlsxPivotFields {
453    #[serde(rename = "@count")]
454    pub count: i64,
455    #[serde(rename = "pivotField", default)]
456    pub pivot_field: Vec<XlsxPivotField>,
457}
458
459/// Represents a single field in the PivotTable.
460#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
461#[serde(rename = "pivotField")]
462pub struct XlsxPivotField {
463    #[serde(rename = "@name", default, skip_serializing_if = "Option::is_none")]
464    pub name: Option<String>,
465    #[serde(rename = "@axis", default, skip_serializing_if = "Option::is_none")]
466    pub axis: Option<String>,
467    #[serde(
468        rename = "@dataField",
469        default,
470        skip_serializing_if = "Option::is_none"
471    )]
472    pub data_field: Option<bool>,
473    #[serde(
474        rename = "@subtotalCaption",
475        default,
476        skip_serializing_if = "Option::is_none"
477    )]
478    pub subtotal_caption: Option<String>,
479    #[serde(
480        rename = "@showDropDowns",
481        default,
482        skip_serializing_if = "Option::is_none"
483    )]
484    pub show_drop_downs: Option<bool>,
485    #[serde(
486        rename = "@hiddenLevel",
487        default,
488        skip_serializing_if = "Option::is_none"
489    )]
490    pub hidden_level: Option<bool>,
491    #[serde(
492        rename = "@uniqueMemberProperty",
493        default,
494        skip_serializing_if = "Option::is_none"
495    )]
496    pub unique_member_property: Option<String>,
497    #[serde(rename = "@compact", default, skip_serializing_if = "Option::is_none")]
498    pub compact: Option<bool>,
499    #[serde(
500        rename = "@allDrilled",
501        default,
502        skip_serializing_if = "Option::is_none"
503    )]
504    pub all_drilled: Option<bool>,
505    #[serde(rename = "@numFmtId", default, skip_serializing_if = "Option::is_none")]
506    pub num_fmt_id: Option<String>,
507    #[serde(rename = "@outline", default, skip_serializing_if = "Option::is_none")]
508    pub outline: Option<bool>,
509    #[serde(
510        rename = "@subtotalTop",
511        default,
512        skip_serializing_if = "Option::is_none"
513    )]
514    pub subtotal_top: Option<bool>,
515    #[serde(
516        rename = "@dragToRow",
517        default,
518        skip_serializing_if = "Option::is_none"
519    )]
520    pub drag_to_row: Option<bool>,
521    #[serde(
522        rename = "@dragToCol",
523        default,
524        skip_serializing_if = "Option::is_none"
525    )]
526    pub drag_to_col: Option<bool>,
527    #[serde(
528        rename = "@multipleItemSelectionAllowed",
529        default,
530        skip_serializing_if = "Option::is_none"
531    )]
532    pub multiple_item_selection_allowed: Option<bool>,
533    #[serde(
534        rename = "@dragToPage",
535        default,
536        skip_serializing_if = "Option::is_none"
537    )]
538    pub drag_to_page: Option<bool>,
539    #[serde(
540        rename = "@dragToData",
541        default,
542        skip_serializing_if = "Option::is_none"
543    )]
544    pub drag_to_data: Option<bool>,
545    #[serde(rename = "@dragOff", default, skip_serializing_if = "Option::is_none")]
546    pub drag_off: Option<bool>,
547    #[serde(rename = "@showAll", default, skip_serializing_if = "Option::is_none")]
548    pub show_all: Option<bool>,
549    #[serde(
550        rename = "@insertBlankRow",
551        default,
552        skip_serializing_if = "Option::is_none"
553    )]
554    pub insert_blank_row: Option<bool>,
555    #[serde(
556        rename = "@serverField",
557        default,
558        skip_serializing_if = "Option::is_none"
559    )]
560    pub server_field: Option<bool>,
561    #[serde(
562        rename = "@insertPageBreak",
563        default,
564        skip_serializing_if = "Option::is_none"
565    )]
566    pub insert_page_break: Option<bool>,
567    #[serde(rename = "@autoShow", default, skip_serializing_if = "Option::is_none")]
568    pub auto_show: Option<bool>,
569    #[serde(
570        rename = "@topAutoShow",
571        default,
572        skip_serializing_if = "Option::is_none"
573    )]
574    pub top_auto_show: Option<bool>,
575    #[serde(
576        rename = "@hideNewItems",
577        default,
578        skip_serializing_if = "Option::is_none"
579    )]
580    pub hide_new_items: Option<bool>,
581    #[serde(
582        rename = "@measureFilter",
583        default,
584        skip_serializing_if = "Option::is_none"
585    )]
586    pub measure_filter: Option<bool>,
587    #[serde(
588        rename = "@includeNewItemsInFilter",
589        default,
590        skip_serializing_if = "Option::is_none"
591    )]
592    pub include_new_items_in_filter: Option<bool>,
593    #[serde(
594        rename = "@itemPageCount",
595        default,
596        skip_serializing_if = "Option::is_none"
597    )]
598    pub item_page_count: Option<i64>,
599    #[serde(rename = "@sortType", default, skip_serializing_if = "Option::is_none")]
600    pub sort_type: Option<String>,
601    #[serde(
602        rename = "@dataSourceSort",
603        default,
604        skip_serializing_if = "Option::is_none"
605    )]
606    pub data_source_sort: Option<bool>,
607    #[serde(
608        rename = "@nonAutoSortDefault",
609        default,
610        skip_serializing_if = "Option::is_none"
611    )]
612    pub non_auto_sort_default: Option<bool>,
613    #[serde(rename = "@rankBy", default, skip_serializing_if = "Option::is_none")]
614    pub rank_by: Option<i64>,
615    #[serde(
616        rename = "@defaultSubtotal",
617        default,
618        skip_serializing_if = "Option::is_none"
619    )]
620    pub default_subtotal: Option<bool>,
621    #[serde(
622        rename = "@sumSubtotal",
623        default,
624        skip_serializing_if = "Option::is_none"
625    )]
626    pub sum_subtotal: Option<bool>,
627    #[serde(
628        rename = "@countASubtotal",
629        default,
630        skip_serializing_if = "Option::is_none"
631    )]
632    pub count_a_subtotal: Option<bool>,
633    #[serde(
634        rename = "@avgSubtotal",
635        default,
636        skip_serializing_if = "Option::is_none"
637    )]
638    pub avg_subtotal: Option<bool>,
639    #[serde(
640        rename = "@maxSubtotal",
641        default,
642        skip_serializing_if = "Option::is_none"
643    )]
644    pub max_subtotal: Option<bool>,
645    #[serde(
646        rename = "@minSubtotal",
647        default,
648        skip_serializing_if = "Option::is_none"
649    )]
650    pub min_subtotal: Option<bool>,
651    #[serde(
652        rename = "@productSubtotal",
653        default,
654        skip_serializing_if = "Option::is_none"
655    )]
656    pub product_subtotal: Option<bool>,
657    #[serde(
658        rename = "@countSubtotal",
659        default,
660        skip_serializing_if = "Option::is_none"
661    )]
662    pub count_subtotal: Option<bool>,
663    #[serde(
664        rename = "@stdDevSubtotal",
665        default,
666        skip_serializing_if = "Option::is_none"
667    )]
668    pub std_dev_subtotal: Option<bool>,
669    #[serde(
670        rename = "@stdDevPSubtotal",
671        default,
672        skip_serializing_if = "Option::is_none"
673    )]
674    pub std_dev_p_subtotal: Option<bool>,
675    #[serde(
676        rename = "@varSubtotal",
677        default,
678        skip_serializing_if = "Option::is_none"
679    )]
680    pub var_subtotal: Option<bool>,
681    #[serde(
682        rename = "@varPSubtotal",
683        default,
684        skip_serializing_if = "Option::is_none"
685    )]
686    pub var_p_subtotal: Option<bool>,
687    #[serde(
688        rename = "@showPropCell",
689        default,
690        skip_serializing_if = "Option::is_none"
691    )]
692    pub show_prop_cell: Option<bool>,
693    #[serde(
694        rename = "@showPropTip",
695        default,
696        skip_serializing_if = "Option::is_none"
697    )]
698    pub show_prop_tip: Option<bool>,
699    #[serde(
700        rename = "@showPropAsCaption",
701        default,
702        skip_serializing_if = "Option::is_none"
703    )]
704    pub show_prop_as_caption: Option<bool>,
705    #[serde(
706        rename = "@defaultAttributeDrillState",
707        default,
708        skip_serializing_if = "Option::is_none"
709    )]
710    pub default_attribute_drill_state: Option<bool>,
711    #[serde(rename = "items", default, skip_serializing_if = "Option::is_none")]
712    pub items: Option<XlsxItems>,
713    #[serde(
714        rename = "autoSortScope",
715        default,
716        skip_serializing_if = "Option::is_none"
717    )]
718    pub auto_sort_scope: Option<XlsxAutoSortScope>,
719    #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
720    pub ext_lst: Option<XlsxExtLst>,
721}
722
723/// Represents the collection of items in a PivotTable field.
724#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
725#[serde(rename = "items")]
726pub struct XlsxItems {
727    #[serde(rename = "@count")]
728    pub count: i64,
729    #[serde(rename = "item", default)]
730    pub item: Vec<XlsxItem>,
731}
732
733/// Represents a single item in a PivotTable field.
734#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
735#[serde(rename = "item")]
736pub struct XlsxItem {
737    #[serde(rename = "@n", default, skip_serializing_if = "Option::is_none")]
738    pub n: Option<String>,
739    #[serde(rename = "@t", default, skip_serializing_if = "Option::is_none")]
740    pub t: Option<String>,
741    #[serde(rename = "@h", default, skip_serializing_if = "Option::is_none")]
742    pub h: Option<bool>,
743    #[serde(rename = "@s", default, skip_serializing_if = "Option::is_none")]
744    pub s: Option<bool>,
745    #[serde(rename = "@sd", default, skip_serializing_if = "Option::is_none")]
746    pub sd: Option<bool>,
747    #[serde(rename = "@f", default, skip_serializing_if = "Option::is_none")]
748    pub f: Option<bool>,
749    #[serde(rename = "@m", default, skip_serializing_if = "Option::is_none")]
750    pub m: Option<bool>,
751    #[serde(rename = "@c", default, skip_serializing_if = "Option::is_none")]
752    pub c: Option<bool>,
753    #[serde(rename = "@x", default, skip_serializing_if = "Option::is_none")]
754    pub x: Option<i64>,
755    #[serde(rename = "@d", default, skip_serializing_if = "Option::is_none")]
756    pub d: Option<bool>,
757    #[serde(rename = "@e", default, skip_serializing_if = "Option::is_none")]
758    pub e: Option<bool>,
759}
760
761/// Represents the sorting scope for the PivotTable.
762#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
763#[serde(rename = "autoSortScope")]
764pub struct XlsxAutoSortScope {}
765
766/// Represents the collection of row fields for the PivotTable.
767#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
768#[serde(rename = "rowFields")]
769pub struct XlsxRowFields {
770    #[serde(rename = "@count")]
771    pub count: i64,
772    #[serde(rename = "field", default)]
773    pub field: Vec<XlsxField>,
774}
775
776/// Represents a generic field that can appear on the column or row region.
777#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
778#[serde(rename = "field")]
779pub struct XlsxField {
780    #[serde(rename = "@x")]
781    pub x: i64,
782}
783
784/// Represents the collection of items in the row axis of the PivotTable.
785#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
786#[serde(rename = "rowItems")]
787pub struct XlsxRowItems {
788    #[serde(rename = "@count")]
789    pub count: i64,
790    #[serde(rename = "i", default)]
791    pub i: Vec<XlsxI>,
792}
793
794/// Represents the collection of items in the row region of the PivotTable.
795#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
796#[serde(rename = "i")]
797pub struct XlsxI {
798    #[serde(rename = "x", default)]
799    pub x: Vec<XlsxX>,
800}
801
802/// Represents an array of indexes to cached shared item values.
803#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
804#[serde(rename = "x")]
805pub struct XlsxX {}
806
807/// Represents the collection of fields on the column axis of the PivotTable.
808#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
809#[serde(rename = "colFields")]
810pub struct XlsxColFields {
811    #[serde(rename = "@count")]
812    pub count: i64,
813    #[serde(rename = "field", default)]
814    pub field: Vec<XlsxField>,
815}
816
817/// Represents the collection of column items of the PivotTable.
818#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
819#[serde(rename = "colItems")]
820pub struct XlsxColItems {
821    #[serde(rename = "@count")]
822    pub count: i64,
823    #[serde(rename = "i", default)]
824    pub i: Vec<XlsxI>,
825}
826
827/// Represents the collection of items in the page or report filter region.
828#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
829#[serde(rename = "pageFields")]
830pub struct XlsxPageFields {
831    #[serde(rename = "@count")]
832    pub count: i64,
833    #[serde(rename = "pageField", default)]
834    pub page_field: Vec<XlsxPageField>,
835}
836
837/// Represents a field on the page or report filter of the PivotTable.
838#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
839#[serde(rename = "pageField")]
840pub struct XlsxPageField {
841    #[serde(rename = "@fld")]
842    pub fld: i64,
843    #[serde(rename = "@item", default, skip_serializing_if = "Option::is_none")]
844    pub item: Option<i64>,
845    #[serde(rename = "@hier", default, skip_serializing_if = "Option::is_none")]
846    pub hier: Option<i64>,
847    #[serde(rename = "@name", default, skip_serializing_if = "Option::is_none")]
848    pub name: Option<String>,
849    #[serde(rename = "@cap", default, skip_serializing_if = "Option::is_none")]
850    pub cap: Option<String>,
851    #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
852    pub ext_lst: Option<XlsxExtLst>,
853}
854
855/// Represents the collection of items in the data region of the PivotTable.
856#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
857#[serde(rename = "dataFields")]
858pub struct XlsxDataFields {
859    #[serde(rename = "@count")]
860    pub count: i64,
861    #[serde(rename = "dataField", default)]
862    pub data_field: Vec<XlsxDataField>,
863}
864
865/// Represents a field that contains data summarized in a PivotTable.
866#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
867#[serde(rename = "dataField")]
868pub struct XlsxDataField {
869    #[serde(rename = "@name", default, skip_serializing_if = "Option::is_none")]
870    pub name: Option<String>,
871    #[serde(rename = "@fld")]
872    pub fld: i64,
873    #[serde(rename = "@subtotal", default, skip_serializing_if = "Option::is_none")]
874    pub subtotal: Option<String>,
875    #[serde(
876        rename = "@showDataAs",
877        default,
878        skip_serializing_if = "Option::is_none"
879    )]
880    pub show_data_as: Option<String>,
881    #[serde(
882        rename = "@baseField",
883        default,
884        skip_serializing_if = "Option::is_none"
885    )]
886    pub base_field: Option<i64>,
887    #[serde(rename = "@baseItem", default, skip_serializing_if = "Option::is_none")]
888    pub base_item: Option<i64>,
889    #[serde(rename = "@numFmtId", default, skip_serializing_if = "Option::is_none")]
890    pub num_fmt_id: Option<i64>,
891    #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
892    pub ext_lst: Option<XlsxExtLst>,
893}
894
895/// Specifies extended information about a data field in the pivot table.
896#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
897#[serde(rename = "x14:dataField")]
898pub struct XlsxX14DataField {
899    #[serde(
900        rename = "@xmlns:x14",
901        default,
902        skip_serializing_if = "Option::is_none"
903    )]
904    pub xmlns_x14: Option<String>,
905    #[serde(
906        rename = "@pivotShowAs",
907        default,
908        skip_serializing_if = "Option::is_none"
909    )]
910    pub pivot_show_as: Option<String>,
911    #[serde(
912        rename = "@sourceField",
913        default,
914        skip_serializing_if = "Option::is_none"
915    )]
916    pub source_field: Option<i64>,
917    #[serde(
918        rename = "@uniqueName",
919        default,
920        skip_serializing_if = "Option::is_none"
921    )]
922    pub unique_name: Option<String>,
923}
924
925/// Represents the collection of conditional formats applied to a PivotTable.
926#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
927#[serde(rename = "conditionalFormats")]
928pub struct XlsxConditionalFormats {}
929
930/// Represents information on style applied to the PivotTable.
931#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
932#[serde(rename = "pivotTableStyleInfo")]
933pub struct XlsxPivotTableStyleInfo {
934    #[serde(rename = "@name")]
935    pub name: String,
936    #[serde(rename = "@showRowHeaders")]
937    pub show_row_headers: bool,
938    #[serde(rename = "@showColHeaders")]
939    pub show_col_headers: bool,
940    #[serde(
941        rename = "@showRowStripes",
942        default,
943        skip_serializing_if = "Option::is_none"
944    )]
945    pub show_row_stripes: Option<bool>,
946    #[serde(
947        rename = "@showColStripes",
948        default,
949        skip_serializing_if = "Option::is_none"
950    )]
951    pub show_col_stripes: Option<bool>,
952    #[serde(
953        rename = "@showLastColumn",
954        default,
955        skip_serializing_if = "Option::is_none"
956    )]
957    pub show_last_column: Option<bool>,
958}
959
960/// Defines the structure used to parse the `x14:dataField` element of the pivot
961/// table data field.
962#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
963#[serde(rename = "dataField")]
964pub struct DecodeX14DataField {
965    #[serde(
966        rename = "@pivotShowAs",
967        default,
968        skip_serializing_if = "Option::is_none"
969    )]
970    pub pivot_show_as: Option<String>,
971    #[serde(
972        rename = "@sourceField",
973        default,
974        skip_serializing_if = "Option::is_none"
975    )]
976    pub source_field: Option<i64>,
977    #[serde(
978        rename = "@uniqueName",
979        default,
980        skip_serializing_if = "Option::is_none"
981    )]
982    pub unique_name: Option<String>,
983}