Округляет ли Google spreadsheet API числа при обновлении значений ячеек?

#python #google-sheets-api

#python #google-sheets-api

Вопрос:

Итак, я пытаюсь обновить значения в электронной таблице Google Sheets, и по какой-то причине, когда я использую этот spreadsheets.values.update метод, значение, которое я пытаюсь заполнить, округляется.

пример

 sheet = service.spreadsheets()
value = [[myfunction(), 10, 123]]
body = {'values': value}
result = sheet.values().update(spreadsheetId=SPREADSHEET_ID,
                               range=RANGE_NAME,
                               valueInputOption='RAW',
                               body=body).execute()
  

Где myfunction() возвращает целое число. В качестве примера будет использоваться целое 1212650293435022848 число .

Лист обновляется, но заполненные значения

 [1212650293435023000, 10, 123]
  

вместо

 [1212650293435022848, 10, 123]
  

Это проблема с моим кодом или это что-то из самого API?

Комментарии:

1. Я считаю, что электронные таблицы Google используют удвоения внутри. Он не поддерживает большие целые числа. Я почти уверен, что это не ваша вина, и вы мало что можете сделать.

2. Спасибо за информацию, Фрэнк! Я, вероятно, подожду других ответов, чтобы быть уверенным, но я буду работать с учетом этого предположения.

Ответ №1:

Соображения

Большие целые числа в настоящее время не поддерживаются в электронных таблицах Google. Это ограничение в его числовых форматах.

Возможный обходной путь

Вы можете использовать пользовательские функции Apps Script для работы с большими целыми числами в строковом формате:

Благодаря тому, что Apps Script работает с JavaScript, вы можете разбирать строки на большие целые числа с помощью конструктора BigInt() .

Ссылка

Приложения скриптируют пользовательские функции

BigInt()

Ответ №2:

BigInt также изменяет число, например, с 6836735342561722374 на 6836735342561722368.

Ответ №3:

В конце я сделал так, чтобы целое число преобразовывалось в строку перед отправкой в электронную таблицу. Таким образом, потерь не было, и мне не пришлось использовать BigInt() .