Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 过滤后保持行值不变。(谷歌应用程序脚本、电子表格)_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 过滤后保持行值不变。(谷歌应用程序脚本、电子表格)

Javascript 过滤后保持行值不变。(谷歌应用程序脚本、电子表格),javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,(情况) 我的表中有一堆数据,每行的列末尾都有一个按钮。 数据来自电子表格,我在模态对话中显示表格。 因此,每当我单击表中的按钮时,程序将根据该行在Google电子表格中运行/.setValue()。因此,如果按钮位于第1行,它也将在电子表格中运行第1行的/.setValue() (问题) 现在,若我在模态对话中使用filter函数,并以名称为基础对其进行过滤,那个么几乎并没有行会丢失。过滤完表格后(假设第3行变成第1行),每当我点击按钮时,它都会运行电子表格中的第一行,但它应该运行第3行 (问

(情况)

我的表中有一堆数据,每行的列末尾都有一个按钮。 数据来自电子表格,我在模态对话中显示表格。 因此,每当我单击表中的按钮时,程序将根据该行在Google电子表格中运行/.setValue()。因此,如果按钮位于第1行,它也将在电子表格中运行第1行的/.setValue()

(问题)

现在,若我在模态对话中使用filter函数,并以名称为基础对其进行过滤,那个么几乎并没有行会丢失。过滤完表格后(假设第3行变成第1行),每当我点击按钮时,它都会运行电子表格中的第一行,但它应该运行第3行

(问题)

所以问题是,即使在我过滤了行值之后,如何保持行值不变

(我的代码GS GET表)

ldap.onchange=function(){
console.log(this.value);
google.script.run.withSuccessHandler(showFilter.myFilter)(this.value);
}
函数showFilter(数据代理){
console.log(dataAgent);
var html='';
var行;

对于(var i=0;i这是我的解决方案。基本上,我没有在谷歌电子表格中过滤数据并将数据提取回模态对话,而是创建了新表,并直接在模态对话中为每个按钮赋值

document.addEventListener("DOMContentLoaded",function(){

    google.script.run.withSuccessHandler(generateTable).getTableData();

});

function generateTable(dataArray){

  dataArray.forEach(function(r){

    var row = document.createElement("tr");


    var col1 = document.createElement("td");
      col1.textContent = r[1];
    var col2 = document.createElement("td");
      col2.textContent = r[2];
    var col7 = document.createElement("button");
      const getRow = table.rows.length;
      col7.innerHTML = "Approve";
      col7.setAttribute("class",getRow)

    row.appendChild(col1);
    row.appendChild(col2);
    row.appendChild(col3);

    tbody.appendChild(row);

getTableData()只是从电子表格中获取数据的GS代码。 然后我开始过滤它:

name.onchange = function(){
        
     for(var i=1; i<table.rows.length; i++){
          if(table.rows[i].cells[0].textContent === this.value){
            console.log(table.rows[i].cells[0].textContent);
            table.rows[i].style.display = "";

          }else{
            table.rows[i].style.display = "none";
          }
      }
  } 
name.onchange=function(){

对于(var i=1;我不得不为我糟糕的英语技能道歉。不幸的是,我现在无法理解
,如果我在模态对话中使用filter函数并根据名称对其进行筛选(例如,将缺少几行)。在筛选表后(假设第3行成为第1行),每当我单击按钮时,它将运行电子表格中的第一行,但它应该运行第3行。
。我可以问一下您当前问题的详细信息和您的目标吗?@Tanaike是的,很抱歉我的解释。我的意思是我在模式对话中创建了一个表,以及我从谷歌电子表格中获取的数据。我在最后一列添加了一个按钮umn在每一行中,所以每次我单击按钮,数据都会发回信息,并告诉我按钮是哪一行。例如,我单击第1行的按钮,它会控制台。记录第1行。现在,如果我添加过滤功能,过滤数据,比如说第1行我们有John Doe,第2行我们有Smith先生,如果我过滤到Smith先生,表将只显示显示smith先生的数据,对吗?因此,现在smith先生的数据将是筛选表中的第一行。现在,当我单击smith先生行的按钮时,它返回给我的是第1行而不是第2行。我想要的是,每当我单击该按钮时,该按钮应返回前一行,在这种情况下,它应返回第2行。我认为问题在于我的代码,因为我从谷歌电子表格中筛选数据,这就解释了为什么iy返回为第1行,但我不知道该怎么做。@Tanaike实际上我正在制作一个请假申请系统。因此,如果我单击按钮,它将批准并更新系统中的某些内容。使用谷歌表单的代理将在电子表格中传输。如果有太多的申请阳离子,我需要过滤它,以便我知道我应该首先批准哪一个。这就是我正在尝试做的。我不得不再次为我糟糕的英语技能道歉。不幸的是,从你的回复中,我仍然无法理解你当前的问题和你的目标。
function myFilter(ldap) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Query_Script");
  var originalData = sheet.getRange(2,1,sheet.getLastRow(),10).getValues();
  var testData = sheet.getDataRange().getDisplayValues();
  var getLdap = ldap;

  var dataAgent = testData.filter(function(info){return info[0] === "Email Address" || info[2] === ldap;});

  return dataAgent;

}

ldap.onchange = function(){
          console.log(this.value);
          google.script.run.withSuccessHandler(showFilter).myFilter(this.value);
        }
      
        function showFilter(dataAgent){
          console.log(dataAgent);

          var html = '<table>';
          var row;
            for(var i=0; i<dataAgent.length; i++){
          html += '<tr>';
          row = i;
          console.log(row);//[0,1,2,3,]
            for (var j=0; j<9; j++){
              html += '<td>'+ dataAgent[i][j]+'</td>';
            }
            html += '<td>'+ '<button data-row="'+i+'" data-column="'+j+'" id="btn">Approved</button>'+'</td>';
            html += '</tr>';
          }
          html += '</table>';
          output.innerHTML = html;
          
          const table = document.querySelector("table");
          table.addEventListener('click',approve);
        }
document.addEventListener("DOMContentLoaded",function(){

    google.script.run.withSuccessHandler(generateTable).getTableData();

});

function generateTable(dataArray){

  dataArray.forEach(function(r){

    var row = document.createElement("tr");


    var col1 = document.createElement("td");
      col1.textContent = r[1];
    var col2 = document.createElement("td");
      col2.textContent = r[2];
    var col7 = document.createElement("button");
      const getRow = table.rows.length;
      col7.innerHTML = "Approve";
      col7.setAttribute("class",getRow)

    row.appendChild(col1);
    row.appendChild(col2);
    row.appendChild(col3);

    tbody.appendChild(row);

name.onchange = function(){
        
     for(var i=1; i<table.rows.length; i++){
          if(table.rows[i].cells[0].textContent === this.value){
            console.log(table.rows[i].cells[0].textContent);
            table.rows[i].style.display = "";

          }else{
            table.rows[i].style.display = "none";
          }
      }
  }