在使用具有剪切和粘贴功能的Apps脚本时,如何处理Google表单中的新数据?

我在下面的链接中的Google表格中有一个员工培训数据库:

Link to Google Spreadsheet

Google表单会使用员工信息填充“添加员工表单响应”表的A到J列。通过简单的单元格功能将该数据传输到“资格”表。问题是,我无法弄清楚原因是,当每个新表单完成并且表单答案填充“添加员工表单响应”表时,它将“资格”表下一个空行中的单元格号更改为下一个随后的行号,这些行号链接到“添加员工表单响应”工作表中的空白单元格。例如,在完成表单之前,“资格表”第4行中的所有单元格都是从“添加员工表单响应”表的第4行中绘制的,但是在填充表单之后,“资格表”的第4行是从第5行中绘制的“添加员工表单响应”表保持为空。

我以前在另一张纸之间有另一张具有查询功能的纸,效果很好,但此后我添加了以下应用程序脚本(“脚本编辑器”的第1至24行)以在输入日期时剪切行“资格”表的B列中,并将其粘贴到“资格-员工离职”表中。问题是查询仅从“添加员工表单响应”表中再次检索数据,并重新填充“资格”表。换句话说,刚刚从“资格”表中剪切并粘贴到“资格-剩余员工”表中的数据将通过查询从“添加员工表单响应”表返回到“资格”表。 / p>


// Cut Employees Left from Qualifications sheet and 
// paste in Qualifications - Employees Left sheet
function onEdit(e) {
  var ss = e.source;
  var sheet = ss.getactiveSheet();
  var sheetName = "Qualifications"
  var range = e.range;
  var editedColumn = range.getcolumn();
  var editedRow = range.getRow();
  var column = 2;
  var date = range.getvalue();
  // Object.prototype.toString.call(date) === '[object Date]' --> checks if value is date
  // editedColumn == column && editedRow > 4 --> checks if edited cell is from 'Date Left'
  // sheet.getName() == sheetName --> checks if edited sheet is 'Qualifications'
  if(Object.prototype.toString.call(date) === '[object Date]' && editedColumn == column && editedRow > 4 && sheet.getName() == sheetName) {
    var numCols = sheet.getLastColumn();
    var row = sheet.getRange(editedRow,1,numCols).getvalues();
    var destinationSheet = ss.getSheetByName("Qualifications - Employees Left");
    // Get first empty row:
    var emptyRow = destinationSheet.getLastRow() + 1;
    // Copy values from 'Qualifications'
    destinationSheet.getRange(emptyRow,numCols).setvalues(row);
    sheet.deleteRow(editedRow);
    sheet.hideColumns(column);
  }

如果“资格”表和“添加员工表格回复”表之间的行编号问题有一个简单的解决方法,我将很高兴。否则,我认为可以解决的唯一方法是恢复Query函数,然后获取apps脚本以从“添加员工表单响应”表中删除数据。我将不胜感激任何建议。我真的希望一切都可以自动化,因为会有很多计算机文盲用户。

ys121212 回答:在使用具有剪切和粘贴功能的Apps脚本时,如何处理Google表单中的新数据?

您正在寻找一种更好的方法来动态记录新员工,该新员工在“资格”表上的“添加员工表单响应”表上收到通知。目前,您使用简单的公式,但不一定会自动选择新员工。

在这个答案中,我建议您看一下一种情况,其中“资格”上的数据从表单响应表物理复制到“资格”表上。

出于开发目的,执行以下步骤:

  • 创建了“资格”表的副本
  • 将重复的工作表命名为“ staff”。
  • 在“人员”上显示所有行
  • 将一名现有员工复制(复制/粘贴值)到第5行
  • 从第6行到最后一行-到最后一列的所有单元格的内容已删除
  • 将脚本复制到绑定的项目中
  • 将功能安装为可安装的触发器-事件=电子表格/表单提交
  • 处理了一些新员工进行测试。
  • 确认已将新员工数据添加到最后一行,再加上一个“职员”

    function so5882862602(e) {

      //58828626
      // setup spreadsheet and sheets
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var formsheetname = "Add Employee Form Responses";
      var form = ss.getSheetByName(formsheetname);
      var staffsheetname = "staff";
      var staff = ss.getSheetByName(staffsheetname);

      // get Form Response
      //Logger.log(JSON.stringify(e));
      var row = e.range.getRow();
      var range = form.getRange(row,1,10);
      //Logger.log("DEBUG: The range is "+range.getA1Notation());  
      var values = range.getValues();  
      var formSurname = values[0][1]
      var formFirstName = values[0][2];
      var formaka = values[0][3];
      var formType = values[0][4]
      var formBranch = values[0][5];
      var formDOB = values[0][6];
      var formGender = values[0][7]
      var formNSN = values[0][8];
      var formNZQA = values[0][9];
      //var formTimeStamp = values[0][0];
      Logger.log("DEBUG: Employee="+formSurname+","+formFirstName+",aka="+formaka+",Type="+formType+",Branch="+formBranch+",DOB="+formDOB+",Gender="+formGender+",NSN="+formNSN+",NZQA="+formNZQA);


      //update the staff sheet
      var staffupdate = [];
      var staffinal=[];

      // check the value of formaka and adjust name accordingly
      var staffname = "";
      // check the value of formaka
      if (formaka != ""){
        staffname = formSurname.toUpperCase()+","+formFirstName+" ("+formaka+")";// name
      }
      else{
        staffname = formSurname.toUpperCase()+","+formFirstName;// name
      }

      // push the values to a blank array
      staffupdate.push(staffname); // name
      staffupdate.push(""); // left
      staffupdate.push(formType);// TYPE
      staffupdate.push(formBranch); // branch
      staffupdate.push(formDOB); // DOB
      staffupdate.push(formGender);// Gender
      staffupdate.push(formNSN);// National Student Number
      staffupdate.push(formNZQA); // NZQA Unit Standards

      //push the array to a second array to create 2D
      staffinal.push(staffupdate);

      // get staff data
      var staffLR = staff.getLastRow();
      var staffupdaterange = staff.getRange(staffLR+1,8);
      Logger.log("DEBUG: The staff range = "+staffupdaterange.getA1Notation());


        // update the form values to the staff sheet
      staffupdaterange.setValues(staffinal);

    }

本文链接:https://www.f2er.com/3113511.html

大家都在问