Skip to main content

pyxlsb2 (a variant of pyxlsb - https://github.com/wwwiiilll/pyxlsb) is an Excel 2007+ Binary Workbook (xlsb) parser written in Python.

pyxslb2 offers the following improvements/changes in comparison to pyxlsb:

  1. By default, keeps all data in memory instead of creating temporary files. This is mainly to speed up the processing and also not changing the local filesystem during the processing.

  2. relies on both “xl\workbook.bin” and “xl\_rels\workbook.bin.rels” to load locate boundsheets. As a result, it can load all worksheets as well as all macrosheets.

  3. extracts macro formulas:

  • accurately shows the formulas

  • supports A1 addressing

  • supports external addressing (partially implemented))

  1. extracts defined names such as auto_open

Install

  1. Installing the whl file

Download .whl file from the release section

pip install -U [path to whl file]

  1. Installing the latest development

Using pip

pip install -U https://github.com/DissectMalware/pyxlsb2/archive/master.zip

Or download the latest version

wget https://github.com/DissectMalware/pyxlsb2/archive/master.zip

Extract the zip file and go to the extracted directory

python setup.py install –user

Usage

The module exposes an open_workbook(name) method (similar to Xlrd and OpenPyXl) for opening XLSB files. The Workbook object representing the file is returned.

from pyxlsb2 import open_workbook
with open_workbook('Book1.xlsb') as wb:
    # Do stuff with wb

The Workbook object exposes a get_sheet_by_index(idx) and get_sheet_by_name(name) method to retrieve Worksheet instances.

# Using the sheet index (0-based, unlike VBA)
with wb.get_sheet_by_index(0) as sheet:
    # Do stuff with sheet

# Using the sheet name
with wb.get_sheet_by_name('Sheet1') as sheet:
    # Do stuff with sheet

A sheets property containing the sheet names is available on the Workbook instance.

The rows() method will hand out an iterator to read the worksheet rows. The Worksheet object is also directly iterable and is equivalent to calling rows().

# You can use .rows(sparse=False) to include empty rows
for row in sheet.rows():
    print(row)
# [Cell(r=0, c=0, v='TEXT'), Cell(r=0, c=1, v=42.1337)]

NOTE: Iterating the same Worksheet instance multiple times in parallel (nested for for instance) will yield unexpected results, retrieve more instances instead.

Note that dates will appear as floats. You must use the convert_date(date) method from the corresponding Workbook instance to turn them into datetime.

print(wb.convert_date(41235.45578))
# datetime.datetime(2012, 11, 22, 10, 56, 19)

Example

Converting a workbook to CSV:

import csv
from pyxlsb2 import open_workbook

with open_workbook('Book1.xlsb') as wb:
    for name in wb.sheets:
        with wb.get_sheet_by_name(name) as sheet:
            with open(name + '.csv', 'w') as f:
                writer = csv.writer(f)
                for row in sheet.rows():
                    writer.writerow([c.v for c in row])

Limitations

Non exhaustive list of things that are currently not supported:

  • Style and formatting WIP

  • Rich text cells (formatting is lost, but getting the text works)

  • Encrypted (password protected) workbooks

  • Comments and other annotations

  • Writing (out of scope)

Metadata

Release files for pyxlsb2 0.0.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyxlsb2 0.0.9
File Size Uploaded
pyxlsb2-0.0.9.tar.gz 37.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyxlsb2 0.0.9
File Interpreter ABI Platform
pyxlsb2-0.0.9-py3-none-any.whl Python 3 none any Details

Total release size: 77.0 kB

Release files / pyxlsb2-0.0.9.tar.gz

Download URL pyxlsb2-0.0.9.tar.gz
Size 37.0 kB
Tags Source
SHA-256 checksum
How to use checksums
7746c4ce999714957409fd6a446499fee7a1528ea6e0f40f8ca4aed90c4cd488
BLAKE2b-256 checksum
How to use checksums
51d6eec618e757d7830f57fdfbd57aa0f9f78f2f577376b523c8e69b8e05afa3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.9.6

Release files / pyxlsb2-0.0.9-py3-none-any.whl

Download URL pyxlsb2-0.0.9-py3-none-any.whl
Size 40.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d5e652e753f15cd0d3efd8465a86ba0b2d9242c895f5d24b51a682ccf42b22f2
BLAKE2b-256 checksum
How to use checksums
6213914f308a1a3ae22712a7b9bd6d06bdda399e654870a83281428cb4e30f1a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.0.9 This release

2 release files

0.0.8

2 release files

0.0.5

2 release files

0.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page