Heim > Fragen und Antworten > Hauptteil
Ich schreibe meinen ersten Code mit Google Script. Ich habe Probleme mit meinem Code. Er verfügt nicht über die erforderlichen Berechtigungen für den Zugriff auf Google Sheets. Beim Versuch, den Code auszuführen, erhalte ich die Fehlermeldung „Ausnahme: Sie haben keine Berechtigung zum Aufrufen von SpreadsheetApp.openById“. Dieser Code dient zum Ändern und Abrufen von Daten aus einer Google Sheets-Tabelle.
Zusätzlich zum Berechtigungsproblem gibt es ein bestimmtes Verhalten im Code, das behoben werden muss. Der Code dient dazu, Informationen in eine bestimmte Zeile in einer Google Sheets-Tabelle zu übertragen, überträgt jedoch derzeit Daten an eine Stelle außerhalb der Tabelle. Wenn beispielsweise in Zeile 9 der Tabelle freier Speicherplatz verfügbar ist, überträgt der Code die Informationen fälschlicherweise ohne Formatierung oder Struktur an eine andere Stelle außerhalb der Tabelle. Ich habe meinen Code unten angehängt
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]); } } }
Ich versuche, einen Code zum Ändern und Abrufen von Daten aus einer Google Sheets-Tabelle zu implementieren. Ich möchte, dass der Code über die erforderlichen Berechtigungen verfügt, um auf die Tabelle zuzugreifen und die erforderlichen Aktionen auszuführen. Konkret möchte ich, dass der Code die leeren Stellen in der Tabelle mit den übertragenen Informationen füllt und dabei das Format und die Struktur der Tabelle beibehält.
Das tatsächliche Ergebnis ist jedoch, dass der Code auf Berechtigungsprobleme stößt. Beim Ausführen des Codes tritt der Fehler „Ausnahme: Sie haben keine Berechtigung zum Aufrufen von SpreadsheetApp.openById“ auf. Darüber hinaus werden die übertragenen Informationen außerhalb der Tabelle platziert und haben kein Format oder Struktur.
Datenplatzierung im Google Sheets-Code
Okay, das ist es. Der von mir verwendete Code ist sehr gut darin, leere Stellen in Tabellen zu finden. Das einzige Problem besteht darin, dass die Daten letztendlich außerhalb der tatsächlichen Tabelle platziert werden, die ich habe. Sie sehen, der Code geht davon aus, dass das Format in der Tabelle eine vollständige Zeile ist, und platziert die Daten daher nicht genau dort, wo ich sie in der Zeile haben möchte. Geben Sie hier eine Bildbeschreibung ein
Der Code, den ich jetzt habe
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粉5216974192024-04-04 00:36:31
使用可安装的触发器并重命名触发器函数,不要使用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); } } }