如何使用 Google 工作表 API 和 Python 附加 CSV 数据

How to append CSV data with Google Sheets API and Python

我目前正在学习 Python,我正在尝试为客户创建 Google Sheets API 和 Python 的自动化代码.到目前为止,通过我的自动化代码,我已经成功地从网站下载了一个 csv 文件,找到了该文件,并将该文件推送到 Google 个工作表。我从 问题的 Ufos 的回答中使用了我的逻辑。问题是我重复这个过程大约 10 次 Google Sheet 上的 csv 数据被新数据覆盖。我的客户想在一个地方查看所有客户的数据。我曾尝试执行附加操作,但无法使其与检索到的 csv 信息一起使用。我已通过使用 Google 尽力而为,但我似乎无法让它发挥作用。任何帮助将不胜感激!

 def insertIntoSheets(self, email, owner):
    creds = service_account.Credentials.from_service_account_file(
    self.SERVICE_ACCOUNT_FILE, scopes=self.SCOPES)

    service = build('sheets', 'v4', credentials=creds)
    
    # Insert CSV information into Google Sheet
    sheet = service.spreadsheets()
                        

    csv_path = ""
    csv_files = os.listdir(self.DOWNLOADS_PATH)
    for csv_file in csv_files:
        if csv_file.startswith("lead_export"):
            print("CSV path found")
            csv_path = os.path.join(self.DOWNLOADS_PATH, csv_file)
            print(f'CSV_PATH: {csv_path}')

    if csv_path == "":
        print("No CSV file detected. Must not have downloaded. Please try again.")
    else:
        #add email and owner
        values = (
            (owner, email),
        )
        value_range_body = {
            'majorDimension': 'ROWS',
            'values': values
        }
        service.spreadsheets().values().append(spreadsheetId=self.DATA_SPREADSHEET_ID, 
            valueInputOption='USER_ENTERED',
            range="Sheet1!A1",
            body=value_range_body).execute()

        #add CSV to Google Sheets
        print(f'Attempting to upload CSV file for {email}')
        with open(csv_path, 'r') as csv_file:
            csvContents = csv_file.read()
        body = {
            'requests': [
                   
                {
                'pasteData': {
                    "coordinate": {
                        "sheetId": [sheetId],
                        "rowIndex": "0",  # adapt this if you need different positioning
                        "columnIndex": "0", # adapt this if you need different positioning
                    },
                    "data": csvContents,
                    "type": 'PASTE_NORMAL',
                    "delimiter": ',',
                }
            }
            ]
        }
        request = sheet.batchUpdate(spreadsheetId=self.DATA_SPREADSHEET_ID, body=body)
        response = request.execute()

        print(f'Deleting CSV file for {email} account')
        deleted = self.removeCSV()
        if deleted == 0:
            print(f'No CSV files detected for {email}')
        else:
            print(f'{deleted} CSV files deleted for {email}.')

        return response

我相信你的目标如下。

  • 您想将文件中的 CSV 数据附加到 Google Spreadsheet。
  • 您想要使用 googleapis 实现此目的 python。
  • 您已经能够使用 Sheets API.
  • 获取和放置 Google Spreadsheet 的值

这样的话,下面的修改怎么样?

修改后的脚本:

请按如下方式修改您的脚本。

发件人:

with open(csv_path, 'r') as csv_file:
    csvContents = csv_file.read()
body = {
    'requests': [
           
        {
        'pasteData': {
            "coordinate": {
                "sheetId": [sheetId],
                "rowIndex": "0",  # adapt this if you need different positioning
                "columnIndex": "0", # adapt this if you need different positioning
            },
            "data": csvContents,
            "type": 'PASTE_NORMAL',
            "delimiter": ',',
        }
    }
    ]
}
request = sheet.batchUpdate(spreadsheetId=self.DATA_SPREADSHEET_ID, body=body)
response = request.execute()

收件人:

with open(csv_path, newline='') as f:
    reader = csv.reader(f)
    values = list(reader)
response = service.spreadsheets().values().append(spreadsheetId=spreadsheetId, valueInputOption='USER_ENTERED', range="Sheet1", body={"values": values}).execute()
  • 在此修改中,使用import csv
  • 请根据实际情况修改"Sheet1"的sheet名称。
  • 在此修改中,CSV 数据作为列表从文件中检索,并使用 spreadsheets.values.append 方法将该列表作为附加值放入 Spreadsheet。

参考: