deliver #4: to provide data mangling patch
This commit is contained in:
parent
4ab6ab6af4
commit
794f3a8700
|
@ -82,7 +82,7 @@ Here's the sample code:
|
|||
>>> data = get_data("your_file.xls")
|
||||
>>> import json
|
||||
>>> print(json.dumps(data))
|
||||
{"Sheet 1": [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], "Sheet 2": [["row 1", "row 2", "row 3"]]}
|
||||
{"Sheet 1": [[1, 2, 3], [4, 5, 6]], "Sheet 2": [["row 1", "row 2", "row 3"]]}
|
||||
|
||||
Write an xls to memory
|
||||
********************************************************************************
|
||||
|
@ -115,7 +115,7 @@ Continue from previous example:
|
|||
>>> # where you will read from requests.FILES['YOUR_XLS_FILE']
|
||||
>>> data = get_data(io)
|
||||
>>> print(json.dumps(data))
|
||||
{"Sheet 1": [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], "Sheet 2": [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]]}
|
||||
{"Sheet 1": [[1, 2, 3], [4, 5, 6]], "Sheet 2": [[7, 8, 9], [10, 11, 12]]}
|
||||
|
||||
|
||||
As a pyexcel plugin
|
||||
|
@ -222,4 +222,4 @@ Known Issues
|
|||
|
||||
>>> import os
|
||||
>>> os.unlink("your_file.xls")
|
||||
>>> os.unlink("another_file.xls")
|
||||
>>> os.unlink("another_file.xls")
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
:license: New BSD License
|
||||
"""
|
||||
import sys
|
||||
import math
|
||||
import datetime
|
||||
import xlrd
|
||||
from xlwt import Workbook, XFStyle
|
||||
|
@ -15,7 +16,6 @@ from xlwt import Workbook, XFStyle
|
|||
from pyexcel_io.io import get_data as read_data, isstream, store_data as write_data
|
||||
from pyexcel_io.book import BookReader, BookWriter
|
||||
from pyexcel_io.sheet import SheetReader, SheetWriter
|
||||
from pyexcel_io.manager import RWManager
|
||||
|
||||
PY2 = sys.version_info[0] == 2
|
||||
if PY2 and sys.version_info[1] < 7:
|
||||
|
@ -40,6 +40,12 @@ XLS_FORMAT_CONVERSION = {
|
|||
}
|
||||
|
||||
|
||||
def is_integer_ok_for_xl_float(value):
|
||||
if value == math.floor(value):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def xldate_to_python_date(value):
|
||||
"""
|
||||
convert xl date to python date
|
||||
|
@ -74,6 +80,10 @@ class XLSheet(SheetReader):
|
|||
|
||||
Currently only support first sheet in the file
|
||||
"""
|
||||
def __init__(self, sheet, auto_detect_int=True, **keywords):
|
||||
SheetReader.__init__(self, sheet, **keywords)
|
||||
self.auto_detect_int = auto_detect_int
|
||||
|
||||
def number_of_rows(self):
|
||||
"""
|
||||
Number of rows in the xls sheet
|
||||
|
@ -95,6 +105,9 @@ class XLSheet(SheetReader):
|
|||
value = self.native_sheet.cell_value(row, column)
|
||||
if my_type == datetime.datetime:
|
||||
value = xldate_to_python_date(value)
|
||||
elif my_type == float and self.auto_detect_int:
|
||||
if is_integer_ok_for_xl_float(value):
|
||||
value = int(value)
|
||||
return value
|
||||
|
||||
def to_array(self):
|
||||
|
@ -117,7 +130,7 @@ class XLSBook(BookReader):
|
|||
It reads xls, xlsm, xlsx work book
|
||||
"""
|
||||
def __init__(self):
|
||||
BookReader.__init__(self, 'xls')
|
||||
BookReader.__init__(self)
|
||||
self.book = None
|
||||
self.file_content = None
|
||||
|
||||
|
@ -138,7 +151,7 @@ class XLSBook(BookReader):
|
|||
def read_sheet_by_index(self, sheet_index):
|
||||
self.book = self._get_book(on_demand=True)
|
||||
sheet = self.book.sheet_by_index(sheet_index)
|
||||
xlsheet = XLSheet(sheet)
|
||||
xlsheet = XLSheet(sheet, **self.keywords)
|
||||
return {sheet.name: xlsheet.to_array()}
|
||||
|
||||
def read_sheet_by_name(self, sheet_name):
|
||||
|
@ -155,7 +168,7 @@ class XLSBook(BookReader):
|
|||
result = OrderedDict()
|
||||
self.book = self._get_book()
|
||||
for sheet in self.book.sheets():
|
||||
xlsheet = XLSheet(sheet)
|
||||
xlsheet = XLSheet(sheet, **self.keywords)
|
||||
result[sheet.name] = xlsheet.to_array()
|
||||
return result
|
||||
|
||||
|
@ -225,7 +238,7 @@ class XLSWriter(BookWriter):
|
|||
xls, xlsx and xlsm writer
|
||||
"""
|
||||
def __init__(self):
|
||||
BookWriter.__init__(self, 'xls')
|
||||
BookWriter.__init__(self)
|
||||
self.work_book = None
|
||||
|
||||
def open(self, file_name,
|
||||
|
@ -256,13 +269,23 @@ def save_data(afile, data, file_type=None, **keywords):
|
|||
write_data(afile, data, file_type=file_type, **keywords)
|
||||
|
||||
|
||||
RWManager.register_readers(
|
||||
{
|
||||
"xls": XLSBook,
|
||||
"xlsm": XLSBook,
|
||||
"xlsx": XLSBook
|
||||
})
|
||||
RWManager.register_a_writer("xls", XLSWriter)
|
||||
RWManager.register_file_type_as_binary_stream('xls')
|
||||
RWManager.register_file_type_as_binary_stream('xlsm')
|
||||
RWManager.register_file_type_as_binary_stream('xlsx')
|
||||
_xls_registry = {
|
||||
"file_type": "xls",
|
||||
"reader": XLSBook,
|
||||
"writer": XLSWriter,
|
||||
"stream_type": "binary"
|
||||
}
|
||||
|
||||
_xlsm_registry = {
|
||||
"file_type": "xlsm",
|
||||
"reader": XLSBook,
|
||||
"stream_type": "binary"
|
||||
}
|
||||
|
||||
_xlsx_registry = {
|
||||
"file_type": "xlsm",
|
||||
"reader": XLSBook,
|
||||
"stream_type": "binary"
|
||||
}
|
||||
|
||||
exports = (_xls_registry, _xlsm_registry, _xlsx_registry)
|
||||
|
|
Loading…
Reference in New Issue