Asked May 13th, 6:26 AM 101 0 1
  • 101 0 1
+2

lỗi datetime trong python

Share
  • 101 0 1

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

Phan Lý Huỳnh @phanlyhuynh
May 13th, 7:42 AM

Trong file của bạn có cell nào kiểu là datetime không

0
| Reply
Share
May 13th, 10:09 AM

@phanlyhuynh có cột ngày tháng ạ

0
| Reply
Share
May 13th, 11:04 AM

@MAINT vang vi co cot ngay thanng ne no bao loi the

0
| Reply
Share

1 ANSWERS


Answered May 13th, 10:18 AM
Accepted
+1

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
...
Share
May 13th, 11:09 AM

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 à

0
| Reply
Share
Phan Lý Huỳnh @phanlyhuynh
May 13th, 11:10 AM

@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

0
| Reply
Share
May 13th, 11:32 AM

@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ơ

0
| Reply
Share
May 13th, 1:58 PM

@phanlyhuynh bạn ơi mong bạn chỉ giúp mình với ạ

0
| Reply
Share
Phan Lý Huỳnh @phanlyhuynh
May 13th, 2:40 PM

@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

0
| Reply
Share
May 14th, 2:52 AM

@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'

0
| Reply
Share
Phan Lý Huỳnh @phanlyhuynh
May 14th, 3:37 AM

@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

0
| Reply
Share
May 14th, 6:45 AM
0
| Reply
Share
May 14th, 6:46 AM
May 15th, 12:38 AM

@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

0
| Reply
Share
Phan Lý Huỳnh @phanlyhuynh
May 15th, 3:44 PM

@MAINT bạn comment data của bạn vào đây đi :v

0
| Reply
Share
May 17th, 3:22 AM

@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é

0
| Reply
Share
Phan Lý Huỳnh @phanlyhuynh
May 21st, 9:41 AM

@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

0
| Reply
Share