[英]Newbie question about Spreadsheet and Sheet
像这样使用电子表格和工作表是错误的吗?
function ADD_COLUMN() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('B:B').activate();
spreadsheet.getActiveSheet().insertColumnsBefore(spreadsheet.getActiveRange().getColumn(), 1);
spreadsheet.getActiveRange().offset(0, 0, spreadsheet.getActiveRange().getNumRows(), 1).activate();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
sheet.getRange(1,2).setValue(sheet.getRange(1,3).getValue()+1);
var addedDateAndTime = Utilities.formatDate(new Date, ss.getSpreadsheetTimeZone(), "MMMM yyyy");
sheet.getRange(2,2).setValue(addedDateAndTime)
};
此脚本在 A 和 B 列之间添加一列,将 (C1 --This cell is B1 before the bew column is created-- + 1) 的值插入 B1,并将当前日期(月和年)插入 B2。
我对脚本不太熟悉,并从其他脚本中制作了这个脚本,所以如果这个脚本是错误的,那么有人可以用简单的方式解释为什么是错误的吗?
您的逻辑中的问题是您在 A 和 B 之前添加了一个额外的列,因此属于单元格C1
的值被转移到D1
。 然后,当您使用sheet.getRange(1,3)
您将获得单元格C1
的新值,这可能不是您想要的。 我建议您获取第3
列的值加上您在此之前添加的列数:
sheet.getRange(1,3+columnsToAdd)
这样, C1
的先前值将用于计算单元格B1
的值。
在 Google Apps Script 中,您不需要设置活动范围或工作表来复制或粘贴数据。 自动创建的宏使用这些setActive
方法在ui
中向您显示脚本的步骤,但除非您有其他原因,否则您甚至几乎不需要它们。
电子表格对象和工作表是两个不同类的实例。 这意味着他们使用不同的方法。 阅读我提供的链接的文档,了解为什么使用每个实例以及用于什么场景。
function ADD_COLUMN() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
const columnsToAdd = 1;
ss.insertColumnsBefore(2, columnsToAdd);
sheet.getRange(1,2).setValue(sheet.getRange(1,3+columnsToAdd).getValue()+1);
const addedDateAndTime = Utilities.formatDate(new Date, ss.getSpreadsheetTimeZone(), "MMMM yyyy");
sheet.getRange(2,2).setValue(addedDateAndTime);
};
如果你想在A
和B
之间添加一列,然后插入提到的值,你可能会从下面的代码中受益:
function ADD_COLUMN() {
let spreadsheet = SpreadsheetApp.getActive();
let sheet = spreadsheet.getActiveSheet();
sheet.insertColumns(2, 1);
sheet.getRange(1,2).setValue(sheet.getRange(1,3).getValue()+1);
var addedDateAndTime = Utilities.formatDate(new Date, spreadsheet.getSpreadsheetTimeZone(), "MMMM yyyy");
sheet.getRange(2,2).setValue(addedDateAndTime)
}
然而,最显着的变化是根据Apps Script 最佳实践,最好只调用一次服务 - 因此存储spreadsheet
和工作sheet
的值。 此外,由于您只想插入列,因此无需从工作表中激活范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.