Async Operations API
To maximize throughput in web servers (like FastAPI or Sanic) or concurrent environments, pyopenxlsx exposes async versions of all I/O-intensive and computationally heavy methods. They run in a threadpool executor under the hood, ensuring the main asyncio event loop is not blocked.
Async Context Managers
import asyncio
from pyopenxlsx import Workbook, load_workbook_async
async def process_file():
# Loading asynchronously
async with await load_workbook_async("data.xlsx") as wb:
ws = wb.active
# Read async
val = await ws.get_cell_value_async(1, 1)
# Write async
await ws.set_cell_value_async(2, 1, "Updated")
# Bulk write async
await ws.write_rows_async(3, [[1, 2], [3, 4]])
# Save async
await wb.save_async("data_updated.xlsx")
asyncio.run(process_file())
Available Async Methods
Workbook:
await load_workbook_async(filename, password=None)await wb.save_async(filename, password=None)await wb.close_async()await wb.create_sheet_async(title)await wb.copy_worksheet_async(ws)await wb.remove_async(ws)await wb.add_style_async(...)await wb.extract_images_async(...)
Worksheet:
await ws.append_async(data)await ws.write_row_async(row, data)await ws.write_rows_async(start_row, data)await ws.write_range_async(start_row, start_col, data)await ws.set_cells_async(cells_batch)await ws.get_cell_value_async(row, col)await ws.get_row_values_async(row)await ws.get_range_data_async(r1, c1, r2, c2)await ws.get_range_values_async(r1, c1, r2, c2)await ws.get_rows_data_async()await ws.merge_cells_async(ref)await ws.unmerge_cells_async(ref)await ws.protect_async(password, **granular_options)await ws.unprotect_async()await ws.add_image_async(path, anchor)