Skip to main content

excelize_rs/xml/
workbook.rs

1//! Workbook part (`xl/workbook.xml`).
2//!
3//! Ported from Go `xmlWorkbook.go`.
4
5use serde::{Deserialize, Serialize};
6
7use super::common::{XlsxExtLst, XlsxInnerXml};
8
9/// Relationships part (`_rels/*.rels`).
10#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
11#[serde(rename = "Relationships")]
12pub struct XlsxRelationships {
13    #[serde(rename = "Relationship", default)]
14    pub relationships: Vec<XlsxRelationship>,
15}
16
17/// A single relationship.
18#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
19#[serde(rename = "Relationship")]
20pub struct XlsxRelationship {
21    #[serde(rename = "@Id", default)]
22    pub id: String,
23    #[serde(rename = "@Target", default)]
24    pub target: String,
25    #[serde(rename = "@Type", default)]
26    pub r#type: String,
27    #[serde(
28        rename = "@TargetMode",
29        default,
30        skip_serializing_if = "Option::is_none"
31    )]
32    pub target_mode: Option<String>,
33}
34
35/// Workbook root element.
36#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
37#[serde(rename = "workbook", rename_all = "PascalCase")]
38pub struct XlsxWorkbook {
39    #[serde(
40        rename = "@conformance",
41        default,
42        skip_serializing_if = "Option::is_none"
43    )]
44    pub conformance: Option<String>,
45    #[serde(
46        rename = "fileVersion",
47        default,
48        skip_serializing_if = "Option::is_none"
49    )]
50    pub file_version: Option<XlsxFileVersion>,
51    #[serde(
52        rename = "fileSharing",
53        default,
54        skip_serializing_if = "Option::is_none"
55    )]
56    pub file_sharing: Option<XlsxExtLst>,
57    #[serde(
58        rename = "workbookPr",
59        default,
60        skip_serializing_if = "Option::is_none"
61    )]
62    pub workbook_pr: Option<XlsxWorkbookPr>,
63    #[serde(
64        rename = "mc:AlternateContent",
65        default,
66        skip_serializing_if = "Option::is_none"
67    )]
68    pub alternate_content: Option<XlsxAlternateContent>,
69    #[serde(
70        rename = "http://schemas.openxmlformats.org/markup-compatibility/2006 AlternateContent",
71        default,
72        skip_serializing
73    )]
74    pub decode_alternate_content: Option<XlsxInnerXml>,
75    #[serde(
76        rename = "workbookProtection",
77        default,
78        skip_serializing_if = "Option::is_none"
79    )]
80    pub workbook_protection: Option<XlsxWorkbookProtection>,
81    #[serde(rename = "bookViews", default, skip_serializing_if = "Option::is_none")]
82    pub book_views: Option<XlsxBookViews>,
83    #[serde(rename = "sheets", default)]
84    pub sheets: XlsxSheets,
85    #[serde(
86        rename = "functionGroups",
87        default,
88        skip_serializing_if = "Option::is_none"
89    )]
90    pub function_groups: Option<XlsxFunctionGroups>,
91    #[serde(
92        rename = "externalReferences",
93        default,
94        skip_serializing_if = "Option::is_none"
95    )]
96    pub external_references: Option<XlsxExternalReferences>,
97    #[serde(
98        rename = "definedNames",
99        default,
100        skip_serializing_if = "Option::is_none"
101    )]
102    pub defined_names: Option<XlsxDefinedNames>,
103    #[serde(rename = "calcPr", default, skip_serializing_if = "Option::is_none")]
104    pub calc_pr: Option<XlsxCalcPr>,
105    #[serde(rename = "oleSize", default, skip_serializing_if = "Option::is_none")]
106    pub ole_size: Option<XlsxExtLst>,
107    #[serde(
108        rename = "customWorkbookViews",
109        default,
110        skip_serializing_if = "Option::is_none"
111    )]
112    pub custom_workbook_views: Option<XlsxCustomWorkbookViews>,
113    #[serde(
114        rename = "pivotCaches",
115        default,
116        skip_serializing_if = "Option::is_none"
117    )]
118    pub pivot_caches: Option<XlsxPivotCaches>,
119    #[serde(
120        rename = "smartTagPr",
121        default,
122        skip_serializing_if = "Option::is_none"
123    )]
124    pub smart_tag_pr: Option<XlsxExtLst>,
125    #[serde(
126        rename = "smartTagTypes",
127        default,
128        skip_serializing_if = "Option::is_none"
129    )]
130    pub smart_tag_types: Option<XlsxExtLst>,
131    #[serde(
132        rename = "webPublishing",
133        default,
134        skip_serializing_if = "Option::is_none"
135    )]
136    pub web_publishing: Option<XlsxExtLst>,
137    #[serde(
138        rename = "fileRecoveryPr",
139        default,
140        skip_serializing_if = "Option::is_none"
141    )]
142    pub file_recovery_pr: Option<XlsxFileRecoveryPr>,
143    #[serde(
144        rename = "webPublishObjects",
145        default,
146        skip_serializing_if = "Option::is_none"
147    )]
148    pub web_publish_objects: Option<XlsxExtLst>,
149    #[serde(rename = "extLst", default, skip_serializing_if = "Option::is_none")]
150    pub ext_lst: Option<XlsxExtLst>,
151}
152
153/// Sheet recovery information.
154#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
155pub struct XlsxFileRecoveryPr {
156    #[serde(
157        rename = "@autoRecover",
158        default,
159        skip_serializing_if = "Option::is_none"
160    )]
161    pub auto_recover: Option<bool>,
162    #[serde(
163        rename = "@crashSave",
164        default,
165        skip_serializing_if = "Option::is_none"
166    )]
167    pub crash_save: Option<bool>,
168    #[serde(
169        rename = "@dataExtractLoad",
170        default,
171        skip_serializing_if = "Option::is_none"
172    )]
173    pub data_extract_load: Option<bool>,
174    #[serde(
175        rename = "@repairLoad",
176        default,
177        skip_serializing_if = "Option::is_none"
178    )]
179    pub repair_load: Option<bool>,
180}
181
182/// Workbook protection settings.
183#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
184pub struct XlsxWorkbookProtection {
185    #[serde(
186        rename = "@lockRevision",
187        default,
188        skip_serializing_if = "Option::is_none"
189    )]
190    pub lock_revision: Option<bool>,
191    #[serde(
192        rename = "@lockStructure",
193        default,
194        skip_serializing_if = "Option::is_none"
195    )]
196    pub lock_structure: Option<bool>,
197    #[serde(
198        rename = "@lockWindows",
199        default,
200        skip_serializing_if = "Option::is_none"
201    )]
202    pub lock_windows: Option<bool>,
203    #[serde(
204        rename = "@revisionsAlgorithmName",
205        default,
206        skip_serializing_if = "Option::is_none"
207    )]
208    pub revisions_algorithm_name: Option<String>,
209    #[serde(
210        rename = "@revisionsHashValue",
211        default,
212        skip_serializing_if = "Option::is_none"
213    )]
214    pub revisions_hash_value: Option<String>,
215    #[serde(
216        rename = "@revisionsSaltValue",
217        default,
218        skip_serializing_if = "Option::is_none"
219    )]
220    pub revisions_salt_value: Option<String>,
221    #[serde(
222        rename = "@revisionsSpinCount",
223        default,
224        skip_serializing_if = "Option::is_none"
225    )]
226    pub revisions_spin_count: Option<i64>,
227    #[serde(
228        rename = "@workbookAlgorithmName",
229        default,
230        skip_serializing_if = "Option::is_none"
231    )]
232    pub workbook_algorithm_name: Option<String>,
233    #[serde(
234        rename = "@workbookHashValue",
235        default,
236        skip_serializing_if = "Option::is_none"
237    )]
238    pub workbook_hash_value: Option<String>,
239    #[serde(
240        rename = "@workbookSaltValue",
241        default,
242        skip_serializing_if = "Option::is_none"
243    )]
244    pub workbook_salt_value: Option<String>,
245    #[serde(
246        rename = "@workbookSpinCount",
247        default,
248        skip_serializing_if = "Option::is_none"
249    )]
250    pub workbook_spin_count: Option<i64>,
251}
252
253/// File version tracking.
254#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
255pub struct XlsxFileVersion {
256    #[serde(rename = "@appName", default, skip_serializing_if = "Option::is_none")]
257    pub app_name: Option<String>,
258    #[serde(rename = "@codeName", default, skip_serializing_if = "Option::is_none")]
259    pub code_name: Option<String>,
260    #[serde(
261        rename = "@lastEdited",
262        default,
263        skip_serializing_if = "Option::is_none"
264    )]
265    pub last_edited: Option<String>,
266    #[serde(
267        rename = "@lowestEdited",
268        default,
269        skip_serializing_if = "Option::is_none"
270    )]
271    pub lowest_edited: Option<String>,
272    #[serde(rename = "@rupBuild", default, skip_serializing_if = "Option::is_none")]
273    pub rup_build: Option<String>,
274}
275
276/// Workbook properties.
277#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
278pub struct XlsxWorkbookPr {
279    #[serde(rename = "@date1904", default, skip_serializing_if = "Option::is_none")]
280    pub date1904: Option<bool>,
281    #[serde(
282        rename = "@showObjects",
283        default,
284        skip_serializing_if = "Option::is_none"
285    )]
286    pub show_objects: Option<String>,
287    #[serde(
288        rename = "@showBorderUnselectedTables",
289        default,
290        skip_serializing_if = "Option::is_none"
291    )]
292    pub show_border_unselected_tables: Option<bool>,
293    #[serde(
294        rename = "@filterPrivacy",
295        default,
296        skip_serializing_if = "Option::is_none"
297    )]
298    pub filter_privacy: Option<bool>,
299    #[serde(
300        rename = "@promptedSolutions",
301        default,
302        skip_serializing_if = "Option::is_none"
303    )]
304    pub prompted_solutions: Option<bool>,
305    #[serde(
306        rename = "@showInkAnnotation",
307        default,
308        skip_serializing_if = "Option::is_none"
309    )]
310    pub show_ink_annotation: Option<bool>,
311    #[serde(
312        rename = "@backupFile",
313        default,
314        skip_serializing_if = "Option::is_none"
315    )]
316    pub backup_file: Option<bool>,
317    #[serde(
318        rename = "@saveExternalLinkValues",
319        default,
320        skip_serializing_if = "Option::is_none"
321    )]
322    pub save_external_link_values: Option<bool>,
323    #[serde(
324        rename = "@updateLinks",
325        default,
326        skip_serializing_if = "Option::is_none"
327    )]
328    pub update_links: Option<String>,
329    #[serde(rename = "@codeName", default, skip_serializing_if = "Option::is_none")]
330    pub code_name: Option<String>,
331    #[serde(
332        rename = "@hidePivotFieldList",
333        default,
334        skip_serializing_if = "Option::is_none"
335    )]
336    pub hide_pivot_field_list: Option<bool>,
337    #[serde(
338        rename = "@showPivotChartFilter",
339        default,
340        skip_serializing_if = "Option::is_none"
341    )]
342    pub show_pivot_chart_filter: Option<bool>,
343    #[serde(
344        rename = "@allowRefreshQuery",
345        default,
346        skip_serializing_if = "Option::is_none"
347    )]
348    pub allow_refresh_query: Option<bool>,
349    #[serde(
350        rename = "@publishItems",
351        default,
352        skip_serializing_if = "Option::is_none"
353    )]
354    pub publish_items: Option<bool>,
355    #[serde(
356        rename = "@checkCompatibility",
357        default,
358        skip_serializing_if = "Option::is_none"
359    )]
360    pub check_compatibility: Option<bool>,
361    #[serde(
362        rename = "@autoCompressPictures",
363        default,
364        skip_serializing_if = "Option::is_none"
365    )]
366    pub auto_compress_pictures: Option<bool>,
367    #[serde(
368        rename = "@refreshAllConnections",
369        default,
370        skip_serializing_if = "Option::is_none"
371    )]
372    pub refresh_all_connections: Option<bool>,
373    #[serde(
374        rename = "@defaultThemeVersion",
375        default,
376        skip_serializing_if = "Option::is_none"
377    )]
378    pub default_theme_version: Option<String>,
379}
380
381/// Collection of workbook views.
382#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
383pub struct XlsxBookViews {
384    #[serde(rename = "workbookView", default)]
385    pub workbook_view: Vec<XlsxWorkBookView>,
386}
387
388/// A single workbook view.
389#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
390pub struct XlsxWorkBookView {
391    #[serde(
392        rename = "@visibility",
393        default,
394        skip_serializing_if = "Option::is_none"
395    )]
396    pub visibility: Option<String>,
397    #[serde(
398        rename = "@minimized",
399        default,
400        skip_serializing_if = "Option::is_none"
401    )]
402    pub minimized: Option<bool>,
403    #[serde(
404        rename = "@showHorizontalScroll",
405        default,
406        skip_serializing_if = "Option::is_none"
407    )]
408    pub show_horizontal_scroll: Option<bool>,
409    #[serde(
410        rename = "@showVerticalScroll",
411        default,
412        skip_serializing_if = "Option::is_none"
413    )]
414    pub show_vertical_scroll: Option<bool>,
415    #[serde(
416        rename = "@showSheetTabs",
417        default,
418        skip_serializing_if = "Option::is_none"
419    )]
420    pub show_sheet_tabs: Option<bool>,
421    #[serde(rename = "@xWindow", default, skip_serializing_if = "Option::is_none")]
422    pub x_window: Option<String>,
423    #[serde(rename = "@yWindow", default, skip_serializing_if = "Option::is_none")]
424    pub y_window: Option<String>,
425    #[serde(
426        rename = "@windowWidth",
427        default,
428        skip_serializing_if = "Option::is_none"
429    )]
430    pub window_width: Option<i64>,
431    #[serde(
432        rename = "@windowHeight",
433        default,
434        skip_serializing_if = "Option::is_none"
435    )]
436    pub window_height: Option<i64>,
437    #[serde(rename = "@tabRatio", default, skip_serializing_if = "Option::is_none")]
438    pub tab_ratio: Option<f64>,
439    #[serde(
440        rename = "@firstSheet",
441        default,
442        skip_serializing_if = "Option::is_none"
443    )]
444    pub first_sheet: Option<i64>,
445    #[serde(
446        rename = "@activeTab",
447        default,
448        skip_serializing_if = "Option::is_none"
449    )]
450    pub active_tab: Option<i64>,
451    #[serde(
452        rename = "@autoFilterDateGrouping",
453        default,
454        skip_serializing_if = "Option::is_none"
455    )]
456    pub auto_filter_date_grouping: Option<bool>,
457}
458
459/// Collection of sheets in the workbook.
460#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
461pub struct XlsxSheets {
462    #[serde(rename = "sheet", default)]
463    pub sheet: Vec<XlsxSheet>,
464}
465
466/// A single sheet reference.
467#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
468pub struct XlsxSheet {
469    #[serde(rename = "@name", default, skip_serializing_if = "Option::is_none")]
470    pub name: Option<String>,
471    #[serde(rename = "@sheetId", default, skip_serializing_if = "Option::is_none")]
472    pub sheet_id: Option<i64>,
473    #[serde(rename = "@r:id", default, skip_serializing_if = "Option::is_none")]
474    pub id: Option<String>,
475    /// Fallback for namespaced `r:id` when only the local name survives parsing.
476    #[serde(rename = "@id", default, skip_serializing_if = "Option::is_none")]
477    pub plain_id: Option<String>,
478    #[serde(rename = "@state", default, skip_serializing_if = "Option::is_none")]
479    pub state: Option<String>,
480}
481
482/// A function group.
483#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
484pub struct XlsxFunctionGroup {
485    #[serde(rename = "@name", default)]
486    pub name: String,
487}
488
489/// Collection of function groups.
490#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
491pub struct XlsxFunctionGroups {
492    #[serde(
493        rename = "@builtInGroupCount",
494        default,
495        skip_serializing_if = "Option::is_none"
496    )]
497    pub built_in_group_count: Option<i64>,
498    #[serde(rename = "functionGroup", default)]
499    pub function_group: Vec<XlsxFunctionGroup>,
500}
501
502/// External workbook references.
503#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
504pub struct XlsxExternalReferences {
505    #[serde(rename = "externalReference", default)]
506    pub external_reference: Vec<XlsxExternalReference>,
507}
508
509/// A single external reference.
510#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
511pub struct XlsxExternalReference {
512    #[serde(rename = "@r:id", default, skip_serializing_if = "Option::is_none")]
513    pub rid: Option<String>,
514}
515
516/// Pivot cache references.
517#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
518pub struct XlsxPivotCaches {
519    #[serde(rename = "pivotCache", default)]
520    pub pivot_cache: Vec<XlsxPivotCache>,
521}
522
523/// A single pivot cache reference.
524#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
525pub struct XlsxPivotCache {
526    #[serde(rename = "@cacheId", default)]
527    pub cache_id: i64,
528    #[serde(rename = "@r:id", default, skip_serializing_if = "Option::is_none")]
529    pub rid: Option<String>,
530}
531
532/// Markup compatibility alternate content container.
533#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
534#[serde(rename = "mc:AlternateContent")]
535pub struct XlsxAlternateContent {
536    #[serde(rename = "@xmlns:mc", default, skip_serializing_if = "Option::is_none")]
537    pub xmlns_mc: Option<String>,
538    #[serde(rename = "$value", default)]
539    pub content: String,
540}
541
542/// Choice element inside alternate content.
543#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
544#[serde(rename = "mc:Choice")]
545pub struct XlsxChoice {
546    #[serde(
547        rename = "@xmlns:a14",
548        default,
549        skip_serializing_if = "Option::is_none"
550    )]
551    pub xmlns_a14: Option<String>,
552    #[serde(
553        rename = "@xmlns:sle15",
554        default,
555        skip_serializing_if = "Option::is_none"
556    )]
557    pub xmlns_sle15: Option<String>,
558    #[serde(rename = "@Requires", default, skip_serializing_if = "Option::is_none")]
559    pub requires: Option<String>,
560    #[serde(rename = "$value", default)]
561    pub content: String,
562}
563
564/// Fallback element inside alternate content.
565#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
566#[serde(rename = "mc:Fallback")]
567pub struct XlsxFallback {
568    #[serde(rename = "$value", default)]
569    pub content: String,
570}
571
572/// Defined names container.
573#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
574pub struct XlsxDefinedNames {
575    #[serde(rename = "definedName", default)]
576    pub defined_name: Vec<XlsxDefinedName>,
577}
578
579/// A single defined name.
580#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
581pub struct XlsxDefinedName {
582    #[serde(rename = "@comment", default, skip_serializing_if = "Option::is_none")]
583    pub comment: Option<String>,
584    #[serde(
585        rename = "@customMenu",
586        default,
587        skip_serializing_if = "Option::is_none"
588    )]
589    pub custom_menu: Option<String>,
590    #[serde(
591        rename = "@description",
592        default,
593        skip_serializing_if = "Option::is_none"
594    )]
595    pub description: Option<String>,
596    #[serde(rename = "@function", default, skip_serializing_if = "Option::is_none")]
597    pub function: Option<bool>,
598    #[serde(
599        rename = "@functionGroupId",
600        default,
601        skip_serializing_if = "Option::is_none"
602    )]
603    pub function_group_id: Option<i64>,
604    #[serde(rename = "@help", default, skip_serializing_if = "Option::is_none")]
605    pub help: Option<String>,
606    #[serde(rename = "@hidden", default, skip_serializing_if = "Option::is_none")]
607    pub hidden: Option<bool>,
608    #[serde(
609        rename = "@localSheetId",
610        default,
611        skip_serializing_if = "Option::is_none"
612    )]
613    pub local_sheet_id: Option<i64>,
614    #[serde(rename = "@name", default, skip_serializing_if = "Option::is_none")]
615    pub name: Option<String>,
616    #[serde(
617        rename = "@publishToServer",
618        default,
619        skip_serializing_if = "Option::is_none"
620    )]
621    pub publish_to_server: Option<bool>,
622    #[serde(
623        rename = "@shortcutKey",
624        default,
625        skip_serializing_if = "Option::is_none"
626    )]
627    pub shortcut_key: Option<String>,
628    #[serde(
629        rename = "@statusBar",
630        default,
631        skip_serializing_if = "Option::is_none"
632    )]
633    pub status_bar: Option<String>,
634    #[serde(
635        rename = "@vbProcedure",
636        default,
637        skip_serializing_if = "Option::is_none"
638    )]
639    pub vb_procedure: Option<bool>,
640    #[serde(
641        rename = "@workbookParameter",
642        default,
643        skip_serializing_if = "Option::is_none"
644    )]
645    pub workbook_parameter: Option<bool>,
646    #[serde(rename = "@xml", default, skip_serializing_if = "Option::is_none")]
647    pub xlm: Option<bool>,
648    #[serde(rename = "$value", default)]
649    pub data: String,
650}
651
652/// Calculation properties.
653#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
654pub struct XlsxCalcPr {
655    #[serde(
656        rename = "@calcCompleted",
657        default,
658        skip_serializing_if = "Option::is_none"
659    )]
660    pub calc_completed: Option<bool>,
661    #[serde(rename = "@calcId", default, skip_serializing_if = "Option::is_none")]
662    pub calc_id: Option<i64>,
663    #[serde(rename = "@calcMode", default, skip_serializing_if = "Option::is_none")]
664    pub calc_mode: Option<String>,
665    #[serde(
666        rename = "@calcOnSave",
667        default,
668        skip_serializing_if = "Option::is_none"
669    )]
670    pub calc_on_save: Option<bool>,
671    #[serde(
672        rename = "@concurrentCalc",
673        default,
674        skip_serializing_if = "Option::is_none"
675    )]
676    pub concurrent_calc: Option<bool>,
677    #[serde(
678        rename = "@concurrentManualCount",
679        default,
680        skip_serializing_if = "Option::is_none"
681    )]
682    pub concurrent_manual_count: Option<i64>,
683    #[serde(
684        rename = "@forceFullCalc",
685        default,
686        skip_serializing_if = "Option::is_none"
687    )]
688    pub force_full_calc: Option<bool>,
689    #[serde(
690        rename = "@fullCalcOnLoad",
691        default,
692        skip_serializing_if = "Option::is_none"
693    )]
694    pub full_calc_on_load: Option<bool>,
695    #[serde(
696        rename = "@fullPrecision",
697        default,
698        skip_serializing_if = "Option::is_none"
699    )]
700    pub full_precision: Option<bool>,
701    #[serde(rename = "@iterate", default, skip_serializing_if = "Option::is_none")]
702    pub iterate: Option<bool>,
703    #[serde(
704        rename = "@iterateCount",
705        default,
706        skip_serializing_if = "Option::is_none"
707    )]
708    pub iterate_count: Option<i64>,
709    #[serde(
710        rename = "@iterateDelta",
711        default,
712        skip_serializing_if = "Option::is_none"
713    )]
714    pub iterate_delta: Option<f64>,
715    #[serde(rename = "@refMode", default, skip_serializing_if = "Option::is_none")]
716    pub ref_mode: Option<String>,
717}
718
719/// Custom workbook views container.
720#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
721pub struct XlsxCustomWorkbookViews {
722    #[serde(rename = "customWorkbookView", default)]
723    pub custom_workbook_view: Vec<XlsxCustomWorkbookView>,
724}
725
726/// A single custom workbook view.
727#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
728pub struct XlsxCustomWorkbookView {
729    #[serde(
730        rename = "@activeSheetId",
731        default,
732        skip_serializing_if = "Option::is_none"
733    )]
734    pub active_sheet_id: Option<i64>,
735    #[serde(
736        rename = "@autoUpdate",
737        default,
738        skip_serializing_if = "Option::is_none"
739    )]
740    pub auto_update: Option<bool>,
741    #[serde(
742        rename = "@changesSavedWin",
743        default,
744        skip_serializing_if = "Option::is_none"
745    )]
746    pub changes_saved_win: Option<bool>,
747    #[serde(rename = "@guid", default, skip_serializing_if = "Option::is_none")]
748    pub guid: Option<String>,
749    #[serde(
750        rename = "@includeHiddenRowCol",
751        default,
752        skip_serializing_if = "Option::is_none"
753    )]
754    pub include_hidden_row_col: Option<bool>,
755    #[serde(
756        rename = "@includePrintSettings",
757        default,
758        skip_serializing_if = "Option::is_none"
759    )]
760    pub include_print_settings: Option<bool>,
761    #[serde(
762        rename = "@maximized",
763        default,
764        skip_serializing_if = "Option::is_none"
765    )]
766    pub maximized: Option<bool>,
767    #[serde(rename = "@mergeInterval", default)]
768    pub merge_interval: i64,
769    #[serde(
770        rename = "@minimized",
771        default,
772        skip_serializing_if = "Option::is_none"
773    )]
774    pub minimized: Option<bool>,
775    #[serde(rename = "@name", default, skip_serializing_if = "Option::is_none")]
776    pub name: Option<String>,
777    #[serde(rename = "@onlySync", default, skip_serializing_if = "Option::is_none")]
778    pub only_sync: Option<bool>,
779    #[serde(
780        rename = "@personalView",
781        default,
782        skip_serializing_if = "Option::is_none"
783    )]
784    pub personal_view: Option<bool>,
785    #[serde(
786        rename = "@showComments",
787        default,
788        skip_serializing_if = "Option::is_none"
789    )]
790    pub show_comments: Option<String>,
791    #[serde(
792        rename = "@showFormulaBar",
793        default,
794        skip_serializing_if = "Option::is_none"
795    )]
796    pub show_formula_bar: Option<bool>,
797    #[serde(
798        rename = "@showHorizontalScroll",
799        default,
800        skip_serializing_if = "Option::is_none"
801    )]
802    pub show_horizontal_scroll: Option<bool>,
803    #[serde(
804        rename = "@showObjects",
805        default,
806        skip_serializing_if = "Option::is_none"
807    )]
808    pub show_objects: Option<String>,
809    #[serde(
810        rename = "@showSheetTabs",
811        default,
812        skip_serializing_if = "Option::is_none"
813    )]
814    pub show_sheet_tabs: Option<bool>,
815    #[serde(
816        rename = "@showStatusbar",
817        default,
818        skip_serializing_if = "Option::is_none"
819    )]
820    pub show_statusbar: Option<bool>,
821    #[serde(
822        rename = "@showVerticalScroll",
823        default,
824        skip_serializing_if = "Option::is_none"
825    )]
826    pub show_vertical_scroll: Option<bool>,
827    #[serde(rename = "@tabRatio", default, skip_serializing_if = "Option::is_none")]
828    pub tab_ratio: Option<f64>,
829    #[serde(
830        rename = "@windowHeight",
831        default,
832        skip_serializing_if = "Option::is_none"
833    )]
834    pub window_height: Option<i64>,
835    #[serde(
836        rename = "@windowWidth",
837        default,
838        skip_serializing_if = "Option::is_none"
839    )]
840    pub window_width: Option<i64>,
841    #[serde(rename = "@xWindow", default, skip_serializing_if = "Option::is_none")]
842    pub x_window: Option<i64>,
843    #[serde(rename = "@yWindow", default, skip_serializing_if = "Option::is_none")]
844    pub y_window: Option<i64>,
845}
846
847// ------------------------------------------------------------------
848// Public API types
849// ------------------------------------------------------------------
850
851/// Defined name used in the public API.
852#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
853pub struct DefinedName {
854    #[serde(default)]
855    pub name: String,
856    #[serde(default)]
857    pub comment: String,
858    #[serde(rename = "RefersTo", default)]
859    pub refers_to: String,
860    #[serde(default)]
861    pub scope: String,
862}
863
864/// Calculation properties options.
865#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
866pub struct CalcPropsOptions {
867    #[serde(default)]
868    pub calc_id: Option<u64>,
869    #[serde(default)]
870    pub calc_mode: Option<String>,
871    #[serde(
872        rename = "FullCalcOnLoad",
873        default,
874        skip_serializing_if = "Option::is_none"
875    )]
876    pub full_calc_on_load: Option<bool>,
877    #[serde(default)]
878    pub ref_mode: Option<String>,
879    #[serde(default)]
880    pub iterate: Option<bool>,
881    #[serde(default)]
882    pub iterate_count: Option<u64>,
883    #[serde(default)]
884    pub iterate_delta: Option<f64>,
885    #[serde(
886        rename = "FullPrecision",
887        default,
888        skip_serializing_if = "Option::is_none"
889    )]
890    pub full_precision: Option<bool>,
891    #[serde(
892        rename = "CalcCompleted",
893        default,
894        skip_serializing_if = "Option::is_none"
895    )]
896    pub calc_completed: Option<bool>,
897    #[serde(
898        rename = "CalcOnSave",
899        default,
900        skip_serializing_if = "Option::is_none"
901    )]
902    pub calc_on_save: Option<bool>,
903    #[serde(
904        rename = "ConcurrentCalc",
905        default,
906        skip_serializing_if = "Option::is_none"
907    )]
908    pub concurrent_calc: Option<bool>,
909    #[serde(
910        rename = "ConcurrentManualCount",
911        default,
912        skip_serializing_if = "Option::is_none"
913    )]
914    pub concurrent_manual_count: Option<u64>,
915    #[serde(
916        rename = "ForceFullCalc",
917        default,
918        skip_serializing_if = "Option::is_none"
919    )]
920    pub force_full_calc: Option<bool>,
921}
922
923/// Workbook properties options.
924#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
925pub struct WorkbookPropsOptions {
926    #[serde(default)]
927    pub date1904: Option<bool>,
928    #[serde(
929        rename = "FilterPrivacy",
930        default,
931        skip_serializing_if = "Option::is_none"
932    )]
933    pub filter_privacy: Option<bool>,
934    #[serde(default)]
935    pub code_name: Option<String>,
936}
937
938/// Workbook protection options.
939#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
940pub struct WorkbookProtectionOptions {
941    #[serde(rename = "AlgorithmName", default)]
942    pub algorithm_name: String,
943    #[serde(default)]
944    pub password: String,
945    #[serde(rename = "LockStructure", default)]
946    pub lock_structure: bool,
947    #[serde(rename = "LockWindows", default)]
948    pub lock_windows: bool,
949}