Удаление пустых ячеек из Google SpreadSheet программно, чтобы избежать ошибки в 5000000 ячеек - PullRequest
0 голосов
/ 04 мая 2020

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

Первоначально задание работало очень хорошо, но внезапно оно начинало давать сбой со следующей ошибкой:

 ERR com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
 ERR   "code" : 400,
 ERR   "errors" : [ {
 ERR     "domain" : "global",
 ERR     "reason" : "badRequest"
 ERR {
 ERR   } ],
 ERR   "message" : "This action would increase the number of cells in the workbook above the limit of 5000000 cells.",
 ERR    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
 ERR    at 

Удивительно, но я вставляю список из 1800 записей, каждая из которых имеет 20 столбцов. Таким образом, общее количество ячеек в моем случае 36000, но оно далеко от предела 50,00000 ячеек, упомянутых в ошибке.

Я пока не смог найти никакого конкретного решения, но я удалил несколько пустых столбцов из таблицы и пакетная работа начала работать правильно. Таким образом, возможно, что эти пустые строки и столбцы ответственны за переполнение лимита.

Я уже выполняю очистку всей электронной таблицы перед вставкой данных. Но я думаю, мне нужно удалить пустые ячейки, а не очистить их.

Пожалуйста, найдите следующий фрагмент кода, чтобы проверить мою текущую реализацию. Обратите внимание, что здесь я использовал значение диапазона " A2: Z ", поскольку первая строка является заголовком, и я не хочу, чтобы он был удален.

def  clearAndInsertRowsToSpreadSheet(itemsToAppend : util.List[util.List[AnyRef]],
                              range : String,
                              spreadSheetId : String){

    clearSpreadSheet(range,spreadSheetId)

    insertRowsToSpreadSheet(itemsToAppend,range,spreadSheetId)

  }

  private def insertRowsToSpreadSheet(itemsToAppend : util.List[util.List[AnyRef]], range : String,
                                      spreadSheetId : String) ={

    val data : ValueRange = new ValueRange()
    data.setValues(itemsToAppend)

    val appendRequest = googleSpreadSheetService.getSheets().spreadsheets()
      .values().append(spreadSheetId, range,data)

    appendRequest.setValueInputOption("USER_ENTERED")
    appendRequest.setInsertDataOption("INSERT_ROWS")

    val appendValuesResponse = appendRequest.execute()

    appendValuesResponse.getUpdates

  }
  private def clearSpreadSheet(range : String, spreadSheetId : String) : String = {

    val clearDataRequest = googleSpreadSheetService.
        getSheets().spreadsheets().
        values().clear(spreadSheetId,range, new ClearValuesRequest())

    val clearResponse = clearDataRequest.execute()

    clearResponse.getClearedRange
  }

Но как я могу написать код для удаления всех строк и столбцов, которые являются пустыми, перед тем, как выгружать мои данные. Я пытался с BatchClearValuesByDataFilterRequest, но это не сработало. Я ищу какой-то механизм, в котором я могу предоставить условие для проверки строк и столбцов с пустыми ячейками.

Любое предложение приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...