2017-05-22 38 views
2

使用下面的代码我试图将数据复制到新表中,但我希望它始终以A2开头。在列中写入数据

我不希望数据不断地走到最后,我希望它始终以A2开始。此外,问题出现的地方是我有B2:N200中的公式,因此数据不断尝试复制到最后。

最初的代码是这样的:

if(data[n][0]){ 
    var dest = ss.getSheetByName(data[n][0].toString().replace(/ /g,''));//find the destination sheet 
    Logger.log(data[n][0].toString().replace(/ /g,'')) 
    var destRange = dest.getRange(dest.getLastRow()+1,1);// define range 
    master.getRange(selectedfirstRow+n,2,1,1).copyTo(destRange);// and make copy below last row 
    } 
    } 

我意识到瓦尔destRange被确定从哪里开始输入数据。你可以看到我改变了getRange为(2 + 1,1);我们可以将getRange改为(2 + 1,1)。它每次运行函数时都会转到下一行,但它只输入一个数据,而不是一致地转到下一行。

编辑 而我想我应该这样问,我如何才能在第一列的最后一个空单元格只,而不是整个表。我知道当前代码正在查看整个工作表的最后一行,我如何才能找到第一列?

回答

0

只获取第一列数据,然后找到数组中的第一个空元素。

获取的2D阵列(阵列内的一个外阵列的):

//Get the data from the first column only 
columnOneData = dest.getRange(1,1,dest.getLastRow()).getValues(); 

即2D阵列需要被折叠成一个一维数组:

columnOneData = columnOneData.toString();//Convert the 2D array to a comma seperated string 
columnOneData = columnOneData.split(",");//Convert the string to a 1D array 

发现在第一个空元件新的数组:

firstRowWithEmptyCell = columnOneData.indexOf("") + 1;//Find the first empty element 

放在一起:

function test() { 
    var columnOneData,data,dest,destRange,firstRowWithEmptyCell,n,selectedfirstRow,ss; 

    ss = SpreadsheetApp.getActive(); 

    if(data[n][0]){  
    dest = ss.getSheetByName('Sunday'.replace(/ /g,''));//find the destination sheet 
    //Logger.log(data[n][0].toString().replace(/ /g,'')) 

    columnOneData = dest.getRange(1,1,dest.getLastRow()).getValues();//Get the data from the first column only 
    columnOneData = columnOneData.toString();//Convert the 2D array to a comma seperated string 
    columnOneData = columnOneData.split(",");//Convert the string to a 1D array 

    Logger.log('columnOneData: ' + columnOneData) 
    firstRowWithEmptyCell = columnOneData.indexOf("") + 1;//Find the first empty element 
    Logger.log('firstRowWithEmptyCell: ' + firstRowWithEmptyCell) 

    destRange = dest.getRange(2+1,1);// define range 

    master.getRange(selectedfirstRow+n,2,firstRowWithEmptyCell,1).copyTo(destRange);// and make copy below last row 
    } 
}