A wrapper library to read, manipulate and write data in xlsx and xlsm format using openpyxl

Overview

pyexcel-xlsx - Let you focus on data, instead of xlsx format

https://raw.githubusercontent.com/pyexcel/pyexcel.github.io/master/images/patreon.png https://pepy.tech/badge/pyexcel-xlsx/month https://img.shields.io/static/v1?label=continuous%20templating&message=%E6%A8%A1%E7%89%88%E6%9B%B4%E6%96%B0&color=blue&style=flat-square https://img.shields.io/static/v1?label=coding%20style&message=black&color=black&style=flat-square

pyexcel-xlsx is a tiny wrapper library to read, manipulate and write data in xlsx and xlsm format using read_only mode reader, write_only mode writer from openpyxl. You are likely to use it with pyexcel.

Please note:

  1. auto_detect_int flag will not take effect because openpyxl detect integer in python 3 by default.
  2. skip_hidden_row_and_column will get a penalty where read_only mode cannot be used.

Support the project

If your company has embedded pyexcel and its components into a revenue generating product, please support me on github, patreon or bounty source to maintain the project and develop it further.

If you are an individual, you are welcome to support me too and for however long you feel like. As my backer, you will receive early access to pyexcel related contents.

And your issues will get prioritized if you would like to become my patreon as pyexcel pro user.

With your financial support, I will be able to invest a little bit more time in coding, documentation and writing interesting posts.

Known constraints

Fonts, colors and charts are not supported.

Nor to read password protected xls, xlsx and ods files.

Installation

You can install pyexcel-xlsx via pip:

$ pip install pyexcel-xlsx

or clone it and install it:

$ git clone https://github.com/pyexcel/pyexcel-xlsx.git
$ cd pyexcel-xlsx
$ python setup.py install

Usage

As a standalone library

.. testcode::
   :hide:

    >>> import os
    >>> import sys
    >>> if sys.version_info[0] < 3:
    ...     from StringIO import StringIO
    ... else:
    ...     from io import BytesIO as StringIO
    >>> PY2 = sys.version_info[0] == 2
    >>> if PY2 and sys.version_info[1] < 7:
    ...      from ordereddict import OrderedDict
    ... else:
    ...     from collections import OrderedDict


Write to an xlsx file

Here's the sample code to write a dictionary to an xlsx file:

>>> from pyexcel_xlsx import save_data
>>> data = OrderedDict() # from collections import OrderedDict
>>> data.update({"Sheet 1": [[1, 2, 3], [4, 5, 6]]})
>>> data.update({"Sheet 2": [["row 1", "row 2", "row 3"]]})
>>> save_data("your_file.xlsx", data)

Read from an xlsx file

Here's the sample code:

>>> from pyexcel_xlsx import get_data
>>> data = get_data("your_file.xlsx")
>>> import json
>>> print(json.dumps(data))
{"Sheet 1": [[1, 2, 3], [4, 5, 6]], "Sheet 2": [["row 1", "row 2", "row 3"]]}

Write an xlsx to memory

Here's the sample code to write a dictionary to an xlsx file:

>>> from pyexcel_xlsx import save_data
>>> data = OrderedDict()
>>> data.update({"Sheet 1": [[1, 2, 3], [4, 5, 6]]})
>>> data.update({"Sheet 2": [[7, 8, 9], [10, 11, 12]]})
>>> io = StringIO()
>>> save_data(io, data)
>>> # do something with the io
>>> # In reality, you might give it to your http response
>>> # object for downloading

Read from an xlsx from memory

Continue from previous example:

>>> # This is just an illustration
>>> # In reality, you might deal with xlsx file upload
>>> # where you will read from requests.FILES['YOUR_XLSX_FILE']
>>> data = get_data(io)
>>> print(json.dumps(data))
{"Sheet 1": [[1, 2, 3], [4, 5, 6]], "Sheet 2": [[7, 8, 9], [10, 11, 12]]}

Pagination feature

Let's assume the following file is a huge xlsx file:

>>> huge_data = [
...     [1, 21, 31],
...     [2, 22, 32],
...     [3, 23, 33],
...     [4, 24, 34],
...     [5, 25, 35],
...     [6, 26, 36]
... ]
>>> sheetx = {
...     "huge": huge_data
... }
>>> save_data("huge_file.xlsx", sheetx)

And let's pretend to read partial data:

>>> partial_data = get_data("huge_file.xlsx", start_row=2, row_limit=3)
>>> print(json.dumps(partial_data))
{"huge": [[3, 23, 33], [4, 24, 34], [5, 25, 35]]}

And you could as well do the same for columns:

>>> partial_data = get_data("huge_file.xlsx", start_column=1, column_limit=2)
>>> print(json.dumps(partial_data))
{"huge": [[21, 31], [22, 32], [23, 33], [24, 34], [25, 35], [26, 36]]}

Obvious, you could do both at the same time:

>>> partial_data = get_data("huge_file.xlsx",
...     start_row=2, row_limit=3,
...     start_column=1, column_limit=2)
>>> print(json.dumps(partial_data))
{"huge": [[23, 33], [24, 34], [25, 35]]}
.. testcode::
   :hide:

   >>> os.unlink("huge_file.xlsx")


As a pyexcel plugin

No longer, explicit import is needed since pyexcel version 0.2.2. Instead, this library is auto-loaded. So if you want to read data in xlsx format, installing it is enough.

Reading from an xlsx file

Here is the sample code:

>>> import pyexcel as pe
>>> sheet = pe.get_book(file_name="your_file.xlsx")
>>> sheet
Sheet 1:
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
Sheet 2:
+-------+-------+-------+
| row 1 | row 2 | row 3 |
+-------+-------+-------+

Writing to an xlsx file

Here is the sample code:

>>> sheet.save_as("another_file.xlsx")

Reading from a IO instance

You got to wrap the binary content with stream to get xlsx working:

>>> # This is just an illustration
>>> # In reality, you might deal with xlsx file upload
>>> # where you will read from requests.FILES['YOUR_XLSX_FILE']
>>> xlsxfile = "another_file.xlsx"
>>> with open(xlsxfile, "rb") as f:
...     content = f.read()
...     r = pe.get_book(file_type="xlsx", file_content=content)
...     print(r)
...
Sheet 1:
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
Sheet 2:
+-------+-------+-------+
| row 1 | row 2 | row 3 |
+-------+-------+-------+

Writing to a StringIO instance

You need to pass a StringIO instance to Writer:

>>> data = [
...     [1, 2, 3],
...     [4, 5, 6]
... ]
>>> io = StringIO()
>>> sheet = pe.Sheet(data)
>>> io = sheet.save_to_memory("xlsx", io)
>>> # then do something with io
>>> # In reality, you might give it to your http response
>>> # object for downloading

License

New BSD License

Developer guide

Development steps for code changes

  1. git clone https://github.com/pyexcel/pyexcel-xlsx.git
  2. cd pyexcel-xlsx

Upgrade your setup tools and pip. They are needed for development and testing only:

  1. pip install --upgrade setuptools pip

Then install relevant development requirements:

  1. pip install -r rnd_requirements.txt # if such a file exists
  2. pip install -r requirements.txt
  3. pip install -r tests/requirements.txt

Once you have finished your changes, please provide test case(s), relevant documentation and update CHANGELOG.rst.

Note

As to rnd_requirements.txt, usually, it is created when a dependent library is not released. Once the dependecy is installed (will be released), the future version of the dependency in the requirements.txt will be valid.

How to test your contribution

Although nose and doctest are both used in code testing, it is adviable that unit tests are put in tests. doctest is incorporated only to make sure the code examples in documentation remain valid across different development releases.

On Linux/Unix systems, please launch your tests like this:

$ make

On Windows systems, please issue this command:

> test.bat

Before you commit

Please run:

$ make format

so as to beautify your code otherwise travis-ci may fail your unit test.

.. testcode::
   :hide:

   >>> import os
   >>> os.unlink("your_file.xlsx")
   >>> os.unlink("another_file.xlsx")
Comments
  • ImportError: No module named 'texttable'

    ImportError: No module named 'texttable'

    Hey I want to merge multiple csv files into one excel file. I used this code.

    from pyexcel.cookbook import merge_all_to_a_book import pyexcel.ext.xlsx # needed to support xlsx format, pip install pyexcel-xlsx import glob

    merge_all_to_a_book(glob.glob("*.csv"), "output.xlsx")


    And I am getting this error

    from pyexcel.cookbook import merge_all_to_a_book
    

    File "C:\Python34\lib\site-packages\pyexcel__init__.py", line 12, in from .book import Book File "C:\Python34\lib\site-packages\pyexcel\book.py", line 11, in from .sheets import Sheet, SheetStream File "C:\Python34\lib\site-packages\pyexcel\sheets__init__.py", line 10, in from .sheet import ( File "C:\Python34\lib\site-packages\pyexcel\sheets\sheet.py", line 11, in from .nominablesheet import NominableSheet File "C:\Python34\lib\site-packages\pyexcel\sheets\nominablesheet.py", line 10, in from texttable import Texttable ImportError: No module named 'texttable'

    opened by GauravIITR17 12
  • file descriptors are not closed

    file descriptors are not closed

    For example, when running the following code on Linux:

    import os
    
    import pyexcel
    
    pyexcel.get_book_dict(file_name='test.xlsx')
    
    fd_dir = '/proc/%u/fd' % os.getpid()
    for fd_name in os.listdir(fd_dir):
        print(fd_name, '-> ', end='')
        try:
            print(os.readlink('%s/%s' % (fd_dir, fd_name)))
        except FileNotFoundError:
            print()
    

    The last file descriptor open point to test.xlsx.

    Beside the file descriptor leak, this is really problematic in Windows, as it make it impossible to concurrently modify the spreadsheet in Office when it has been read in another (still running) application.

    opened by benoit-pierre 9
  • openpyxl newer versions

    openpyxl newer versions

    Openpyxl (https://pypi.org/project/openpyxl/) has created new versions. In the dependencies of the code it appears 2.6.0 as the most recent one which is 1 year old.

    Is it possible to update the dependency to the latest version (3.0.2)?

    opened by Thimxx 7
  • mechanism of dynamic load module, confilict with pyinstaller/cx_freeze's execution

    mechanism of dynamic load module, confilict with pyinstaller/cx_freeze's execution

    Hi, I‘ve test an pyqt GUI app with pyexcel_xlsx, my application is finally packaged as an exectuion file by pyinstaller OR cx_freeze,

    pyinstaller.exe  --distpath dist_pyinstaller  -F mainc.py 
    

    and get dist_pyinstaller\mainc.exe binary file. the application can start well. but will fail when it's time to use pyexcel_xlsx functionility.

    Traceback (most recent call last):
      File "pyexcel2csv_gui\winmain\winmain.py", line 72, in  on_btnSelectExcelFileAndExport2Csv_clicked
      File "site-packages\pyexcel_xlsx\__init__.py", line 38, in get_data
      File "site-packages\pyexcel_io\io.py", line 65, in get_data
      File "site-packages\pyexcel_io\io.py", line 83, in _get_data
      File "site-packages\pyexcel_io\io.py", line 173, in load_data
      File "site-packages\pyexcel_io\plugins.py", line 78, in get_a_plugin
      File "site-packages\lml\plugin.py", line 275, in load_me_now
      File "site-packages\lml\plugin.py", line 303, in dynamic_load_library
      File "site-packages\lml\utils.py", line 60, in do_import_class
    ImportError: No module named xlsxr
    

    anlyse the source code

    def do_import_class(plugin_class):
        """dynamically import a class"""
        try:
            plugin_module_name = plugin_class.rsplit('.', 1)[0]
            #print plugin_module_name,   plugin_class 
            #shows "pyexcel_xlsx.xlsxr"    , shows  "pyexcel_xlsx.xlsxr.XLSXBook"
            plugin_module = __import__(plugin_module_name)
            modules = plugin_class.split('.')
            for module in modules[1:]:
                plugin_module = getattr(plugin_module, module)
            return plugin_module
        except ImportError:
            log.exception("Failed to import %s", plugin_module_name)
            raise
    

    pyexcel_xlsx has been installed by pip. and

    site-packages\pyexcel-xlsx\xlsxr.py
    

    file exists.

    if directory call by CLI way

    python.exe  mainc.py
    

    to run same mainc.py script, ALL works ok. ENV is python 2.7.9.

    so , seems the dynamic loading not works well in pyinstaller OR cx_freeze situation ?

    opened by kerneltravel 4
  • use optimized writer for writing out xlsx so as to support large files

    use optimized writer for writing out xlsx so as to support large files

    optimized writer is a better fit for pyexcel-xlsx.

    trigger: https://github.com/pyexcel/Flask-Excel/issues/16 hint: http://stackoverflow.com/questions/21328884/openpyxl-writing-large-excel-files-with-python doc: http://openpyxl.readthedocs.io/en/2.3.3/optimized.html

    enhancement 
    opened by chfw 4
  • Issues with Pyinstaller

    Issues with Pyinstaller

    I am having issues getting PyInstaller to load in the plugins for pyexcel (specifically pyexcel-xlsx). I have looked at both pyexceland pyexcel-io pages that explain what I need to add as the --hidden-import. PyInstaller does successfully create an executable, but no matter what I put as my --hidden-import I end up with the error pyexcel_io.exceptions.SupportingPluginAvailableButNotInstalled: Please install one of these plugins for read data in 'xlsx': pyexcel-xls,pyexcel-xlsx. I found a question asking about this same problem on stackoverflow and they answered their own question by just importing the plugins directly. This worked for me as well and I just added import pyexcel_xlsx to my python file. I was wondering if their is a bug here as I noticed this has been asked before across the repositories, but people seemed to have figured it out, so maybe I am missing something. Thanks for the help.

    opened by ghost 3
  • Excel Mac EPOC 1904 problem

    Excel Mac EPOC 1904 problem

    https://github.com/pyexcel/pyexcel/issues/135

    pointers:

    https://bitbucket.org/openpyxl/openpyxl/issues/558/saving-a-workbook-with-datetimedatetime-1

    https://groups.google.com/forum/#!topic/openpyxl-users/ZLW5ykPEZ5M

    opened by chfw 3
  • release 0.5.8

    release 0.5.8

    With your PR, here is a check list:

    • [ ] Has Test cases written
    • [x] Has all code lines tested
    • [ ] Passes all Travis CI builds
    • [ ] Has fair amount of documentation if your change is complex
    • [ ] run 'make format' so as to confirm the pyexcel organisation's coding style
    • [x] Please update CHANGELOG.rst
    • [ ] Please add yourself to CONTRIBUTORS.rst
    • [ ] Agree on NEW BSD License for your contribution

    fixes #34

    opened by chfw 2
  • Keeping a good formatting when opened in Excel (pyexcel-export)

    Keeping a good formatting when opened in Excel (pyexcel-export)

    I dealt with this problem myself by creating pyexcel-export, although I don't know whether I can go by the name starting with pyexcel-.

    It will be MIT-licensed for now.

    opened by patarapolw 2
  • openpyxl leaks file handle in pypy

    openpyxl leaks file handle in pypy

    $ python test.py
    number of open file handles: 0
    number of open file handles: 2
    [popenfile(path='/Users/github/pyexcel-xlsx/test.xlsx', fd=5), popenfile(path='/Users/github/pyexcel-xlsx/test.xlsx', fd=6)]
    Traceback (most recent call last):
      File "test.py", line 14, in <module>
        assert len(open_files_l1) == len(open_files_l2)
    AssertionError
    $ python
    Python 2.7.13 (1aa2d8e03cdf, Mar 31 2017, 10:20:53)
    [PyPy 5.7.1 with GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    

    reference: https://github.com/pyexcel/pyexcel-xlsx/issues/14

    wontfix 
    opened by chfw 2
  • perform tests on windows, macos using github actions

    perform tests on windows, macos using github actions

    …/github.com/pyexcel/pyexcel/pull/234

    With your PR, here is a check list:

    • [ ] Has test cases written?
    • [ ] Has all code lines tested?
    • [ ] Has make format been run?
    • [ ] Please update CHANGELOG.yml(not CHANGELOG.rst)
    • [ ] Passes all Travis CI builds
    • [ ] Has fair amount of documentation if your change is complex
    • [ ] Agree on NEW BSD License for your contribution
    opened by chfw 1
  • Improve sample codes about json.dumps usage

    Improve sample codes about json.dumps usage

    With your PR, here is a check list:

    • [ ] Has test cases written?
    • [ ] Has all code lines tested?
    • [ ] Has make format been run?
    • [ ] Please update CHANGELOG.yml(not CHANGELOG.rst)
    • [X] Has fair amount of documentation if your change is complex
    • [X] Agree on NEW BSD License for your contribution

    Sometimes it will throw the "datetime.datetime not JSON serializable"? exception error when using the json.dumps method. To avoid throwing the above exception message, it should add the default parameter with the str value. And it can be great to use json.dumps method without throwing the exception message.

    opened by peter279k 0
  • string argument expected, got 'bytes' error when using StringIO

    string argument expected, got 'bytes' error when using StringIO

    The below code does not work on Python 3.9.6. Returns following error. Changing to BytesIO solved the issue. Perhaps docs should be updated.

    from pyexcel_xlsx import save_data  
    data = OrderedDict()  
    data.update({"Sheet 1": [[1, 2, 3], [4, 5, 6]]})  
    data.update({"Sheet 2": [[7, 8, 9], [10, 11, 12]]})  
    io = StringIO()  
    save_data(io, data) 
    

    "string argument expected, got 'bytes'"

    "Server error: Traceback (most recent call last):\n File \"c:\\cvd-prevent\\cvd-prevent-api\\venv\\lib\\site-packages\\flask\\app.py\", line 1516, in full_dispatch_request\n rv = self.dispatch_request()\n File \"c:\\cvd-prevent\\cvd-prevent-api\\venv\\lib\\site-packages\\flask\\app.py\", line 1502, in dispatch_request\n return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)\n File \"C:\\cvd-prevent\\cvd-prevent-api\\cvd_prevent_api\\indicator_route.py\", line 366, in get_indicator_meta_data_excel\n save_data(io, data)\n File \"c:\\cvd-prevent\\cvd-prevent-api\\venv\\lib\\site-packages\\pyexcel_xlsx\\__init__.py\", line 39, in save_data\n write_data(afile, data, file_type=file_type, **keywords)\n File \"c:\\cvd-prevent\\cvd-prevent-api\\venv\\lib\\site-packages\\pyexcel_io\\io.py\", line 143, in save_data\n writer.write(to_store)\n File \"c:\\cvd-prevent\\cvd-prevent-api\\venv\\lib\\site-packages\\pyexcel_io\\writer.py\", line 51, in __exit__\n self.close()\n File \"c:\\cvd-prevent\\cvd-prevent-api\\venv\\lib\\site-packages\\pyexcel_io\\writer.py\", line 45, in close\n self.writer.close()\n File \"c:\\cvd-prevent\\cvd-prevent-api\\venv\\lib\\site-packages\\pyexcel_xlsx\\xlsxw.py\", line 50, in close\n self._native_book.save(filename=self._file_alike_object)\n File \"c:\\cvd-prevent\\cvd-prevent-api\\venv\\lib\\site-packages\\openpyxl\\workbook\\workbook.py\", line 407, in save\n save_workbook(self, filename)\n File \"c:\\cvd-prevent\\cvd-prevent-api\\venv\\lib\\site-packages\\openpyxl\\writer\\excel.py\", line 293, in save_workbook\n writer.save()\n File \"c:\\cvd-prevent\\cvd-prevent-api\\venv\\lib\\site-packages\\openpyxl\\writer\\excel.py\", line 275, in save\n self.write_data()\n File \"c:\\cvd-prevent\\cvd-prevent-api\\venv\\lib\\site-packages\\openpyxl\\writer\\excel.py\", line 67, in write_data\n archive.writestr(ARC_APP, tostring(props.to_tree()))\n File \"C:\\Program Files\\Python39\\lib\\zipfile.py\", line 1802, in writestr\n with self.open(zinfo, mode='w') as dest:\n File \"C:\\Program Files\\Python39\\lib\\zipfile.py\", line 1505, in open\n return self._open_to_write(zinfo, force_zip64=force_zip64)\n File \"C:\\Program Files\\Python39\\lib\\zipfile.py\", line 1600, in _open_to_write\n self.fp.write(zinfo.FileHeader(zip64))\nTypeError: string argument expected, got 'bytes'\n"

    opened by lw-bmc 2
  • get_data() mem leak

    get_data() mem leak

    if col active at XFD get_data() mem leak

    my sheet i use field at col E. but field active at XFD in cell is null.

    i use get_data() and view task manager is function run mem push many and leak.

    solution if i del F - XFD is Work!

    opened by SavageBoo 2
  • Indexerror when loading Excel sheet

    Indexerror when loading Excel sheet

    I process cost reports every month, but something seems to have changed in the generated Excel sheets, hence:

    Traceback (most recent call last):
      File "check-duplicates.py", line 13, in <module>
        sheets = get_data(sys.argv[1])
      File "C:\ProgramData\Miniconda3\lib\site-packages\pyexcel_xlsx\__init__.py", line 41, in get_data
        return read_data(afile, file_type=file_type, **keywords)
      File "C:\ProgramData\Miniconda3\lib\site-packages\pyexcel_io\io.py", line 73, in get_data
        afile, file_type=file_type, streaming=False, **keywords
      File "C:\ProgramData\Miniconda3\lib\site-packages\pyexcel_io\io.py", line 91, in _get_data
        return load_data(**keywords)
      File "C:\ProgramData\Miniconda3\lib\site-packages\pyexcel_io\io.py", line 204, in load_data
        reader.open(file_name, **keywords)
      File "C:\ProgramData\Miniconda3\lib\site-packages\pyexcel_xlsx\xlsxr.py", line 145, in open
        self._load_the_excel_file(file_name)
      File "C:\ProgramData\Miniconda3\lib\site-packages\pyexcel_xlsx\xlsxr.py", line 209, in _load_the_excel_file
        read_only=read_only_flag,
      File "C:\ProgramData\Miniconda3\lib\site-packages\openpyxl\reader\excel.py", line 196, in load_workbook
        apply_stylesheet(archive, wb) # bind styles to workbook
      File "C:\ProgramData\Miniconda3\lib\site-packages\openpyxl\styles\stylesheet.py", line 180, in apply_stylesheet
        stylesheet = Stylesheet.from_tree(node)
      File "C:\ProgramData\Miniconda3\lib\site-packages\openpyxl\styles\stylesheet.py", line 102, in from_tree
        return super(Stylesheet, cls).from_tree(node)
      File "C:\ProgramData\Miniconda3\lib\site-packages\openpyxl\descriptors\serialisable.py", line 100, in from_tree
        return cls(**attrib)
      File "C:\ProgramData\Miniconda3\lib\site-packages\openpyxl\styles\stylesheet.py", line 93, in __init__
        self.named_styles = self._merge_named_styles()
      File "C:\ProgramData\Miniconda3\lib\site-packages\openpyxl\styles\stylesheet.py", line 113, in _merge_named_styles
        self._expand_named_style(style)
      File "C:\ProgramData\Miniconda3\lib\site-packages\openpyxl\styles\stylesheet.py", line 123, in _expand_named_style
        xf = self.cellStyleXfs[named_style.xfId]
      File "C:\ProgramData\Miniconda3\lib\site-packages\openpyxl\styles\cell_style.py", line 186, in __getitem__
        return self.xf[idx]
    IndexError: list index out of range
    

    I don't know what could be the reason, maybe you can understand better.

    opened by ArneBachmann 1
  • Possible incomplete hidden columns detection

    Possible incomplete hidden columns detection

    If we have multiple hidden columns in a row only first column letter will be stored in column_dimensions by openpyxl, and pyexcel checks the hidden column state by it's letter, thus skipping the subsequent columns: https://github.com/pyexcel/pyexcel-xlsx/blob/b7e4e62e6ed07c0b3858979d754b865d93bba5d0/pyexcel_xlsx/xlsxr.py#L101 Shouldn't they also be checked for hidden state with something like:

        def is_column_hidden(self, column_index):
            letter = openpyxl.utils.get_column_letter(column_index)
            for l, d in self._native_sheet.column_dimensions.items():
                if l > letter:
                    break
                if d.hidden is True and (l == letter or (column_index >= d.min and column_index <= d.max)):
                    return True
    
            return False
    

    ? Then https://github.com/pyexcel/pyexcel-xlsx/blob/b7e4e62e6ed07c0b3858979d754b865d93bba5d0/pyexcel_xlsx/xlsxr.py#L101 can be replaced with

    if not self.is_column_hidden(column_index):
    
    opened by Pymancer 0
Releases(v0.6.0)
xlwings is a BSD-licensed Python library that makes it easy to call Python from Excel and vice versa. It works with Microsoft Excel on Windows and macOS. Sign up for the newsletter or follow us on twitter via

xlwings - Make Excel fly with Python! xlwings CE xlwings CE is a BSD-licensed Python library that makes it easy to call Python from Excel and vice ver

xlwings 2.5k Jan 06, 2023
xlwings is a BSD-licensed Python library that makes it easy to call Python from Excel and vice versa. It works with Microsoft Excel on Windows and macOS.

xlwings - Make Excel fly with Python! xlwings (Open Source) xlwings is a BSD-licensed Python library that makes it easy to call Python from Excel and

xlwings 2.5k Jan 06, 2023
Excel-report-evaluator - A simple Python GUI application to aid with bulk evaluation of Microsoft Excel reports.

Excel Report Evaluator Simple Python GUI with Tkinter for evaluating Microsoft Excel reports (.xlsx-Files). Usage Start main.py and choose one of the

Alexander H. 1 Dec 29, 2021
Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 XLS files, on any platform.

xlwt This is a library for developers to use to generate spreadsheet files compatible with Microsoft Excel versions 95 to 2003. The package itself is

1k Dec 24, 2022
PyExcelerate - Accelerated Excel XLSX Writing Library for Python 2/3

PyExcelerate Accelerated Excel XLSX writing library for Python master: dev: test coverage: Authors: Kevin Wang and Kevin Zhang Copyright 2015 Kevin Wa

448 Dec 28, 2022
Create Open XML PowerPoint documents in Python

python-pptx is a Python library for creating and updating PowerPoint (.pptx) files. A typical use would be generating a customized PowerPoint presenta

Steve Canny 1.7k Jan 05, 2023
Transpiler for Excel formula like language to Python. Support script and module mode

Transpiler for Excel formula like language to Python. Support script and module mode (formulas are functions).

Edward Villegas-Pulgarin 1 Dec 07, 2021
PowerShell module to import/export Excel spreadsheets, without Excel

PowerShell + Excel = Better Together Automate Excel via PowerShell without having Excel installed. Runs on Windows, Linux and MAC. Creating Tables, Pi

Doug Finke 2k Dec 30, 2022
Single API for reading, manipulating and writing data in csv, ods, xls, xlsx and xlsm files

pyexcel - Let you focus on data, instead of file formats Support the project If your company has embedded pyexcel and its components into a revenue ge

1.1k Dec 29, 2022
According to the received excel file (.xlsx,.xlsm,.xltx,.xltm), it converts to word format with a given table structure and formatting

According to the received excel file (.xlsx,.xlsm,.xltx,.xltm), it converts to word format with a given table structure and formatting

Diakonov Andrey 2 Feb 18, 2022
Xiaobo Zhang 30 Jan 08, 2023
Universal Office Converter - Convert between any document format supported by LibreOffice/OpenOffice.

Automated conversion and styling using LibreOffice Universal Office Converter (unoconv) is a command line tool to convert any document format that Lib

2.4k Jan 03, 2023
Use a docx as a jinja2 template

python-docx-template Use a docx as a jinja2 template Introduction This package uses 2 major packages : python-docx for reading, writing and creating s

Eric Lapouyade 1.4k Dec 28, 2022
Upload an Excel/CSV file ( < 200 MB) and produce a short summary of the data.

Data-Analysis-Report Deployed App 1. What is this app? Upload an excel/csv file and produce a summary report of the data. 2. Where to upload? How to p

Easwaran T H 0 Feb 26, 2022
A wrapper library to read, manipulate and write data in xlsx and xlsm format using openpyxl

pyexcel-xlsx - Let you focus on data, instead of xlsx format pyexcel-xlsx is a tiny wrapper library to read, manipulate and write data in xlsx and xls

110 Nov 16, 2022
ExcelPeek is a tool designed to help investigate potentially malicious Microsoft Excel files.

ExcelPeek is a tool designed to help investigate potentially malicious Microsoft Excel files.

James Slaughter 37 Apr 16, 2022
Reads Data from given Excel File and exports Single PDFs and a complete PDF grouped by Gateway

E-Shelter Excel2QR Reads Data from given Excel File and exports Single PDFs and a complete PDF grouped by Gateway Features Reads Excel 2021 Export Sin

Stefan Knaak 1 Nov 13, 2021
ObjTables: Tools for creating and reusing high-quality spreadsheets

ObjTables: Tools for creating and reusing high-quality spreadsheets ObjTables is a toolkit which makes it easy to use spreadsheets (e.g., XLSX workboo

Karr whole-cell modeling lab 7 Jun 14, 2021
A suite of utilities for converting to and working with CSV, the king of tabular file formats.

csvkit is a suite of command-line tools for converting to and working with CSV, the king of tabular file formats. It is inspired by pdftk, GDAL and th

wireservice 5.2k Dec 31, 2022
BoobSnail allows generating Excel 4.0 XLM macro.

BoobSnail allows generating Excel 4.0 XLM macro. Its purpose is to support the RedTeam and BlueTeam in XLM macro generation.

STM Cyber 232 Nov 21, 2022