按标头值删除列删除所有列



我的代码至少有2个问题。谁能提供建议?我正在尝试学习JavaScript,因此我真的更喜欢提示而不是完成代码。我的目标是将表Main复制到名为achievement的新表格中,并删除所有在第一行中没有achievement的列。

  • 它不会将值从表主的成就复制到成绩(我的成就中都有空白的文档。
  • 当我手动粘贴数据时,代码删除了每列(而不是包含单词成就的列)
    function myFunction() {
      SpreadsheetApp.getUi().alert('STARTED');
      var search_term='achievement';
      var main=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Main');
      var cp=SpreadsheetApp.getActiveSpreadsheet().insertSheet(search_term);
      SpreadsheetApp.getUi().alert(main.getName()+':'+cp.getName());
      main.copyTo(cp);
      var values = cp.getDataRange().getValues();
      var cell='';
      try{  
        //n=1 skip first col because it has titles as well as the first row
      for(n=1;n<values.length;++n){
        cell = values[0][n] ; // 0 is the index of the first row.
        if(!cell.indexOf('achievement')>-1)
        {
          cp.deleteColumn(n);
          values = cp.getDataRange().getValues();
          n=1
        }
      }
      }catch(e)
      {
        SpreadsheetApp.getUi().alert(e+'val:col:'+cell+':'+n);
      }
      SpreadsheetApp.getUi().alert('DONE');
    }
    
  • values的内容是一个2-d阵列,一个行数,每个阵列都是一个单元格(或列)。您选择的循环范围与此数据的结构不符:

    for(n=1;n<values.length;++n){
    

    这一行具有相当于双重负面的代码:

    if(!cell.indexOf('achievement')>-1)
    

    ...因此它将删除错误的列。请记住,当不存在目标字符串时,indexOf()将返回-1

    谈到删除列,请考虑以下内容:

    cp.deleteColumn(n);
    

    您正在查看预取的数据,以确定要删除哪些列,并将其从电子表格中删除。删除列时,已删除的一个右侧的所有列都将获取新的列索引。换句话说,预取的阵列和电子表格列之间的/- 1关系更改。

    您可以通过向下而不是向上循环避免。

    否则,请尝试在调试器中的每一行逐步介绍,以验证电子表格上的更改。看起来您的新表应该由main.copyTo(cp);填充,因此请先检查一下。

    祝你好运!

    尝试以这种方式:

     function testFunction()
        {
        var search_term = 'achievement';
        var mainsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Main');
         //make a copy of the main sheet and set a name.
        var values = mainsheet.getDataRange().getValues();
        var columns = mainsheet.getDataRange().getNumColumns();
    //Check for each cell value and take the column numbers to an array.
          // Instead of deleting each column from the sheet evrytime in the loop, try modifying the array and then update the sheet with those values one time.   
            }
    

    我可以提供工作代码。

    希望有帮助!

    相关内容

    • 没有找到相关文章

    最新更新