Python 有没有办法避免覆盖我不知道的单元格的现有单元格值';我不想将数据发布到?跳过单元格?

Python 有没有办法避免覆盖我不知道的单元格的现有单元格值';我不想将数据发布到?跳过单元格?,python,google-sheets,google-sheets-api,Python,Google Sheets,Google Sheets Api,假设我在“A2”和“A4”中有公式,并且在发出更新请求时不想覆盖它。“A1”和“A3”是空单元格。当我通过python sheets API插入新行数据时,有没有办法避免覆盖这些单元格中的数据? 我已经尝试了一个空字符串”,如下所示,也尝试了None作为值,希望它足够聪明,如果我有一个空str,它不会替换该值,但遗憾的是,它总是覆盖我的单元格值。 我找不到与此相关的任何信息,似乎完全被卡住了 这是一个简化的示例,我有很多列,因此由于性能和代码复杂性,无法单独添加每个单元格值 spreadshee

假设我在“A2”和“A4”中有公式,并且在发出更新请求时不想覆盖它。“A1”和“A3”是空单元格。当我通过python sheets API插入新行数据时,有没有办法避免覆盖这些单元格中的数据? 我已经尝试了一个空字符串
,如下所示,也尝试了
None
作为值,希望它足够聪明,如果我有一个空str,它不会替换该值,但遗憾的是,它总是覆盖我的单元格值。 我找不到与此相关的任何信息,似乎完全被卡住了

这是一个简化的示例,我有很多列,因此由于性能和代码复杂性,无法单独添加每个单元格值

spreadsheet_id = "SPREADSHEETID" 
values = ["my_value_one_first_col", "", "my_value_two_third_col", None]


body = {'values': [values]} result = self.service.spreadsheets().values().update(
    spreadsheetId=self.spreadsheet_id, 
    range="A1",
    valueInputOption="RAW", body=body).execute()
在您的情况下,batchUpdate()更合适。batchUpdate()采用不同的“主体”,根据我的经验,主体可能是动态的

下面是一段伪代码:

spreadsheet_id = "SPREADSHEETID"
values = ["my_value_one_first_col", "", "my_value_two_third_col", ""]

request_get = service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range="A1:A4", valueRenderOption="FORMULA")
response_get = request_get.execute()

i=0
for cell_Val in response_get["values"]:
    if "=" in str(cell_Val)[0]:
        DATA_TO_BE_UPDATED.append({
             "range": string,
             "majorDimension": "ROWS",
             "values": [values[i]]
             }
        )
    i = i+1

UPDATE_BODY = {
    "valueInputOption": "USER_ENTERED"
    "data": DATA_TO_BE_UPDATED
}

request = sheet.values().batchUpdate(spreadsheetId=spreadsheet_id,body=UPDATE_BODY)
response = request.execute()

例如,在您的目标中,对于单元格“A1”,该单元格有一个公式和一个公式对应的值,您希望在不删除公式的情况下更新该值。我的理解正确吗?@Tanaike不容易。我只有“A2”和“A4”中的公式。“A1”和“A3”是空单元格。所以我想跳过“A2”和“A4”。谢谢你的回复。当您想从单元格“A5”中输入值时,如何修改从
A1
A5
的范围?但是,如果我对您的目标的理解不正确,我很抱歉。建议您先从工作表中提取包含公式的范围,覆盖您希望在脚本中覆盖的值,然后在公式不变的情况下将所有内容向后推?因为我认为您试图做的具体事情是不可能的,即通过将单元格的值保留为
None
或类似的方式来“跳过”某个范围内的单元格。@iansedano是的,我认为这是可行的。虽然sheets API不是最快的,但获取数据至少需要2秒,然后再写入2秒,甚至更长,这取决于需要加载的数据量。所以这就是为什么我要避免这一步。我想我过去已经让它工作了,通过让它跳过细胞。但是我想我没有使用.updateAPI参数,而是使用了一个模块。但遗憾的是,我不知道我是什么时候和怎样做的,因为这只是为了测试。对不起,我的类型。在for循环中,“range”键应该是“A”+str(i+1)