将 google 个电子表格另存为新电子表格
Save google spreadsheet as new
UPDATE shown at the end of my question.
我可以使用 Python 和 gspread 创建一个新的 google spreadsheet:
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from pprint import pprint
from googleapiclient import discovery
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
gc = gspread.authorize(credentials)
service = discovery.build('sheets', 'v4', credentials=credentials)
spreadsheet_body = {
"properties": {
"title": "xxGoogleAPIMasterTemplatexx"
}
}
request = service.spreadsheets().create(body=spreadsheet_body)
response = request.execute()
gc.insert_permission(response['spreadsheetId'], 'xxxxx@zzzz-yyyyyy.iam.gserviceaccount.com', perm_type='user', role='owner')
gc.insert_permission(response['spreadsheetId'], 'xxxx.xxxx@gmail.com', perm_type='user', role='owner')
效果很好。
我的目标是使用模板google传播sheet,复制它然后编辑副本(一些单元格 --> 这很容易我可以确认我已经完成了这部分)并重命名它。
我想做的是:
- 复制现有的点差sheet。然后我只需要知道复制的传播的名称或 IDsheet.
- 打开现有的跨页sheet 并另存为新的。
在上面的脚本中添加点差sheet body。更具体地说,编辑这部分:
spreadsheet_body = {
"properties":{
"title": "xxGoogleAPIMasterTemplatexx"
}
}
为了使其包含单元格中的所有 headers 和值。那可能吗?我如何查看现有价差的属性sheet?
我还没有找到有用的东西。我只找到了如何将 sheet(制表符)从一个 google spreadsheet 复制到另一个。
PS:我正在使用 API V4。
UPDATED:
我按照我在这个问题中得到的第一个答案。因此,我创建了一个脚本,将 sheet 复制到另一个 spreadsheet 中。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from pprint import pprint
from googleapiclient import discovery
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
gc = gspread.authorize(credentials)
service = discovery.build('sheets', 'v4', credentials=credentials)
# The ID of the spreadsheet containing the sheet to copy.
spreadsheet_id = 'xxxxxx'
# The ID of the sheet to copy.
sheet_id = 730266781 # TODO: Update placeholder value.
copy_sheet_to_another_spreadsheet_request_body = {
# The ID of the spreadsheet to copy the sheet to.
'destination_spreadsheet_id': 'yyyy',
# TODO: Add desired entries to the request body.
}
request = service.spreadsheets().sheets().copyTo(spreadsheetId=spreadsheet_id, sheetId=sheet_id, body=copy_sheet_to_another_spreadsheet_request_body)
response = request.execute()
# TODO: Change code below to process the `response` dict:
pprint(response)
但是我收到了这个错误:
https://sheets.googleapis.com/v4/spreadsheets/xxxxxx/sheets/730266781:copyTo?alt=json
returned "The caller does not have permission">
因此,我首先尝试向 credentials.json 文件中提到的用户授予访问权限 (xxxx-yyyy@bbbbb-182311.iam.gserviceaccount.com)
然后我也尝试使用这条线:
gc.insert_permission(response['spreadsheetId'], 'xxxx-yyyy@bbbbb-182311.iam.gserviceaccount.com', perm_type='user', role='owner')
我找不到解决方案,因此跳过了这部分。我制作了模板public。
以下解决方法如何?我认为有两种模式。
模式 1 :
- 使用
service.spreadsheets().create()
与 { "properties": { "title": "xxGoogleAPIMasterTemplatexx" } }
创建新的传播sheet。
- 可以返回文件 ID 和文件名。
- 使用
service.spreadsheets().sheets().copyTo()
. 将模板传播sheet复制到新传播sheet
在这种情况下,仅使用工作表 API。
模式二:
- 使用
service.files().copy()
复制标题为 {"name": "xxGoogleAPIMasterTemplatexx"}
的模板 spreadsheet。
- 可以返回文件 ID 和文件名。
在这种情况下,仅使用驱动器 API。
关于其他问题:
- Q: 以使其包含单元格中的所有 headers 和值。那可能吗?
- A:这个可以通过复制模板sheet来实现。这对于两种模式都是可能的。如果你想从其他spreadsheet复制数据到复制的spreadsheet,你可以使用values.get和values.update.
- 问: 如何查看现有价差的属性sheet?
- A: 您可以使用
service.spreadsheets().get()
作为 fields=properties
. 检索属性
参考资料:
您可以在这些参考资料中查看示例脚本。
如果我误解了你的问题,我很抱歉。
编辑:
要删除 sheet 和 id=0
,您可以使用以下脚本。
batch_update_spreadsheet_request_body = {
"requests": [{
"deleteSheet": {
"sheetId": 0
}
}]
}
service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=batch_update_spreadsheet_request_body)
参考:
UPDATE shown at the end of my question.
我可以使用 Python 和 gspread 创建一个新的 google spreadsheet:
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from pprint import pprint
from googleapiclient import discovery
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
gc = gspread.authorize(credentials)
service = discovery.build('sheets', 'v4', credentials=credentials)
spreadsheet_body = {
"properties": {
"title": "xxGoogleAPIMasterTemplatexx"
}
}
request = service.spreadsheets().create(body=spreadsheet_body)
response = request.execute()
gc.insert_permission(response['spreadsheetId'], 'xxxxx@zzzz-yyyyyy.iam.gserviceaccount.com', perm_type='user', role='owner')
gc.insert_permission(response['spreadsheetId'], 'xxxx.xxxx@gmail.com', perm_type='user', role='owner')
效果很好。
我的目标是使用模板google传播sheet,复制它然后编辑副本(一些单元格 --> 这很容易我可以确认我已经完成了这部分)并重命名它。
我想做的是:
- 复制现有的点差sheet。然后我只需要知道复制的传播的名称或 IDsheet.
- 打开现有的跨页sheet 并另存为新的。
在上面的脚本中添加点差sheet body。更具体地说,编辑这部分:
spreadsheet_body = { "properties":{ "title": "xxGoogleAPIMasterTemplatexx" } }
为了使其包含单元格中的所有 headers 和值。那可能吗?我如何查看现有价差的属性sheet?
我还没有找到有用的东西。我只找到了如何将 sheet(制表符)从一个 google spreadsheet 复制到另一个。
PS:我正在使用 API V4。
UPDATED:
我按照我在这个问题中得到的第一个答案。因此,我创建了一个脚本,将 sheet 复制到另一个 spreadsheet 中。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from pprint import pprint
from googleapiclient import discovery
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
gc = gspread.authorize(credentials)
service = discovery.build('sheets', 'v4', credentials=credentials)
# The ID of the spreadsheet containing the sheet to copy.
spreadsheet_id = 'xxxxxx'
# The ID of the sheet to copy.
sheet_id = 730266781 # TODO: Update placeholder value.
copy_sheet_to_another_spreadsheet_request_body = {
# The ID of the spreadsheet to copy the sheet to.
'destination_spreadsheet_id': 'yyyy',
# TODO: Add desired entries to the request body.
}
request = service.spreadsheets().sheets().copyTo(spreadsheetId=spreadsheet_id, sheetId=sheet_id, body=copy_sheet_to_another_spreadsheet_request_body)
response = request.execute()
# TODO: Change code below to process the `response` dict:
pprint(response)
但是我收到了这个错误:
https://sheets.googleapis.com/v4/spreadsheets/xxxxxx/sheets/730266781:copyTo?alt=json returned "The caller does not have permission">
因此,我首先尝试向 credentials.json 文件中提到的用户授予访问权限 (xxxx-yyyy@bbbbb-182311.iam.gserviceaccount.com)
然后我也尝试使用这条线:
gc.insert_permission(response['spreadsheetId'], 'xxxx-yyyy@bbbbb-182311.iam.gserviceaccount.com', perm_type='user', role='owner')
我找不到解决方案,因此跳过了这部分。我制作了模板public。
以下解决方法如何?我认为有两种模式。
模式 1 :
- 使用
service.spreadsheets().create()
与{ "properties": { "title": "xxGoogleAPIMasterTemplatexx" } }
创建新的传播sheet。- 可以返回文件 ID 和文件名。
- 使用
service.spreadsheets().sheets().copyTo()
. 将模板传播sheet复制到新传播sheet
在这种情况下,仅使用工作表 API。
模式二:
- 使用
service.files().copy()
复制标题为{"name": "xxGoogleAPIMasterTemplatexx"}
的模板 spreadsheet。- 可以返回文件 ID 和文件名。
在这种情况下,仅使用驱动器 API。
关于其他问题:
- Q: 以使其包含单元格中的所有 headers 和值。那可能吗?
- A:这个可以通过复制模板sheet来实现。这对于两种模式都是可能的。如果你想从其他spreadsheet复制数据到复制的spreadsheet,你可以使用values.get和values.update.
- 问: 如何查看现有价差的属性sheet?
- A: 您可以使用
service.spreadsheets().get()
作为fields=properties
. 检索属性
- A: 您可以使用
参考资料:
您可以在这些参考资料中查看示例脚本。
如果我误解了你的问题,我很抱歉。
编辑:
要删除 sheet 和 id=0
,您可以使用以下脚本。
batch_update_spreadsheet_request_body = {
"requests": [{
"deleteSheet": {
"sheetId": 0
}
}]
}
service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=batch_update_spreadsheet_request_body)