WIP
This commit is contained in:
@@ -2102,6 +2102,14 @@ impl Model {
|
|||||||
/// Returns a list of all cells
|
/// Returns a list of all cells
|
||||||
pub fn get_all_cells(&self) -> Vec<CellIndex> {
|
pub fn get_all_cells(&self) -> Vec<CellIndex> {
|
||||||
let mut cells = Vec::new();
|
let mut cells = Vec::new();
|
||||||
|
for (sheet, row, column) in &self.workbook.calc_chain {
|
||||||
|
let cell = CellIndex {
|
||||||
|
row: *row,
|
||||||
|
column: *column,
|
||||||
|
index: *sheet,
|
||||||
|
};
|
||||||
|
cells.push(cell);
|
||||||
|
}
|
||||||
for (index, sheet) in self.workbook.worksheets.iter().enumerate() {
|
for (index, sheet) in self.workbook.worksheets.iter().enumerate() {
|
||||||
let mut sorted_rows: Vec<_> = sheet.sheet_data.keys().collect();
|
let mut sorted_rows: Vec<_> = sheet.sheet_data.keys().collect();
|
||||||
sorted_rows.sort_unstable();
|
sorted_rows.sort_unstable();
|
||||||
@@ -2128,6 +2136,8 @@ impl Model {
|
|||||||
|
|
||||||
let cells = self.get_all_cells();
|
let cells = self.get_all_cells();
|
||||||
|
|
||||||
|
// First evaluate all dynamic arrays
|
||||||
|
|
||||||
for cell in cells {
|
for cell in cells {
|
||||||
self.evaluate_cell(CellReferenceIndex {
|
self.evaluate_cell(CellReferenceIndex {
|
||||||
sheet: cell.index,
|
sheet: cell.index,
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ fn basic_undo_redo() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn mixed_spills() {
|
fn mixed_spills() {
|
||||||
let mut model = UserModel::new_empty("model", "en", "UTC").unwrap();
|
let mut model = UserModel::new_empty("model", "en", "UTC").unwrap();
|
||||||
// D9 => ={1,2,3}
|
// D9 => ={34,35,3}
|
||||||
model.set_user_input(0, 9, 4, "={34,35,3}").unwrap();
|
model.set_user_input(0, 9, 4, "={34,35,3}").unwrap();
|
||||||
// F6 => ={1;2;3;4}
|
// F6 => ={1;2;3;4}
|
||||||
model.set_user_input(0, 6, 6, "={1;2;3;4}").unwrap();
|
model.set_user_input(0, 6, 6, "={1;2;3;4}").unwrap();
|
||||||
|
|||||||
@@ -51,6 +51,9 @@ pub struct Workbook {
|
|||||||
pub metadata: Metadata,
|
pub metadata: Metadata,
|
||||||
pub tables: HashMap<String, Table>,
|
pub tables: HashMap<String, Table>,
|
||||||
pub views: HashMap<u32, WorkbookView>,
|
pub views: HashMap<u32, WorkbookView>,
|
||||||
|
/// Calculation chain of the dynamic arrays.
|
||||||
|
/// List of tuples (sheet_id, row, column)
|
||||||
|
pub calc_chain: Vec<(u32, i32, i32)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A defined name. The `sheet_id` is the sheet index in case the name is local
|
/// A defined name. The `sheet_id` is the sheet index in case the name is local
|
||||||
|
|||||||
@@ -348,7 +348,15 @@ const Workbook = (props: { model: Model; workbookState: WorkbookState }) => {
|
|||||||
return workbookState.getEditingText();
|
return workbookState.getEditingText();
|
||||||
}
|
}
|
||||||
const { sheet, row, column } = model.getSelectedView();
|
const { sheet, row, column } = model.getSelectedView();
|
||||||
|
const r = model.getCellArrayStructure(sheet, row, column);
|
||||||
|
if (r === "SingleCell") {
|
||||||
return model.getCellContent(sheet, row, column);
|
return model.getCellContent(sheet, row, column);
|
||||||
|
}
|
||||||
|
if ("DynamicMother" in r) {
|
||||||
|
return model.getCellContent(sheet, row, column);
|
||||||
|
}
|
||||||
|
const [mother_row, mother_column, _] = r.DynamicChild;
|
||||||
|
return model.getCellContent(sheet, mother_row, mother_column);
|
||||||
};
|
};
|
||||||
|
|
||||||
// returns true if it is either single cell or the root cell of an array
|
// returns true if it is either single cell or the root cell of an array
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user