docs: def read_excel(file_name, offset=1, sheet_index=0):
      """
      读取 Excel
      :param sheet_index:
      :param file_name:
      :param offset: 偏移，一般第一行是表头，不需要读取数据
      :return:
      """
      try:
          workbook = xlrd.open_workbook(file_name)
      except Exception as e:
          return None
  
      if len(workbook.sheets()) <= 0:
          return []
  
      sh = workbook.sheets()[sheet_index]
  
      raw_data = []
      n_rows = sh.nrows
      row = sh.row_values(0)
      header = []
      for t in row:
          t = t.strip().lower()
          header.append(t)
  
      # n_cols = sh.ncols
      # 第0行是提示信息和标题，跳过
      for i in range(offset, n_rows):
          try:
              row = sh.row_values(i)
              d = {}
              for j, t in enumerate(header):
                  d[t] = row[j]
              raw_data.append(d)
          except Exception as e:
              pass
  
      return raw_data