如何在 gspread 中使用 batch_update 插入行和更改单元格样式?
How to insert row and change cell styles using batch_update in gspread?
我正在使用 gspread
和 gspread_formatting
更新我在 Google 中的工作表。我的一些代码库已被改写为使用 batch_update
,因为我在另一个答案中找到了一些代码示例,我可以将其用作参考。但是,我似乎无法转换其他两个操作。这是我的代码:
import gspread
from gspread_formatting import *
from oauth2client.service_account import ServiceAccountCredentials
def operate():
scope = [
'https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive'
]
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'creds.json',
scope
)
gc = gspread.authorize(credentials)
sh = gc.open('My spreadsheet')
ws = sh.sheet1
sheet_id = ws._properties['sheetId']
# Setting the column sizes
body = {
'requests': [
{
'updateDimensionProperties': {
'range': {
'sheetId': sheet_id,
'dimension': 'COLUMNS',
'startIndex': 0,
'endIndex': 10
},
'properties': {
'pixelSize': 150
},
'fields': 'pixelSize'
}
},
{
'updateDimensionProperties': {
'range': {
'sheetId': sheet_id,
'dimension': 'COLUMNS',
'startIndex': 4,
'endIndex': 6
},
'properties': {
'pixelSize': 250
},
'fields': 'pixelSize'
}
}
]
}
res = sh.batch_update(body)
# Request 1
ws.insert_row(['One', 'Two', 'Three'], 1)
# Request 2
format_cell_range(
ws, 'A1:Z7',
cellFormat(
wrapStrategy='WRAP',
verticalAlignment='MIDDLE',
backgroundColor=color(0.886, 0.945, 0.988),
textFormat=textFormat(
foregroundColor=color(0, 0.129, 0.443),
fontFamily='Roboto',
bold=True
)
)
)
所以,我想做的是以某种方式将请求 1 和请求 2 添加到 bulk_update
方法中。是否可以使用 bulk_update
插入一行并更改格式?如果是,我该怎么做?感谢您的帮助。
- 您想在第一行插入新行。
- 您想将
['One', 'Two', 'Three']
的值放入插入的行。
你想使用gspread的batch_update()
方法将下面的单元格格式设置为"A1:Z7"的范围
wrapStrategy='WRAP',
verticalAlignment='MIDDLE',
backgroundColor=gsf.color(0.886, 0.945, 0.988),
textFormat=gsf.textFormat(
foregroundColor=gsf.color(0, 0.129, 0.443),
fontFamily='Roboto',
bold=True
)
您想通过 python.
使用 gspread 来实现此目的
您的目标是将以下脚本转换为 batch_update()
# Request 1
ws.insert_row(['One', 'Two', 'Three'], 1)
# Request 2
format_cell_range(
ws, 'A1:Z7',
cellFormat(
wrapStrategy='WRAP',
verticalAlignment='MIDDLE',
backgroundColor=color(0.886, 0.945, 0.988),
textFormat=textFormat(
foregroundColor=color(0, 0.129, 0.443),
fontFamily='Roboto',
bold=True
)
)
)
您已经能够使用表格获取和放置电子表格的值 API。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
流量:
本例中batch_update()
的请求体的流程如下
- 将新行插入第 1 行
insertDimension
。
- 将
['One', 'Two', 'Three']
的值放入由 updateCells
插入的行。
- 通过
repeatCell
将单元格格式设置为"A1:Z7"的范围。
修改后的脚本:
spreadsheetId = "###" # Please set the Spreadsheet ID.
sheetName = "###" # Please set the sheet name.
sh = gc.open_by_key(spreadsheetId)
ws = sh.worksheet(sheetName)
sheetId = ws._properties['sheetId']
requests = {
"requests": [
{
"insertDimension": {
"range": {
"sheetId": sheetId,
"startIndex": 0,
"dimension": "ROWS",
"endIndex": 1
}
}
},
{
"updateCells": {
"range": {
"sheetId": sheetId,
"startRowIndex": 0,
"endRowIndex": 1
},
"rows": [
{
"values": [
{
"userEnteredValue": {
"stringValue": "One"
}
},
{
"userEnteredValue": {
"stringValue": "Two"
}
},
{
"userEnteredValue": {
"stringValue": "Three"
}
}
]
}
],
"fields": "userEnteredValue"
}
},
{
"repeatCell": {
"range": {
"sheetId": sheetId,
"startRowIndex": 0,
"endRowIndex": 7,
"startColumnIndex": 0,
"endColumnIndex": 26
},
"cell": {
"userEnteredFormat": {
"wrapStrategy": "WRAP",
"verticalAlignment": "MIDDLE",
"backgroundColor": {
"red": 0.886,
"green": 0.945,
"blue": 0.988
},
"textFormat": {
"foregroundColor": {
"red": 0,
"green": 0.129,
"blue": 0.443
},
"fontFamily": "Roboto",
"bold": True
}
}
},
"fields": "userEnteredFormat"
}
}
]
}
res = sh.batch_update(requests)
注:
- 我理解
bulk_update
是 batch_update
。
参考文献:
如果我误解了您的问题而这不是您想要的结果,我深表歉意。
我正在使用 gspread
和 gspread_formatting
更新我在 Google 中的工作表。我的一些代码库已被改写为使用 batch_update
,因为我在另一个答案中找到了一些代码示例,我可以将其用作参考。但是,我似乎无法转换其他两个操作。这是我的代码:
import gspread
from gspread_formatting import *
from oauth2client.service_account import ServiceAccountCredentials
def operate():
scope = [
'https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive'
]
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'creds.json',
scope
)
gc = gspread.authorize(credentials)
sh = gc.open('My spreadsheet')
ws = sh.sheet1
sheet_id = ws._properties['sheetId']
# Setting the column sizes
body = {
'requests': [
{
'updateDimensionProperties': {
'range': {
'sheetId': sheet_id,
'dimension': 'COLUMNS',
'startIndex': 0,
'endIndex': 10
},
'properties': {
'pixelSize': 150
},
'fields': 'pixelSize'
}
},
{
'updateDimensionProperties': {
'range': {
'sheetId': sheet_id,
'dimension': 'COLUMNS',
'startIndex': 4,
'endIndex': 6
},
'properties': {
'pixelSize': 250
},
'fields': 'pixelSize'
}
}
]
}
res = sh.batch_update(body)
# Request 1
ws.insert_row(['One', 'Two', 'Three'], 1)
# Request 2
format_cell_range(
ws, 'A1:Z7',
cellFormat(
wrapStrategy='WRAP',
verticalAlignment='MIDDLE',
backgroundColor=color(0.886, 0.945, 0.988),
textFormat=textFormat(
foregroundColor=color(0, 0.129, 0.443),
fontFamily='Roboto',
bold=True
)
)
)
所以,我想做的是以某种方式将请求 1 和请求 2 添加到 bulk_update
方法中。是否可以使用 bulk_update
插入一行并更改格式?如果是,我该怎么做?感谢您的帮助。
- 您想在第一行插入新行。
- 您想将
['One', 'Two', 'Three']
的值放入插入的行。 你想使用gspread的
batch_update()
方法将下面的单元格格式设置为"A1:Z7"的范围wrapStrategy='WRAP', verticalAlignment='MIDDLE', backgroundColor=gsf.color(0.886, 0.945, 0.988), textFormat=gsf.textFormat( foregroundColor=gsf.color(0, 0.129, 0.443), fontFamily='Roboto', bold=True )
您想通过 python.
使用 gspread 来实现此目的您的目标是将以下脚本转换为
batch_update()
# Request 1 ws.insert_row(['One', 'Two', 'Three'], 1) # Request 2 format_cell_range( ws, 'A1:Z7', cellFormat( wrapStrategy='WRAP', verticalAlignment='MIDDLE', backgroundColor=color(0.886, 0.945, 0.988), textFormat=textFormat( foregroundColor=color(0, 0.129, 0.443), fontFamily='Roboto', bold=True ) ) )
您已经能够使用表格获取和放置电子表格的值 API。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
流量:
本例中batch_update()
的请求体的流程如下
- 将新行插入第 1 行
insertDimension
。 - 将
['One', 'Two', 'Three']
的值放入由updateCells
插入的行。 - 通过
repeatCell
将单元格格式设置为"A1:Z7"的范围。
修改后的脚本:
spreadsheetId = "###" # Please set the Spreadsheet ID.
sheetName = "###" # Please set the sheet name.
sh = gc.open_by_key(spreadsheetId)
ws = sh.worksheet(sheetName)
sheetId = ws._properties['sheetId']
requests = {
"requests": [
{
"insertDimension": {
"range": {
"sheetId": sheetId,
"startIndex": 0,
"dimension": "ROWS",
"endIndex": 1
}
}
},
{
"updateCells": {
"range": {
"sheetId": sheetId,
"startRowIndex": 0,
"endRowIndex": 1
},
"rows": [
{
"values": [
{
"userEnteredValue": {
"stringValue": "One"
}
},
{
"userEnteredValue": {
"stringValue": "Two"
}
},
{
"userEnteredValue": {
"stringValue": "Three"
}
}
]
}
],
"fields": "userEnteredValue"
}
},
{
"repeatCell": {
"range": {
"sheetId": sheetId,
"startRowIndex": 0,
"endRowIndex": 7,
"startColumnIndex": 0,
"endColumnIndex": 26
},
"cell": {
"userEnteredFormat": {
"wrapStrategy": "WRAP",
"verticalAlignment": "MIDDLE",
"backgroundColor": {
"red": 0.886,
"green": 0.945,
"blue": 0.988
},
"textFormat": {
"foregroundColor": {
"red": 0,
"green": 0.129,
"blue": 0.443
},
"fontFamily": "Roboto",
"bold": True
}
}
},
"fields": "userEnteredFormat"
}
}
]
}
res = sh.batch_update(requests)
注:
- 我理解
bulk_update
是batch_update
。
参考文献:
如果我误解了您的问题而这不是您想要的结果,我深表歉意。