Google Sheets API v4 - Как вставить строку после последней строки со значением?

Я вставляю данные в электронную таблицу с помощью нового API Google Sheets 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

 seba123neo04 июн. 2016 г., 19:07
спасибо, но мне нужен простой эквивалент .getLastRow из Google Apps Script, это недостающая функция?
 user371702303 июн. 2016 г., 16:52
Этот ответ к вашему предыдущему вопросу, все еще применяемому: запросите значения из листа, посмотрите, сколько строк вы фактически получаете (пустые конечные строки опущены) Кажется бесполезным запрашивать содержимое, когда вам нужен только диапазон данных, но я не видел другого пути с API v4.

Ответы на вопрос(4)

node.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;

    }
  });
 jleviaguirre13 апр. 2019 г., 04:19
Он получает все ряды, а затем делает подсчет. Если лист слишком длинный, он может быть не таким эффективным, как использование метода добавления
 ishmaelMakitla18 июл. 2016 г., 14:53
Вы действительно должны добавить некоторые объяснения относительно того, почему этот код должен работать - вы также можете добавлять комментарии в сам код - в его текущей форме, он не дает никаких объяснений, которые могут помочь остальному сообществу понять, что вы сделали, чтобы решить /Ответ на вопрос.
Решение Вопроса

API v4 не имеет возможности спросить «что является последней строкой с данными», поскольку это другой стиль API, чем API скриптов приложений. Вы можете вывести последнюю строку самостоятельно, запросив данные и посчитав смещение от первой запрошенной строки до последней возвращенной строки.

 seba123neo07 июн. 2016 г., 21:40
Да, спасибо....

ющие методы должны помочь вам. Я не включил метод getRowDataListForCellStrings, так как он зависит от конкретного приложения.

Сначала создайте объект Request, содержащий 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 при добавлении таким способом.

 seba123neo04 июн. 2016 г., 19:07
спасибо, но мне нужен простой эквивалент .getLastRow из Google Apps Script, это недостающая функция?

ста, 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();

Обратите внимание, что ответ скажет вам, где он был вставлен.

 dvc19 февр. 2019 г., 07:26
Хотя не желательно, я думаю, что работает как задумано. Если вы прочитаете пример, показанный в ссылке из моего ответа, вы увидите, что API ищет дискретные таблицы в данных и добавляет к последней таблице. Таблицы разделены пустыми ячейками, поэтому в вашем случае последняя таблица c1, поэтому данные добавляются в c2.
 Healyhatman18 февр. 2019 г., 06:26
Я знаю, что это два года спустя, но когда у меня есть пустой столбец, данные добавляются, начиная с последнего столбца с данными. Поэтому, если у меня есть A1 => "hello" C1 => "world", и я добавляю весь лист в качестве диапазона, он добавляется к C2 и далее.

Ваш ответ на вопрос