使用多个值作为文档名称的Google脚本创建新文档

时间:2018-12-20 08:58:21

标签: google-apps-script google-sheets

我正在创建一个模板,以在Google云端硬盘中创建测试用例。使用Google文档和Stackoverflow,我创建了以下代码,将模板保存在新文档中。

// The onOpen function is executed automatically every time a Spreadsheet is loaded
function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [];
  menuEntries.push({name: "Save Test Case", functionName: "saveTestCase"});
  ss.addMenu("Test Case Menu", menuEntries);
}

// The code below makes a duplicate of the active sheet
function saveTestCase() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var name = sheet.getRange("Test Case Template!B3:G3").getValue();
  var destFolder = DriveApp.getFolderById("xxxxxx");
  DriveApp.getFileById(sheet.getId()).makeCopy(name, destFolder);
}

我用模板的“保存”创建了一个自定义菜单项。保存将在设置的文件夹中创建一个新文档。到目前为止一切都很好。但是在同一操作中,我尝试重命名新文档。因此,我设置了一个范围,因为名称必须超过多个字段。那部分不起作用。它没有获取B3:G3的值,而是仅获取B3的值。

任何人都知道是否可行以及如何解决?

对我来说,最理想的是将this picture中的B3:G3的值转换为文档名称“ TC-001这是一个测试用例”。

编辑:

使用Amit解决方案,该名称的代码如下:

// The code below makes a duplicate of the active sheet
function saveTestCase() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var name = sheet.getRange("Test Case Template!B3:G3").getValues().join(" ");
  var destFolder = DriveApp.getFolderById("xxxxxx");
  DriveApp.getFileById(sheet.getId()).makeCopy(name, destFolder);
}

它确实解决了我的第一个问题。但是,结果是用逗号分隔的名称。因此,我暂时将其更改为:

// The code below makes a duplicate of the active sheet
function saveTestCase() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var nameA = sheet.getRange("Test Case Template!B3").getValue();
  var nameB = sheet.getRange("Test Case Template!C3").getValue();
  var nameC = sheet.getRange("Test Case Template!D3").getValue();
  var nameD = sheet.getRange("Test Case Template!G3").getValue();
  var name = nameA + nameB + nameC + ' ' + '//' + ' ' + nameD;
  var destFolder = DriveApp.getFolderById("1pXJvplBAMz8oeS5tkyWVZSUCJsTuNrcS");
  DriveApp.getFileById(sheet.getId()).makeCopy(name, destFolder);
}

这将产生一个完美的文件名,包括enters和文件名中我需要的所有数据。

任何改进建议始终受到赞赏。

1 个答案:

答案 0 :(得分:1)

您正在使用getValue方法,该方法将仅返回范围中的第一个单元格值。使用getValues()代替,它返回一个值数组,您可以使用join(delimiter)方法将其转换为字符串。

替换:

var name = sheet.getRange("Test Case Template!B3:G3").getValue();

具有:

var name = sheet.getRange("Test Case Template!B3:G3").getValues().join(" ");