def load_workbook(filename, use_iterators=False): """Open the given filename and return the workbook :param filename: the path to open or a file-like object :type filename: string or a file-like object open in binary mode c.f., :class:`zipfile.ZipFile` :param use_iterators: use lazy load for cells :type use_iterators: bool :rtype: :class:`openpyxl.workbook.Workbook` .. note:: When using lazy load, all worksheets will be :class:`openpyxl.reader.iter_worksheet.IterableWorksheet` and the returned workbook will be read-only. """ try: # Python 2 is_file_instance = isinstance(filename, file) except NameError: # Python 3 from io import BufferedReader is_file_instance = isinstance(filename, BufferedReader) if is_file_instance: # fileobject must have been opened with 'rb' flag # it is required by zipfile if 'b' not in filename.mode: raise OpenModeError("File-object must be opened in binary mode") try: archive = ZipFile(filename, 'r', ZIP_DEFLATED) except BadZipfile: try: repair_central_directory(filename) archive = ZipFile(filename, 'r', ZIP_DEFLATED) except BadZipfile: e = exc_info()[1] raise InvalidFileException(unicode(e)) except (BadZipfile, RuntimeError, IOError, ValueError): e = exc_info()[1] raise InvalidFileException(unicode(e)) wb = Workbook() if use_iterators: wb._set_optimized_read() try: _load_workbook(wb, archive, filename, use_iterators) except KeyError: e = exc_info()[1] raise InvalidFileException(unicode(e)) archive.close() return wb
def load_workbook(filename, use_iterators=False): """Open the given filename and return the workbook :param filename: the path to open or a file-like object :type filename: string or a file-like object open in binary mode c.f., :class:`zipfile.ZipFile` :param use_iterators: use lazy load for cells :type use_iterators: bool :rtype: :class:`openpyxl.workbook.Workbook` .. note:: When using lazy load, all worksheets will be :class:`openpyxl.reader.iter_worksheet.IterableWorksheet` and the returned workbook will be read-only. """ if isinstance(filename, file): # fileobject must have been opened with 'rb' flag # it is required by zipfile if 'b' not in filename.mode: raise OpenModeError("File-object must be opened in binary mode") try: archive = ZipFile(filename, 'r', ZIP_DEFLATED) except BadZipfile: try: filename = repair_central_directory(filename) archive = ZipFile(filename, 'r', ZIP_DEFLATED) except BadZipfile, e: raise InvalidFileException(unicode(e))
def load_subclass(filename, use_iterators = False): if isinstance(filename, file): # fileobject must have been opened with 'rb' flag # it is required by zipfile if 'b' not in filename.mode: raise OpenModeError("File-object must be opened in binary mode") try: archive = ZipFile(filename, 'r', ZIP_DEFLATED) except (BadZipfile, RuntimeError, IOError, ValueError), e: raise InvalidFileException(unicode(e))
if isinstance(filename, file): # fileobject must have been opened with 'rb' flag # it is required by zipfile if 'b' not in filename.mode: raise OpenModeError("File-object must be opened in binary mode") try: archive = ZipFile(filename, 'r', ZIP_DEFLATED) except BadZipfile: try: filename = repair_central_directory(filename) archive = ZipFile(filename, 'r', ZIP_DEFLATED) except BadZipfile, e: raise InvalidFileException(unicode(e)) except (BadZipfile, RuntimeError, IOError, ValueError), e: raise InvalidFileException(unicode(e)) wb = Workbook() if use_iterators: wb._set_optimized_read() try: _load_workbook(wb, archive, filename, use_iterators) except KeyError, e: raise InvalidFileException(unicode(e)) archive.close() return wb def _load_workbook(wb, archive, filename, use_iterators):
def load_workbook(filename, use_iterators=False, keep_vba=False, guess_types=True, data_only=False): """Open the given filename and return the workbook :param filename: the path to open or a file-like object :type filename: string or a file-like object open in binary mode c.f., :class:`zipfile.ZipFile` :param use_iterators: use lazy load for cells :type use_iterators: bool :param keep_vba: preseve vba content (this does NOT mean you can use it) :type keep_vba: bool :param guess_types: guess cell content type and do not read it from the file :type guess_types: bool :param data_only: controls whether cells with formulae have either the formula (default) or the value stored the last time Excel read the sheet :type data_only: bool :rtype: :class:`openpyxl.workbook.Workbook` .. note:: When using lazy load, all worksheets will be :class:`openpyxl.reader.iter_worksheet.IterableWorksheet` and the returned workbook will be read-only. """ is_file_instance = isinstance(filename, file) if is_file_instance: # fileobject must have been opened with 'rb' flag # it is required by zipfile if 'b' not in filename.mode: raise OpenModeError("File-object must be opened in binary mode") try: archive = ZipFile(filename, 'r', ZIP_DEFLATED) except BadZipfile: try: f = repair_central_directory(filename, is_file_instance) archive = ZipFile(f, 'r', ZIP_DEFLATED) except BadZipfile: e = exc_info()[1] raise InvalidFileException(unicode(e)) except (BadZipfile, RuntimeError, IOError, ValueError): e = exc_info()[1] raise InvalidFileException(unicode(e)) wb = Workbook(guess_types=guess_types, data_only=data_only) if use_iterators: wb._set_optimized_read() if not guess_types: warnings.warn('please note that data types are not guessed ' 'when using iterator reader, so you do not need ' 'to use guess_types=False') try: _load_workbook(wb, archive, filename, use_iterators, keep_vba) except KeyError: e = exc_info()[1] raise InvalidFileException(unicode(e)) if not keep_vba: archive.close() return wb