【问题标题】:Uploading to another sheet with conditions上传到另一个有条件的工作表
【发布时间】:2019-05-08 16:15:17
【问题描述】:

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

这个想法是团队使用多张工作表,每张工作表都有相同的类别,但每张工作表中只填写了某些单元格。因此,我们希望将所有数据合并到一张表中,这样您就无需查看一堆不同的表来获取所有数据。例如,产品 ID 123456 存在于主数据中,因此当用户上传具有该产品 ID 的数据时,它会将体重、身高等信息添加到该行的相应单元格中。如果用户上传的产品 ID 为 654321,但它不存在于 master 中,那么它将创建一个新行,其中包含选定的数据并放入相应的单元格中。

所以现在我可以将所有内容上传到主表,而无需检查任何产品 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 所以我需要它在 master 中搜索匹配的产品代码并添加信息(如果存在),如果没有,则使用该产品代码创建一个新条目。

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    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);
    }
    

    【讨论】:

    • 谢谢!我最终得到了一些不同的结果: var sRows = csheet.getActiveRange().getLastColumn(); //获取选择的最后一列的值,现在我需要匹配某个单元格并将数据添加到该行(如果存在),如果不存在则创建一个新条目
    【解决方案2】:

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

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

    【讨论】:

    • 是的,这是我最初的问题!但我最终解决了这个问题: var sRows = csheet.getActiveRange().getLastColumn(); // 使用 sRows 获取选择的最后一列的值:msheet.getRange(maxIndex + 2, 1, 1, sRows)。我现在需要匹配特定单元格并添加信息(如果存在),如果不存在则创建一个新条目(就像我现在一样)
    • @dukereuchre 本网站上的问题应具体且仅限于一个问题。我建议您发布后续问题。
    • Rubén,我发了一个新帖子,但我还是很迷茫,我在这里发帖:stackoverflow.com/questions/56046504/…,我还在 GoogleAppScript 上发了一个 Reddit 帖子,但目前还没有回复.. 它可能更详细:reddit.com/r/GoogleAppsScript/comments/bm9jto/…如果你有时间我真的可以用一只手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2016-08-23
    相关资源
    最近更新 更多