lỗi datetime trong python
Xin cả nhà hỗ trợ nhà.e có viết câu lệnh update dữ liệu excel lên google sheet. Khi đến phần câu lệnh update dữ liệu lên thì bị báo lỗi "TypeError: Object of type datetime is not JSON serializable". Cả nhà ai biết giúp e với ạ e cám ơn nhiều ạ!
xlApp = win32.Dispatch('Excel.Application')
wb = xlApp.Workbooks.Open(r"C:\Users\maith\OneDrive\New folder\a.xlsx")
ws = wb.Worksheets('Table1')
scope=["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("apividu-2a1e154b9925.json", scope)
client = gspread.authorize(creds)
gsheet_id = '18WSm39V546eWXY4F96............................'
service = discovery.build('sheets', 'v4', credentials=creds)
batch_clear_values_request_body = {
rngData = ws.Range('A1').CurrentRegion()
batch_update_values_request_body = {
"data": [
{
"values": rngData,
"range":"sheet49!A1",
}
"valueInputOption":'RAW'
}
service = discovery.build('sheets', 'v4', credentials=creds)
request= service.spreadsheets().values().batchUpdate(spreadsheetId=gsheet_id, body=batch_update_values_request_body)
TypeError: Object of type datetime is not JSON serializable
1 CÂU TRẢ LỜI
Bạn thử tìm giá trị trong rngData là datetime và thì chuyển nó thành chuỗi bằng phương thức strftime:
...
if isinstance(value, datetime.datetime):
value = value.strftime("%m/%d/%Y, %H:%M:%S")
cell.value = value
...
C1 if isinstance(rngData2 , datetime.datetime):
rngData2 = rngData2 .strftime("%m/%d/%Y, %H:%M:%S")
rngData2 .value = rngData2
C2 def convert_datetime(dt):
return datetime.strftime(rngData2, '%Y-%m-%d %H:%M-%S')
rngData2['DocDate']= rngData2['DocDate'].apply(convert_datetime)
Mình có làm cả 2 cách nhưng đều ko được bạn à
@MAINT bạn for cái rngData ấy. rồi giá trị trong vòng for thì bạn mới check như ở trên ấy
@phanlyhuynh b chỉ rõ giúp mình được ko ạ vì mình cũng mới làm về python này nên hơi ngu ngơ
@phanlyhuynh bạn ơi mong bạn chỉ giúp mình với ạ
@MAINT à. khi bạn lấy data ra rngData thì nó là array đúng k bạn. thì bạn for cái array này. rồi bạn if else ở trong cái array ấy như phía trên ấy
@phanlyhuynh mình viết thế này đúng chưa ạ sao vẫn báo lỗi bạn nhỉ
for value in rngData2:
if isinstance(value, datetime.datetime):
value = value.strftime("%m/%d/%Y, %H:%M:%S")
cell.value = value
TypeError: AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
@MAINT phải tùy thuộc vào data của bạn nữa chứ. đấy mình chỉ đưa ra ví dụ thôi. data rngData của bạn ntn thì phải tùy biến theo nữa
@phanlyhuynh mình gửi bạn du liệu bạn fix giúp mình với được ko mình lần mò mà mãi ko ra được
@MAINT bạn comment data của bạn vào đây đi :v
@phanlyhuynh https://docs.google.com/spreadsheets/d/1pqeO5R8VmaZK-eK8x-dmkecMOX4xQH0ggB_rH3DiJB8/edit#gid=155381054
vi dữ liệu mình nhiều cột bạn xem giúp minh qua google sheet với nhé
@MAINT data sau khi bạn đọc từ file này ra luôn ấy. để mình xử lý cho nhanh k mất bước đọc file nữa ấy bạn
Trong file của bạn có cell nào kiểu là datetime không
@phanlyhuynh có cột ngày tháng ạ
@MAINT vang vi co cot ngay thanng ne no bao loi the