首页 > 解决方案 > 为什么函数 submitData 不将字段添加到指定的工作表?

问题描述

我对此完全陌生。我看到了一个没有表格的数据输入脚本。我遵循了其他地方建议的脚本,但它没有更新指定工作表中的值。数据表中的格式会成为问题吗?我应该附上文件吗?

    function submitData() {
  var ss        = SpreadsheetApp.getActiveSpreadsheet();
  var formSS    = ss.getSheetByName("New Data"); //Data Entry Sheet
  var datasheet = ss.getSheetByName("Business Info"); //Business Info Data Sheet

  //Input Values
  var values = [[formSS.getRange("B3").getValue(),
                 formSS.getRange("B4").getValue(),
                 formSS.getRange("B5").getValue(),
                 formSS.getRange("B6").getValue(),
                 formSS.getRange("B7").getValue(),
                 formSS.getRange("B8").getValue(),
                 formSS.getRange("B9").getValue(),
                 formSS.getRange("B10").getValue(),
                 formSS.getRange("B11").getValue(),
                 formSS.getRange("B13").getValue(),
                 formSS.getRange("B14").getValue(),
                 formSS.getRange("B15").getValue(),
                 formSS.getRange("B16").getValue(),
                 formSS.getRange("B17").getValue(),
                 formSS.getRange("B18").getValue(),
                 formSS.getRange("B19").getValue(),
                 formSS.getRange("B20").getValue(),
                 formSS.getRange("B21").getValue(),
                 formSS.getRange("B23").getValue(),
                 formSS.getRange("B24").getValue(),
                 formSS.getRange("B25").getValue(),
                 formSS.getRange("B26").getValue(),
                 formSS.getRange("B27").getValue(),
                 formSS.getRange("B28").getValue(),
                 formSS.getRange("B29").getValue(),
                 formSS.getRange("B30").getValue(),
                 formSS.getRange("B31").getValue(),]];

  datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 27).setValues(values);

}

function clear1() {
  var sheet = SpreadsheetApp.getActive().getSheetByName("New Data");
  var rangesToClear = ["B3","B4","B5","B6","B7","B8","B9","B10","B11","B13","B14","B15","B16","B17","B18","B19","B20","B21","B23","B24","B25","B26","B27","B28","B29","B30","B31"];            
  for (var i=0; i<rangesToClear.length; i++) { 
    sheet.getRange(rangesToClear[i]).clearContent();
  }
}

function onEdit(e) {
  e.source.setActiveSelection(e.range.offset(1, 0));
}

标签: google-apps-scriptgoogle-sheets

解决方案


你可以这样做:

function submitData() {
  const ss=SpreadsheetApp.getActive();
  const fsh=ss.getSheetByName("New Data");
  const frg=fsh.getRange(1,2,31,1);
  const vs=frg.getValues();
  const dsh=ss.getSheetByName("Business Info");
  const out=new Set([1,2,12,22]); 
  let values=vs.map(function(r,i){if(!out.has(i+1))return r;}).filter(function(e){return e;});
  dsh.getRange(dsh.getLastRow()+1,1,1,27).setValues(values);
  //clear1();
}

function clear1() {
  var sheet = SpreadsheetApp.getActive().getSheetByName("New Data");
  var rangesToClear = ["B3","B4","B5","B6","B7","B8","B9","B10","B11","B13","B14","B15","B16","B17","B18","B19","B20","B21","B23","B24","B25","B26","B27","B28","B29","B30","B31"];            
  for (var i=0; i<rangesToClear.length; i++) { 
    sheet.getRange(rangesToClear[i]).clearContent();
  }
}

function onEdit(e) {
  const sh=e.range.getSheet();
  if(sh.getName()!="New Data")return; 
  e.source.setActiveSelection(e.range.offset(1, 0));
}//I'm guessing your doing this to get the cursor to move down after every entry but you will have problems on rows 12 and 22

然后您可以创建并安装一个提交按钮,如此处所示。我假设您希望在单击按钮时运行 submitData() 函数,并可能在 submitData() 的末尾添加调用 clear1 的命令。您还可以使用侧边栏创建 html 按钮,这些按钮可以做同样的事情,但它们使用 google.script.run 来调用服务器上的任何函数。


推荐阅读