adding merge cell logic processing
formatting commit addressing testcase failures adding one more scenario to case adding one more scenario to case Adding update and unmerge functions for merge cell handling adding one more case to testcase adding testcases to base code adding testcase for import/export adding documentation to some of the PUB function fixing warnings and test warnings adding merge cell part cell update restriction to public sytle set fns addressing reviwers comment : Changed Mergedcell structure and its side effercts reverting it back to non pub. renaming update_merge_cells to just merge_cells in model renaming *unmerge_merged_cell* to *unmerge_cells* addressing other reviewer's comment + cosmetica naming adjustments cosmetic changes
This commit is contained in:
committed by
Nicolás Hatcher
parent
3270d587ac
commit
e7858f7aa9
@@ -10,7 +10,7 @@ use ironcalc_base::{
|
||||
utils::{column_to_number, parse_reference_a1},
|
||||
},
|
||||
types::{
|
||||
Cell, Col, Comment, DefinedName, Row, SheetData, SheetState, Table, Worksheet,
|
||||
Cell, Col, Comment, DefinedName, MergedCells, Row, SheetData, SheetState, Table, Worksheet,
|
||||
WorksheetView,
|
||||
},
|
||||
};
|
||||
@@ -148,12 +148,12 @@ fn load_columns(ws: Node) -> Result<Vec<Col>, XlsxError> {
|
||||
Ok(cols)
|
||||
}
|
||||
|
||||
fn load_merge_cells(ws: Node) -> Result<Vec<String>, XlsxError> {
|
||||
fn load_merge_cells_nodes(ws: Node) -> Result<Vec<MergedCells>, XlsxError> {
|
||||
// 18.3.1.55 Merge Cells
|
||||
// <mergeCells count="1">
|
||||
// <mergeCell ref="K7:L10"/>
|
||||
// </mergeCells>
|
||||
let mut merge_cells = Vec::new();
|
||||
let mut merged_cells_list: Vec<MergedCells> = Vec::new();
|
||||
let merge_cells_nodes = ws
|
||||
.children()
|
||||
.filter(|n| n.has_tag_name("mergeCells"))
|
||||
@@ -161,10 +161,18 @@ fn load_merge_cells(ws: Node) -> Result<Vec<String>, XlsxError> {
|
||||
if merge_cells_nodes.len() == 1 {
|
||||
for merge_cell in merge_cells_nodes[0].children() {
|
||||
let reference = get_attribute(&merge_cell, "ref")?.to_string();
|
||||
merge_cells.push(reference);
|
||||
match parse_range(&reference) {
|
||||
Ok(parsed_merge_cell_range) => {
|
||||
let merge_cell_node = MergedCells::new(parsed_merge_cell_range);
|
||||
merged_cells_list.push(merge_cell_node);
|
||||
}
|
||||
Err(err) => {
|
||||
println!("encountered error while parsing merge cell ref : {}", err);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(merge_cells)
|
||||
Ok(merged_cells_list)
|
||||
}
|
||||
|
||||
fn load_sheet_color(ws: Node) -> Result<Option<String>, XlsxError> {
|
||||
@@ -943,7 +951,7 @@ pub(super) fn load_sheet<R: Read + std::io::Seek>(
|
||||
sheet_data.insert(row_index, data_row);
|
||||
}
|
||||
|
||||
let merge_cells = load_merge_cells(ws)?;
|
||||
let merge_cells_nodes = load_merge_cells_nodes(ws)?;
|
||||
|
||||
// Conditional Formatting
|
||||
// <conditionalFormatting sqref="B1:B9">
|
||||
@@ -982,7 +990,7 @@ pub(super) fn load_sheet<R: Read + std::io::Seek>(
|
||||
sheet_id,
|
||||
state: state.to_owned(),
|
||||
color,
|
||||
merge_cells,
|
||||
merged_cells_list: merge_cells_nodes,
|
||||
comments: settings.comments,
|
||||
frozen_rows: sheet_view.frozen_rows,
|
||||
frozen_columns: sheet_view.frozen_columns,
|
||||
|
||||
Reference in New Issue
Block a user