Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在google电子表格中更新多个工作表_Python 3.x_Pandas_Google Api - Fatal编程技术网

Python 3.x 在google电子表格中更新多个工作表

Python 3.x 在google电子表格中更新多个工作表,python-3.x,pandas,google-api,Python 3.x,Pandas,Google Api,我有一些代码如下所示: from __future__ import print_function import pickle import os.path from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request SCOPES = ['https://w

我有一些代码如下所示:

from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

service = build('sheets', 'v4', credentials=creds)

spreadsheet = {
    'properties': {
        'title': 'Data Integrity Report Completed on {}'.format(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    }
}
spreadsheet = service.spreadsheets().create(body=spreadsheet,
                                            fields='spreadsheetId').execute()
gsheet_id = spreadsheet.get('spreadsheetId')

response_date = service.spreadsheets().values().append(
        spreadsheetId=gsheet_id,
        valueInputOption='RAW',
        range='A1:Z100',
        body=dict(
            majorDimension='ROWS',
            values=miss_occ_df.T.reset_index().T.values.tolist())
    ).execute()
这段代码基本上创建了一个google电子表格,并将我的数据框附加到第一个工作表中。我想要的是有一个有3个工作表的电子表格。我还需要为每个工作表命名,并向每个工作表上载3个不同的数据帧。我该怎么做?

  • 您希望实现以下目标。
    • 创建新的电子表格
    • 在创建的电子表格中需要3张图纸。
      • 您想重命名这些工作表
    • 将这些值放到每张纸上
  • 您希望使用带有python的google api python客户端来实现它们
如果我的理解是正确的,这次修改怎么样?我认为您的目标可以通过一个API调用来实现。但在您的例子中,似乎需要使用请求主体的二维数组。因此,在这个答案中,我想提出通过2个API调用来实现目标的方法。所以请把这看作是几个答案中的一个

此方法的流程如下所示

流量:
  • 创建新的电子表格。
    • 此时,通过给出名称创建3张图纸(工作表)。在这种情况下,将使用
      create()
      方法
  • 使用
    values().batchUpdate()
    的方法将值放入3张表中。
    • 在您的情况下,这些值将被放入新的电子表格中。因此,可以使用此方法输入值
  • 修改脚本: 请修改下面的脚本
    service=build('sheets','v4',credentials=creds)
    ,如下所示。请设置工作表名称和值的变量

    # Please set worksheet names.
    sheetNameForWorksheet1 = "sample1"
    sheetNameForWorksheet2 = "sample2"
    sheetNameForWorksheet3 = "sample3"
    
    # Please set values for each worksheet. Values are 2 dimensional array.
    valuesForWorksheet1 = miss_occ_df.T.reset_index().T.values.tolist()
    valuesForWorksheet2 = miss_occ_df.T.reset_index().T.values.tolist()
    valuesForWorksheet3 = miss_occ_df.T.reset_index().T.values.tolist()
    
    spreadsheet = {
        'properties': {
            'title': 'Data Integrity Report Completed on {}'.format(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
        },
        "sheets": [
            {
                "properties": {
                    "title": sheetNameForWorksheet1
                }
            },
            {
                "properties": {
                    "title": sheetNameForWorksheet2
                }
            },
            {
                "properties": {
                    "title": sheetNameForWorksheet3
                }
            }
        ]
    }
    spreadsheet = service.spreadsheets().create(body=spreadsheet, fields='spreadsheetId').execute()
    gsheet_id = spreadsheet.get('spreadsheetId')
    
    batch_update_values_request_body = {
        "data": [
            {
                "values": valuesForWorksheet1,
                "range": sheetNameForWorksheet1,
            },
            {
                "values": valuesForWorksheet2,
                "range": sheetNameForWorksheet2,
            },
            {
                "values": valuesForWorksheet3,
                "range": sheetNameForWorksheet3,
            }
        ],
        "valueInputOption": "USER_ENTERED"
    }
    
    response = service.spreadsheets().values().batchUpdate(spreadsheetId=gsheet_id, body=batch_update_values_request_body).execute()
    
    注:
    • 这个修改后的脚本假设您已经能够使用Sheets API向电子表格中输入和获取值
    参考资料:
    首先,请确认我对你的问题的理解是否正确。如果我误解了你的问题,而这不是你想要的方向,我道歉