【问题标题】:How can I get the number of rows in a Google Spreadsheet using api?如何使用 api 获取 Google 电子表格中的行数?
【发布时间】:2013-05-10 08:37:23
【问题描述】:

是否可以获取填充行的数量而不获取整个电子表格,或者找到第一个空行号?

如果重要的话,我正在使用 python api 包装器。

【问题讨论】:

  • 如果要在最后插入一行,可以使用“list feed”。它很像一个 SQL 表,第一行包含“字段”名称。
  • @eddyparkinson 感谢您的建议。我实际上使用列表提要。但是有一个问题我无法用列表提要 api 解决。列表提要 api 在插入数据时使用一种未记录的方式来解析列名。假设电子表格中的列标题是“我的列”,您必须将数据插入“mycolumn”;您必须删除诸如 "?!'"/()[]{ ,:+@#$%^&*€£¥" 之类的字符。在某些极端情况下我不能' t 环绕我的头;中文字符、俄文字符、html 标签等,所以当使用列表 api 插入失败时,我使用单元格提要作为后备。
  • 使用不同提要code.google.com/p/gdata-java-client/source/browse/trunk/java/… 的好例子,它们应该有助于了解什么是可能的,什么是不可能的。

标签: google-docs-api google-spreadsheet-api


【解决方案1】:

主要的 google API 文档说您可以使用 WorksheetFeed 来完成。所以必须可以从python。

Google 数据 API 客户端库 https://developers.google.com/gdata/javadoc/com/google/gdata/data/spreadsheet/WorksheetFeed(更新链接 2021/10/31)

编辑:@alvaro nortes 正确指出链接已损坏。更新链接。

【讨论】:

  • 感谢您的回复。尽管工作表提要包含一个名为“row_count”的属性,但即使它们为空,它也会对行进行计数。我试图获得填充的行数。我想我应该更清楚自己需要什么。
  • 是问题数据还是速度?我怀疑您使用不同类型的调用不会获得太多速度,还不如先读取工作表,然后再写入,但这个想法需要通过测试来确定。
  • 假设工作表包含五个填充行。我想添加另一行数据。当我遇到我提到的列表提要 api(列名)的问题时,我回退到单元格提要以填充第六行中的每一列。那时,如果我向工作表提要询问行数,它会返回 20。工作表中有 20 行,但其中只有 5 行是满的。我最终使用了工作表行号,如果它是 20,我下载整个工作表来计算填充的行数。如果它大于 20,我相信工作表 row_count,并继续填写下一行。感觉很老套:(
  • 这仍然是人们使用的方法吗?
  • @FullDecent google-apps-script 是另一种选择,但如果您使用电子表格 API,那么是的,这就是方式。
【解决方案2】:

使用 pygsheets,这将返回电子表格中填充的行数

import pygsheets

gc = pygsheets.authorize(service_file='client_secret.json'). #authorization
worksheet = gc.open('Sign Up').sheet1. #opens the first sheet in "Sign Up"
cells = worksheet.get_all_values(include_tailing_empty_rows=False, include_tailing_empty=False, returnas='matrix')
end_row = len(cells)
print(end_row)

【讨论】:

    【解决方案3】:

    我认为这会奏效。您需要使用 ListFeed getEntries() 来查找具有条目的行。

    URL listFeedUrl = worksheets.get(x).getListFeedUrl();
    ListFeed feed = googleservice.getFeed(listFeedUrl, ListFeed.class);
    System.out.println("Number of filled rows"+feed_L.getEntries().size()+1);
    System.out.println("First Empty row"+feed_L.getEntries().size()+2);
    

    我假设行之间没有空白行。空白单元格不会引起任何问题,我的意思是一行必须至少填充一个单元格。

    【讨论】:

    • OP 正在使用 Python 包装器。
    【解决方案4】:

    您可以使用Sheetfu 库及其方法get_data_range。它基本上返回仅包含数据的范围。

    from sheetfu import SpreadsheetApp
    
    sa = SpreadsheetApp('path/to/secret.json')
    spreadsheet = sa.open_by_id(spreadsheet_id='<spreadsheet id>')
    sheet = spreadsheet.get_sheet_by_name('Sheet1')
    data_range = sheet.get_data_range()
    

    这将计算包含数据的范围的坐标。然后,您可以使用以下方法设置值、注释、背景等:

    values = data_range.get_values()
    notes = data_range.get_notes()
    backgrounds = data_range.get_backgrounds()
    
    

    Range 对象包含很多方法。查看文档here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      相关资源
      最近更新 更多