猿问

如何更新谷歌驱动器文件

所以这就是我想要做的:


data = drive.files().get_media(fileId=fileId).execute()

csvData = [row.split(",") for row in str(data, 'latin-1').split("\n")]

ar = []

temp = []

for i, row in enumerate(csvData):

    if "".join(row) != "":

        temp.append(row)

    else:

        ar.append(temp)

        temp = []

    if i == len(csvData) - 1:

        ar.append(temp)


# Create request body for the method of spreadsheets.create of Sheets API. [Tanaike]

sheetsObj = []

for sheet in ar:

    tempRow = []

    for row in sheet:

        tempCol = []

        for col in row:

            tempCol.append({"userEnteredValue": {"stringValue": col}})

        if len(tempCol) != 0:

            tempRow.append({"values": tempCol})

    if len(tempRow) != 0:

        sheetsObj.append({"data": [{"rowData": tempRow}]})


# Request to Sheets API. [Tanaike]

body = {"properties": {"title": "spreadsheetTitle"}, "sheets": sheetsObj}

res = sheets.spreadsheets().create(body=body).execute()

print(res)

我最近问了一个关于通过谷歌 API 将文件上传到谷歌驱动器的问题。我在代码上取得了成功,但现在我意识到我需要一个单独的代码,而不是将数据上传到新文件中,而是更新现有的谷歌表格。


我一直在努力反对 batchUpdate() (https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/batchUpdate),因为我不知道如何将旧的 sheetObj 解决方案融入它。


这个想法和这里一样:谷歌文档格式,将文本转换为表格


我希望使用 .txt 格式的数据更新现有的 google 表格文件,但不是简单地上传并因此创建新文件,而是希望更新我目前拥有的现有 google 表格文件。


这个想法是覆盖现有文件中的任何内容。假设文件 id 是已知的。

ps.:发生了一些我之前没有注意到的奇怪事情:所有单元格都以 a 开头',我正在尝试处理它,但是如果有人在我做之前弄清楚了,请将其包含在解决方案中。


慕田峪9158850
浏览 108回答 1
1回答

aluckdog

您希望使用来自以下值的 CSV 数据更新现有电子表格。这些值来自谷歌文档格式,将文本转换为表格ID, NAME, MOBILE, CITY, COUNTRY, BIRTHDAY, 3, NameGoesHere1, 21 98658 5548, abcity, countryNameHere, 1998-05-02, 6, SomeoneElse Joined Here, 21 98535 1218, whereland, Far far away, 1989-11-15, 5, AnotherCustomer, 21 85482 5245, somecity, Somewhereland, 1999-08-04, ID, PRICE, STOCK, ASDF, BASDF, CASDF,ID, NAME, PRICE, DESCRIPTION, 2, pen, 1.5, The pen is mightier than the sword, 3, pencil, 1.0, Can be used to write, 4, RPG, 150.0, well that escalated quickly, huh, EMPTY, names, goofs, ID, FLAVOR, 现有的电子表格有 5 张表格,用于使用 5 张表格的 CSV 数据进行更新。您想使用 google-api-python-client 和 python 来实现这一点。您已经能够使用 Sheets API 获取和放置电子表格的值。如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。流动:从 CSV 文件中检索值。解析每个工作表的值,并创建请求正文。使用创建的请求正文请求现有电子表格。在这种情况下,我使用了电子表格.values.batchUpdate 的方法。修改后的脚本:在运行脚本之前,请设置csvFileId,spreadsheetId和的变量sheetNames。csvFileId = '###'  # Please set the CSV file ID.spreadsheetId = '###'  # Please set the Spreadsheet ID.sheetNames = ['Sheet1', 'Sheet2', 'Sheet3', 'Sheet4', 'Sheet5']  # Please set the sheet names in the Spreadsheet for updating.sheets = build('sheets', 'v4', credentials=creds)drive = build('drive', 'v3', credentials=creds)# Retrieve data from Google Drive and parse data as an array.data = drive.files().get_media(fileId=csvFileId).execute()csvData = [row.split(",") for row in str(data, 'utf-8').split("\n")]ar = []temp = []for i, row in enumerate(csvData):    if "".join(row) != "":        row = [v.strip() for v in row]        temp.append(row)    else:        ar.append(temp)        temp = []    if i == len(csvData) - 1:        ar.append(temp)valuesUpdateReq = []for i, sheet in enumerate(ar):    if bool(sheet):        sheetName = sheetNames[i]        valuesUpdateReq.append({"values": sheet, "range": sheetName, "majorDimension": "ROWS"})# Request to Sheets API.batch_update_values_request_body = {"data": valuesUpdateReq, "valueInputOption": "USER_ENTERED"}res = sheets.spreadsheets().values().batchUpdate(spreadsheetId=spreadsheetId, body=batch_update_values_request_body).execute()print(res)笔记:在上面的脚本中,这些值使用“USER_ENTERED”放入电子表格。这样,这些值可以被解析为字符串、数字和日期。而且,不使用字符顶部的单引号。
随时随地看视频慕课网APP

相关分类

Python
我要回答