Maison  >  Questions et réponses  >  le corps du texte

Code Google Sheets : résolution des problèmes d'autorisation et des erreurs de placement des données

J'écris mon premier code en utilisant Google Script. Je rencontre des problèmes avec mon code, il ne dispose pas des autorisations requises pour accéder à Google Sheets. Lorsque j'essaie d'exécuter le code, j'obtiens l'erreur « Exception : vous n'êtes pas autorisé à appeler SpreadsheetApp.openById ». Ce code est conçu pour modifier et récupérer les données d'une feuille de calcul Google Sheets.

En plus du problème des autorisations, il existe un comportement spécifique dans le code qui doit être résolu. Le code est conçu pour transférer des informations vers une ligne spécifique dans une feuille de calcul Google Sheets, mais transfère actuellement des données vers un emplacement en dehors de la feuille de calcul. Par exemple, s'il y a de l'espace libre disponible dans la ligne 9 de la feuille de calcul, le code transférera incorrectement les informations vers un autre emplacement en dehors du tableau sans formatage ni structure. J'ai joint mon code ci-dessous

function onEdit(e) {
  var sourceSheet = e.source.getActiveSheet();
  var editedRange = e.range;
  var column = editedRange.getColumn();
  var row = editedRange.getRow();
  
  if (column > 1 && row > 1) {
    var technicianNameCell = sourceSheet.getRange(row, 13);
    var technicianName = technicianNameCell.getValue();
    var dataValues = [];
    
    var columnsToCopy = [1, 2, 3, 4, 5, 6, 7, 11, 12]; // A, B, C, D, E, F, G, J
    
    for (var i = 0; i < columnsToCopy.length; i++) {
      var value = sourceSheet.getRange(row, columnsToCopy[i]).getValue();
      dataValues.push(value);
    }
    
    var targetSpreadsheetIds = {
      "technicianName": {
        "spreadsheetId": "spreadsheetId",
        "sheetName": "sheetName"
      },
      "technicianName": {
        "spreadsheetId": "spreadsheetId",
        "sheetName": "sheetName"
      },
      "technicianName": {
        "spreadsheetId": "spreadsheetId",
        "sheetName": "sheetName"
      }
    };
    
    var targetSpreadsheet = targetSpreadsheetIds[technicianName];
    
    if (targetSpreadsheet) {
      var targetSheet = SpreadsheetApp.openById(targetSpreadsheet.spreadsheetId).getSheetByName(targetSpreadsheet.sheetName);
      var lastRow = targetSheet.getLastRow();
      var firstEmptyRow = lastRow + 1;
      
      var targetRange = targetSheet.getRange(firstEmptyRow, 1, 1, dataValues.length);
      targetRange.setValues([dataValues]);
    }
  }
}

J'essaie d'implémenter un code pour modifier et récupérer les données d'une feuille de calcul Google Sheets. Je souhaite que le code dispose des autorisations nécessaires pour accéder à la feuille de calcul et effectuer les actions requises. Plus précisément, je souhaite que le code puisse remplir les espaces vides de la feuille de calcul avec les informations transférées, tout en préservant le format et la structure du tableau.

Cependant, le résultat réel est que le code rencontre des problèmes d'autorisation. L'erreur « Exception : vous n'êtes pas autorisé à appeler SpreadsheetApp.openById » se produit lors de l'exécution du code. De plus, les informations transmises sont placées en dehors du tableau et n'ont ni format ni structure.

Placement des données dans le code Google Sheets

D'accord, c'est tout. Le code que j'utilise est très efficace pour trouver des espaces vides dans les tableaux. Le seul problème est que cela finit par placer les données en dehors du tableau que j'ai. Vous voyez, le code pense que le format du tableau est une ligne complète, donc il ne place pas les données exactement là où je veux qu'elles soient dans la ligne. Entrez la description de l'image ici

Le code que j'ai maintenant

function myEditTrigger(e) {
  const sh = e.range.getSheet();
  if (sh.getName() == "Sheet Name" && e.range.columnStart > 1 && e.range.rowStart > 1) {
    const [a, b, c, d, e, f, g, , , k, l, m] = sh.getRange(e.range.rowStart, 1, 1, sh.getLastColumn()).getValues()[0];
    let vs = [a, b, c, d, e, f, g, k, l];
    var tObjs = {
      "techname": {
        "spreadsheetId": "spreadsheetId",
        "sheetName": "sheetName"
      },
   
    };
    var tObj = tObjs[m];
    if (tObj) {
      var tsh = SpreadsheetApp.openById(tObj.spreadsheetId).getSheetByName(tObj.sheetName);
      tsh.getRange(tsh.getLastRow() + 1, 1, 1, vs.length).setValues([vs]);
    }
  }
}

P粉896751037P粉896751037179 Il y a quelques jours286

répondre à tous(1)je répondrai

  • P粉521697419

    P粉5216974192024-04-04 00:36:31

    Utilisez des déclencheurs installables et renommez les fonctions de déclenchement, n'utilisez pas onEdit

    function onMyEdit(e) {
      const sh = e.range.getSheet();
      if (sh.getName() == "Sheet Name" && e.range.columnStart > 1 && e.range.rowStart > 1) {
        const [a,b,c,d,e,f,g,,,,k,l,m] = sh.getRange(e.range.rowStart, 1 , 1, sh.getLastColumn()).getValues()[0];
        let vs = [a,b,c,d,e,f,g,k,l];
        var tObjs = {"technicianName": {"spreadsheetId": "spreadsheetId","sheetName": "sheetName" },...};//Hard code the objs or make them global
        var tObj = tObjs[m];
        if (tObj) {
          var tsh = SpreadsheetApp.openById(tObj.spreadsheetId).getSheetByName(tObj.sheetName);
          tsh.getRange(tsh.getLastRow() + 1, 1, 1, vs.length).setValues(vs);
        }
      }
    }

    répondre
    0
  • Annulerrépondre