Google表格API:从单元格复制公式

时间:2019-08-08 09:36:26

标签: excel google-sheets google-sheets-api google-sheets-formula

由于所有类似问题都没有真正的答案,因此我将尝试一下。

我正在现有的电子表格上使用Google Sheets API。

我想将A1=A7/A2中的公式复制到B1=B7/B2

我可以复制内容,但不能复制公式:

body = {'values': [[result.get("values")[0]]]}
new_range = 'B1'
up_result = sheet.values().update(
spreadsheetId=SPREADSHEET_ID, range=new_range, 
    valueInputOption='USER_ENTERED', body=body).execute()

有没有办法复制公式?

2 个答案:

答案 0 :(得分:2)

  • 您想要将单元格“ A1”的公式=A7/A2复制为单元格“ B1”作为=B7/B2
  • 您想使用带有Google的google-api-python-client的Sheets API实现此目的。
    • 从您的脚本中,我认为您可以将google-api-python-client与Python一起使用,尽管找不到Python的标记。
  • 您已经能够使用Sheets API放置和获取电子表格的值。

如果我的理解是正确的,那么该修改如何?在此修改中,我使用了Sheets API的电子表格.batchUpdate方法的“ CopyPasteRequest”。

修改后的脚本:

在使用此脚本之前,请设置变量spreadsheet_idsheetId

service = build('sheets', 'v4', credentials=creds)
spreadsheet_id = '###'  # Please set Spreadsheet ID.
sheetId = "###"  # Please set sheet ID.

batch_update_spreadsheet_request_body = {
    "requests": [
        {
            "copyPaste": {
                "source": {
                    "sheetId": sheetId,
                    "startRowIndex": 0,
                    "endRowIndex": 1,
                    "startColumnIndex": 0,
                    "endColumnIndex": 1
                },
                "destination": {
                    "sheetId": sheetId,
                    "startRowIndex": 0,
                    "endRowIndex": 1,
                    "startColumnIndex": 1,
                    "endColumnIndex": 2
                },
                "pasteType": "PASTE_FORMULA"
            }
        }
    ]
}
request = service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=batch_update_spreadsheet_request_body)
response = request.execute()
print(response)
  • 请将该范围设置为gridrange。
      对于0, 1, 0, 1startRowIndexendRowIndexstartColumnIndex
    • endColumnIndex表示单元格“ A1”。
    • 对于0, 1, 1, 2startRowIndexendRowIndexstartColumnIndex
    • endColumnIndex表示单元格“ B1”。

结果:

  • 在“ A1”单元格具有=A7/A2的情况下运行上述脚本时,会将=B7/B2放入单元格“ B1”。

注意:

  • 在上面的脚本中,授权过程被省略。请注意这一点。因此,请使用您的脚本。

参考文献:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。

答案 1 :(得分:0)

它比仅使用数组公式还要复杂吗?

= arrayformula(A7:7 / A2:2)

如果只希望它转到B(或其他设置的列),则可以使用以下方法:

= arrayformula(A7:B7 / A2:B2)

如果只希望它移至第2行中的数据,则可以使用以下方法:

= arrayformula(if(isblank(A2:2),, A7:7 / A2:2))