根据模板将值从电子表格复制到另一个电子表格

时间:2020-06-22 15:02:32

标签: google-apps-script google-sheets

使用此脚本(Generate new spreadsheet from a selected row based on template时,仅当我选择特定行时,才可以基于模板标签(在这种情况下为标签“ 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);
}

1 个答案:

答案 0 :(得分:0)

要在标签和电子表格之间复制单个单元格值,一个好的解决方案是使用getValue()setValue()

此方法必须应用于范围对象(即单元格)。

示例:

...
// define sheet either as the active sheet or specify it with 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);
}