Beispiel #1
0
    def filter_data(
            self,
            sheet: Sheet,
            datetime_handler: Dict[int,
                                   str] = None) -> List[Dict[str, object]]:
        ''' 依据过滤传入的sheet中数据,并返回数据
            1、解决整型数据读取后变成小数
            2、解决日期时间读取后变成小数,默认格式:'%Y-%m-%d %H:%M:%S'
            3、依据datetime_handler 可以特殊格式化指定列的日期时间格式,没有输入则默认
            4、布尔类型的数据,读取转换为 ture和false
        :param sheet: 传入Sheet对象
        :param datetime_handler:列序号为key(从0开始),日期格式fmt为value的字典
        (如:{0:'%Y-%m-%d %H:%M:%S',2:'%Y-%m-%d'},表示第一列使用xx格式,第三列使用xx格式)
        :return: 当前excel-sheet页中数据list=[row1{param1:value1,param2:value2...},
        row2{param1:value1,param2:value2...},....]

        以下为ctype类型:
            XL_CELL_EMPTY: 'empty',0
            XL_CELL_TEXT: 'text',1
            XL_CELL_NUMBER: 'number',2
            XL_CELL_DATE: 'xldate',3
            XL_CELL_BOOLEAN: 'bool',4
            XL_CELL_ERROR: 'error',5
            XL_CELL_BLANK: 'blank,6
        '''
        row_all = sheet.nrows
        all_data = []
        # top_data = sheet.row_values(0)
        top_data = self.filter_row_data(sheet.row_slice(1), datetime_handler)
        for x in range(2, row_all):
            row_cell_list = sheet.row_slice(x)
            all_data.append(
                dict(
                    zip(top_data,
                        self.filter_row_data(row_cell_list,
                                             datetime_handler))))
        return all_data