7

Sto inserendo dati in un foglio di calcolo con la nuova API di Google Sheets v4, il codice funziona perfettamente e i dati vengono inseriti bene nel foglio.API di Google Sheep v4 - Come inserire una riga dopo l'ultima riga con valore?

ma come scoprire l'ultima riga con i dati per aggiungere i dati dopo questo?

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'è qualche trucco nella notazione A1 per questo?

Ho bisogno di un equivalente a .getLastRow da Google Apps Script

+0

[Questa risposta] (http://stackoverflow.com/a/37367707) alla domanda precedente ancora applicata: richiedere i valori dal foglio, vedere quante righe si ottengono effettivamente (le righe finali vuote vengono omesse). Sembra uno spreco richiedere i contenuti quando hai solo bisogno dell'intervallo di dati, ma non ho visto un altro modo con l'API v4. –

+0

grazie ma ho bisogno di un semplice equivalente a .getLastRow da Google Apps Script, è una caratteristica mancante questo? – seba123neo

risposta

1

L'API v4 non ha modo di chiedere "quale è l'ultima riga con dati", poiché si tratta di uno stile diverso di API rispetto all'API Script Apps. È possibile dedurre l'ultima riga da soli richiedendo i dati e contando l'offset dalla prima riga richiesta all'ultima riga restituita.

+0

sì, grazie .... – seba123neo

1

È possibile utilizzare AppendCellsRequest per aggiungere una riga. I seguenti metodi dovrebbero farti andare. Non ho incluso il metodo getRowDataListForCellStrings poiché è piuttosto specifico per l'applicazione.

Innanzitutto creare un oggetto di richiesta contenente un 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); 
} 

quindi chiamare batchUpdate sui fogli di calcolo() Interfaccia:

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

Purtroppo non ci sembra essere un modo per sapere quali le righe sono state aggiornate. Non sembra possibile impostare valueInputOption quando si aggiunge in questo modo.

+0

grazie ma ho bisogno di un semplice equivalente a .getLastRow da Google Apps Script, è una caratteristica mancante questo? – seba123neo

0

C'è in realtà un modo per chiedere all'API. Sto usando questo sul mio cliente node.js (abbastanza sicuro che sia molto simile)

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

Dovresti davvero aggiungere qualche spiegazione sul perchè questo codice dovrebbe funzionare - puoi anche aggiungere commenti nel codice stesso - nella sua forma attuale, non fornisce alcuna spiegazione che possa aiutare il resto la comunità per capire cosa hai fatto per risolvere/rispondere alla domanda. – ishmaelMakitla

2

Se si utilizza la funzione di aggiunta e impostare l'intervallo per l'intero foglio, l'API troverà l'ultima riga e aggiungere il nuovi dati dopo di esso.

Questa pagina web lo spiega.

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

Ecco alcuni esempi di codice:

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

Nota che la risposta vi dirà dove è stato inserito.