Google Apps脚本 - 复制到现有电子表格

时间:2017-12-14 07:01:38

标签: google-apps-script google-sheets

我尝试使用Google Apps脚本copy()来发布'我的主电子表格到输出电子表格,但每次都获得多个副本而不是替换输出文件。任何人都可以建议一种替换目标电子表格内容的方法,这样我就可以为输出保留相同的文件ID,并手动触发“发布”。已经尝试了copyTo,但只是制作了多张纸。

主电子表格是一个员工名单,需要能够由多名经理处理,而无需员工查看实时版本。当经理完成更新后,可以将其推送给员工。

编辑:搞定了

function publishRoster() {
  var source = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = source.getActiveSheet();
  var updatedDateTime = sheet.getRange("A1");
  var now =  Utilities.formatDate(new Date(), "GMT+10:30", "dd/MM/yyyy H:mm")
 updatedDateTime.setValue("Last Published " + now);
  var sourceName = source.getSheetName();
//  var sValues = source.getDataRange().getValues();
  var destination = SpreadsheetApp.openById('my-destination-sheet-id-here');
  var destinationSheet = destination.getSheetByName(sourceName);
  if (destinationSheet == null ) { }
 else { destination.deleteSheet(destinationSheet); }
  sheet.copyTo(destination).setName(sourceName);
}

1 个答案:

答案 0 :(得分:0)

copyTo()在目标电子表格中创建现有工作表的副本。 如果要将更改从特定工作表发布到指定的目标工作表,则可以将数据从源工作表复制到目标工作表,而不是复制整个工作表。[每次复制时都会创建新工作表]

因此,将数据从主表复制/发布到从表的代码如下:

var SOURCEID = 'xxxxxxxxxxxxx'; //put your source spreadsheet id here
    var SOURCESHEETNAME = 'XXXXX'; //put your source sheet name here
    var DESTINATIONID = 'xxxxxxxxxxxxx'; //put your destination spreadsheet id here
    var DESTINATIONSHEETNAME = 'XXXXX'; //put your destination sheet name here

    var data = SpreadsheetApp.openById(SOURCEID).getSheetByName(SOURCESHEETNAME).getDataRange().getValues();
    SpreadsheetApp.openById(DESTINATIONID).getSheetByName(DESTINATIONSHEETNAME).clear(); //This line is to clear the existing data in destination.
    SpreadsheetApp.openById(DESTINATIONID).getSheetByName(DESTINATIONSHEETNAME).getRange(1, 1, data.length; data[0].length).setValues(data);
    //data.length = no. of rows in source
    //data[0].length = no. of columns in source
    var now =  Utilities.formatDate(new Date(), "GMT+10:30", "dd/MM/yyyy H:mm");      
SpreadsheetApp.openById(DESTINATIONID).getSheetByName(DESTINATIONSHEETNAME).getRange("A1").setValue("Last Published " + now);

这不是经过测试的代码,如果出现任何问题,请告诉我,我们很乐意为您提供帮助。 感谢