Asked thg 5 13, 2021 6:26 SA 123 0 1
  • 123 0 1
+2

lỗi datetime trong python

Share
  • 123 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

Avatar Phan Lý Huỳnh @phanlyhuynh
thg 5 13, 2021 7:42 SA

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

0
| Reply
Share
thg 5 13, 2021 10:09 SA

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

0
| Reply
Share
thg 5 13, 2021 11:04 SA

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

0
| Reply
Share

1 ANSWERS


Answered thg 5 13, 2021 10:18 SA
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
thg 5 13, 2021 11:09 SA

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
Avatar Phan Lý Huỳnh @phanlyhuynh
thg 5 13, 2021 11:10 SA

@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
thg 5 13, 2021 11:32 SA

@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
thg 5 13, 2021 1:58 CH

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

0
| Reply
Share
Avatar Phan Lý Huỳnh @phanlyhuynh
thg 5 13, 2021 2:40 CH

@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
thg 5 14, 2021 2:52 SA

@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
Avatar Phan Lý Huỳnh @phanlyhuynh
thg 5 14, 2021 3:37 SA

@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
thg 5 14, 2021 6:45 SA
0
| Reply
Share
thg 5 14, 2021 6:46 SA
thg 5 15, 2021 12:38 SA

@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
Avatar Phan Lý Huỳnh @phanlyhuynh
thg 5 15, 2021 3:44 CH

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

0
| Reply
Share
thg 5 17, 2021 3:22 SA

@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
Avatar Phan Lý Huỳnh @phanlyhuynh
thg 5 21, 2021 9:41 SA

@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
Viblo
Let's register a Viblo Account to get more interesting posts.