Skip to main content

excelize_rs/xml/
table.rs

1//! Table part (`xl/tables/table*.xml`).
2//!
3//! Ported from Go `xmlTable.go`.
4
5use serde::{Deserialize, Serialize};
6
7use super::common::XlsxInnerXml;
8
9/// Directly maps the table element. A table helps organize and provide structure
10/// to list of information in a worksheet.
11#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
12#[serde(rename = "table")]
13pub struct XlsxTable {
14    #[serde(rename = "@xmlns", default)]
15    pub xmlns: Option<String>,
16    #[serde(rename = "@id")]
17    pub id: i64,
18    #[serde(rename = "@name")]
19    pub name: String,
20    #[serde(rename = "@displayName", default)]
21    pub display_name: Option<String>,
22    #[serde(rename = "@comment", default)]
23    pub comment: Option<String>,
24    #[serde(rename = "@ref")]
25    pub r#ref: String,
26    #[serde(rename = "@tableType", default)]
27    pub table_type: Option<String>,
28    #[serde(rename = "@headerRowCount", default)]
29    pub header_row_count: Option<i64>,
30    #[serde(rename = "@insertRow", default)]
31    pub insert_row: bool,
32    #[serde(rename = "@insertRowShift", default)]
33    pub insert_row_shift: bool,
34    #[serde(rename = "@totalsRowCount", default)]
35    pub totals_row_count: i64,
36    #[serde(rename = "@totalsRowShown", default)]
37    pub totals_row_shown: Option<bool>,
38    #[serde(rename = "@published", default)]
39    pub published: bool,
40    #[serde(rename = "@headerRowDxfId", default)]
41    pub header_row_dxf_id: i64,
42    #[serde(rename = "@dataDxfId", default)]
43    pub data_dxf_id: i64,
44    #[serde(rename = "@totalsRowDxfId", default)]
45    pub totals_row_dxf_id: i64,
46    #[serde(rename = "@headerRowBorderDxfId", default)]
47    pub header_row_border_dxf_id: i64,
48    #[serde(rename = "@tableBorderDxfId", default)]
49    pub table_border_dxf_id: i64,
50    #[serde(rename = "@totalsRowBorderDxfId", default)]
51    pub totals_row_border_dxf_id: i64,
52    #[serde(rename = "@headerRowCellStyle", default)]
53    pub header_row_cell_style: Option<String>,
54    #[serde(rename = "@dataCellStyle", default)]
55    pub data_cell_style: Option<String>,
56    #[serde(rename = "@totalsRowCellStyle", default)]
57    pub totals_row_cell_style: Option<String>,
58    #[serde(rename = "@connectionId", default)]
59    pub connection_id: i64,
60    #[serde(rename = "autoFilter", default)]
61    pub auto_filter: Option<XlsxAutoFilter>,
62    #[serde(rename = "tableColumns", default)]
63    pub table_columns: Option<XlsxTableColumns>,
64    #[serde(rename = "tableStyleInfo", default)]
65    pub table_style_info: Option<XlsxTableStyleInfo>,
66}
67
68/// Temporarily hides rows based on a filter criteria, which is applied column by
69/// column to a table of data in the worksheet.
70#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
71#[serde(rename = "autoFilter")]
72pub struct XlsxAutoFilter {
73    #[serde(rename = "@ref")]
74    pub r#ref: String,
75    #[serde(rename = "filterColumn", default)]
76    pub filter_column: Vec<XlsxFilterColumn>,
77}
78
79/// Identifies a particular column in the AutoFilter range and specifies filter
80/// information that has been applied to this column.
81#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
82#[serde(rename = "filterColumn")]
83pub struct XlsxFilterColumn {
84    #[serde(rename = "@colId")]
85    pub col_id: i64,
86    #[serde(rename = "@hiddenButton", default)]
87    pub hidden_button: bool,
88    #[serde(rename = "@showButton", default)]
89    pub show_button: bool,
90    #[serde(rename = "customFilters", default)]
91    pub custom_filters: Option<XlsxCustomFilters>,
92    #[serde(rename = "filters", default)]
93    pub filters: Option<XlsxFilters>,
94    #[serde(rename = "colorFilter", default)]
95    pub color_filter: Option<XlsxColorFilter>,
96    #[serde(rename = "dynamicFilter", default)]
97    pub dynamic_filter: Option<XlsxDynamicFilter>,
98    #[serde(rename = "iconFilter", default)]
99    pub icon_filter: Option<XlsxIconFilter>,
100    #[serde(rename = "top10", default)]
101    pub top10: Option<XlsxTop10>,
102}
103
104/// Groups custom filter elements together when there is more than one custom
105/// filter criteria to apply.
106#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
107#[serde(rename = "customFilters")]
108pub struct XlsxCustomFilters {
109    #[serde(rename = "@and", default)]
110    pub and: bool,
111    #[serde(rename = "customFilter", default)]
112    pub custom_filter: Vec<XlsxCustomFilter>,
113}
114
115/// A custom AutoFilter specifies an operator and a value.
116#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
117#[serde(rename = "customFilter")]
118pub struct XlsxCustomFilter {
119    #[serde(rename = "@operator", default)]
120    pub operator: Option<String>,
121    #[serde(rename = "@val", default)]
122    pub val: Option<String>,
123}
124
125/// Groups filter criteria together when multiple values are chosen to filter by,
126/// or when a group of date values are chosen to filter by.
127#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
128#[serde(rename = "filters")]
129pub struct XlsxFilters {
130    #[serde(rename = "@blank", default)]
131    pub blank: bool,
132    #[serde(rename = "@calendarType", default)]
133    pub calendar_type: Option<String>,
134    #[serde(rename = "filter", default)]
135    pub filter: Vec<XlsxFilter>,
136    #[serde(rename = "dateGroupItem", default)]
137    pub date_group_item: Vec<XlsxDateGroupItem>,
138}
139
140/// Expresses a filter criteria value.
141#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
142#[serde(rename = "filter")]
143pub struct XlsxFilter {
144    #[serde(rename = "@val", default)]
145    pub val: Option<String>,
146}
147
148/// Specifies the color to filter by and whether to use the cell's fill or font
149/// color in the filter criteria.
150#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
151#[serde(rename = "colorFilter")]
152pub struct XlsxColorFilter {
153    #[serde(rename = "@cellColor")]
154    pub cell_color: bool,
155    #[serde(rename = "@dxfId")]
156    pub dxf_id: i64,
157}
158
159/// Specifies dynamic filter criteria. These criteria can change either with the
160/// data itself or with the current system date.
161#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
162#[serde(rename = "dynamicFilter")]
163pub struct XlsxDynamicFilter {
164    #[serde(rename = "@maxValIso", default)]
165    pub max_val_iso: Option<String>,
166    #[serde(rename = "@type", default)]
167    pub r#type: Option<String>,
168    #[serde(rename = "@val", default)]
169    pub val: Option<f64>,
170    #[serde(rename = "@valIso", default)]
171    pub val_iso: Option<String>,
172}
173
174/// Specifies the icon set and particular icon within that set to filter by.
175#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
176#[serde(rename = "iconFilter")]
177pub struct XlsxIconFilter {
178    #[serde(rename = "@iconId")]
179    pub icon_id: i64,
180    #[serde(rename = "@iconSet", default)]
181    pub icon_set: Option<String>,
182}
183
184/// Specifies the top N (percent or number of items) to filter by.
185#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
186#[serde(rename = "top10")]
187pub struct XlsxTop10 {
188    #[serde(rename = "@filterVal", default)]
189    pub filter_val: Option<f64>,
190    #[serde(rename = "@percent", default)]
191    pub percent: bool,
192    #[serde(rename = "@top")]
193    pub top: bool,
194    #[serde(rename = "@val", default)]
195    pub val: Option<f64>,
196}
197
198/// Expresses a group of dates or times which are used in an AutoFilter criteria.
199#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
200#[serde(rename = "dateGroupItem")]
201pub struct XlsxDateGroupItem {
202    #[serde(rename = "@dateTimeGrouping", default)]
203    pub date_time_grouping: Option<String>,
204    #[serde(rename = "@day", default)]
205    pub day: i64,
206    #[serde(rename = "@hour", default)]
207    pub hour: i64,
208    #[serde(rename = "@minute", default)]
209    pub minute: i64,
210    #[serde(rename = "@month", default)]
211    pub month: i64,
212    #[serde(rename = "@second", default)]
213    pub second: i64,
214    #[serde(rename = "@year", default)]
215    pub year: i64,
216}
217
218/// Represents the collection of all table columns for this table.
219#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
220#[serde(rename = "tableColumns")]
221pub struct XlsxTableColumns {
222    #[serde(rename = "@count")]
223    pub count: i64,
224    #[serde(rename = "tableColumn", default)]
225    pub table_column: Vec<XlsxTableColumn>,
226}
227
228/// Represents a single column for this table.
229#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
230#[serde(rename = "tableColumn")]
231pub struct XlsxTableColumn {
232    #[serde(rename = "@id")]
233    pub id: i64,
234    #[serde(rename = "@uniqueName", default)]
235    pub unique_name: Option<String>,
236    #[serde(rename = "@name")]
237    pub name: String,
238    #[serde(rename = "@totalsRowFunction", default)]
239    pub totals_row_function: Option<String>,
240    #[serde(rename = "@totalsRowLabel", default)]
241    pub totals_row_label: Option<String>,
242    #[serde(rename = "@queryTableFieldId", default)]
243    pub query_table_field_id: i64,
244    #[serde(rename = "@headerRowDxfId", default)]
245    pub header_row_dxf_id: i64,
246    #[serde(rename = "@dataDxfId", default)]
247    pub data_dxf_id: i64,
248    #[serde(rename = "@totalsRowDxfId", default)]
249    pub totals_row_dxf_id: i64,
250    #[serde(rename = "@headerRowCellStyle", default)]
251    pub header_row_cell_style: Option<String>,
252    #[serde(rename = "@dataCellStyle", default)]
253    pub data_cell_style: Option<String>,
254    #[serde(rename = "@totalsRowCellStyle", default)]
255    pub totals_row_cell_style: Option<String>,
256}
257
258/// Describes which style is used to display this table, and specifies which
259/// portions of the table have the style applied.
260#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
261#[serde(rename = "tableStyleInfo")]
262pub struct XlsxTableStyleInfo {
263    #[serde(rename = "@name", default)]
264    pub name: Option<String>,
265    #[serde(rename = "@showFirstColumn")]
266    pub show_first_column: bool,
267    #[serde(rename = "@showLastColumn")]
268    pub show_last_column: bool,
269    #[serde(rename = "@showRowStripes")]
270    pub show_row_stripes: bool,
271    #[serde(rename = "@showColumnStripes")]
272    pub show_column_stripes: bool,
273}
274
275/// A single cell table generated from an XML mapping.
276#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
277#[serde(rename = "singleXmlCells")]
278pub struct XlsxSingleXmlCells {
279    #[serde(rename = "singleXmlCell", default)]
280    pub single_xml_cell: Vec<XlsxSingleXmlCell>,
281}
282
283/// Represents the table properties for a single cell XML table.
284#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
285#[serde(rename = "singleXmlCell")]
286pub struct XlsxSingleXmlCell {
287    #[serde(rename = "@id")]
288    pub id: i64,
289    #[serde(rename = "@r")]
290    pub r: String,
291    #[serde(rename = "@connectionId")]
292    pub connection_id: i64,
293    #[serde(rename = "xmlCellPr")]
294    pub xml_cell_pr: XlsxXmlCellPr,
295    #[serde(rename = "extLst", default)]
296    pub ext_lst: Option<XlsxInnerXml>,
297}
298
299/// Stores the XML properties for the cell of a single cell xml table.
300#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
301#[serde(rename = "xmlCellPr")]
302pub struct XlsxXmlCellPr {
303    #[serde(rename = "@id")]
304    pub id: i64,
305    #[serde(rename = "@uniqueName", default)]
306    pub unique_name: Option<String>,
307    #[serde(rename = "xmlPr", default)]
308    pub xml_pr: Option<XlsxInnerXml>,
309    #[serde(rename = "extLst", default)]
310    pub ext_lst: Option<XlsxInnerXml>,
311}
312
313/// Directly maps the format settings of the table.
314#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
315pub struct Table {
316    pub t_id: i64,
317    pub r_id: String,
318    pub table_xml: String,
319    pub range: String,
320    pub name: String,
321    pub style_name: String,
322    pub show_column_stripes: bool,
323    pub show_first_column: bool,
324    pub show_header_row: Option<bool>,
325    pub show_last_column: bool,
326    pub show_row_stripes: Option<bool>,
327}
328
329/// Directly maps the auto filter settings.
330#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
331pub struct AutoFilterOptions {
332    pub column: String,
333    pub expression: String,
334}