7

Ich füge Daten in eine Tabelle mit dem neuen Google Tabellen API 4 ein, der Code funktioniert perfekt und die Daten werden gut in das Blatt eingefügt.Google Tabellen API v4 - Wie füge ich Zeile nach der letzten Zeile mit Wert ein?

aber wie finde ich die letzte Zeile mit Daten, um die Daten danach hinzuzufügen?

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

Gibt es einen Trick in der A1-Notation dafür?

ich brauche ein Äquivalent zu .getLastRow von Google Apps Script

+0

[Diese Antwort] (http://stackoverflow.com/a/37367707) auf Ihre frühere Frage noch angewendet: fordern Sie die Werte aus dem Blatt, sehen Sie, wie viele Zeilen Sie tatsächlich erhalten (leere nachlaufende Zeilen sind weggelassen). Es erscheint verschwenderisch, den Inhalt anzufordern, wenn Sie nur den Datenbereich benötigen, aber ich habe mit API v4 keinen anderen Weg gesehen. –

+0

danke, aber ich brauche ein einfaches Äquivalent zu .getLastRow von Google Apps Script, ist ein fehlendes Feature das? – seba123neo

Antwort

1

Die v4 API hat keine Möglichkeit zu fragen, "was ist die letzte Zeile mit Daten", da es sich um eine andere Art von API als die Apps Script API handelt. Sie können die letzte Zeile selbst ableiten, indem Sie die Daten anfordern und den Offset von Ihrer ersten angeforderten Zeile bis zur letzten zurückgegebenen Zeile zählen.

+0

ja, danke .... – seba123neo

1

können Sie AppendCellsRequest verwenden, um eine Zeile anzuhängen. Die folgenden Methoden sollten Sie in Gang bringen. Ich habe die Methode getRowDataListForCellStrings nicht mit einbezogen, da sie eher anwendungsspezifisch ist.

zuerst ein Request-Objekt enthält eine AppendCellsRequest erstellen:

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

Dann batchupdate ruft die Tabellen() Schnittstelle:

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

Leider es scheint nicht zu einem Weg, um zu wissen, welche Zeilen wurden aktualisiert. Es ist nicht möglich, valueInputOption beim Anhängen auf diese Weise festzulegen.

+0

danke, aber ich brauche ein einfaches Äquivalent zu .getLastRow von Google Apps Script, ist ein fehlendes Feature das? – seba123neo

0

Es gibt tatsächlich eine Möglichkeit, die API zu fragen. Ich verwende auf meinem node.js Client (ziemlich sicher, dass es sehr ähnlich)

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

Sie sollten wirklich eine Erklärung hinzufügen, warum dieser Code funktionieren sollte - Sie können auch Kommentare in den Code selbst einfügen - in seiner aktuellen Form liefert er keine Erklärung, die dem Rest helfen kann die Community zu verstehen, was Sie getan haben, um die Frage zu lösen/zu beantworten. – ishmaelMakitla

2

Wenn Sie die Append-Funktion und den Bereich auf das gesamte Blatt verwenden, wird die API die letzte Zeile finden und fügen Sie die neue Daten danach.

Diese Webseite erklärt es.

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

Hier ist ein Beispielcode:

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

Beachten Sie, dass die Antwort wird Ihnen sagen, wo es eingefügt wurde.

Verwandte Themen