web-dev-qa-db-fra.com

Comment puis-je obtenir des données d'un tableur Google "A" dans des tableurs "B"?

Comment obtenir les données d'un tableur Google A dans le tableur B so
lorsque Spreadsheet A est modifié, alors Spreadsheet B change également automatiquement?

Une formule utilisant les fonctions QUERY () et IMPORTRANGE () a été essayée, mais elle n'a pas renvoyé les résultats attendus. Par exemple, j'ai deux feuilles de calcul Documents DocA et DocB:

    A               B           C
1    uid            serial_no   ph
2   356307042189331 3123958     912345678900
3   356307046077540 3966305     923451245123
4   356307046092465 3966407     978458784578
5   356307046098678 3970932     971548745125

Dans DocB

    A               B
1   serial_no      uid
2   3123958
3   3284728
4   3284655

J'essaie d'obtenir A2 de DocA dans B2 dans DocB avec la formule suivante

=QUERY(
     ImportRange("[key]","Sheet1!A:C"),
     "Select Col1, Col2 where Col1='"&A2&"'",
     1
 )

Je reçois uid serial_no dans la cellule B2 au lieu de la valeur dans la cellule A2 de DocA.

3
Kaippally

Utilisez la fonction ImportRange ( documentation ):

=IMPORTRANGE("spreadsheet key"; "Range")

Voir ces exemples de feuilles de calcul ( A et B ), que vous pouvez copier sur votre propre disque Google Drive ( Fichier → Copier ).

2
Vidar S. Ramdal

Réponse courte

Supprimez Col2 de la clause Select et remplacez Col1 par Col2 dans la clause Where.

Détails

Au lieu de

=QUERY(
     ImportRange("[key]","Sheet1!A:C"),
     "Select Col1, Col2 where Col1='"&A2&"'",
     1
 )

utilisation

=QUERY(
     ImportRange("[key]","Sheet1!A:C"),
     "Select Col1 where Col2='"&A2&"'",
     1
 )
2
Rubén

Cela dépend de la situation. Je configurerais un fichier de script d'applications et le déclencherais en mode édition ou en fonction du temps. Il se peut que vous ayez besoin d’un débogage, mais j’en ai utilisé des variantes pour faire exactement ce que vous avez dit. Si vous travaillez réellement dans la feuille de calcul et que vous avez besoin de temps, je voudrais utiliser la fonction importrange comme l’a dit le répondant précédent.

    var feederSS = SpreadsheetApp.openById("spreadsheetAId"); //get spreadsheet A
    var feederSheet = feederSS.getSheets()[0];
    var feederRange = feederSheet.getDataRange();
    var feederData = feederRange.getValues();
    /*Then get spreadsheet b*/
    var masterSS = SpreadsheetApp.openById("SpreadsheetBId");
    var masterSheet = masterSS.getSheets()[0];
    var masterRange = masterSheet.getDataRange();
    var masterData = masterRange.getValues();
    /*Now iterate through all of the rows on the feeder sheet and check them against the data on the masterSheet*/
    for (var l = 1; l < feederData.length; l++) {
      var feederRow = feederData[l];
      var feederFirstName = feederRow[0];
      var feederLastName = feederRow[1];
      var feederEmail = feederRow[2];
      var feederCheckRow = [feederFirstName, feederLastName, feederEmail]; 
      var duplicate = false;
      for (var m in masterData) {
        /*This is where spreadsheet A gets compared to B*/
        var masterRow = masterData[m];
        var masterFirst = row[0];
        var masterLast = row[1];
        var masterEmail = row[2];
        var masterCheckRow = [masterFirst, masterLast, masterEmail];

        if (feederCheckRow.join() == masterCheckRow.join()) {
        duplicate = true;
        }
      }
        if(!duplicate) {
        masterSheet.appendRow(feederRow);
      }
}
0
Randy D