用于复制和重命名电子表格的Google表格脚本

时间:2019-07-06 02:55:39

标签: google-apps-script google-sheets

我正在Google表格中创建一个脚本,该脚本将复制活动表格并在同一工作簿中创建30个重复的表格。根据活动工作表上单元格中的值,每个重复的工作表将具有不同的名称。该单元格将包含一个日期;重复的工作表将使用单元格中列出的日期之后的日期名称。例如,单元格B3是“ 7/5/2019”。重复的工作表应命名为“ 2019年7月6日”(B3 + 1),“ 2019年7月7日”(B3 + 2)和“ 2019年7月8日”(B3 + 3),等等。

我使用的是已经嵌入在Google表格中的代码。其中一些是通过录制宏来创建的,而其他部分则是根据我对在线编码和研究的了解而创建的。

function duplicatesheet(){

//copy active sheet
var as = SpreadsheetApp.getActiveSpreadsheet()
SpreadsheetApp.getActiveSpreadsheet().duplicateActiveSheet();

//rename sheet
var myValue = 
SpreadsheetApp.getActiveSpreadsheet().getRange('B3').getValue();
SpreadsheetApp.getActiveSpreadsheet().renameActiveSheet(myValue);

}

该代码可一次复制活动工作表,但不会重复30次。如上所述,它也不根据单元格B3中列出的日期正确重命名工作表。我需要帮助创建可以完成这两项任务的代码。

2 个答案:

答案 0 :(得分:2)

对此进行了编辑。注释。您还可以看到Tedinoz的出色回答。

尝试以下代码:

function duplicatesheet() {
  var as = SpreadsheetApp.getActiveSpreadsheet(); // active spreadsheet
  var s = as.getActiveSheet(); // first sheet object
  var dateCell = "B3"; // cell containing first date
  var N = 30; // number of copies to make

  var startDate = new Date(s.getRange(dateCell).getValue()); // get the date stored in dateCell
  var day = startDate.getDate(); // extract the day
  var month = startDate.getMonth(); // extract the month
  var year = startDate.getFullYear(); // extract the year

  // loop over N times
  for (var i = 0; i < N; i++) {
    var asn = s.copyTo(as); // make a duplicate of the first sheet
    var thisSheetDate = new Date(year, month, day+(i+1)); // store the new date as a variable temporarily

    asn.getRange(dateCell).setValue(thisSheetDate); // writes the date in cell "B3"
    asn.setName(Utilities.formatDate(thisSheetDate, undefined, "MMMMM d, yyyy")); // sets the name of the new sheet
  }
}

我建议将N=30放在较小的地方,例如N=2,看看它是否首先适合您的格式。

Utilities.formatDate()方法在这里使用的格式,我假设它是MMMMM d, yyyy,它将以以下格式打印选项卡名称:

  

2019年7月6日

您可以根据下面的参考文献[3]随意更改。


您可以在此处查看所有使用的功能的参考:

答案 1 :(得分:1)

此代码采用OP在工作表名称的单元格“ B3”中输入的单个日期,例如“ Sheet1;它循环三十次,创建初始电子表格的副本,将基于数据的工作表名称每增加1天时间。

为确保准确的日期数学,建议“ B3”单元格的格式应与建议的工作表名称相同(“ MMMM dd,yyyy”)。


function so5691088602(){

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetname = "Sheet1";
  var basesheet = ss.getSheetByName(sheetname);
  var newSheetName = new Date(basesheet.getRange("B3").getValue());
  var NumDups = 30;
  for (var i=0;i<NumDups;i++){
    basesheet.activate;
    var tempDate = new Date();
    var printdate01 = Utilities.formatDate(new Date(tempDate.setDate(newSheetName.getDate()+1+i)), "GMT+10", "MMMM dd, yyyy");
    // Logger.log("DEBUG: Sheet Date = "+printdate01);
    ss.insertSheet(printdate01, {template: basesheet});
  }
}

屏幕截图

enter image description here

相关问题