如何使用 python 的 gspread wks.update_cells 更新谷歌电子表格中的单元格

Dar*_*eva 2 python-3.x gspread google-sheets-api

我在 GS 中有一个文档,其中自动上传了带有字符串格式数值的数据。\n在所有单元格中都有一个标记,因此我可以通过删除它来将字符串转换为数字。

\n\n

在此输入图像描述

\n\n

当我使用 gspread 方法更新一个单元格时,它成功运行: wks.update_acell("B7", str(1939.0).replace("\'"," "))

\n\n

但我想用 wks.update_cells 更改范围内的所有单元格。

\n\n

在官方 gspread 文档中有一个例子:

\n\n
cell_list = wks.range(\'A1:C7\')\n\nfor cell in cell_list:\n    cell.value = \'O_o\'\n\n# Update in batch\nwks.update_cells(cell_list)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这种形式下它可以工作,但在我的情况下 cell.value = str.replace("\'","") 我收到错误:

\n\n
TypeError: replace() takes at least 2 arguments (1 given)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想我需要将 smth 放在括号 str().replace \xe2\x80\x93 但不明白什么 \xe2\x80\xa6 谁能帮我吗?

\n\n

PS\n完整代码:

\n\n
import pandas as pd\nimport numpy as np\nfrom pandas import Series,DataFrame\nfrom file4dir1 import rep\n\n\n    pd.set_option(\'display.max_columns\',None)\n    pd.set_option(\'display.expand_frame_repr\',False)\n    pd.set_option(\'max_colwidth\',-1)\n\n    mytoken=\'***\'\n    project = \'***\'\n\n    DateFrom="2019-12-01"\n    DateTo="2019-12-31"\n\n    data=rep(mytoken,project,DateFrom,DateTo)\n\n    file=open("cashe3.csv","w")\n    file.write(data)\n    file.close()\n    f=pd.read_csv("cashe3.csv", header=1, sep=\' \',index_col=0,parse_dates=True)\n\nimport googleapiclient.discovery\nimport argparse\nfrom apiclient import discovery\nfrom oauth2client import client\nfrom oauth2client import tools  \n\n    SCOPES = \'https://www.googleapis.com/auth/spreadsheets\'\n    CLIENT_SECRET_FILE = "myGSapp4.json"\n    APPLICATION_NAME = \'Google Sheets API Report\'\n    credential_path = \'sheets.googleapis.com-report.json\'\n\nfrom httplib2 import Http\nfrom oauth2client.file import Storage   \n\n    store = Storage(credential_path)\n    credentials = store.get()\n    parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, parents=[tools.argparser])\n    flags = parser.parse_args([])\n    if not credentials or credentials.invalid:\n        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)\n        flow.user_agent = APPLICATION_NAME\n        if flags:\n            credentials = tools.run_flow(flow, store, flags)\n        print(\'Storing credentials to \' + credential_path)\n\nfrom apiclient.discovery import build\nfrom oauth2client.service_account import ServiceAccountCredentials\nfrom apiclient.discovery import build\nfrom httplib2 import Http\n\n\nimport gspread\nfrom df2gspread import df2gspread as d2g     \n\n    spreadsheet_key = \'***\'\n    wks_name = \'Sheet0\'\n    d2g.upload(f, spreadsheet_key, wks_name, credentials=credentials, row_names=True)\n
Run Code Online (Sandbox Code Playgroud)\n\n

#行索引和列索引仅作为示例

\n\n
    gc = gspread.authorize(credentials)\n    wks_name = gc.open_by_key(\'***\').get_worksheet(0)\n    cell_list = wks_name.range(\'E7:E13\')\n    requests = {\n        "requests": [\n            {\n                "findReplace": {\n                    "range": {\n                        "sheetId": \'Sheet0\',\n                        "startRowIndex": 7,\n                        "endRowIndex": 13,\n                        "startColumnIndex": 5,\n                        "endColumnIndex": 5\n                    },\n                    "find": "^\'",\n                    "searchByRegex": True,\n                    "includeFormulas": True,\n                    "replacement": ""\n                }\n            }\n        ]\n    }\n\n    wks_name.update_cells(cell_list)\n
Run Code Online (Sandbox Code Playgroud)\n

小智 5

按这种方式尝试,它应该有效:

cell_list = wks.range('A1:C7')

for cell in cell_list:
    cell.value = 'O_o'

# Update in batch
wks.update_cells(cell_list, value_input_option='USER_ENTERED')
Run Code Online (Sandbox Code Playgroud)

你缺少的是:value_input_option='USER_ENTERED'

如有任何问题,请查看 API 参考