Google Sheets API v4 - как вставить строку после последней строки со значением?
я вставляю данные в электронную таблицу с новым Google Sheets API v4, код работает идеально, и данные хорошо вставляются в лист.
но как узнать последнюю строку с данными, чтобы добавить данные после этого ?
List<List<Object>> arrData = getData();
ValueRange oRange = new ValueRange();
oRange.setRange("Pedidos!AXXXXXXX"); // I NEED THE NUMBER OF THE LAST ROW
oRange.setValues(arrData);
List<ValueRange> oList = new ArrayList<>();
oList.add(oRange);
BatchUpdateValuesRequest oRequest = new BatchUpdateValuesRequest();
oRequest.setValueInputOption("RAW");
oRequest.setData(oList);
BatchUpdateValuesResponse oResp1 = mService.spreadsheets().values().batchUpdate("ID_SPREADSHEET", oRequest).execute();
есть какой-то трюк в нотации A1 для этого ?
Мне нужен эквивалентно .getLastRow С Google Apps Script
4 ответов
API v4 не может спросить "какая последняя строка с данными", поскольку это другой стиль API, чем API скрипта приложений. Вы можете вывести последнюю строку самостоятельно, запросив данные и подсчитав смещение от первой запрошенной строки до последней возвращенной строки.
Если вы используете функцию добавления и установите диапазон на весь лист, API найдет последнюю строку и добавит новые данные после нее.
эта веб-страница объясняет он.
https://developers.google.com/sheets/api/guides/values#appending_values
вот пример кода:
String range="Sheet1";
insertData.setValues(rows);
AppendValuesResponse response=service.spreadsheets().values()
.append(spreadsheetId,range,insertData).setValueInputOption("USER_ENTERED")
.execute();
обратите внимание, что ответ будет сказать вам, где он был вставлен.
Вы можете использовать AppendCellsRequest для добавления строки. Приведенные ниже методы должны заставить вас идти. Я не включил метод getRowDataListForCellStrings, поскольку он довольно специфичен для приложения.
сначала создайте объект запроса, содержащий AppendCellsRequest:
public BatchUpdateSpreadsheetResponse appendWorksheet(String cellValues) throws SpreadsheetException {
AppendCellsRequest appendRequest = new AppendCellsRequest();
appendRequest.setSheetId( mSheet.getProperties().getSheetId() );
appendRequest.setRows( getRowDataListForCellStrings(cellValues) );
appendRequest.setFields("userEnteredValue");
Request req = new Request();
req.setAppendCells( appendRequest );
return executeBatchRequest(req);
}
затем вызовите batchUpdate в интерфейсе электронных таблиц ():
BatchUpdateSpreadsheetResponse executeBatchRequest(Request request) throws SpreadsheetException {
List<Request> requests = new ArrayList<>();
requests.add( request );
BatchUpdateSpreadsheetRequest batchRequest = new BatchUpdateSpreadsheetRequest();
batchRequest.setRequests( requests );
try {
return mService.spreadsheets().batchUpdate(mSpreadsheet.getSpreadsheetId(), batchRequest).execute();
} catch (IOException e) {
throw new SpreadsheetException(e);
}
}
к сожалению, похоже, нет способа узнать, какие строки были обновлены. Не кажется возможным установить valueInputOption при добавлении таким образом.
на самом деле есть способ спросить API. Я использую это на своем узле.клиент js (уверен, что он очень похож)
var sheets = google.sheets('v4');
sheets.spreadsheets.get({
auth: auth,
spreadsheetId: 'spreadsheet_id',
includeGridData: true
}, function (err, response) {
if (err) {
console.log('The API returned an error: ' + err);
} else {
var last_row = response.sheets[0].data[0].rowData.length;
}
});