Skip to main content

High performace excel file generation library.

Project description

pyfastexcel

GitHub Actions Workflow Status Go Report Card GitHub Actions Workflow Status GitHub Actions Workflow Status Codacy Badge codecov Documentation Status

This package enables high-performance Excel writing by integrating with the streaming API from the golang package excelize. Users can leverage this functionality without the need to write any Go code, as the entire process can be accomplished through Python.

Features

  • Python and Golang Integration: Seamlessly call Golang built shared libraries from Python.

  • No Golang Code Required: Users can solely rely on Python for Excel file generation, eliminating the need for Golang expertise.

Installation

Install via pip (Recommended)

You can easily install the package via pip

pip install pyfastexcel

Install manually

If you prefer to build the package manually, follow these steps:

  1. Clone the repository:

    git clone https://github.com/Zncl2222/pyfastexcel.git
    
  2. Go to the project root directory:

    cd pyfastexcel
    
  3. Install the required golang packages:

    go mod download
    
  4. Build the Golang shared library using the Makefile:

    make
    
  5. Install the required python packages:

    pip install -r requirements.txt
    

    or

    pipenv install
    
  6. Import the project and start using it!

Requirements

Operating System Version
Linux Ubuntu 18.04 or higher
macOS macOS 13 (x86-64)
Windows Windows 10 or higher

Python Versions

  • Python 3.8 or higher

For earlier versions of Python or other operating systems, compatibility is not guaranteed.

Usage

The index assignment is now avaliable in Workbook and the StreamWriter. Here is the example usage:

from pyfastexcel import Workbook
from pyfastexcel.utils import set_custom_style

# CustomStyle will be re-implement in future to make it no-longer
# depend on openpyxl_style writer and openpyxl
from pyfastexcel import CustomStyle


if __name__ == '__main__':
    # Workbook
    wb = Workbook()

    # Set and register CustomStyle
    bold_style = CustomStyle(font_size=15, font_bold=True)
    set_custom_style('bold_style', bold_style)

    ws = wb['Sheet1']
    # Write value with default style
    ws['A1'] = 'A1 value'
    # Write value with custom style
    ws['B1'] = ('B1 value', 'bold_style')

    # Write value in slice with default style
    ws['A2': 'C2'] = [1, 2, 3]
    # Write value in slice with custom style
    ws['A3': 'C3'] = [(1, 'bold_style'), (2, 'bold_style'), (3, 'bold_style')]

    # Write value by row with default style (python index 0 is the index 1 in excel)
    ws[3] = [9, 8, 'go']
    # Write value by row with custom style
    ws[4] = [(9, 'bold_style'), (8, 'bold_style'), ('go', 'bold_style')]

    # Send request to golang lib and create excel
    wb.read_lib_and_create_excel()

    # File path to save
    file_path = 'pyexample_workbook.xlsx'
    wb.save(file_path)

For row-by-row Excel writing, consider using StreamWriter, a subclass of Workbook. This class is optimized for streaming large datasets. Learn more in the StreamWriter documentation.

Explore additional examples in the FullExamples.

Documentation

The documentation is hosted on Read the Docs.

Benchmark

The following result displays the performance comparison between pyfastexcel and openpyxl for writing 50000 rows with 30 columns (Total 1500000 cells). To see more benchmark results, please see the benchmark.

How it Works

The core functionality revolves around encoding Excel cell data and styles, or any other Excel properties, into a JSON string within Python. This JSON payload is then passed through ctypes to a Golang shared library. In Golang, the JSON is parsed, and using the streaming writer of excelize to wrtie excel in high performance.

Current Limitations & Future Plans

Problem 1: Dependence on Other Excel Package

Limitations:

This project currently depends on the CustomStyle object of the openpyxl_style_writer package, which is built for openpyxl to write styles in write-only mode more efficiently without duplicating code.

Future Plans:

This project plans to create its own Style object, making it no longer dependent on the mentioned package.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyfastexcel-0.1.8-py3-none-win_amd64.whl (3.9 MB view details)

Uploaded Python 3Windows x86-64

pyfastexcel-0.1.8-py3-none-manylinux2014_x86_64.whl (4.0 MB view details)

Uploaded Python 3

pyfastexcel-0.1.8-py3-none-macosx_10_9_x86_64.whl (2.4 MB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

Details for the file pyfastexcel-0.1.8-py3-none-win_amd64.whl.

File metadata

  • Download URL: pyfastexcel-0.1.8-py3-none-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for pyfastexcel-0.1.8-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 6bdae0b0be9fa137abb11d4fa63e9523afffdecbe94900f35c826953a24310e8
MD5 3e2a04c64f21963e2bb7c62518873a18
BLAKE2b-256 ac8a133e6d492bd4c268231b90a6e52a8f88f71563a04abddeffa1ec0cea48b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfastexcel-0.1.8-py3-none-win_amd64.whl:

Publisher: pypi.yml on Zncl2222/pyfastexcel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfastexcel-0.1.8-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyfastexcel-0.1.8-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2cef2090c4bba08366761a55f3fe35b15e65f5e9693e651c83093666fb2b072b
MD5 2f3c8b60b9f415fa883eb77b9ebb8132
BLAKE2b-256 bfa88db94aebedcae7c0259ff84ae0ea43c3a965360e4e9e05045534f5cb8765

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfastexcel-0.1.8-py3-none-manylinux2014_x86_64.whl:

Publisher: pypi.yml on Zncl2222/pyfastexcel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfastexcel-0.1.8-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyfastexcel-0.1.8-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5b6cd0d8e44ef143c111693b2cc36e32ac01a816850cb0925feb0b064ddf785d
MD5 a687e7241774a648cc7ff3ec0d7946af
BLAKE2b-256 7d0fe6c4fc12aee0b4e57da59fa9c66fba9a91761aca06fc643123f0e017e401

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfastexcel-0.1.8-py3-none-macosx_10_9_x86_64.whl:

Publisher: pypi.yml on Zncl2222/pyfastexcel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page