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 from Google Apps Script

794   4  

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 на интерфейсе spreadsheets ():

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;

    }
  });

Comments

    Ничего не найдено.