为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

倚天杖 2023-08-10 15:44:45
这样使用电子表格和工作表是错误的吗?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 中。我对脚本不太熟悉,是根据其他脚本制作的,所以如果这个脚本是错误的,那么有人可以用简单的方式解释为什么是错误的吗?
查看完整描述

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。此外,由于您只想插入列,因此无需激活工作表中的范围。

查看完整回答
反对 回复 2023-08-10
?
慕盖茨4494581

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);

};


查看完整回答
反对 回复 2023-08-10
  • 2 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信