Ответ:
Чтобы исправить ошибку Object of type datetime is not JSON serializable
, необходимо преобразовать все экземпляры datetime
объектов в вашем объекте в string
.
Есть и другие ошибки в вашем коде, однако, это означает, что это само по себе не будет запускать вашу программу.
Преобразование объектов datetime
в string
объекты:
В python вы можете напрямую преобразовать данные JSON в строку, используя json.dumps()
со стандартным преобразованием строки.
Это можно сделать, добавив эту строку перед service.spreadsheets().values().append()
вызов:
//rngData at this point has already been assigned
rngData = json.dumps(rngData, indent = 4, sort_keys = True, default = str)
Примечание: это само по себе не исправит ваш код!
Другие вопросы:
При совершении вызовов для API Google Sheets очень важно, чтобы вы выполняли запросы так, как их ожидают серверы. То есть важно следовать документации для выполнения запросов.
Я на linux машине, и поэтому я не могу проверить формат вывода win32.Dispatch().Workbooks.Open().Worksheets().Range().CurrentRegion()
, но если документация Microsoft по свойству Worksheet.Range
в Excel соответствует значению go, я могу смело предположить, что его вывод не соответствует формату, требуемому для spreadsheets.values.append
метод :
массив (формат ListValue):
Данные, которые были прочитаны или должны быть записаны. Это массив массивов, внешний массив представляет все данные, а каждый внутренний массив представляет главное измерение. Каждый элемент во внутреннем массиве соответствует одной ячейке.
Для вывода пустые конечные строки и столбцы не будут включены.
Для ввода поддерживаются следующие типы значений: bool, string и double , Нулевые значения будут пропущены. Чтобы установить пустое значение для ячейки, установите для строкового значения пустую строку.
Я не уверен на 100%, совпадают ли выходные данные, но попытаться эмулировать то, что вы пытаясь использовать пакет python xlrd
, чтобы получить значения из файла Excel, который вы предоставили, следующим образом:
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'
. Для этого метода вам нужно будет придерживаться спецификации запросов Google Sheets API .
Надеюсь, это вам пригодится!
Ссылки: