Google Spreadsheet API: очистите все ячейки на листе

Мы используем Google Sheet API v4. Мы хотим очистить весь лист пустыми данными. Мы не хотим удалять строки / столбцы.

  1. Не работает UpdateCells Call (удаление столбцов с помощью API):

person Gaurav Ashara    schedule 20.06.2016    source источник
comment
Проверьте мой обновленный ответ. Ошибка возникла из-за неправильных данных "sheetId". sheetId - значение параметра gid. В случае с моей таблицей это 0. Кроме того, помогла «звездочка». надеюсь, это поможет   -  person noogui    schedule 22.06.2016
comment
@Gaurav Ashara Добро пожаловать в Stack Overflow! Если вы нашли ответ noogui полезным, примите его. Это не только делает noogui заслугой, но и помогает будущим читателям, которым может понадобиться что-то подобное.   -  person jpaugh    schedule 21.11.2016


Ответы (4)


Вот Краткое руководство по Java для Spreadsheet API.

Затем вы будете использовать spreadsheets.batchUpdate, чтобы очистить листы. Оставьте fields пустым и поместите звездочкой, чтобы указать API Таблиц, что все ячейки должны быть пустыми / очищенными. Следующий запрос тела выглядит так:

{
  "requests": [
    {
      "updateCells": {
        "range": {
          "sheetId": 0
        },
        "fields": "*"
      }
    }
  ]
}

Попробуйте это быстро на игровой площадке oauth.

ОБНОВЛЕНИЕ: сейчас это работает. Это очистило мою таблицу.

person noogui    schedule 21.06.2016
comment
На самом деле мы не использовали скрипт приложения. Мы использовали Google Sheet API v4 для java. - person Gaurav Ashara; 21.06.2016
comment
мы получили следующий код ошибки: 400, ошибки: [{domain: global, message: Invalid requests [0] .updateCells: По крайней мере, одно поле должно быть указано в 'fields'. (Используйте '' для обозначения всех полей.), Cause: badRequest}], message: Недействительные запросы [0] .updateCells: В 'fields' должно быть указано хотя бы одно поле. (Используйте '' для обозначения всех полей.), Status: INVALID_ARGUMENT} - person Gaurav Ashara; 21.06.2016
comment
У меня есть ожидающее обновление ответа, чтобы исправить параметр поля. Предлагаю вам взглянуть на Очистить лист от всех значений с сохранением форматов пример в документации API Таблиц v4. Он отвечает именно на ваш вопрос (и этот ответ в основном является копией / вставкой этого). - person Sam Berlin; 21.06.2016
comment
похоже, что мои правки к ответу не были приняты - ответ неверен, потому что в нем говорится, что поля param должны быть пустыми (что, как вы отметили, не разрешено API). правильное решение - написать userEnteredValue в качестве параметра поля, который сообщает API обновлять только это поле. если вы действительно хотите очистить каждое поле (что в зависимости от вашего вопроса, вы не хотите), тогда вы должны использовать *, как сообщает вам сообщение об ошибке. - person Sam Berlin; 21.06.2016
comment
@GauravAshara Я обновил свой ответ. Теперь он должен работать; ) - person noogui; 22.06.2016
comment
Хорошо. Мы попробовали вышеуказанное решение с Java API, но получили следующий код ошибки: 503, ошибки: [{domain: global, message: служба в настоящее время недоступна., Причина: backendError}], message: служба в настоящее время недоступна., Status : НЕДОСТУПЕН } - person Gaurav Ashara; 22.06.2016
comment
@GauravAshara Это, похоже, выходит за рамки этой темы, поскольку относится к вашей «внутренней ошибке». Попробуйте начать другой поток. Не забудьте принять ответ, если он помог. Спасибо :) Что касается «ошибки бэкэнда 503», похоже, другие пользователи тоже сталкиваются с ней. Проверьте этот поток SO. - person noogui; 23.06.2016
comment
@noogui, я вижу, вы изменили свой ответ, включив звездочку в поля. Раньше у вас этого не было, и это приводило к сообщению об ошибке, указанному OP в его последующем комментарии. Я дал рабочий ответ в предложенных мною правках на ваш ответ, но, похоже, правки не были приняты. (Я не чувствовал необходимости давать полностью отдельный ответ, поскольку ваш ответ был достаточно хорош с настройками.) Я уверен в своих ответах, потому что я спроектировал, реализовал и запустил этот API. - person Sam Berlin; 23.06.2016
comment
@noogui, Спасибо за помощь, на самом деле весь наш java-код Google Sheet API V4 работает отлично, но при добавлении вышеуказанного кода мы получили: Сервис в настоящее время недоступен. ошибка. Если возможно, проверьте также на своей стороне. - person Gaurav Ashara; 23.06.2016
comment
@GauravAshara Убедитесь, что срок действия вашего токена доступа не истек. - person noogui; 23.06.2016
comment
@noogui, Мы используем только что созданный токен доступа перед отправкой запроса. - person Gaurav Ashara; 23.06.2016
comment
@GauravAshara, я сделал еще один тестовый запуск на игровой площадке oauth, и все в порядке. Моя таблица очищается. Можете ли вы попробовать это на игровой площадке oauth? - person noogui; 23.06.2016
comment
@noogui: мы проверили с помощью Google Sheet API Explorer, но у нас та же ошибка. Вы можете увидеть снимок экрана i.stack.imgur.com/NL5pV.png. - person Gaurav Ashara; 23.06.2016
comment
@GauravAshara, это исключение указывает на то, что у сервера возникли проблемы с обработкой запроса. Для этого есть две вероятные причины: 1: количество ячеек на листе слишком велико, или 2: количество очищаемых данных слишком велико. Вы можете обходное решение (1), указав явный диапазон (если он работает, если вы просто укажете начальный / конечный индекс строки / столбца, то это, вероятно, из-за слишком большого количества ячеек). Вы можете обходной путь (2), сказав очистить только значения, а не все остальное, указав userEnteredValue в полях вместо *. - person Sam Berlin; 23.06.2016
comment
@SamBerlin: Спасибо за предложение, которое мы выполнили. Мы немного проанализировали проблему и обнаружили, что, когда столбцы листа не удаляются с помощью Google Sheet API V4, ячейки обновления работают отлично, в противном случае возникает ошибка 503. По этой проблеме я делюсь ссылкой на электронную таблицу (общедоступную), не работаю вызовом ячеек обновления и работающим вызовом ячеек обновления (поиск ссылок в URL-адресе). 1) Электронная таблица: docsheets/commands.google.com/docsheets/ Пожалуйста, расскажите, как решить эту проблему. - person Gaurav Ashara; 28.06.2016
comment
@GauravAshara, спасибо, что сообщили об этом. Я могу воспроизвести проблему и выясняю, что не так. - person Sam Berlin; 28.06.2016
comment
В данной общедоступной электронной таблице - Образце таблицы, очистка всего листа работает для Sheet3, где столбцы идут от A до Z, я смог удалить все фиктивные данные. Я получаю недоступность обслуживания для Sheet1, где столбцы идут от A до E. Попробуйте переместить данные Sheet1 на лист, содержащий столбцы от A до Z, полные столбцы - person noogui; 29.06.2016
comment
@noogui: На самом деле я хочу использовать больше числовых ячеек на листе (20 мил ячеек). Итак, я удалил пустые столбцы. - person Gaurav Ashara; 29.06.2016
comment
@SamBerlin: Поделитесь обновлением и дайте мне знать, если вам потребуется какая-либо другая информация - person Gaurav Ashara; 29.06.2016
comment
Мы обнаружили проблему с использованием UpdateCellsRequest при выполнении только очистки, если очистка влияет на менее 10 тыс. Ячеек. Вы можете потенциально обойти проблему, используя RepeatCellRequest, и я опубликую здесь, когда мы развернем исправление. - person Sam Berlin; 29.06.2016
comment
@GauravAshara .... как выполнить эту операцию через почтальона ... можно выложить образец со скриншотами ... это поможет всем ... - person Priya; 19.05.2017
comment
@noogui .... пожалуйста, поделитесь своим ответом со скриншотами, чтобы выполнить ту же операцию через почтальона - person Priya; 19.05.2017

Я не знаю, поможет ли это кому-то еще, но вот как у меня это сработало: это должно очистить весь ваш лист. Я не помню, почему «sheetId» равен 0, но, возможно, это указатель на листы внутри самого листа. (например, как у вас есть вкладки?) Я, честно говоря, не помню. Функция ожидает, что вы передадите свой объект $ service и идентификатор электронной таблицы.

function clearSheet($service, $spreadsheetID = 0){

$request = new \Google_Service_Sheets_UpdateCellsRequest([
    'updateCells' => [ 
        'range' => [
            'sheetId' => 0 
        ],
        'fields' => "*" //clears everything
    ]
  ]);
$requests[] = $request;

$requestBody = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest();
$requestBody->setRequests($requests);
$response = $service->spreadsheets->batchUpdate($spreadsheetID, $requestBody);
return $response;
}
person Logan Haser    schedule 05.10.2018
comment
Ах да, это было до того, как я понял, как делать запросы на очистку всего листа. Спасибо, что указали на это! Я отредактирую его с помощью кода, используемого для очистки всего листа. - person Logan Haser; 20.11.2018
comment
Согласно stackoverflow.com/a/62568335/7020955, первый лист во вновь созданной электронной таблице имеет идентификатор 0, но дополнительные. иметь случайное значение. Обратите внимание, что при копировании листа сохраняются все идентификаторы листов. - person bstovall; 10.04.2021

Мне удалось это сделать, используя документированный метод clear вот смотрим на rev607.

ClearValuesRequest clearValuesRequest = new ClearValuesRequest();
// assumes you have a sheetservice initialized 
sheetsService.spreadsheets().values().clear(spreadsheetId, "Sheet1", clearValuesRequest);

Ключевой вывод, который не был хорошо документирован, заключается в том, что вы можете передать только имя листа для диапазона, и это очистит ВСЕ ячейки на листе.

person sshevlyagin    schedule 13.02.2020

Пример Java:

        UpdateCellsRequest clearAllDataRequest = new UpdateCellsRequest();
        int allSheetsId = 0;
        String clearAllFieldsSpell = "*";
        GridRange gridRange = new GridRange();
        gridRange.setSheetId(allSheetsId);
        clearAllDataRequest.setRange(gridRange);
        clearAllDataRequest.setFields(clearAllFieldsSpell);
        BatchUpdateSpreadsheetRequest request = new BatchUpdateSpreadsheetRequest();
        Request clearAllDataRequest = new Request().setUpdateCells(clearAllDataRequest);
        request.setRequests(List.of(clearAllDataRequest));
        return request;
person ZZ 5    schedule 30.08.2019