【问题标题】:How to find the first empty row of a google spread sheet using python GSPREAD?如何使用 python GSPREAD 找到谷歌电子表格的第一个空行?
【发布时间】:2016-11-24 08:29:17
【问题描述】:

我正在努力编写代码来找到我在谷歌工作表的第一个空行。

我正在使用来自 github.com/burnash/gspread 的 gspread 包

如果有人可以提供帮助,我会很高兴:)

我目前刚刚导入了模块并打开了工作表

scope = ['https://spreadsheets.google.com/feeds']

credentials = ServiceAccountCredentials.from_json_keyfile_name('ddddd-61d0b758772b.json', scope)

gc = gspread.authorize(credentials)

sheet = gc.open("Event Discovery")
ws = sheet.worksheet('Event Discovery')

我想找到第 1158 行,这是带有函数的工作表的第一个空行,这意味着每次填充旧的空行时,它都会找到下一个空行 See here

【问题讨论】:

  • 向我们展示你目前拥有的东西。
  • 我不是这个意思。显示一些遍历行的代码并尝试检查是否有空行。
  • 嗨,Alex,我不知道如何编写代码,因为这是我刚刚找到的一个新包,我不太了解它
  • 那么您将不得不查看一些文档。您链接的 github 页面看起来很有帮助。试试get_all_values 方法。
  • 谢谢 Alex,我去看看!

标签: python python-2.7 gspread


【解决方案1】:

我解决了这个问题:

def next_available_row(worksheet):
    str_list = list(filter(None, worksheet.col_values(1)))
    return str(len(str_list)+1)

scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name('auth.json', scope)
gc = gspread.authorize(credentials)
worksheet = gc.open("sheet name").sheet1
next_row = next_available_row(worksheet)

#insert on the next available row

worksheet.update_acell("A{}".format(next_row), somevar)
worksheet.update_acell("B{}".format(next_row), somevar2)

【讨论】:

  • 在 Python 3 中,将 'list()' 添加到 'next_available_row' 的函数中:str_list = list(filter(None, sheet.col_values(1)))
  • @PedroLobito 这是一个很好的解决方案!我用了好几个月,但突然坏了:它目前在下一个可用行之前插入 1 行。知道为什么会发生这种情况吗?
  • @jed 它对我来说很好用。但在你的情况下,你为什么不把行号加一呢?
【解决方案2】:

这种替代方法通过考虑可能具有跳过值的行(例如文档中花哨的标题部分)以及对前 N 列进行抽样来解决接受答案的问题:

def next_available_row(sheet, cols_to_sample=2):
  # looks for empty row based on values appearing in 1st N columns
  cols = sheet.range(1, 1, sheet.row_count, cols_to_sample)
  return max([cell.row for cell in cols if cell.value]) + 1

【讨论】:

    【解决方案3】:

    如果你可以指望你之前的所有行都被填写:

    len(sheet.get_all_values()) + 1

    会给你第一个空闲的行

    get_all_values 返回工作表数据的二维列表。每个嵌套列表都是一行,因此 2D 列表的长度是包含任何数据的行数。

    类似的问题是第一个空闲列:

    from xlsxwriter.utility import xl_col_to_name
    # Square 2D list, doesn't matter which row len you check
    column_count = len(sheet.get_all_values()[0]) 
    column = xl_col_to_name(column_count)
    

    【讨论】:

      【解决方案4】:
      def find_empty_cell():
          alphabet = list(map(chr, range(65, 91)))
          for letter in alphabet[0:1]: #look only at column A and B
              for x in range(1, 1000):
                  cell_coord = letter+ str(x)
                  if wks.acell(cell_coord).value == "":
                      return(cell_coord)
      

      我使用这个有点草率的函数来查找第一个空单元格。我找不到空行,因为其他列已经有值。

      哦,2.7 和 3.6 之间存在一些映射问题,需要我将字母表转换为字符串。

      【讨论】:

        【解决方案5】:
        import pygsheets        
        gc = pygsheets.authorize(service_file='************************.json')
        ss = gc.open('enterprise_finance')
        ws = ss[0]
        row_count = len(ws.get_all_records()) + 2
        ws.set_dataframe(raw_output,(row_count,1), copy_index = 'TRUE', copy_head = 'TRUE')
        ws.delete_rows(row_count , number=1)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          • 2011-05-29
          • 1970-01-01
          • 2015-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多