2016-02-27 62 views
0

我已经看了看,并尝试修改一些脚本,但是卡住了。Google表格将一张纸上的几个单元格值传递给新的纸张行的脚本

有人可以帮助/告诉我如何在一张纸上添加特定单元格的集合,并使用这些值填充第二张纸上的下一个可用行?请。这是我有:

function AddToDB2() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var target = SpreadsheetApp.getActiveSpreadsheet(); 
    var sourceSheet = ss.getSheetByName("PurchaseOrder"); 
    var targetSheet = target.getSheetByName("DataBase"); 

    var range = ss.getDataRange(); 
    var values = range.getValues(); 
    var date1 = values[1][6]; //these values are collected from multiple cells not in a specific row or col 
    var po =  values[2][6]; 
    var vendor = values[7][0]; 
    var shipto = values[7][3]; 

    //this was for testing that the values were grabbed correctly. 
    var data = [date1,po,vendor,shipto]; 

    // I don't think this part is even close 
    var lastRow = targetSheet.getLastRow() 
    var rowData = values[0] 
    var newData = [] 
    for(n=1;n<lastRow;++n){newData.push(rowData)} 
    targetSheet.getRange("C2:H"+lastRow).setValues(newData); 

} 

这是我想出了另一种方式:

function addToDB() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var target = SpreadsheetApp.getActiveSpreadsheet(); 
    var sourceSheet = ss.getSheetByName("PurchaseOrder"); 
    var targetSheet = target.getSheetByName("DataBase"); 

    var sourceRangePO = sourceSheet.getRange("G3"); 
    var poValues = sourceRangePO.getValues(); 

if(poValues != "") { 

    var sourceRangeDate = sourceSheet.getRange("G2"); 
    var targetRangeDate = targetSheet.getRange("A2"); 
    var dateValues = sourceRangeDate.getValues(); 
    targetRangeDate.setValues(dateValues); 

    var sourceRangePO = sourceSheet.getRange("G3"); 
    var targetRangePO = targetSheet.getRange("B2"); 
    var poValues = sourceRangePO.getValues(); 
    targetRangePO.setValues(poValues); 

    var sourceRangeVendor = sourceSheet.getRange("A8"); 
    var targetRangeVendor = targetSheet.getRange("C2"); 
    var vendorValues = sourceRangeVendor.getValues(); 
    targetRangeVendor.setValues(vendorValues); 

    var sourceRangeShipTo = sourceSheet.getRange("D8"); 
    var targetRangeShipTo = targetSheet.getRange("D2"); 
    var shipToValues = sourceRangeShipTo.getValues(); 
    targetRangeShipTo.setValues(shipToValues); 

    targetSheet.insertRowAfter(1); 
    Browser.msgBox("Your PO has beed saved!"); 

    } 

else { Browser.msgBox("Please enter a PO number"); } 

} 

回答

0

你是非常接近的。尝试这个。我对你的setValues C:H有点困惑。您只有4个值可供设置。我把它们放在D-G中。您可以根据需要进行调整。

function AddToDB2() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sourceSheet = ss.getSheetByName("PurchaseOrder"); 
    var targetSheet = ss.getSheetByName("DataBase"); 

    var range = sourceSheet.getDataRange(); 
    var values = range.getValues(); 
    var date1 = values[1][6]; //these values are collected from multiple cells not in a specific row or col 
    var po =  values[2][6]; 
    var vendor = values[7][0]; 
    var shipto = values[7][3]; 
    var data = [date1,po,vendor,shipto]; 
    var lastRow = targetSheet.getLastRow() 
    var newData = [] 
    for(n=0;n<data.length;++n){newData.push([data[n]])} 
    var rng =targetSheet.getRange(lastRow+1,1,1,4) // Col A-D 
    rng.setValues([newData]); 
} 
+0

哦,那么近。非常感谢你!你可以评论我在原始问题代码下添加的代码块吗?我在想,如果那会比你帮助我的效率更高或更低。对于我来说,表格中数据的位置并不重要,所以我想出了做同样的事情。 – tsmialek

+0

我的方式更高效。处理数组通常是。我改变了我的代码,像你一样写给A-D。如果您确实使用了代码,请将setValues更改为setValue。如果我帮忙,请批准我的答案。谢谢。如果你想分享你的电子表格,我可能会有更多的想法。我曾与很多PO合作过。 –

+0

非常感谢!我一定会用你帮助我的原始代码。如果你能看一看就太好了。我也在研究“搜索”功能来查找和填充采购订单。目前为止这么好......我想。与您分享的最佳方式是什么?再次感谢。 – tsmialek

相关问题