updated # regression save_to_memory(should have returned stream instance which has been reset to zero if possible the exception is sys stdoutwhich cannot be reset # not able to handle decimal decimal removed remove get_{{file_type}}_stream functions from pyexcel sheet and pyexcel book introduced since added streamattribute are attached to ~pyexcel sheet and ~pyexcel book to get direct access the underneath stream in responding to file type attributessuch as sheet xls it helps provide custom stream to external worldfor examplesheet stream csv gives text stream that contains csv formatted data book stream xls returns xls format data in byte stream updated better error reporting when an unknown parameters or unsupported file types were given to the signature functions updated raise exception if the incoming sheet does not have column names in other wordsonly sheet with column names could be saved to database sheet with row names cannot be saved the alternative is to transpose the sheetthen name_columns_by_row and then save fix iget_records where non-uniform content should be givene [[" "" "][ ][ ]]some record would become non-uniforme key 'ywould be missing from the second record skip_empty_rows is applicable when saving python data structure to another data source for exampleif your array contains row which is consisted of empty stringsuch as [''''''']please specify skip_empty_rows=false in order to preserve it this becomes subtle when you try save python dictionary where empty rows is not easy to be spotted # better documentation for save_book_as updated # regression save_to_memory(should have returned stream instance added flask-excel# allow sheet_name parameter pyexcel-xls# case-insensitive for file_type xls and xls are treated in the same way support the project