有条件上传到另一个工作表

时间:2019-05-08 16:15:18

标签: javascript arrays google-apps-script google-sheets

我的项目需要帮助。最终目标是让用户连续选择单元格,然后能够使用按钮将数据上传到另一张表格中。上传时,我要匹配特定的单元格并在该行上填写特定的空白单元格。如果找不到匹配项,则需要它来创建一个新条目。

该想法是团队使用多个工作表,每个工作表具有相同的类别,但每个工作表中仅填写了某些单元格。因此,我们希望将数据全部合并在一张纸中,因此您无需查看一堆不同的纸即可获得所有数据。例如,产品ID 123456存在于主数据库中,因此,当用户上传具有该产品ID的数据时,它将在该行的适当单元格中添加诸如重量,身高等信息。如果用户上载产品ID 654321,但在主数据库中不存在该产品,则它将使用所选数据创建新行,并将其放入适当的单元格中。

因此,现在我可以将所有内容都上传到主表中,而无需检查任何产品ID。每次每次都创建一个新条目。我需要它来检查特定的单元格数据,如果它存在于主单元中,则不要在新行中添加数据,而是将数据添加到适当单元格中的该行。

到目前为止,这非常简单:

function uploadData(){
 var css = SpreadsheetApp.getActiveSpreadsheet(); //setup current spreadsheet
 var csheet = css.getSheetByName("Sheet1") //setup current sheet
 var cdata = csheet.getActiveRange().getValues(); //get selected data values
 var sRows = csheet.getActiveRange().getLastColumn(); //get the value of the last column selected

 var mss = SpreadsheetApp.openById('1N5Orl2fQvmFmK63_y78V2k7jzBUYOjDxhixMSOCU7jI'); //open mastersheet for adding data
 var msheet = mss.getSheets()[0]; //get the sheet
 var mfindnextrow = msheet.getRange('A:A').getValues(); //get the values

 //this next code i found online, this allows me to insert new data on a new row without any data present
 var maxIndex = mfindnextrow.reduce(function(maxIndex, row, index) {
 return row[0] === "" ? maxIndex : index;
  }, 0); 

 //start looping through the row 
 cdata.forEach(function(row){
 msheet.setActiveRange(msheet.getRange(maxIndex + 2, 1, 1, sRows)).setValues(cdata); //put the data into the mastersheet
  });
};    

以下是“上传”工作表的图片: uploadsheet 在这种情况下,只有一件商品代码为1的商品可以上传 因此,我需要它在母版中搜索匹配的产品代码,并添加该信息(如果存在),如果没有,则使用该产品代码创建一个新条目。

2 个答案:

答案 0 :(得分:0)

尝试一下:

function moveSelectedData(){
  var css=SpreadsheetApp.getActive();
  var csheet=css.getSheetByName("Sheet1"); 
  var cdata=csheet.getActiveRange().getValues();
  var mss = SpreadsheetApp.openById('ssid');
  var msheet = mss.getSheets()[0];//first sheet on the left
  msheet.getRange(msheet.getLastRow()+1,1,cdata.length,cdata[0].length).setValues(cdata);
}

答案 1 :(得分:0)

问题是msheet.getRange(maxIndex + 2, 1, 1, 1)上的索引

最后两个是范围的大小。使用1,1会将范围限制为1行x 1列= 1个单元格。