docs: def sheetheader(sheet, startstops, usecols=None):
      """Return the channel names in a list suitable as an argument to
      ChannelPack's `set_channel_names` method. Return None if first two
      StartStops are None.
  
      This function is slightly confusing, because it shall be called with
      the same parameters as sheet_asdict. But knowing that, it should be
      convenient.
  
      sheet: xlrd.sheet.Sheet instance
          Ready for use.
  
      startstops: list
          Four StartStop objects defining the data to read. See
          :func:`~channelpack.pullxl.prepread`, returning such a list.
  
      usecols: str or sequence of ints or None
          The columns to use, 0-based. 0 is the spread sheet column
          "A". Can be given as a string also - 'C:E, H' for columns C, D,
          E and H.
      """
  
      headstart, headstop, dstart, dstop = startstops
      if headstart is None:
          return None
      assert headstop.row - headstart.row == 1, ('Field names must be in '
                                                 'same row so far. Or '
                                                 'this is a bug')
      header = []
      # One need to make same offsets within start and stop as in usecols:
      usecols = _sanitize_usecols(usecols)
      cols = usecols or range(dstart.col, dstop.col)
      headcols = [c + (headstart.col - dstart.col) for c in cols]
  
      for col in headcols:
          fieldname = sheet.cell(headstart.row, col).value
          header.append(unicode(fieldname))
  
      return header