From f752c90058c7bb04052edb18f303eb5bc7a62baf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Hatcher=20Andr=C3=A9s?= Date: Thu, 9 May 2024 11:46:26 +0200 Subject: [PATCH] UPDATE: Parses selected row/column/range and selected sheet (#67) * FIX: Update to Rust 1.78.0 * UPDATE: Parses selected row/column/range and selected sheet --- base/src/expressions/parser/mod.rs | 2 +- base/src/new_empty.rs | 14 ++- base/src/types.rs | 9 ++ base/src/user_model.rs | 2 +- xlsx/src/import/worksheets.rs | 148 +++++++++++++++++++++++++---- xlsx/tests/example.ic | Bin 4242 -> 4760 bytes xlsx/tests/example.xlsx | Bin 38034 -> 41197 bytes xlsx/tests/test.rs | 33 ++++++- 8 files changed, 184 insertions(+), 24 deletions(-) diff --git a/base/src/expressions/parser/mod.rs b/base/src/expressions/parser/mod.rs index 626d292..afeec68 100644 --- a/base/src/expressions/parser/mod.rs +++ b/base/src/expressions/parser/mod.rs @@ -222,7 +222,7 @@ impl Parser { pub fn parse(&mut self, formula: &str, context: &Option) -> Node { self.lexer.set_formula(formula); - self.context = context.clone(); + self.context.clone_from(context); self.parse_expr() } diff --git a/base/src/new_empty.rs b/base/src/new_empty.rs index f708253..4ea2e74 100644 --- a/base/src/new_empty.rs +++ b/base/src/new_empty.rs @@ -6,14 +6,16 @@ use crate::{ calc_result::Range, expressions::{ lexer::LexerMode, - parser::stringify::{rename_sheet_in_node, to_rc_format}, - parser::Parser, + parser::{ + stringify::{rename_sheet_in_node, to_rc_format}, + Parser, + }, types::CellReferenceRC, }, language::get_language, locale::get_locale, model::{get_milliseconds_since_epoch, Model, ParsedDefinedName}, - types::{Metadata, SheetState, Workbook, WorkbookSettings, Worksheet}, + types::{Metadata, Selection, SheetState, Workbook, WorkbookSettings, Worksheet}, utils::ParsedReference, }; @@ -48,6 +50,12 @@ impl Model { color: Default::default(), frozen_columns: 0, frozen_rows: 0, + selection: Selection { + is_selected: false, + row: 1, + column: 1, + range: [1, 1, 1, 1], + }, } } diff --git a/base/src/types.rs b/base/src/types.rs index d8e6318..014b985 100644 --- a/base/src/types.rs +++ b/base/src/types.rs @@ -71,6 +71,14 @@ impl Display for SheetState { } } +#[derive(Encode, Decode, Debug, PartialEq, Clone)] +pub struct Selection { + pub is_selected: bool, + pub row: i32, + pub column: i32, + pub range: [i32; 4], +} + /// Internal representation of a worksheet Excel object #[derive(Encode, Decode, Debug, PartialEq, Clone)] pub struct Worksheet { @@ -87,6 +95,7 @@ pub struct Worksheet { pub comments: Vec, pub frozen_rows: i32, pub frozen_columns: i32, + pub selection: Selection, } /// Internal representation of Excel's sheet_data diff --git a/base/src/user_model.rs b/base/src/user_model.rs index 3e73592..f002b2a 100644 --- a/base/src/user_model.rs +++ b/base/src/user_model.rs @@ -849,7 +849,7 @@ impl UserModel { style.fill.fg_color = color(value)?; } "num_fmt" => { - style.num_fmt = value.to_owned(); + value.clone_into(&mut style.num_fmt); } "border.left" => { style.border.left = border(value)?; diff --git a/xlsx/src/import/worksheets.rs b/xlsx/src/import/worksheets.rs index 819242c..f723a98 100644 --- a/xlsx/src/import/worksheets.rs +++ b/xlsx/src/import/worksheets.rs @@ -5,9 +5,11 @@ use ironcalc_base::{ parser::{stringify::to_rc_format, Parser}, token::{get_error_by_english_name, Error}, types::CellReferenceRC, - utils::column_to_number, + utils::{column_to_number, parse_reference_a1}, + }, + types::{ + Cell, Col, Comment, DefinedName, Row, Selection, SheetData, SheetState, Table, Worksheet, }, - types::{Cell, Col, Comment, DefinedName, Row, SheetData, SheetState, Table, Worksheet}, }; use roxmltree::Node; use thiserror::Error; @@ -47,6 +49,50 @@ fn get_column_from_ref(s: &str) -> String { column.into_iter().collect() } +fn parse_cell_reference(cell: &str) -> Result<(i32, i32), String> { + if let Some(r) = parse_reference_a1(cell) { + Ok((r.row, r.column)) + } else { + Err(format!("Invalid cell reference: '{}'", cell)) + } +} + +fn parse_range(range: &str) -> Result<(i32, i32, i32, i32), String> { + let parts: Vec<&str> = range.split(':').collect(); + if parts.len() == 1 { + if let Some(r) = parse_reference_a1(parts[0]) { + Ok((r.row, r.column, r.row, r.column)) + } else { + Err(format!("Invalid range: '{}'", range)) + } + } else if parts.len() == 2 { + match (parse_reference_a1(parts[0]), parse_reference_a1(parts[1])) { + (Some(left), Some(right)) => { + return Ok((left.row, left.column, right.row, right.column)); + } + _ => return Err(format!("Invalid range: '{}'", range)), + } + } else { + return Err(format!("Invalid range: '{}'", range)); + } +} + +#[cfg(test)] +mod test { + use crate::import::worksheets::parse_range; + + #[test] + fn test_parse_range() { + assert!(parse_range("3Aw").is_err()); + assert_eq!(parse_range("A1"), Ok((1, 1, 1, 1))); + assert_eq!(parse_range("B5:C6"), Ok((5, 2, 6, 3))); + assert!(parse_range("A1:A2:A3").is_err()); + assert!(parse_range("A1:34").is_err()); + assert!(parse_range("A").is_err()); + assert!(parse_range("12").is_err()); + } +} + fn load_dimension(ws: Node) -> String { // let application_nodes = ws @@ -490,7 +536,29 @@ fn load_sheet_rels( Ok(comments) } -fn get_frozen_rows_and_columns(ws: Node) -> (i32, i32) { +struct SheetView { + is_selected: bool, + selected_row: i32, + selected_column: i32, + frozen_columns: i32, + frozen_rows: i32, + range: [i32; 4], +} + +impl Default for SheetView { + fn default() -> Self { + Self { + is_selected: false, + selected_row: 1, + selected_column: 1, + frozen_rows: 0, + frozen_columns: 0, + range: [1, 1, 1, 1], + } + } +} + +fn get_sheet_view(ws: Node) -> SheetView { // // // @@ -511,19 +579,20 @@ fn get_frozen_rows_and_columns(ws: Node) -> (i32, i32) { // bottomLeft, bottomRight, topLeft, topRight // NB: bottomLeft is used when only rows are frozen, etc - // Calc ignores all those. + // IronCalc ignores all those. let mut frozen_rows = 0; let mut frozen_columns = 0; - // In Calc there can only be one sheetView + // In IronCalc there can only be one sheetView let sheet_views = ws .children() .filter(|n| n.has_tag_name("sheetViews")) .collect::>(); + // We are only expecting one `sheetViews` element. Otherwise return a default if sheet_views.len() != 1 { - return (0, 0); + return SheetView::default(); } let sheet_view = sheet_views[0] @@ -531,25 +600,64 @@ fn get_frozen_rows_and_columns(ws: Node) -> (i32, i32) { .filter(|n| n.has_tag_name("sheetView")) .collect::>(); + // We are only expecting one `sheetView` element. Otherwise return a default if sheet_view.len() != 1 { - return (0, 0); + return SheetView::default(); } - let pane = sheet_view[0] + let sheet_view = sheet_view[0]; + let is_selected = sheet_view.attribute("tabSelected").unwrap_or("0") == "1"; + + let pane = sheet_view .children() .filter(|n| n.has_tag_name("pane")) .collect::>(); // 18.18.53 ST_PaneState (Pane State) // frozen, frozenSplit, split - if pane.len() == 1 && pane[0].attribute("state").unwrap_or("split") == "frozen" { - // TODO: Should we assert that topLeft is consistent? - // let top_left_cell = pane[0].attribute("topLeftCell").unwrap_or("A1").to_string(); + if pane.len() == 1 { + if let Some("frozen") = pane[0].attribute("state") { + // TODO: Should we assert that topLeft is consistent? + // let top_left_cell = pane[0].attribute("topLeftCell").unwrap_or("A1").to_string(); - frozen_columns = get_number(pane[0], "xSplit"); - frozen_rows = get_number(pane[0], "ySplit"); + frozen_columns = get_number(pane[0], "xSplit"); + frozen_rows = get_number(pane[0], "ySplit"); + } + } + let selections = sheet_view + .children() + .filter(|n| n.has_tag_name("selection")) + .collect::>(); + + if let Some(selection) = selections.last() { + let active_cell = match selection.attribute("activeCell").map(parse_cell_reference) { + Some(Ok(s)) => Some(s), + _ => None, + }; + let sqref = match selection.attribute("sqref").map(parse_range) { + Some(Ok(s)) => Some(s), + _ => None, + }; + + let (selected_row, selected_column, row1, column1, row2, column2) = + match (active_cell, sqref) { + (Some(cell), Some(range)) => (cell.0, cell.1, range.0, range.1, range.2, range.3), + (Some(cell), None) => (cell.0, cell.1, cell.0, cell.1, cell.0, cell.1), + (None, Some(range)) => (range.0, range.1, range.0, range.1, range.2, range.3), + _ => (1, 1, 1, 1, 1, 1), + }; + + SheetView { + frozen_rows, + frozen_columns, + selected_row, + selected_column, + is_selected, + range: [row1, column1, row2, column2], + } + } else { + SheetView::default() } - (frozen_rows, frozen_columns) } pub(super) struct SheetSettings { @@ -583,7 +691,7 @@ pub(super) fn load_sheet( let dimension = load_dimension(ws); - let (frozen_rows, frozen_columns) = get_frozen_rows_and_columns(ws); + let sheet_view = get_sheet_view(ws); let cols = load_columns(ws)?; let color = load_sheet_color(ws)?; @@ -856,8 +964,14 @@ pub(super) fn load_sheet( color, merge_cells, comments: settings.comments, - frozen_rows, - frozen_columns, + frozen_rows: sheet_view.frozen_rows, + frozen_columns: sheet_view.frozen_columns, + selection: Selection { + is_selected: sheet_view.is_selected, + row: sheet_view.selected_row, + column: sheet_view.selected_column, + range: sheet_view.range, + }, }) } diff --git a/xlsx/tests/example.ic b/xlsx/tests/example.ic index 6da53d0298f1c337b1cd61d40999e53cf7dfddfd..4f86e9556913322c98bfdfdd3918ad91c4034870 100644 GIT binary patch delta 2374 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 diff --git a/xlsx/tests/example.xlsx b/xlsx/tests/example.xlsx index b8a20b1ba2afcb0728d43bcd2ec5a5120cf12b08..99c93f4c40415c87a2c21c7630710efda1d47834 100644 GIT binary patch delta 25611 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%0A(Tr zV2{M7M+1;o>;Ok12kPrspgn};Pxqlf9=VA_79oHNf`}9Yd5cj{_>mv%J18ilh~K6E E2fzfD3IG5A delta 22520 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 = ws + .iter() + .map(|s| (s.name.clone(), s.selection.is_selected)) + .collect(); + + // One is not not imported and one is hidden + assert_eq!(expected_names, names); + + // Test selection: + // First sheet (Sheet1) + // E13 and E13:N20 + assert_eq!(ws[0].frozen_rows, 0); + assert_eq!(ws[0].frozen_columns, 0); + assert_eq!(ws[0].selection.row, 13); + assert_eq!(ws[0].selection.column, 5); + assert_eq!(ws[0].selection.range, [13, 5, 20, 14]); + let model2 = load_from_icalc("tests/example.ic").unwrap(); let s = bitcode::encode(&model2.workbook); assert_eq!(workbook, model2.workbook, "{:?}", s);