UPDATE: Merge cells

This commit is contained in:
Nicolás Hatcher
2025-03-01 11:21:00 +01:00
parent c554d929f4
commit 48727b1b39
21 changed files with 513 additions and 57 deletions

View File

@@ -201,6 +201,26 @@ defined_name_list_types = r"""
getDefinedNameList(): DefinedName[];
"""
merged_cells = r"""
/**
* @param {number} sheet
* @param {number} row
* @param {number} column
* @returns {any}
*/
getCellStructure(sheet: number, row: number, column: number): any;
"""
merged_cells_types = r"""
/**
* @param {number} sheet
* @param {number} row
* @param {number} column
* @returns {CellStructure}
*/
getCellStructure(sheet: number, row: number, column: number): CellStructure;
"""
def fix_types(text):
text = text.replace(get_tokens_str, get_tokens_str_types)
text = text.replace(update_style_str, update_style_str_types)
@@ -215,6 +235,7 @@ def fix_types(text):
text = text.replace(clipboard, clipboard_types)
text = text.replace(paste_from_clipboard, paste_from_clipboard_types)
text = text.replace(defined_name_list, defined_name_list_types)
text = text.replace(merged_cells, merged_cells_types)
with open("types.ts") as f:
types_str = f.read()
header_types = "{}\n\n{}".format(header, types_str)

View File

@@ -5,9 +5,7 @@ use wasm_bindgen::{
};
use ironcalc_base::{
expressions::{lexer::util::get_tokens as tokenizer, types::Area, utils::number_to_column},
types::{CellType, Style},
BorderArea, ClipboardData, UserModel as BaseModel,
expressions::{lexer::util::get_tokens as tokenizer, types::Area, utils::number_to_column}, types::{CellType, Style}, BorderArea, ClipboardData, UserModel as BaseModel
};
fn to_js_error(error: String) -> JsError {
@@ -672,4 +670,36 @@ impl Model {
.delete_defined_name(name, scope)
.map_err(|e| to_js_error(e.to_string()))
}
#[wasm_bindgen(js_name = "mergeCells")]
pub fn merge_cells(
&mut self,
sheet: u32,
row: i32,
column: i32,
width: i32,
height: i32,
) -> Result<(), JsError> {
self.model
.merge_cells(sheet, row, column, width, height)
.map_err(to_js_error)
}
#[wasm_bindgen(js_name = "unmergeCells")]
pub fn unmerge_cells(&mut self, sheet: u32, row: i32, column: i32) -> Result<(), JsError> {
self.model
.unmerge_cells(sheet, row, column)
.map_err(to_js_error)
}
#[wasm_bindgen(js_name = "getCellStructure")]
pub fn get_cell_structure(
&self,
sheet: u32,
row: i32,
column: i32,
) -> Result<JsValue, JsError> {
let data = self.model.get_cell_structure(sheet, row, column).map_err(|e| to_js_error(e.to_string()))?;
serde_wasm_bindgen::to_value(&data).map_err(|e| to_js_error(e.to_string()))
}
}

View File

@@ -216,7 +216,7 @@ export interface SelectedView {
// };
// type ClipboardData = Record<string, Record <string, ClipboardCell>>;
type ClipboardData = Map<number, Map <number, ClipboardCell>>;
type ClipboardData = Map<number, Map<number, ClipboardCell>>;
export interface ClipboardCell {
text: string;
@@ -233,4 +233,9 @@ export interface DefinedName {
name: string;
scope?: number;
formula: string;
}
}
export type CellStructure =
| "Simple"
| { Merged: { row: number; column: number } }
| { MergedRoot: { width: number; height: number } };