Workbook API
The Workbook class is the main entry point for creating, modifying, and saving Excel files in pyopenxlsx.
Creating and Loading
Workbook(filename=None, force_overwrite=True, password=None)
Creates a new workbook or opens an existing one.
Parameters:
filename(str, optional): Path to an existing.xlsxfile. IfNone, creates a blank workbook.force_overwrite(bool): IfTrue, allows overwriting existing files when saving.password(str, optional): Password to open an encrypted workbook.
Example:
from pyopenxlsx import Workbook wb = Workbook() # New wb_existing = Workbook("data.xlsx") # Load existing wb_encrypted = Workbook("secure.xlsx", password="secret") # Load encrypted
load_workbook(filename, password=None)
Alternative function to load a workbook.
Parameters:
filename(str)password(str, optional)
Returns:
Workbook
load_workbook_async(filename, password=None)
Asynchronous version of load_workbook.
Properties
active
Type:
WorksheetDescription: Get or set the currently active worksheet.
sheetnames
Type:
list[str]Description: Returns a list of all worksheet names in the workbook.
has_macro
Type:
boolDescription: Returns
Trueif the loaded document contains a VBA macro project (e.g.,vbaProject.bin). Note: Saving changes to a.xlsmfile preserves macros losslessly.
properties
Type:
DocumentPropertiesDescription: Access standard document properties like
title,creator,subject, etc.wb.properties.title = "My Report"
custom_properties
Type:
CustomPropertiesDescription: Dictionary-like access to custom document properties.
wb.custom_properties["Version"] = "1.0"
defined_names
Type:
XLDefinedNamesDescription: Manage named ranges (Defined Names) across the workbook.
wb.defined_names.append("GlobalTotal", "Sheet1!$A$1")
Methods
save(filename=None, force_overwrite=True, password=None)
Saves the workbook to disk.
Parameters:
filename(str, optional): The path to save to. IfNone, saves over the original file.password(str, optional): If provided, the workbook is saved with Agile Encryption.
save_async(filename=None, force_overwrite=True, password=None)
Asynchronously saves the workbook.
close() / close_async()
Releases the underlying C++ resources. Recommended to use the workbook as a context manager (with Workbook() as wb:) to handle this automatically.
create_sheet(title=None, index=None) -> Worksheet
Creates a new worksheet.
Parameters:
title(str, optional): The name of the new sheet.index(int, optional): The 0-based position to insert the sheet.
remove(worksheet)
Removes a worksheet from the workbook.
copy_worksheet(from_worksheet) -> Worksheet
Creates a duplicate of an existing worksheet.
add_style(...) -> int
Registers a new cell style in the workbook and returns its integer index.
Parameters:
font,fill,border,alignment,number_format,protectionReturns:
int(Style ID)
Advanced/Internal Methods
get_embedded_images() -> list[ImageInfo]: Gets a list of all images embedded in the workbook archive.get_image_data(name_or_path: str) -> bytes: Gets the binary data for an embedded image.extract_images(out_dir: str) -> list[str]: Extracts all embedded images to the given directory.get_archive_entries() -> list[str]: Lists all files within the underlying.xlsxzip archive.has_archive_entry(path: str) -> bool: Checks if a specific file exists within the archive.get_archive_entry(path: str) -> bytes: Reads the raw binary content of a file within the archive.
Advanced Properties
styles: Access the underlyingXLStylesobject.workbook: Access the underlying C++XLWorkbookobject.
Advanced Example: Modifying Document Metadata
from pyopenxlsx import load_workbook
# Use context manager to ensure proper cleanup of C++ bindings
with load_workbook("existing.xlsx") as wb:
# Update standard properties
wb.properties.title = "Q4 Financial Report"
wb.properties.creator = "Finance Bot v2"
# Iterate and print existing custom properties
print("Previous Custom Properties:")
for key, value in wb.custom_properties.items():
print(f" {key}: {value}")
# Set a new custom property
wb.custom_properties["Approval_Status"] = "Pending"
# Extract embedded images and zip contents
images = wb.get_embedded_images()
if images:
print(f"Found {len(images)} images in this workbook.")
wb.save("existing_updated.xlsx")