9
votes

Comment insérer une ligne après la dernière ligne avec valeur?

Je insère des données dans une feuille de calcul avec la nouvelle API V4 Google Feuilles, le code fonctionne parfaitement et les données qui sont insérées bien dans la feuille.

Mais comment trouver la dernière ligne avec des données pour ajouter les données pour ajouter les données Après cela? P>

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


2 commentaires

Cette réponse à votre question précédente toujours appliquée: Demandez les valeurs de la feuille, reportez-vous au nombre de lignes que vous obtenez réellement (les lignes de fuite vides sont omis). Il semble gaspillant de demander le contenu lorsque vous n'avez besoin que de la plage de données, mais je n'ai pas vu un autre moyen avec API V4.


Merci mais j'ai besoin d'un simple équivalent à .getlastrow du script Google Apps, est une fonctionnalité manquante?


4 Réponses :


2
votes

Vous pouvez utiliser AppendcellsRequest pour ajouter une ligne. Les méthodes ci-dessous devraient vous faire aller. Je n'ai pas inclus la méthode getRowdatalistForCellstringstrings car il s'agit plutôt d'une application spécifique.

Créez d'abord un objet de requête contenant un objet AppendcellsRequest: P>

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


1 commentaires

Merci mais j'ai besoin d'un simple équivalent à .getlastrow du script Google Apps, est une fonctionnalité manquante?



2
votes

L'API V4 n'a aucun moyen de demander «Quelle est la dernière ligne avec des données», car il s'agit d'un style différent d'API que l'API de script d'applications. Vous pouvez vous informer de la dernière ligne vous-même en demandant les données et en comptant le décalage de votre première ligne demandée à la dernière ligne renvoyée.


0 commentaires

1
votes

Il y a en fait un moyen de demander à l'API. J'utilise cela sur mon client nœud.js (à peu près sûr qu'il est très similaire)

    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;

    }
  });


2 commentaires

Vous devriez vraiment ajouter quelques explications sur la raison pour laquelle ce code devrait fonctionner - vous pouvez également ajouter des commentaires dans le code lui-même - sous sa forme actuelle, il ne fournit aucune explication qui peut aider le reste de la communauté à comprendre ce que vous avez fait pour résoudre /répondre à la question.


Il obtient toutes les lignes et ensuite faire un compte. Si la feuille est trop longue, elle pourrait ne pas être aussi efficace que l'utilisation de la méthode APPEND.



5
votes

Si vous utilisez la fonction Ajout et définissez la plage sur la feuille entière, l'API trouvera la dernière ligne et appendez les nouvelles données après cela.

Cette page Web l'explique.

< Un href = "https://developers.google.com/sheets/api/guides/values#appending_values" rel = "noreferrer"> https://developers.google.com/sheets/api/guides/values#appending_values ​​< / a>

Voici quelques échantillons de code: xxx

Notez que la réponse vous indiquera où il a été inséré.


3 commentaires

Je sais que cela est deux ans plus tard, mais lorsque j'ai une colonne vide, les données sont annexées à partir de la dernière colonne avec des données. Donc, si j'ai A1 => "Bonjour" C1 => "World", et faites une annexe avec toute la feuille de gamme, elle est annexée à C2.


Bien que non souhaitable, je pense que cela fonctionne comme conçu. Si vous lisez l'exemple indiqué dans le lien de ma réponse, vous verrez que l'API recherche des tables discrètes dans les données et ajoute à la dernière table. Les tables sont séparées par des cellules vides, donc dans votre cas, la dernière table est C1 afin que les données soient ajoutées à C2.


Cette API est frustrante et déroutante. Quelqu'un peut-il simplement faire une bibliothèque C # ??????