Package: pyexcel-yuri
================================================================================pyexcel-yuri - Let you focus on data, instead of xlsx format================================================================================**pyexcel-yuri** 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 Xlsxwriter. You are likely to use it with `pyexcel <https://github.com/pyexcel/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.Known constraints==================Fonts, colors and charts are not supported.Installation================================================================================You can install pyexcel-yuri via pip:.. code-block:: bash$ pip install pyexcel-yurior clone it and install it:.. code-block:: bash$ git clone https://github.com/Yuri-x/pyexcel-yuri.git$ cd pyexcel-yuri$ python setup.py installUsage================================================================================As a standalone library--------------------------------------------------------------------------------Write to an xlsx file********************************************************************************Here's the sample code to write a dictionary to an xlsx file:.. code-block:: python>>> from pyexcel_xlsxy 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:.. code-block:: python>>> from pyexcel_xlsxy 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:.. code-block:: python>>> from pyexcel_xlsxy 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 downloadingRead from an xlsx from memory********************************************************************************Continue from previous example:.. code-block:: python>>> # 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:.. code-block:: python>>> 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:.. code-block:: python>>> 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:.. code-block:: python>>> 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:.. code-block:: python>>> 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]]}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:.. code-block:: python>>> import pyexcel as pe>>> sheet = pe.get_book(file_name="your_file.xlsx")>>> sheetSheet 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:.. code-block:: python>>> sheet.save_as("another_file.xlsx")Reading from a IO instance********************************************************************************You got to wrap the binary content with stream to get xlsx working:.. code-block:: python>>> # 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:.. code-block:: python>>> 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 downloadingLicense================================================================================New BSD LicenseDeveloper guide==================Development steps for code changes#. git clone https://github.com/pyexcel/pyexcel-xlsx.git#. cd pyexcel-xlsxUpgrade your setup tools and pip. They are needed for development and testing only:#. pip install --upgrade setuptools pipThen install relevant development requirements:#. pip install -r rnd_requirements.txt # if such a file exists#. pip install -r requirements.txt#. pip install -r tests/requirements.txtOnce you have finished your changes, please provide test case(s), relevant documentationand update CHANGELOG.rst... note::As to rnd_requirements.txt, usually, it is created when a dependentlibrary is not released. Once the dependecy is installed(will be released), the futureversion 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::$ makeOn Windows systems, please issue this command::> test.batHow to update test environment and update documentation---------------------------------------------------------Additional steps are required:#. pip install moban#. git clone https://github.com/moremoban/setupmobans.git # generic setup#. git clone https://github.com/pyexcel/pyexcel-commons.git commons#. make your changes in `.moban.d` directory, then issue command `moban`What is pyexcel-commons---------------------------------Many information that are shared across pyexcel projects, such as: this developer guide, license info, etc. are stored in `pyexcel-commons` project.What is .moban.d---------------------------------`.moban.d` stores the specific meta data for the library.Acceptance criteria-------------------#. Has Test cases written#. Has all code lines tested#. Passes all Travis CI builds#. Has fair amount of documentation if your change is complex#. Please update CHANGELOG.rst#. Please add yourself to CONTRIBUTORS.rst#. Agree on NEW BSD License for your contributionChange log================================================================================0.0.3 - 08.08.2018--------------------------------------------------------------------------------Updated^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#. Fix merged cells0.0.2 - 07.08.2018--------------------------------------------------------------------------------Updated^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#. Fix stream type0.0.1 - 06.08.2018--------------------------------------------------------------------------------Added^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#. Init Commit