关于电子表格和工作表的新手问题

这样使用电子表格和工作表是错误的吗?


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 --此单元格在创建 bew 列之前为 B1 -- + 1) 的值插入到 B1 中,并将当前日期(月和年)插入到 B2 中。


我对脚本不太熟悉,是根据其他脚本制作的,所以如果这个脚本是错误的,那么有人可以用简单的方式解释为什么是错误的吗?


倚天杖
浏览 105回答 2
2回答

慕森卡

如果您想在“之间”添加一列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。此外,由于您只想插入列,因此无需激活工作表中的范围。

慕盖茨4494581

说明/问题:您逻辑中的问题是您在 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);};
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript