Yêu cầu thg 5 13, 2021 6:26 SA 145 0 1
  • 145 0 1
+2

lỗi datetime trong python

Chia sẻ
  • 145 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

thg 5 13, 2021 10:09 SA

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

thg 5 13, 2021 11:04 SA

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

1 CÂU TRẢ LỜI


Đã trả lời thg 5 13, 2021 10:18 SA
Đã được chấp nhận
+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
...
Chia sẻ
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 à

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

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ơ

thg 5 13, 2021 1:58 CH

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

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

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'

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

thg 5 14, 2021 6:45 SA
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

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

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é

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí