我使用Twitter的数据挖掘。所以我从twitter获得值create_at以将excel文件发送到google sheet后保存到excel文件中,但是它无法发送。它有错误:
response = service.spreadsheets().values().append(
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\googleapiclient\discovery.py", line 830, in method
headers, params, query, body = model.request(
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\googleapiclient\model.py", line 161, in request
body_value = self.serialize(body_value)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\site-
packages\googleapiclient\model.py", line 274, in serialize
return json.dumps(body_value)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 231,
in dumps
return _default_encoder.encode(obj)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 199, in
encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 257, in
iterencode
return _iterencode(o, 0)
File "C:\Users\What Name\AppData\Local\Programs\Python\Python38-32\lib\json\encoder.py", line 179, in
default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type datetime is not JSON serializable
或者此代码可能有问题吗?
xlApp = win32.Dispatch('Excel.Application')
wb = xlApp.Workbooks.Open(r"F:\work\feen\WU\twitter.xlsx")
ws = wb.WorkSheets('Sheet1')
rngData = ws.Range('A1').CurrentRegion()
gsheet_id = 'sheet_id'
CLIENT_SECRET_FILE = 'credentials2.json'
API_SERVICE_NAME = 'sheets'
API_VERSION = 'v4'
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
service = Create_Service(CLIENT_SECRET_FILE,API_SERVICE_NAME,API_VERSION,SCOPES)
response = service.spreadsheets().values().append(
spreadsheetId=gsheet_id,
valueInputOption='RAW',
range='data1!A1',
body=dict(
majorDimension='ROWS',
values=rngData
)
).execute()
wb.Close(r"F:\work\feen\WU\twitter.xlsx")
为了修复Object of type datetime is not JSON serializable
错误,您需要将对象中datetime
对象的所有实例转换为string
。
但是,您的代码中还有其他错误,这意味着仅此一项将无法使您的程序运行。
datetime
对象转换为string
对象:在python中,您可以使用json.dumps()
将JSON数据本地转换为字符串,并且默认转换为字符串。
您可以通过在service.spreadsheets().values().append()
调用之前添加此行来做到这一点:
//rngData at this point has already been assigned
rngData = json.dumps(rngData, indent = 4, sort_keys = True, default = str)
注意:这本身不会修复您的代码!
在调用Google Sheets API时,以服务器期望接收请求的方式发出请求非常重要。也就是说,遵循文档以进行请求很重要。] >>
我在Linux机器上,因此我无法测试win32.Dispatch().Workbooks.Open().Worksheets().Range().CurrentRegion()
的输出格式,但是如果要使用Worksheet.Range
property of Excel上的Microsoft文档,则可以放心地认为它的输出不在Worksheet.Range
所需的格式:
array(ListValue格式):
已读取或要写入的数据。这是一个数组数组,外部数组代表所有数据,每个内部数组代表一个主要维度。内部数组中的每个项目都对应一个单元格。
对于输出,将不包括空的尾随行和列。
对于输入,支持的值类型为:布尔,字符串和双精度。空值将被跳过。要将单元格设置为空值,请将字符串值设置为空字符串。
我不确定100%是否输出相同,但是为了尝试模拟您尝试的内容,我使用python包
spreadsheets.values.append
method从提供的Excel文件中获取值,如下所示:
spreadsheets.values.append
而且,如您在注释中提供的屏幕截图(如下所示):
xlrd
我也有同样的回答。向上滚动,错误是由于错误的请求引起的:
workbook = xlrd.open_workbook("twitter.xlsx") sheet = workbook.sheet_by_index(0) data = [sheet.row_values(rowx) for rowx in range(sheet.nrows)]
特别是。您需要遵守
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://sheets.googleapis.com/v4/spreadsheets/XXXXX/values/Sheet1%21A1:append?alt=json&valueInputOption=RAW returned "Invalid value at 'data.values' (type.googleapis.com/google.protobuf.ListValue)..."
。
希望对您有帮助!
Invalid value at 'data.values'
spreadsheets.values.append
| Sheets API - Response bodyspreadsheets.values.append