XLSX: XML maps survive a save, with their table columns and mapped cells (part of #860)

This commit is contained in:
Marco Arnulfo
2026-10-13 02:45:40 +02:00
parent fc45b7f6d8
commit 2dd832e2d5
13 changed files with 235 additions and 26 deletions
+8 -1
View File
@@ -821,7 +821,14 @@ fn table_resize(s: &mut Session, p: &Json) -> Result<Json> {
for (i, h) in headers.iter().enumerate() {
let name = if h.is_empty() { format!("Column{}", i + 1) } else { h.clone() };
let existing = t.columns.iter().find(|c| c.name.eq_ignore_ascii_case(&name)).cloned();
cols.push(existing.unwrap_or(TableColumn { name, totals: TotalsFn::None, totals_label: None, formula: None }));
cols.push(existing.unwrap_or(TableColumn {
name,
totals: TotalsFn::None,
totals_label: None,
formula: None,
unique_name: None,
xml: None,
}));
}
t.columns = cols;
t.range = r;
+6 -1
View File
@@ -351,7 +351,10 @@ fn forecast_sheet(s: &mut Session, p: &Json) -> Result<Json> {
range,
header_row: true,
totals_row: false,
columns: headers.iter().map(|h| TableColumn { name: h.clone(), totals: TotalsFn::None, totals_label: None, formula: None }).collect(),
columns: headers
.iter()
.map(|h| TableColumn { name: h.clone(), totals: TotalsFn::None, totals_label: None, formula: None, unique_name: None, xml: None })
.collect(),
style: "TableStyleMedium2".into(),
banded_rows: true,
banded_cols: false,
@@ -359,6 +362,8 @@ fn forecast_sheet(s: &mut Session, p: &Json) -> Result<Json> {
last_col: false,
filter_button: true,
filter: vec![],
table_type: None,
connection_id: None,
});
let q = gridcraft_formula::quote_sheet(&sheet_name);
let col_ref = |c: u32| format!("{q}!${0}$2:${0}${end_row}", col_letters(c));
+6 -1
View File
@@ -310,7 +310,10 @@ fn insert_table(s: &mut Session, p: &Json) -> Result<Json> {
range: r,
header_row: true,
totals_row: false,
columns: names.into_iter().map(|n| TableColumn { name: n, totals: TotalsFn::None, totals_label: None, formula: None }).collect(),
columns: names
.into_iter()
.map(|n| TableColumn { name: n, totals: TotalsFn::None, totals_label: None, formula: None, unique_name: None, xml: None })
.collect(),
style,
banded_rows: true,
banded_cols: false,
@@ -318,6 +321,8 @@ fn insert_table(s: &mut Session, p: &Json) -> Result<Json> {
last_col: false,
filter_button: true,
filter: vec![],
table_type: None,
connection_id: None,
});
cx.structural = true;
Ok(json!({"table": name, "range": r.a1()}))
+8 -1
View File
@@ -982,7 +982,14 @@ fn shift_table_columns(t: &mut gridcraft_model::Table, at: u32, count: u32, inse
break name;
}
};
let col = gridcraft_model::TableColumn { name, totals: Default::default(), totals_label: None, formula: None };
let col = gridcraft_model::TableColumn {
name,
totals: Default::default(),
totals_label: None,
formula: None,
unique_name: None,
xml: None,
};
t.columns.insert((idx + k).min(t.columns.len()), col);
}
}