Я написал небольшое пакетное задание на языке 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
, но это не сработало. Я ищу какой-то механизм, в котором я могу предоставить условие для проверки строк и столбцов с пустыми ячейками.
Любое предложение приветствуется!