Google apps script 基于模板将值从电子表格复制到另一个电子表格

Google apps script 基于模板将值从电子表格复制到另一个电子表格,google-apps-script,google-sheets,Google Apps Script,Google Sheets,使用此脚本()我可以基于模板选项卡(在本例中为选项卡“xxx”)生成新的电子表格(因此不是选项卡),仅当我选择特定行并将此电子表格重命名为对应行B列单元格中的值时。 现在,我将把源电子表格中单元格A2的值复制到单元格A3中的选项卡“xxx”中 怎么做 function onOpen() { SpreadsheetApp.getUi().createMenu('Genera Scheda') .addItem('Genera Scheda', 'createSpreadsheet')

使用此脚本()我可以基于模板选项卡(在本例中为选项卡“xxx”)生成新的电子表格(因此不是选项卡),仅当我选择特定行并将此电子表格重命名为对应行B列单元格中的值时。
现在,我将把源电子表格中单元格A2的值复制到单元格A3中的选项卡“xxx”中

怎么做

function onOpen() {
  SpreadsheetApp.getUi().createMenu('Genera Scheda')
  .addItem('Genera Scheda', 'createSpreadsheet')
  .addToUi()}

function createSpreadsheet() {
  var ss = SpreadsheetApp.getActive();
  // the following line means that the function will search for the spreadsheet name in the active sheet, no matter which one it is
  var sheet = ss.getActiveSheet();
  //the selected row
  var row = sheet.getActiveCell().getRow();
  // column 2 corresponds to "B"
  var name = sheet.getRange(row, 2).getValue();
  var templateSheet1 = ss.getSheetByName('xxx');
  var templateSheet2 = ss.getSheetByName('xxx2');
  var newSpreadsheet = SpreadsheetApp.create(name);
  var fileId = newSpreadsheet.getId();
  var file = DriveApp.getFileById(fileId);
  var folderId ="-----";
  var folder = DriveApp.getFolderById(folderId);
  templateSheet1.copyTo(newSpreadsheet).setName("Scheda");
  templateSheet2.copyTo(newSpreadsheet).setName("Import")
  newSpreadsheet.deleteSheet(newSpreadsheet.getSheetByName("Foglio1"));
  folder.addFile(file);
  DriveApp.getRootFolder().removeFile(file);
}
要在选项卡和电子表格之间复制单个单元格值,一个好的解决方案是使用和 此方法必须应用于范围对象(即单元格)

样本:

。。。
//将工作表定义为活动工作表或使用sheet=ss.getSheetByName(“XXX”)指定它;
var myValue=sheet.getRange(“A2”).getValue();
newSpreadsheet.getSheetByName(“xxx”).getRange(“A3”).setValue(myValue);
...
请注意,如果要同时获取/设置多个单元格的值,则需要使用
getValues()
setValues()

更新

基于您的情况的完整代码:

function onOpen() {
  SpreadsheetApp.getUi().createMenu('Genera Scheda')
  .addItem('Genera Scheda', 'createSpreadsheet')
  .addToUi()}

function createSpreadsheet() {
  var ss = SpreadsheetApp.getActive();
  // the following line means that the function will search for the spreadsheet name in the active sheet, no matter which one it is
  var sheet = ss.getActiveSheet();
  //the selected row
  var row = sheet.getActiveCell().getRow();
  // column 2 corresponds to "B"
  var name = sheet.getRange(row, 2).getValue();
  var templateSheet1 = ss.getSheetByName('xxx');
  var templateSheet2 = ss.getSheetByName('xxx2');
  var newSpreadsheet = SpreadsheetApp.create(name);
  var fileId = newSpreadsheet.getId();
  var file = DriveApp.getFileById(fileId);
  var folderId ="-----";
  var folder = DriveApp.getFolderById(folderId);
  templateSheet1.copyTo(newSpreadsheet).setName("Scheda");
  templateSheet2.copyTo(newSpreadsheet).setName("Import")
  var myValue = sheet.getRange("A2").getValue();
  newSpreadsheet.getSheetByName("Scheda").getRange("A3").setValue(myValue);
  newSpreadsheet.deleteSheet(newSpreadsheet.getSheetByName("Foglio1"));
  folder.addFile(file);
  DriveApp.getRootFolder().removeFile(file);
}

谢谢你的回复。这是我的代码:但我有一个错误:TypeError:无法读取Null的“getRange”属性听起来好像你的新电子表格中没有一张名为“xxx”的表格。是否要将值设置为旧电子表格或新电子表格的
A3
?在这种情况下,您需要在将表格“xxx”从旧电子表格复制到新电子表格后添加我的答案的两行-在此之前,此表格不存在。我只是这样做了,请注意,在您的行
templateSheet1.copyTo(newSpreadsheet).setName(“Scheda”)
您将
xxx
重命名为
Scheda
,因此需要调整
newSpreadsheet.getSheetByName(“xxx”).getRange(“A3”).setValue(myValue)相应地将
xxx
更改为
Scheda
。我希望现在更清楚了!代码是有效的。现在,我如何将A列中所选行的对应单元格从旧表复制到新表?