def __init__(self, excel, header, reheader, sheets='all', exclude=None): self._xlrd_handler = None self._dist = [] self._pointer_stack = [] # excel not None if excel: self._format = xlrd.inspect_format(excel) self.excel_path = excel self._xlrd_handler = xlrd.open_workbook(self.excel_path) else: logging.error("Excel handler is None") raise ValueError("Excel handler不能为None") # Register the parameter self.header = header self.reheader = reheader if sheets == "all": # Get all excel sheets self.sheets = self._xlrd_handler.sheet_names() else: self.sheets = sheets if exclude: for i in exclude: try: # Remove sheets you don't want self.sheets.remove(i) except ValueError: pass # TODO Priority and Level list check, length equal if len(self.header) != len(self.reheader): raise ValueError("Header 和 Reheader 长度不一致") for dic in self.header: if len(dic["Priority"]) != len(dic["Level"]): raise ValueError("Priority 和 Level 长度不一致") # Reference list indicate the excel sheet row belong to which level self._ref_list = [] for _ in range(max(tuple(j for i in self.header for j in i["Level"]))): self._ref_list.append([]) for i in self.header: for level, priority in zip(i["Level"], i["Priority"]): self._ref_list[int(level) - 1].append(priority) # Init stack self._pointer_stack = [ None for _ in range( 1 + max(tuple(j for i in self.header for j in i["Level"]))) ]
def test_xlsb(): assert inspect_format(from_sample('sample.xlsb')) == 'xlsb'
def test_unknown(): assert inspect_format(from_sample('sample.txt')) is None
def test_content(): with open(from_sample('sample.xlsx'), 'rb') as source: assert inspect_format(content=source.read()) == 'xlsx'
def test_xls(): assert inspect_format(from_sample('namesdemo.xls')) == 'xls'
def test_zip(): assert inspect_format(from_sample('sample.zip')) == 'zip'
def test_ods(): assert inspect_format(from_sample('sample.ods')) == 'ods'