如何在具有值的最后一行之后插入行?
How to insert row after the last row with value?
我正在使用新的 Google Sheets API v4 将数据插入到传播sheet 中,代码工作完美并且数据插入到 sheet.
但是如何找出最后一行有数据来添加数据呢?
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 表示法中有什么技巧吗?
我需要来自 Google Apps 脚本的 .getLastRow
的等价物。
您可以使用 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);
}
然后在spreadsheets()接口上调用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。
v4 API 无法请求 "what is the last row with data",因为它是 API 与 Apps 脚本 API 不同的风格。您可以通过请求数据并计算从第一个请求行到最后一个返回行的偏移量来自己推断最后一行。
其实有办法问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;
}
});
如果您使用追加功能并将范围设置为整个 sheet,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();
请注意,响应会告诉您它的插入位置。
我正在使用新的 Google Sheets API v4 将数据插入到传播sheet 中,代码工作完美并且数据插入到 sheet.
但是如何找出最后一行有数据来添加数据呢?
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 表示法中有什么技巧吗?
我需要来自 Google Apps 脚本的 .getLastRow
的等价物。
您可以使用 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);
}
然后在spreadsheets()接口上调用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。
v4 API 无法请求 "what is the last row with data",因为它是 API 与 Apps 脚本 API 不同的风格。您可以通过请求数据并计算从第一个请求行到最后一个返回行的偏移量来自己推断最后一行。
其实有办法问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;
}
});
如果您使用追加功能并将范围设置为整个 sheet,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();
请注意,响应会告诉您它的插入位置。