Raw API Reference¶
The raw API (Model) is a low level API. Nothing is evaluated
automatically: call Model.evaluate() after making changes, otherwise the
workbook may be in an inconsistent state. There is no undo/redo history and no
diffs are produced. It is faster and more flexible than the user API, but
easier to get wrong.
Conventions are the same as in the user API: 0-based sheet indexes,
1-based row and column indexes, dictionaries for complex values and
WorkbookError on invalid input.
Evaluation and persistence¶
- Model.evaluate()¶
Evaluates the workbook. Call this after each batch of changes.
- Model.save_to_xlsx(file: str)¶
- Model.save_to_icalc(file: str)¶
- Model.to_xlsx() bytes¶
Returns the workbook as bytes in xlsx format.
- Model.to_bytes() bytes¶
Setting values¶
- Model.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.
- Model.update_cell_with_text(sheet: int, row: int, column: int, value: str)¶
Sets a string value without input parsing (
"123"stays a string).
- Model.update_cell_with_number(sheet: int, row: int, column: int, value: float)¶
- Model.update_cell_with_bool(sheet: int, row: int, column: int, value: bool)¶
- Model.update_cell_with_formula(sheet: int, row: int, column: int, formula: str)¶
- Model.set_user_array_formula(sheet, row, column, width, height, formula: str)¶
Sets an array (spill) formula covering
widthxheightcells.
- Model.clear_cell_contents(sheet: int, row: int, column: int)¶
Clears the content of a single cell, keeping the formatting.
- Model.range_clear_contents(sheet, start_row, start_column, end_row, end_column)¶
- Model.range_clear_all(sheet, start_row, start_column, end_row, end_column)¶
Getting values¶
- Model.get_cell_value(sheet: int, row: int, column: int)¶
Returns the value of a cell as a native Python value:
None,str,floatorbool.
- Model.get_cell_value_by_ref(cell_ref: str)¶
Same, with a reference like
"Sheet1!C4".
- Model.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").
- Model.get_cell_content(sheet: int, row: int, column: int) str¶
Returns the content as seen in the editor: the formula if there is one, the raw value otherwise.
- Model.get_cell_formula(sheet: int, row: int, column: int) str | None¶
- Model.get_cell_type(sheet: int, row: int, column: int) CellType¶
- Model.is_empty_cell(sheet: int, row: int, column: int) bool¶
- Model.get_all_cells() list[tuple[int, int, int]]¶
Returns all non-empty cells as
(sheet, row, column)tuples.
- Model.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.
- Model.get_sheet_markup(sheet: int) str¶
Returns a markdown-like table of the sheet (formulas, not values), useful for debugging and tests.
- Model.cycle_reference(value: str, start: int, end: int)¶
Cycles the references touched by the cursor through the four absolute/relative states, Excel F4 style (see
UserModel.cycle_reference()).
Styles¶
Styles are dictionaries; see Objects.
- Model.get_cell_style(sheet: int, row: int, column: int) dict¶
- Model.set_cell_style(sheet: int, row: int, column: int, style: dict)¶
- Model.get_column_style(sheet: int, column: int) dict | None¶
- Model.set_column_style(sheet: int, column: int, style: dict)¶
- Model.delete_column_style(sheet: int, column: int)¶
- Model.get_row_style(sheet: int, row: int) dict | None¶
- Model.set_row_style(sheet: int, row: int, style: dict)¶
- Model.delete_row_style(sheet: int, row: int)¶
Rows and columns¶
- Model.insert_rows(sheet: int, row: int, row_count: int)¶
- Model.insert_columns(sheet: int, column: int, column_count: int)¶
- Model.delete_rows(sheet: int, row: int, row_count: int)¶
- Model.delete_columns(sheet: int, column: int, column_count: int)¶
- Model.get_column_width(sheet: int, column: int) float¶
- Model.get_row_height(sheet: int, row: int) float¶
- Model.set_column_width(sheet: int, column: int, width: float)¶
- Model.set_row_height(sheet: int, row: int, height: float)¶
- Model.get_frozen_rows_count(sheet: int) int¶
- Model.get_frozen_columns_count(sheet: int) int¶
- Model.set_frozen_rows_count(sheet: int, row_count: int)¶
- Model.set_frozen_columns_count(sheet: int, column_count: int)¶
Sheets¶
- Model.add_sheet(sheet_name: str)¶
- Model.new_sheet()¶
Adds a sheet with an automatically generated name.
- Model.delete_sheet(sheet: int)¶
- Model.rename_sheet(sheet: int, new_name: str)¶
- Model.set_sheet_color(sheet: int, color)¶
colorisNone,"#RRGGBB"or[theme_index, tint].
- Model.set_sheet_state(sheet: int, state: str)¶
stateis"visible","hidden"or"veryHidden".
- Model.get_worksheets_properties() list[dict]¶
- Model.set_show_grid_lines(sheet: int, show_grid_lines: bool)¶
Merged cells¶
- Model.merge_cells(sheet, start_row, start_column, end_row, end_column)¶
Merges the range into a single cell anchored at its top-left corner. At most one cell of the range may have content: it moves to the anchor. Fails if the range is a single cell, intersects an existing merged cell or an array formula, or has more than one cell with content.
- Model.merge_cells_center(sheet, start_row, start_column, end_row, end_column)¶
Same as
merge_cellsbut also centers the content horizontally (“merge & center”).
- Model.merge_cells_across(sheet, start_row, start_column, end_row, end_column)¶
Merges each row of the range separately (“merge across”). All-or-nothing.
- Model.merge_cells_down(sheet, start_row, start_column, end_row, end_column)¶
Merges each column of the range separately (“merge down”). All-or-nothing.
- Model.unmerge_cells(sheet, start_row, start_column, end_row, end_column)¶
Removes every merged cell that intersects the range, keeping the content of the anchors. Unmerging nothing is not an error.
- Model.get_merged_cells(sheet: int) list[dict]¶
One entry per merged cell:
{"row", "column", "width", "height"}where(row, column)is the anchor cell.
Defined names¶
- Model.get_defined_name_list() list[dict]¶
- Model.new_defined_name(name: str, scope: int | None, formula: str)¶
- Model.update_defined_name(name, scope, new_name, new_scope, new_formula)¶
- Model.delete_defined_name(name: str, scope: int | None)¶
Workbook properties¶
- Model.get_theme() dict¶
- Model.set_theme(theme: dict)¶
- Model.get_timezone() str¶
- Model.set_timezone(timezone: str)¶
- Model.get_locale() str¶
- Model.set_locale(locale: str)¶
- Model.get_language() str¶
- Model.set_language(language: str)¶
- Model.get_fmt_settings() dict¶