7

Tôi đang chèn dữ liệu vào bảng tính với API Google Trang tính mới v4, mã hoạt động hoàn hảo và dữ liệu được chèn vào bảng tính.API Google Trang tính v4 - Cách chèn hàng sau hàng cuối cùng có giá trị?

nhưng cách tìm hàng cuối cùng có dữ liệu để thêm dữ liệu sau này?

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(); 

có một số thủ thuật trong Ký hiệu A1 cho điều này?

tôi cần một tương đương với .getLastRow từ Google Apps Script

+0

[Câu trả lời] (http://stackoverflow.com/a/37367707) với câu hỏi trước đó của bạn vẫn được áp dụng: yêu cầu các giá trị từ trang tính, xem số hàng bạn thực sự nhận được (các hàng trống rỗng bị bỏ qua). Có vẻ như lãng phí khi yêu cầu nội dung khi bạn chỉ cần phạm vi dữ liệu, nhưng tôi không thấy một cách khác với API v4. –

+0

cảm ơn nhưng tôi cần một đơn giản tương đương với .getLastRow từ Google Apps Script, là một tính năng thiếu này? – seba123neo

Trả lời

1

API v4 không có cách nào để hỏi "hàng cuối cùng có dữ liệu" là gì vì nó là một kiểu API khác với API Apps Script. Bạn có thể suy ra hàng cuối cùng bằng cách yêu cầu dữ liệu và đếm giá trị bù đắp từ hàng được yêu cầu đầu tiên của bạn đến hàng trả về cuối cùng.

+0

vâng, cảm ơn .... – seba123neo

1

Bạn có thể sử dụng AppendCellsRequest để thêm một hàng. Các phương pháp dưới đây sẽ giúp bạn đi. Tôi đã không bao gồm phương thức getRowDataListForCellStrings vì nó là ứng dụng khá cụ thể.

Đầu tiên tạo ra một đối tượng Request chứa một 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); 
} 

Sau đó gọi batchUpdate trên bảng tính() giao diện:

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); 
    } 
} 

Đáng tiếc là có vẻ không phải là một cách để biết được hàng đã được cập nhật. Không có vẻ là có thể thiết lập valueInputOption khi phụ thêm theo cách này.

+0

cảm ơn nhưng tôi cần một đơn giản tương đương với .getLastRow từ Google Apps Script, là một tính năng thiếu này? – seba123neo

0

Có thực sự là một cách để yêu cầu API. Tôi đang sử dụng này trên máy khách Node.js tôi (khá chắc chắn nó rất giống)

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

Bạn thực sự nên thêm một số giải thích về lý do mã này hoạt động - bạn cũng có thể thêm nhận xét vào chính mã đó - ở dạng hiện tại, nó không cung cấp bất kỳ lời giải thích nào có thể giúp phần còn lại của cộng đồng để hiểu những gì bạn đã làm để giải quyết/trả lời câu hỏi. – ishmaelMakitla

2

Nếu bạn sử dụng tính năng phụ thêm và thiết lập phạm vi cho toàn bộ tờ sổ, API sẽ tìm thấy hàng cuối cùng và gắn dữ liệu mới sau đó.

Trang web này giải thích.

https://developers.google.com/sheets/api/guides/values#appending_values

Dưới đây là một số mẫu mã:

String range="Sheet1"; 
insertData.setValues(rows); 
AppendValuesResponse response=service.spreadsheets().values() 
.append(spreadsheetId,range,insertData).setValueInputOption("USER_ENTERED") 
      .execute(); 

Lưu ý rằng câu trả lời sẽ cho bạn biết nơi nó được chèn vào.

Các vấn đề liên quan