在具有相同名称的工作表中的电子表格之间复制数据

时间:2019-02-14 19:24:47

标签: google-apps-script google-sheets

我想从所有学生的工作表中将具有每日分数的单元格复制到一个电子表格中,在该表格中计算并收集他们,并将其复制到另一个电子表格中,在其中用作货币来购买奖励。这两个电子表格都包含以该学生的名字命名的每个学生的工作表,例如“约翰·史密斯”

我创建的原始google脚本有效,但是编码效果很差,因为我必须为每个名称重复编码,因此每次我们有新学生时都要添加新的代码段。我想创建一个新的Google脚本,它更优雅,更强大,并且无需指定学生的姓名即可使用,因此它永远不需要修改。我不太明白,并在最后一行中不断出现“语法错误”。

function ImportDailyScore() {
  var dailyinput = "J27"; // Mon=J3, Tue=J9, Wed=J15, Thu=J21, Fri=J27
  var dollaroutput = "B2"; // Today=B2, Yesterday=B3, etc.

  var dollarspreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var checkinspreadsheet = SpreadsheetApp.openById('some id'); 
  var checkinsheets = checkinspreadsheet.getSheets(); // get all the sheets from check in doc
  var dollarsheets = dollarspreadsheet.getSheets(); // get all the sheets from dollar doc

  for (var i=0; i<checkinsheets.length; i++){ // loop across all the checkin sheets  
    var checkindata = checkinsheets[i].getRange(dailyinput).getValue();    
    var namedcheckin = checkinsheets[i].getSheetName()
    for (var j=0; j<dollarsheets.length; j++){
      var nameddollar = dollarsheets[j].getSheetName();
      if (namedcheckin = nameddollar, dollarsheets[j].getRange(dollaroutput).setValue(checkindata))
    }
  }
}

作为参考,原始代码(其工作方式与我希望的一样)但需要指定每个学生的姓名:

function ImportDailyScore() {
  var dollarspreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var checkinspreadsheet = SpreadsheetApp.openById('1Y9Ys1jcm1xMaLSqmyl_pFnvIzbf-omSeIcaI2FgjFIs');
  var dailyinput = "J3"; // Mon=J3, Tue=J9, Wed=J15, Thu=J21, Fri=J27
  var dollaroutput = "B4"; // Today=B2, Yesterday=B3, etc.

  var JohnCHECKIN = checkinspreadsheet.getSheetByName('John Smith');
  var JohnCHECKINData = JohnCHECKIN.getRange(dailyinput).getValue();
  var JohnDOLLAR = dollarspreadsheet.getSheetByName('John Smith');
  JohnDOLLAR.getRange(dollaroutput).setValue(JohnCHECKINData);

  var JenniferCHECKIN = checkinspreadsheet.getSheetByName('Jennifer Scott');
  var JenniferCHECKINData = JenniferCHECKIN.getRange(dailyinput).getValue();
  var JenniferDOLLAR = dollarspreadsheet.getSheetByName('Jennifer Scott');
  JenniferDOLLAR.getRange(dollaroutput).setValue(JenniferCHECKINData);

  etc.

1 个答案:

答案 0 :(得分:0)

尝试一下:

我没有足够的信息来知道如何以编程方式处理美元输出。

function ImportDailyScore() {
  var inputA=['','J3','J9','J15','J21','J27',''];
  var dailyinput = inputA[new Date().getDay()]; 
  if(dailyinput) {
    var dollaroutput = "B2"; // Today=B2, Yesterday=B3, etc. Not sure how to handle this programmatically I'd have to see the sheet
    var dollarspreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var checkinspreadsheet = SpreadsheetApp.openById('id'); 
    var checkinsheets = checkinspreadsheet.getSheets(); // get all the sheets from check in doc
    var dollarsheets = dollarspreadsheet.getSheets(); // get all the sheets from dollar doc
    for (var i=0; i<checkinsheets.length; i++){ // loop across all the checkin sheets  
      var checkindata = checkinsheets[i].getRange(dailyinput).getValue();    
      var namedcheckin = checkinsheets[i].getSheetName();
      for (var j=0; j<dollarsheets.length; j++){
        var nameddollar = dollarsheets[j].getSheetName();
        if (namedcheckin == nameddollar) {
          dollarsheets[j].getRange(dollaroutput).setValue(checkindata);
        }
      }
    }
  }else{
    SpreadsheetApp.getUi().alert(Utilities.formatString('Today is %s no school.', Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "E")));
  }

}
相关问题