9

我正在使用新的 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

4 回答 4

5

如果您使用追加功能并将范围设置为整个工作表,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();

请注意,响应会告诉您它被插入的位置。

于 2017-02-09T21:29:54.227 回答
2

您可以使用 AppendCellsRequest 追加一行。以下方法应该可以帮助您。我没有包含 getRowDataListForCellStrings 方法,因为它是特定于应用程序的。

首先创建一个包含 AppendCellsRequest 的 Request 对象:

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 。

于 2016-06-03T16:20:53.603 回答
2

v4 API 无法询问“数据的最后一行是什么”,因为它是与 Apps Script API 不同的 API 风格。您可以通过请求数据并计算从您的第一个请求行到最后一个返回行的偏移量来自己推断最后一行。

于 2016-06-07T19:23:28.917 回答
1

实际上有一种方法可以询问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;

    }
  });
于 2016-07-18T12:47:10.763 回答