我一直在寻找试图找到正确方法的论坛,但我似乎无法做到正确。这是我第一次使用Google Apps脚本,所以我正在学习,因为我要去。
这就是我要做的事。
1)我想将旧表的所有内容复制到新表中。该脚本将通过参考“统计”表单中的单元格b17来确定现有工作表名称,并将复制旧工作表,包括值格式,引用和公式。复制的工作表将从“统计”工作表的单元格c17中命名。
2)如果可能的话,我还想让旧表格删除所有引用,并在创建新工作表后保留值和格式。类似于copy all和ctrl-shift-v,除了一下子自动化它。
这是我目前的代码,不确定它是否正确
function newSheetLast() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var first = ss.getSheetByName("Statistics").activate();
var oldSheetName = ss.getRange('b17').getDisplayValue();
var newSheetName = ss.getRange('c17').getDisplayValue();
var sheet = ss.getSheetByName(oldSheetName).activate();
var source = SpreadsheetApp.getActiveSpreadsheet().duplicateActiveSheet(newSheetName);
};
我在尝试时遇到困难1.我尝试了copyTo并且可以复制工作表,但是当我复制到新工作表时,它会丢失所有格式和公式。
我不确定如何尝试2
答案 0 :(得分:0)
您的变量命名和复制工作表的工作方式有点令人困惑。 您应该能够直接复制工作表对象,或者至少能够尝试提供您尝试复制的工作表的名称但不是,它是在电子表格级别上,并且仅适用于活动工作表... < / p>
复制工作表会带有公式和格式。
使用setValues(getValues)
可以覆盖静态值。
function newSheetLast() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var settings = ss.getSheetByName("Sheet1");
var oldSheetName = settings.getRange('B17').getDisplayValue();
var oldSheet = ss.getSheetByName(oldSheetName);
var newSheetName = settings.getRange('C17').getDisplayValue();
ss
.getSheetByName(oldSheetName)
.activate()
.getParent()
.duplicateActiveSheet()
.setName(newSheetName);
oldSheet.getDataRange().setValues(oldSheet.getDataRange().getValues());
};