Rumah  >  Soal Jawab  >  teks badan

Kod Helaian Google: Menyelesaikan isu kebenaran dan ralat peletakan data

Saya sedang menulis kod pertama saya menggunakan Skrip Google. Saya menghadapi masalah dengan kod saya, ia tidak mempunyai kebenaran yang diperlukan untuk mengakses Helaian Google. Apabila cuba melaksanakan kod saya mendapat ralat "Pengecualian: Anda tidak mempunyai kebenaran untuk memanggil SpreadsheetApp.openById". Kod ini direka bentuk untuk mengubah suai dan mendapatkan semula data daripada hamparan Helaian Google.

Selain isu kebenaran, terdapat gelagat khusus dalam kod yang perlu ditangani. Kod ini direka bentuk untuk memindahkan maklumat ke baris tertentu dalam hamparan Helaian Google, tetapi sedang memindahkan data ke lokasi di luar hamparan. Sebagai contoh, jika terdapat ruang kosong dalam baris 9 hamparan, kod tersebut akan salah memindahkan maklumat ke lokasi lain di luar jadual tanpa pemformatan atau struktur. Saya telah melampirkan kod saya di bawah

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

Saya cuba melaksanakan kod untuk mengubah suai dan mendapatkan semula data daripada hamparan Helaian Google. Saya mahu kod tersebut mempunyai kebenaran yang diperlukan untuk mengakses hamparan dan melaksanakan tindakan yang diperlukan. Secara khususnya, saya mahu kod itu mengisi ruang kosong dalam hamparan dengan maklumat yang dipindahkan, sambil mengekalkan format dan struktur jadual.

Namun, keputusan sebenar ialah kod tersebut menghadapi masalah kebenaran. "Pengecualian: Anda tidak mempunyai kebenaran untuk memanggil SpreadsheetApp.openById" ralat berlaku semasa melaksanakan kod. Tambahan pula, maklumat yang dihantar diletakkan di luar jadual dan tidak mempunyai format atau struktur.

Penempatan data dalam kod Helaian Google

Baiklah, itu sahaja. Kod yang saya gunakan sangat bagus untuk mencari tempat kosong dalam jadual. Satu-satunya masalah ialah ia akhirnya meletakkan data di luar jadual sebenar yang saya ada. Anda lihat, kod itu berpendapat bahawa format dalam jadual adalah baris yang lengkap, jadi ia tidak meletakkan data tepat di tempat yang saya mahu ia berada dalam baris. Masukkan penerangan imej di sini

Kod yang saya ada sekarang

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 hari yang lalu291

membalas semua(1)saya akan balas

  • P粉521697419

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

    Gunakan pencetus yang boleh dipasang dan namakan semula fungsi pencetus, jangan gunakan 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);
        }
      }
    }

    balas
    0
  • Batalbalas