当前位置: 首页 > 知识库问答 >
问题:

在Python的google电子表格api v4中获取工作表列表和最新工作表

郁和通
2023-03-14

我正试图按照google官方文档,在Python3中读取和写入不同表单的值。尽管我能够使用rangeName=”类数据中的range属性从某些工作表中读取值!A2:E'在下面提到的代码块中:

discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
                    'version=v4')
    service = discovery.build('sheets', 'v4', http=http,
                              discoveryServiceUrl=discoveryUrl)

    spreadsheetId = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms'
    rangeName = 'Class Data!A2:E'
    result = service.spreadsheets().values().get(
        spreadsheetId=spreadsheetId, range=rangeName).execute()
    values = result.get('values', [])

我试图从这里使用示例代码编写值:

requests.append({
    'updateCells': {
        'start': {'sheetId': 0, 'rowIndex': 0, 'columnIndex': 0},
        'rows': [
            {
                'values': [
                    {
                        'userEnteredValue': {'numberValue': 1},
                        'userEnteredFormat': {'backgroundColor': {'red': 1}}
                    }, {
                        'userEnteredValue': {'numberValue': 2},
                        'userEnteredFormat': {'backgroundColor': {'blue': 1}}
                    }, {
                        'userEnteredValue': {'numberValue': 3},
                        'userEnteredFormat': {'backgroundColor': {'green': 1}}
                    }
                ]
            }
        ],
        'fields': 'userEnteredValue,userEnteredFormat.backgroundColor'
    }
})
batchUpdateRequest = {'requests': requests}

service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id,
                                    body=batchUpdateRequest).execute()

我面临的问题是,我无法从官方文档中保留最新的表名或id,因为最新的api修订版正在随机生成gid(我们可能不知道表gid是什么)。是否有任何方法可以使用google sheet api v4引用工作表列表或电子表格最新修订的工作表名称或id?

共有3个答案

潘高洁
2023-03-14

对于那些寻找nodejs解决方案的人:

const { google } = require("googleapis")

// Assuming auth has already been generated
const getSheets = async (auth, spreadsheetId) => {
  const sheets = google.sheets({version: "v4", auth});
  const result = (await sheets.spreadsheets.get({ 
    spreadsheetId 
  })).data.sheets.map((sheet) => {
    return sheet.properties.title
  })
  return result
}

这是从等待工作表返回的内容。电子表格。获取({spreadsheetId})

然后,使用这种类型,我映射了data.sheets的结果,并返回所有标题。

它看起来像是按照标题在实际谷歌页面上的顺序返回标题。

如果您试图生成身份验证令牌,请查看此处

唐利
2023-03-14

还没有人在PHP库的SO上问过这个问题,但是我只是想在这里添加这个答案,因为这是相关问题的第一个谷歌结果。

<?php

$sheets = array();

// ... load library and set up client ...
$service = new Google_Service_Sheets($client);

$response = $service->spreadsheets->get($spreadsheetId);
foreach($response->getSheets() as $s) {
    $sheets[] = $s['properties']['title'];
}

return $sheets;

?>
唐海阳
2023-03-14

您可以使用电子表格上的“获取”方法获取表格列表:

sheet_metadata = service.spreadsheets().get(spreadsheetId=spreadsheet_id).execute()
sheets = sheet_metadata.get('sheets', '')
title = sheets[0].get("properties", {}).get("title", "Sheet1")
sheet_id = sheets[0].get("properties", {}).get("sheetId", 0)
 类似资料:
  • 我的脚本在提交一些表单后在电子表格上添加新的表单。此表用作排行榜。但要查看它,我必须单击新创建的选项卡。有什么办法可以从脚本中完成吗? 这张图片是创建新工作表后的屏幕截图(第1周第2课)。 P、 我发现我必须重新表述这个问题。问题是,我想从另一个电子表格(此电子表格有onSubmit触发器,并在其他打开的电子表格(排行榜)上创建和放置信息)中执行此操作。我检查setActiveSheet(工作表)

  • 我正在准备一份投资跟踪表。对于overview页面,我想查询并合并来自每个account选项卡的数据,但我很难弄清楚如何才能做到这一点。 以下是我的测试表链接:https://docs.google.com/spreadsheets/d/14sZmxkM65ax9BKrkjinwOrOQPrS_xhqPPLs68Rggii4/edit 我尝试使用的公式位于Overview选项卡的J列中。此公式适用

  • 可编辑链接-https://docs.google.com/spreadsheets/d/1vrzchTHVwwzc9wgFGmtc_zBsh27CEtE7KOyeNDuLwC0/edit?usp=sharing 发布至网页-https://docs.google.com/spreadsheets/d/e/2PACX-1vRaJd3YpKnemAneU47RI58m7cxQsYFdViFBxJPV

  • 我有一个用于Google Sheets的“onEdit”脚本,但只希望它在一张工作表上工作: 如何更改脚本,使其仅在工作表中的一张工作表上工作?

  • 我有一个谷歌电子表格,里面有多张表格,我想把每一张表格复制到一个新的电子表格中,并在一个特定的单元格中以文本命名新的电子表格。我很高兴运行脚本多次,所以我想让它复制活动表。 即。我所拥有的=称为“颜色”的电子表格——工作表1=“红色”,工作表2=“蓝色”,工作表3=“黄色”,等等。 我想要什么= 名为“红色”的电子表格。电子表格叫做"蓝色",电子表格叫做"黄色" 到目前为止,我有这个脚本,但它告诉

  • 我有一个谷歌电子表格,其中有3张表格,包含来自不同国家的数据(,,),还有第4张表格()。所有图纸中的列都相同。 我已经知道我可以这样组合它们: 然而,我需要一种方法将任意数量的纸张组合在一起,而不需要修改公式。所以,如果添加了Country4,也应该追加。我怎么能那样做? 如果有帮助,我有一个工作表,其中有一列包含所有国家的名称(因此也包括国家工作表名称)。我有一个脚本,如果在工作表中添加了一个