docs: def get_template(self):
          """
          读取一个Excel模板，将此Excel的所有行读出来，并且识别特殊的标记进行记录
  
          :return: 返回读取后的模板，结果类似：
  
          [
              {'cols': #各列,与subs不会同时生效
               'subs':[ #子模板
                      {'cols':#各列,
                       'subs': #子模板
                       'field': #对应数据中字段名称
                      },
                      ...
                  ]
               'field': #对应数据中字段名称
              },
              ...
          ]
  
          子模板的判断根据第一列是否为 {{for field}} 来判断，结束使用 {{end}}
          """
          rows = []
          stack = []
          stack.append(rows)
          #top用来记录当前栈
          top = rows
          for i in range(1, self.sheet.max_row+1):
              cell = self.sheet.cell(row=i, column=1)
              #是否子模板开始
              if (isinstance(cell.value, (str, unicode)) and
                      cell.value.startswith('{{for ') and
                      cell.value.endswith('}}')):
                  row = {'field':cell.value[6:-2].strip(), 'cols':[], 'subs':[]}
                  top.append(row)
                  top = row['subs']
                  stack.append(top)
                  if self.begin == 1:
                      self.begin = i
              #是否子模板结束
              elif (isinstance(cell.value, (str, unicode)) and
                      cell.value == '{{end}}'):
                  stack.pop()
                  top = stack[-1]
              else:
                  row = {'cols':[], 'subs':[]}
                  cols = row['cols']
                  for j in range(1, self.sheet.max_column+1):
                      cell = self.sheet.cell(row=i, column=j)
                      v = self.process_cell(i, j, cell)
                      if v:
                          cols.append(v)
                  if row['cols'] or row['subs']:
                      top.append(row)
  
  
          # pprint(rows)
          return rows