Google Script:尝试将行复制到另一个工作表无法转换错误

时间:2017-05-12 16:29:06

标签: javascript google-apps-script javascript-objects google-sheets-query

我正在开发一个

的功能
  1. 逐行浏览Google表格中的指定列(脚本中的值为[7]的H列)。
  2. 根据值[7]列中具有特定值(" YES")的单元格,它将选择整行。
  3. 然后,它会将所选行(完整地)复制到同一文档中的单独工作表中。
  4. 这是我到目前为止所得到的:

    function moveRowsBasedOnCellValue(){
    
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      var master = ss.getSheetByName('Main');
      var values = master.getDataRange().getValues(); //selects all values in a sheet
    
      values.forEach(function(value){
        //if cell in the column H equals YES execute the script
        if (value[7] == "YES"){
          //variable to select all columns in the source sheet that aren't blank
          var colWidth = master.getMaxColumns();
          //variable containing the target sheet
          var destinationYeses = ss.getSheetByName("Yeses");
          //select first empty row in the destination sheet
          var destinationYesesRange = destinationYeses.getRange(destinationYeses.getLastRow()+1,1);
          //copy the relevant row into the sheet
          master.getRange(value,1, 1, colWidth).copyTo(destinationYesesRange);   
        }});
    }
    

    脚本执行正常,直到脚本的最后一行:

    master.getRange(value,1, 1, colWidth).copyTo(destinationYesesRange);  
    

    错误说明:

    Cannot convert [here the Logger error provides a list of all values in a row separated by a comma] to (class).
    

    对我可能做错了什么的想法?

2 个答案:

答案 0 :(得分:2)

您收到该错误的原因如下:

from fabric import network
from fabric.state import connections

def reconnect_current_host():
    network.disconnect_all()
    connections.connect(env.host + ':%s' % env.port)

getRange期望传递给它的所有值都是整数。而value变量是一个数组。因此,为了解决这个问题,您必须进行以下两项更改

首先:Documentation

 master.getRange(value,1, 1, colWidth).copyTo(destinationYesesRange);

第二

values.forEach(function(value,index){  // gives the array index to index variable

所以你的最终代码将如下所示:

//Index for array(values) starts at 0, whereas for the rows number in sheet starts at 1. 
//so add 1 to convert the index to row number
 master.getRange(index + 1,1, 1, colWidth).copyTo(destinationYesesRange);

最后注意事项:这是一种非常低效的数据传输方式,如果要复制大量数据并且脚本执行时间超过5-6分钟,则执行将终止。查看此帖addresses this issue

答案 1 :(得分:2)

这将为你做。

clean_(field name)

这是我的数据表的图片。

enter image description here

这是包含所有颜色的表格。

enter image description here

希望有所帮助