7

Я вставляю данные в электронную таблицу с новым API-интерфейсом Google Таблиц v4, код отлично работает и данные, которые он вставил хорошо на листе.Google Таблицы 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 Script

+0

[Этот ответ] (http://stackoverflow.com/a/37367707) к вашему предыдущему вопросу, который все еще применяется: запросите значения из листа, посмотрите, сколько строк вы на самом деле получаете (пустые завершающие строки опущены). Кажется расточительным запрашивать содержимое, когда вам нужен только диапазон данных, но я не видел другого способа с API v4. –

+0

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

ответ

1

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

+0

Да, спасибо .... – seba123neo

1

Вы можете использовать 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 при добавлении таким образом.

+0

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

0

Существует, фактически, способ спросить API. Я использую это на моем 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; 

    } 
    }); 
+0

Вы действительно должны добавить объяснение, почему этот код должен работать - вы также можете добавлять комментарии в самом коде - в его текущей форме он не дает никаких объяснений, которые могут помочь остальным сообщество, чтобы понять, что вы сделали, чтобы решить/ответить на вопрос. – ishmaelMakitla

2

Если вы используете функцию на добавление и установите диапазон на весь лист, то 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(); 

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