【问题标题】:Need some help, callback an array from textarea in googlescript需要一些帮助,从谷歌脚本中的 textarea 回调一个数组
【发布时间】:2014-06-18 22:49:17
【问题描述】:

我需要对我正在尝试做的事情有一些新的认识。我正在努力使我们的库存电子表格更加准确,并在我们缺少某些东西时给某人发送电子邮件。我完成了大部分代码,有一部分我遇到了问题,我们在电子表格的某些部分添加了一个数字。更准确地说,我试图为每个部分创建一个包含多个文本区域的菜单,每个文本区域都与我们刚刚购买的那个部分的数量相关。

我当前的本节代码有一个数组,它将创建文本区域并将其添加到面板和电子表格中标记的部分。将文本区域添加到电子表格的按钮。

我遇到的问题是使用数组正确设置 .addCallbackElement() 并将文本区域中的内容添加到电子表格中。

任何人都可以看到我在哪里犯了错误,或者可以推荐我可以做的更好的事情吗?

感谢您提供的任何帮助

  function addBit() {
  var ss = SpreadsheetApp.getActive();
  var sheet0 = ss.getSheetByName('Inventory');
  var lastrow0 = sheet0.getLastRow();
  //var ui = SpreadsheetApp.getUi();
  //data for each column that we need
  var datarange0 = sheet0.getRange('D2:D'+lastrow0);
  var datarange1 = sheet0.getRange('E2:E'+lastrow0);
  var datarange2 = sheet0.getRange('F2:F'+lastrow0);
  var datarange3 = sheet0.getRange('K2:K'+lastrow0);
  var datarange4 = sheet0.getRange('I2:I'+lastrow0);
  var data0 = datarange0.getValues();// Column D
  var data1 = datarange1.getValues();// Column E
  var data2 = datarange2.getValues();// Column F
  var data3 = datarange3.getValues();// Column K
  var data4 = datarange4.getValues();// Column I
  var app = UiApp.createApplication();
  app.setHeight(500).setWidth(500);
  var scroll = app.createScrollPanel().setPixelSize(500,500);
  var vpanel0 = app.createVerticalPanel();
  var vpanel1 = app.createVerticalPanel();
  var hpanel0 = app.createHorizontalPanel();
  var apanel = app.createAbsolutePanel();
  var text = new Array(lastrow0-1);
  //creating labels and text areas for each part for the first column in the menu
  for (var i = 0; i <= Math.round((lastrow0 - 2)/2); i++) {
    var hpanel = app.createHorizontalPanel();
    var label = app.createLabel(data0[i]+ ' ' + data1[i] + 'mm ('+ Math.round(data2[i]) + 'mil)');
    text[i] = app.createTextArea().setName('text'+i).setSize(50,20).setValue(0);//.setId('text'+i);
    hpanel.add(text[i]);
    hpanel.add(label);
    vpanel0.add(hpanel);
  }
  //creating labels and text areas for each part for the second column in the menu
  for (var i = Math.round((lastrow0 - 2)/2) + 1; i <= lastrow0 - 2; i++) {
    var hpanel = app.createHorizontalPanel();
    var label = app.createLabel(data0[i]+ ' ' + data1[i] + 'mm ('+ Math.round(data2[i]) + 'mil)');
    text[i] = app.createTextArea().setName('text'+i).setSize(50,20).setValue(0);//.setId('text'+i);
    hpanel.add(text[i]);
    hpanel.add(label);
    vpanel1.add(hpanel);
  }
  //Creating handlers for the text areas
  var thandler = app.createServerHandler('addition');
  for (var j = 0; j <= lastrow0 - 2; j++) {
    thandler.addCallbackElement(text[j]).setId('text'+i);
  }
  //when button is hit, the function 'addition' will run
  var addButton = app.createButton("Add", thandler);
  hpanel0.add(vpanel0);
  hpanel0.add(vpanel1);
  apanel.add(hpanel0);
  apanel.add(addButton);
  scroll.add(apanel);
  app.add(scroll);

  return app;
}
function addition(e){
  var app = UiApp.getActiveApplication();
  var ss = SpreadsheetApp.getActive();
  var sheet0 = ss.getSheetByName('Inventory');
  var lastrow0 = sheet0.getLastRow();
  //data for each column
  var datarange3 = sheet0.getRange('K2:K'+lastrow0);
  var datarange4 = sheet0.getRange('I2:I'+lastrow0);
  var data3 = datarange3.getValues();// Column K
  var data4 = datarange4.getValues();// Column I
  var text0 = new Array(lastrow0-1);
  //text0[] will have what was in each text area
  for (var i = 0; i <= lastrow0 - 2; i++) {
    text0[i] = e.parameter.('text' + 1);
  }
  //for loop will add what was in the text area to columns 'Qty Acq' and 'Current Stock'
  for (var j = 0; j <= lastrow0-2; j++) {
    var k = j+2;
    var v = data3[j] + text0[j];
    var x = data4[j] + text0[j]
    sheet0.getRange('M' + k).setValue(v);
    sheet0.getRange('N' + k).setValue(x);
  }
  app.close();
}

【问题讨论】:

    标签: javascript arrays google-apps-script callback textarea


    【解决方案1】:

    使用最高级别的面板(我猜是滚动面板)作为单个回调元素,它将自动包含所有子小部件。

    【讨论】:

    • 感谢您的反馈,它确实可以让回调正常工作,但我现在的问题是从文本区域检索数据。我可以做 text0 = e.parameter.text0;它会起作用。我需要将 e.parameter.text0 转换为 e.parameter.text(lastrow)。 e.parameter.text + i;也不行。我已经尝试过 join() 和 split() 但我得到“TextArea”作为值。
    • 语法为 e.parameter['text' + i]
    • 谢谢 Serge insas,做到了。我现在遇到的所有其他问题,我应该能够处理。
    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多