User API Reference¶
The user API (UserModel) is the high level API used by the IronCalc
web application. Every action evaluates the workbook, keeps undo/redo history
and produces diffs for collaboration.
Conventions:
sheetindexes are 0-based;rowandcolumnindexes are 1-based (column “A” is 1).Range arguments are always
(sheet, start_row, start_column, end_row, end_column), all bounds inclusive.Complex values (styles, rules, themes) are plain dictionaries; see Objects.
All methods raise
WorkbookErroron invalid input.
Constructors¶
- class UserModel(name, locale='en', tz='UTC', language_id='en')¶
Creates an empty workbook.
Persistence¶
- UserModel.save_to_xlsx(file: str)¶
Saves the workbook to an xlsx file.
- UserModel.save_to_icalc(file: str)¶
Saves the workbook to a file in the internal binary ic format.
- UserModel.to_bytes() bytes¶
Returns the workbook as bytes in the internal binary ic format.
Collaboration¶
- UserModel.flush_send_queue() bytes¶
Returns (and clears) the queue of binary diffs produced by local edits.
- UserModel.apply_external_diffs(external_diffs: bytes)¶
Applies a list of diffs produced by another model’s
flush_send_queue.
Undo, redo and evaluation¶
- UserModel.undo()¶
- UserModel.redo()¶
- UserModel.can_undo() bool¶
- UserModel.can_redo() bool¶
- UserModel.pause_evaluation()¶
Pauses the automatic evaluation performed after each change; useful when entering large amounts of data.
- UserModel.resume_evaluation()¶
- UserModel.evaluate()¶
Forces an evaluation (only needed while the evaluation is paused).
Cell values¶
- UserModel.set_user_input(sheet: int, row: int, column: int, value: str)¶
Sets the input of a cell as a user would type it:
"3.5"is a number,"Hello"a string,"=A1*2"a formula.
- UserModel.set_user_array_formula(sheet: int, row: int, column: int, width: int, height: int, formula: str)¶
Sets an array (spill) formula covering
widthxheightcells.
- UserModel.get_cell_content(sheet: int, row: int, column: int) str¶
Returns the content of a cell as seen in the editor: the formula if there is one, the raw value otherwise.
- UserModel.get_formatted_cell_value(sheet: int, row: int, column: int) str¶
Returns the value formatted with the cell’s number format (i.e.
"$5.75").
- UserModel.get_cell_type(sheet: int, row: int, column: int) CellType¶
- UserModel.get_cell_array_structure(sheet: int, row: int, column: int)¶
Returns information about the array (spill) structure of a cell.
- UserModel.get_sheet_dimensions(sheet: int)¶
Returns
(min_row, max_row, min_column, max_column)of the non-empty cells;(1, 1, 1, 1)for an empty sheet.
Ranges¶
- UserModel.range_clear_all(sheet, start_row, start_column, end_row, end_column)¶
Clears contents and formatting.
- UserModel.range_clear_contents(sheet, start_row, start_column, end_row, end_column)¶
Clears contents, keeps formatting.
- UserModel.range_clear_formatting(sheet, start_row, start_column, end_row, end_column)¶
Clears formatting, keeps contents.
- UserModel.auto_fill_rows(sheet, start_row, start_column, end_row, end_column, to_row: int)¶
Extends the content of the source area down (or up) until
to_row, like dragging the fill handle.
- UserModel.auto_fill_columns(sheet, start_row, start_column, end_row, end_column, to_column: int)¶
Styles¶
- UserModel.update_range_style(sheet, start_row, start_column, end_row, end_column, style_path: str, value: str)¶
Updates one style property in every cell of the range.
style_pathexamples:"font.b","font.color","fill.color","alignment.horizontal","num_fmt". The value is always a string:"true","#FF5566","center","#,##0.00".
- UserModel.get_cell_style(sheet: int, row: int, column: int) dict¶
Returns the style of the cell as a dictionary.
- UserModel.get_extended_cell_style(sheet: int, row: int, column: int) dict¶
Returns the style with any conditional formatting overlay applied, plus icon-set / data-bar decorations.
- UserModel.set_area_with_border(sheet, start_row, start_column, end_row, end_column, border_area: dict)¶
Applies a border to an area.
border_areais{"item": {"style": "thin", "color": "#000000"}, "type": "All"}wheretypeis one ofAll,Inner,Outer,Top,Right,Bottom,Left,CenterH,CenterV,None.
- UserModel.on_paste_styles(styles: list[list[dict]])¶
Pastes a matrix of styles starting at the selected cell.
Named styles¶
- UserModel.get_named_style_list() list[str]¶
- UserModel.get_named_style(name: str) dict¶
- UserModel.get_named_style_includes(name: str) dict¶
- UserModel.create_named_style(name: str, style: dict, includes: dict | None = None)¶
Creates a named style.
includesselects which formatting categories the style carries (Excel’s “Style Includes” checkboxes);Nonemeans all.
- UserModel.update_named_style(name: str, new_name: str, style: dict, includes: dict | None = None)¶
- UserModel.delete_named_style(name: str)¶
- UserModel.get_builtin_named_styles() list[dict]¶
Returns all Excel built-in named styles as
{"name", "style"}entries.
- UserModel.on_apply_named_style(name: str)¶
Applies a named style to the current selection, adding it from the built-ins if needed.
Conditional formatting¶
Rules are dictionaries; see Objects for the shapes.
- UserModel.get_conditional_formatting_list(sheet: int) list[dict]¶
Returns entries with
range,cf_rule,priorityandindex, sorted by priority descending.
- UserModel.add_conditional_formatting(sheet: int, range: str, rule: dict)¶
Adds a rule to a range given as a string like
"A1:B10".
- UserModel.update_conditional_formatting(sheet: int, index: int, new_range: str, new_rule: dict)¶
- UserModel.delete_conditional_formatting(sheet: int, index: int)¶
- UserModel.get_dxf_for_conditional_formatting(sheet: int, index: int) dict | None¶
Returns the differential style the rule applies, if it has one.
- UserModel.raise_conditional_formatting_priority(sheet: int, index: int)¶
- UserModel.lower_conditional_formatting_priority(sheet: int, index: int)¶
Sheets¶
- UserModel.new_sheet()¶
Adds a sheet with an automatically generated name.
- UserModel.delete_sheet(sheet: int)¶
- UserModel.duplicate_sheet(sheet: int)¶
- UserModel.rename_sheet(sheet: int, name: str)¶
- UserModel.move_sheet(sheet: int, new_index: int)¶
- UserModel.hide_sheet(sheet: int)¶
- UserModel.unhide_sheet(sheet: int)¶
- UserModel.set_sheet_color(sheet: int, color)¶
colorisNone,"#RRGGBB"or[theme_index, tint].
- UserModel.get_worksheets_properties() list[dict]¶
One entry per sheet with
name,state,sheet_idandcolor.
- UserModel.set_show_grid_lines(sheet: int, show_grid_lines: bool)¶
- UserModel.get_show_grid_lines(sheet: int) bool¶
Rows and columns¶
- UserModel.insert_rows(sheet: int, row: int, row_count: int)¶
- UserModel.insert_columns(sheet: int, column: int, column_count: int)¶
- UserModel.delete_rows(sheet: int, row: int, row_count: int)¶
- UserModel.delete_columns(sheet: int, column: int, column_count: int)¶
- UserModel.move_rows(sheet: int, row: int, row_count: int, delta: int)¶
- UserModel.move_columns(sheet: int, column: int, column_count: int, delta: int)¶
- UserModel.get_row_height(sheet: int, row: int) float¶
- UserModel.get_column_width(sheet: int, column: int) float¶
- UserModel.set_rows_height(sheet: int, row_start: int, row_end: int, height: float)¶
- UserModel.set_columns_width(sheet: int, column_start: int, column_end: int, width: float)¶
- UserModel.get_frozen_rows_count(sheet: int) int¶
- UserModel.get_frozen_columns_count(sheet: int) int¶
- UserModel.set_frozen_rows_count(sheet: int, count: int)¶
- UserModel.set_frozen_columns_count(sheet: int, count: int)¶
- UserModel.get_last_non_empty_in_row_before_column(sheet, row, column) int | None¶
- UserModel.get_first_non_empty_in_row_after_column(sheet, row, column) int | None¶
Defined names¶
- UserModel.get_defined_name_list() list[dict]¶
Entries have
name,scope(sheet index orNonefor global) andformula.
- UserModel.new_defined_name(name: str, scope: int | None, formula: str)¶
- UserModel.update_defined_name(name, scope, new_name, new_scope, new_formula)¶
- UserModel.delete_defined_name(name: str, scope: int | None)¶
- UserModel.is_valid_defined_name(name: str, scope: int | None, formula: str)¶
Raises
WorkbookErrorif the name or formula is not valid.
Selection¶
Some operations (applying named styles, pasting styles, copying to the clipboard) act on the current selection.
- UserModel.get_selected_sheet() int¶
- UserModel.get_selected_cell()¶
- UserModel.get_selected_view() dict¶
- UserModel.set_selected_sheet(sheet: int)¶
- UserModel.set_selected_cell(row: int, column: int)¶
- UserModel.set_selected_range(start_row, start_column, end_row, end_column)¶
The selected cell must be one of the corners of the range; call
UserModel.set_selected_cell()first.
Clipboard¶
- UserModel.copy_to_clipboard() dict¶
Copies the selected area. The result has
csv(tab separated text),data(internal representation),sheetandrange.
- UserModel.paste_from_clipboard(source_sheet: int, source_range: tuple, clipboard: dict, is_cut: bool)¶
Pastes data copied with
copy_to_clipboardinto the selected area, adjusting relative references. Passclipboard["data"]as theclipboardargument.
- UserModel.paste_csv_string(sheet, start_row, start_column, end_row, end_column, csv: str)¶
Pastes tab separated text starting at the top-left corner of the area.
Workbook properties¶
- UserModel.get_name() str¶
- UserModel.set_name(name: str)¶
- UserModel.get_timezone() str¶
- UserModel.set_timezone(timezone: str)¶
- UserModel.get_locale() str¶
- UserModel.set_locale(locale: str)¶
- UserModel.get_language() str¶
- UserModel.set_language(language: str)¶
- UserModel.get_fmt_settings() dict¶
Returns locale dependent formatting settings (currency, date formats, …).
- UserModel.get_theme() dict¶
- UserModel.set_theme(theme: dict)¶
- UserModel.resolve_color(color) str¶
Resolves a color to a CSS hex string using the current workbook theme; returns
""for no color.