Skip to main content

Excel Serializer

Example

Excel Serializer is a Python package that provides a set of functions and classes to serialize and deserialize Python objects to and from Excel files. The API is designed to be intuitive and familiar, closely mirroring the interface of the built-in json module. This makes it easy to configure and use for developers who are already accustomed to working with JSON serialization.

Key Features

  • load: Deserialize an Excel file to a Python object.
  • loadw: Deserialize an openpyxl workbook to a Python object.
  • dump: Serialize a Python object to an Excel file.
  • dumpw: Serialize a Python object to an openpyxl workbook.

Dependencies

  • openpyxl: This module relies on the openpyxl library for reading from and writing to Excel files. Ensure that openpyxl is installed in your environment to use this module.

Installation

You can install the package using pip:

pip install excel-serializer

Builtin types

This module has four builtin types:

  • List: A list of values.
  • Tuple: A tuple of values.
  • Dict: A dictionary of key-value pairs.
  • DictList: A list of dictionaries all having the same keys.

You can easily add your own types by subclassing ExcelEncoder and ExcelDecoder classes. See how to do so in examples below.

Usage

Encoding basic Python object hierarchies

import excel_serializer as es

data = {'name': 'John', 'age': 30, 'city': 'New York'}
es.dump(data, 'data.xlsx')

Decoding Excel files

import excel_serializer as es

data = es.load('data.xlsx')
print(data)
# Output: {'name': 'John', 'age': 30, 'city': 'New York'}

Using a custom encoder

You can either convert the custom object to a built-in type:

import excel_serializer as es

class CustomEncoder(es.ExcelEncoder):
    def default(self, obj):
        if isinstance(obj, set):
            return list(obj)
        return super()._default(obj)

data = {'numbers': {1, 2, 3}}
es.dump(data, 'data.xlsx', cls=CustomEncoder)

or implement a custom encoder to handle the serialization of the custom object:

import excel_serializer as es

class CustomEncoder(es.ExcelEncoder):
    def write_set(self, sheet, type_cell, st):
        cols = ('Value',)
        type_cell.value = f'Set {type_cell.value}'
        sheet.append((type_cell,))
        sheet.append(cols)
        for i, e in enumerate(st):
            sheet.append((i + 1, self.encode(sheet, i + 3, 2, str(i + 1), e)))
        return 2 + len(st), 1, cols
    
    def write_custom_type(self, sheet, type_cell, obj):
        if isinstance(obj, set):
            return self.write_set(sheet, type_cell, obj)
        return super().write_custom_type(sheet, type_cell, obj)

data = {'numbers': {1, 2, 3}}
es.dump(data, 'data.xlsx', cls=CustomEncoder)

Using a custom decoder

import excel_serializer as es

class CustomDecoder(es.ExcelDecoder):
    def read_set(self, sheet_name, rows):
        headers = next(rows)
        if len(headers) != 1:
            raise es.ExcelDecodeError(f'Invalid list headers. Expected 1, found {len(headers)}',
                                   self.workbook, sheet_name, 2, len(headers) + 1)
        if headers[0].value != 'Value':
            raise es.ExcelDecodeError(f'Invalid list headers. Expected "Value", found "{headers[0].value}"',
                                      self.workbook, sheet_name, 2, 1)
        return set(self.read_value(row[0]) for row in rows)
    
    def read_custom_type(self, sheet_type, sheet_name, rows):
        if sheet_type == 'Set':
            return self.read_set(sheet_name, rows)
        return super().read_custom_type(sheet_type, sheet_name, rows)

data = es.load('data.xlsx', cls=CustomDecoder)
print(data)
# Output: {'numbers': {1, 2, 3}}

License

This project is licensed under the MIT License. See the LICENSE file for details.

Author

Alexandre 'Tsu' Manuel - tsu@sulvia.fr

Links

Metadata

Release files for excel-serializer 1.1.4

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

Source distribution (sdist)

Source distribution for excel-serializer 1.1.4
File Size Uploaded
excel_serializer-1.1.4.tar.gz 12.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for excel-serializer 1.1.4
File Interpreter ABI Platform
excel_serializer-1.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 26.3 kB

Release files / excel_serializer-1.1.4.tar.gz

Download URL excel_serializer-1.1.4.tar.gz
Size 12.5 kB
Tags Source
SHA-256 checksum
How to use checksums
668d78c236e633f784d637751aaf513f93b57330587135809b6dddb13d9167e9
BLAKE2b-256 checksum
How to use checksums
42aa0f8ed6c9c9a92c5361e99652b8e587b2883e51639eb3a15420c80984ae0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.3

Release files / excel_serializer-1.1.4-py3-none-any.whl

Download URL excel_serializer-1.1.4-py3-none-any.whl
Size 13.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ba03fe5c683b768a73a54237dafc93e802bd228a52058737af0d748c59d085e1
BLAKE2b-256 checksum
How to use checksums
3659c3e82a574390110874710301200374bfa2116e193f2701d8c71f55f29eec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

1.1.4 This release

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

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