Скрипт Google Apps невозможно преобразовать неопределенным в классе - PullRequest
0 голосов
/ 07 декабря 2018

Привет, я не совсем в js, но попытался запустить этот скрипт:

function doGet(e){

  var op = e.parameter.action;

  var 
ss=SpreadsheetApp.openByUrl("xxxxx");
  var sheet = ss.getSheetByName("Catalogati 2018");


  if(op=="insert")
    return insert_value(e,sheet);

  //Make sure you are sending proper parameters 
  if(op=="read")
    return read_value(e,sheet);

  if(op=="update")
    return update_value(e,sheet);

  if(op=="delete")
    return delete_value(e,sheet);



}

function getLastNonEmptyCellInRow(oggetto,ss) {
  var sh = ss.getSheetByName("Catalogati 2018");
  var rowToCheck = oggetto;
  var maxColumns = sh.getLastRow();

  var row = sh.getRange(rowToCheck, 1, 1, maxColumns).getValues();
  row = row[0]; //Get inner array of two dimensional array

  var rowLength = row.length;

  for (var i = 0; i < rowLength; i++) {
    var thisCellContents = row[i];

    Logger.log('thisCellContents: ' + thisCellContents);

    if (thisCellContents === "") {
      Logger.log(i);
      return i + 1;  //Pass the count plus one, which is the last column with data
    }
  }
}

//Recieve parameter and pass it to function to handle




function insert_value(request,sheet){
  console.log(request);
   var id = request.parameter.id;
  var persona = request.parameter.name;
  var oggetto= request.parameter.oggetto;
  var flag=1;
  var lr= sheet.getLastRow();
  var lc= sheet.getLastColumn();
  console.log(id+persona+oggetto);
  for(var i=1;i<=lr;i++){
    var id1 = sheet.getRange(i, 2).getValue();
    if(id1==id){
      flag=0;
  var result="Id already exist..";
    } }
  //add new row with recieved parameter from client
  if(flag==1){
    var nInv = oggetto+persona;
    var d = new Date();
    var currentTime = 3443//d.toLocaleString();
    var rowData = [[persona,nInv]];
    var range = sheet.getRange(oggetto+7,getLastNonEmptyCellInRow(oggetto,sheet)+1,1,2);
    range.setValues(rowData); 
  var result="Insertion successful";
  }
     result = JSON.stringify({
    "result": result
  });  

  return ContentService
  .createTextOutput(request.parameter.callback + "(" + result + ")")
  .setMimeType(ContentService.MimeType.JAVASCRIPT);   
  }

и консоль broswer возвращает ошибку: «невозможно преобразовать неопределенное в (класс). (Строка 30)»это строка 30:

var rowData = sheet.getRange(rowToCheck, 1, 1, maxColumns).getValues();

Возможно, ошибка может быть в get и post, но я не уверен.это скрипт в html:

function insert_value() {

    $("#re").css("visibility","hidden");
     document.getElementById("loader").style.visibility = "visible";
    $('#mySpinner').addClass('spinner');

    var id1=    $("#id").val();
    var name= $("#persona").val();
    var oggetto = $("#oggetto").val();

    var url = script_url+"?callback=ctrlq&name="+name+"&id="+id1+"&oggetto="+oggetto+"&action=insert";


    var request = jQuery.ajax({
      crossDomain: true,
      url: url ,
      method: "GET",
      dataType: "jsonp"
    });

  }

Где ошибка?(извините, если вопрос может привести к глупости, но я все еще учусь)

переменная oggetto, которую html передает с помощью метода post, происходит из этого:

<select name "oggetto">
    <option value = " 1">1234</option>
    <option value = " 2">4321</option>
    <option value = " 3">121341</option>
</select>

ps с помощью консоли, которую я нашелчто переменные, которые я передаю, такие как «oggetto», поступают без определения.Но я не понимаю почему, потому что действие и идентификатор используют один и тот же метод для отправки в сценарий.

1 Ответ

0 голосов
/ 07 декабря 2018

Возможно, это поможет:

function getLastNonEmptyCellInRow(row,ss) {
  var ss=ss || SpreadsheetApp.getActive();//Easier to debug
  var row=row || 2;//Easier to debug
  var sh=ss.getSheetByName("Sheet1");//Change to your sheet
  var data=sh.getRange(row,1,1,sh.getLastColumn()).getValues();//you used getLastRow() that doesnt make any sense
  var rv=null;//return value if you don't find another
  var hl=Utilities.formatString('<br />Row: %s<br /><table>',row);
  for (var i=0;i<data[0].length; i++) {
    if(!data[0][i]){
      hl+=Utilities.formatString('<tr><td>data[0][%s]=%s %s</td></tr>',i,data[0][i],'empty')
    }else{
      hl+=Utilities.formatString('<tr><td>data[0][%s]=%s %s</td></tr>',i,data[0][i], 'filled')
      rv = i + 1;
    }
  }
  var v=sh.getRange(row,rv).getValue();
  hl+=Utilities.formatString('</table><br /> Return Value: %s row: %s Column: %s', v, row, rv);
  var ui=HtmlService.createHtmlOutput(hl);
  SpreadsheetApp.getUi().showModelessDialog(ui, 'title');//Provide data to you in a dialog. Easier to debug for me.
  return v;   
}

Возможно, вы захотите удалить все строки в диалоговом окне.Мне просто легче отлаживать такие вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...