1

我目前正在做一个项目,我需要将数据从电子表格中的一个特定工作表复制到另一个具有动态标题(带日期的文本)的电子表格。使用 ID 或名称移动数据是可以的,但使用新创建的电子表格似乎很困难。所有功能都在同一个应用脚本中:创建副本

function titleAsDate() {

  var currentDate = Utilities.formatDate(new Date(), "GMT+8", "dd-MM-yyyy HH:mm:ss")
  SpreadsheetApp.create("Report of the " + currentDate)
}

function copyWithValues() {
  let spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  let sourceSheet = spreadSheet.getSheetByName('Sources');
  
  let sourceRange = sourceSheet.getDataRange();
  let sourceValues = sourceRange.getValues();
  
  let rowCount = sourceValues.length;
  let columnCount = sourceValues[0].length;
  
  let targetSheet = spreadSheet.getSheetById('Target');
  let targetRange = targetSheet.getRange(1, 1, rowCount, columnCount);
  
  targetRange.setValues(sourceValues);
}
4

1 回答 1

2

解释:

  • SpreadsheetApp.create(name)返回一个电子表格对象,因此您可以直接使用此函数的输出而无需额外的代码。

  • 新生成的电子表格将有一个工作表,其名称Sheet1与您手动创建新电子表格文件时的名称相同。因此,您可以使用sheet.setName(name)函数将工作表的名称更改为Target。此函数还返回一个工作对象 ( targetSheet),然后可以使用该对象设置值。

解决方案:

这是一个函数中的所有代码:

function copyWithValues() {
  const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = spreadSheet.getSheetByName('Sources');
  const sourceRange = sourceSheet.getDataRange();
  const sourceValues = sourceRange.getValues();
  
  const currentDate = Utilities.formatDate(new Date(), "GMT+8", "dd-MM-yyyy HH:mm:ss"); // new code
  const targetSpreadsheet = SpreadsheetApp.create("Report of the " + currentDate); // new code
  
  let rowCount = sourceValues.length;
  let columnCount = sourceValues[0].length;
  
  let targetSheet = targetSpreadsheet.getSheetByName('Sheet1').setName("Target"); // new code
  let targetRange = targetSheet.getRange(1, 1, rowCount, columnCount);
  
  targetRange.setValues(sourceValues);
}

如果您想titleAsDate用作将被调用的辅助函数copyWithValues,那么您可以使用此代码并仅执行copyWithValues

// helper function, used by copyWithValues
function titleAsDate() {
  const currentDate = Utilities.formatDate(new Date(), "GMT+8", "dd-MM-yyyy HH:mm:ss");
  return SpreadsheetApp.create("Report of the " + currentDate); // new code
}

// main function, you should execute this function
function copyWithValues() {
  const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = spreadSheet.getSheetByName('Sources');
  const sourceRange = sourceSheet.getDataRange();
  const sourceValues = sourceRange.getValues();
  
  const targetSpreadsheet = titleAsDate(); // new code
  
  let rowCount = sourceValues.length;
  let columnCount = sourceValues[0].length;
  
  let targetSheet = targetSpreadsheet.getSheetByName('Sheet1').setName("Target"); // new code
  let targetRange = targetSheet.getRange(1, 1, rowCount, columnCount);
  
  targetRange.setValues(sourceValues);
}
于 2021-02-15T12:01:19.250 回答