Google 工作表 API 向文本添加单引号
Google Sheets API adding single qoute to text
您好,我是 运行 Google APi 脚本,用于将数据输入 sheet 但对于某些文本(数字、日期、布尔值),它添加了一个 '在例如 05/01/2021 = '05/01/2021
之前
我正在使用批量更新:
def turn_into_range(data, SheetId, row,cols):
rows = [{'values': [{'userEnteredValue': {'stringValue': f}} for f in e]} for e in data]
rng = {'sheetId': SheetId, 'startRowIndex': 0, 'startColumnIndex': 0}
fields = 'userEnteredValue'
body = {'requests': [{'updateCells': {'rows': rows, 'range': rng, 'fields': fields}},{
"updateSheetProperties": {
"properties": {
"gridProperties": {
"rowCount": row + 1,
"columnCount": cols
},
"sheetId": SheetId
},
"fields": "gridProperties"
},
}
]}
clean_dict = simplejson.loads(simplejson.dumps(body, ignore_nan=True))
return clean_dict
def post_sheet(service_sheets, spreadsheet_id, body):
request = service_sheets.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=body)
response = request.execute()
return response
有什么想法吗?
这个问题,是因为你的数据在stringValue
.
中被当成字符串处理了
您需要为不同的数据类型使用其他类型的值,
stringValue
:
- "A String", #代表一个字符串值。
- 不包括前导单引号。例如,如果用户在 UI 中键入
'123
,这将表示为 "123"
的 stringValue
。
boolValue
:
- True or False,#代表一个布尔值。
numberValue
:
- 3.14, #表示double值
- 注意:日期、时间和日期时间以“序列号”格式表示为双精度值。
formulaValue
:
- "A String", #代表一个公式。
errorValue
:
- 单元格错误。表示错误。
- 此字段是只读的。
尝试将此添加到您的代码中。
from dateutil.parser import parse
def checkData(data):
if (isinstance(data, bool)):
return 'boolValue'
try:
if (isinstance(data, (int, float)) or parse(data)):
return 'numberValue'
except ValueError:
return 'stringValue'
行为:
现在,在您的代码中使用它:
rows = [{'values': [{'userEnteredValue': {checkData(f): f}} for f in e]} for e in data]
有关更多详细信息,请参阅文档here
您好,我是 运行 Google APi 脚本,用于将数据输入 sheet 但对于某些文本(数字、日期、布尔值),它添加了一个 '在例如 05/01/2021 = '05/01/2021
之前我正在使用批量更新:
def turn_into_range(data, SheetId, row,cols):
rows = [{'values': [{'userEnteredValue': {'stringValue': f}} for f in e]} for e in data]
rng = {'sheetId': SheetId, 'startRowIndex': 0, 'startColumnIndex': 0}
fields = 'userEnteredValue'
body = {'requests': [{'updateCells': {'rows': rows, 'range': rng, 'fields': fields}},{
"updateSheetProperties": {
"properties": {
"gridProperties": {
"rowCount": row + 1,
"columnCount": cols
},
"sheetId": SheetId
},
"fields": "gridProperties"
},
}
]}
clean_dict = simplejson.loads(simplejson.dumps(body, ignore_nan=True))
return clean_dict
def post_sheet(service_sheets, spreadsheet_id, body):
request = service_sheets.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=body)
response = request.execute()
return response
有什么想法吗?
这个问题,是因为你的数据在stringValue
.
您需要为不同的数据类型使用其他类型的值,
stringValue
:
- "A String", #代表一个字符串值。
- 不包括前导单引号。例如,如果用户在 UI 中键入
'123
,这将表示为"123"
的stringValue
。
boolValue
:
- True or False,#代表一个布尔值。
numberValue
:
- 3.14, #表示double值
- 注意:日期、时间和日期时间以“序列号”格式表示为双精度值。
formulaValue
:
- "A String", #代表一个公式。
errorValue
:
- 单元格错误。表示错误。
- 此字段是只读的。
尝试将此添加到您的代码中。
from dateutil.parser import parse
def checkData(data):
if (isinstance(data, bool)):
return 'boolValue'
try:
if (isinstance(data, (int, float)) or parse(data)):
return 'numberValue'
except ValueError:
return 'stringValue'
行为:
现在,在您的代码中使用它:
rows = [{'values': [{'userEnteredValue': {checkData(f): f}} for f in e]} for e in data]
有关更多详细信息,请参阅文档here