2 回答
TA贡献1806条经验 获得超8个赞
如果您想在“之间”添加一列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 脚本最佳实践,最好仅调用服务一次 - 因此存储spreadsheet
和 的值sheet
。此外,由于您只想插入列,因此无需激活工作表中的范围。
TA贡献1850条经验 获得超11个赞
说明/问题:
您逻辑中的问题是您在 A 和 B 之前添加了一个附加列,因此属于单元格的值
C1
被转移到D1
。然后,当您使用时,sheet.getRange(1,3)
您会得到单元格的新值C1
,这可能不是您想要的。我建议您获取列的值3
加上之前添加的列数:sheet.getRange(1,3+columnsToAdd)
这样,之前的值
C1
将用于计算 cell 的值B1
。在 Google Apps 脚本中,您无需设置活动范围或工作表即可复制或粘贴数据。
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);
};
添加回答
举报