【问题标题】:Cursor automatically moved to Cell A1 in google spreadsheet with app script after each edit每次编辑后,光标自动移动到带有应用脚本的谷歌电子表格中的单元格 A1
【发布时间】:2016-06-23 15:53:43
【问题描述】:

我在应用脚本中生成了以下代码,以便在用户更改谷歌电子表格中的某些值时自动发送电子邮件。

然后我通过更改“当前项目的触发器”将我的脚本连接到谷歌电子表格。例如:

my trigger.jpg

代码运行良好唯一的问题是用户在google电子表格的任何单元格(例如:B1、B12、C12等)中插入/编辑新值后,它会触发我的脚本,然后光标会总是自动移动到单元格 A1,这很烦人。

我最好的猜测(我可能是错的)是它作为“信号”返回单元格 A1,因为它每次都运行完应用脚本代码?

我能做些什么来阻止这种自动光标移动的事情吗?我需要更改“当前项目的触发器”吗?

function PODTool() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);

  var sheet = spreadsheet.getActiveSheet();
  var lastRow = sheet.getLastRow();

  var startRow = 2;

  var range = sheet.getRange(2,7,lastRow-startRow+1,1 );
  var numRows = range.getNumRows();
  var LinksToPODForm = range.getValues();

  var rangeColumnReadyToSendEmail =sheet.getRange(2,9,lastRow-startRow+1,1);
  var sendEmailOrNot = rangeColumnReadyToSendEmail.getValues();


  var warning_count = 0;
  var msg = "";

  // Loop over the values 
  for (var i = 0; i <= numRows - 1; i++) {
    var EachLinkValue = LinksToPODForm[i][0];


    if (EachSendEmailOrNotValue=="yes" && sheet.getRange(i+2,10).getValue()=='Email not Sent' &&EachEmailRecipient=="Someone"){
    var BillingOfLadingShowingInEmailNotification = Billing_of_lading_number[i][0];


    msg = msg +"Requester:       "+EachEmailRecipient+"
    warning_count++;
    var subject ="Billing of Lading: "+BillingOfLadingShowingInEmailNotification;
      sheet.getRange(i+2,10).setValue('Sent');
    var recipient = "xxx@gmail.com";
  }

  if(warning_count) {
    MailApp.sendEmail(recipient, subject,msg)
  }

};

感谢任何建议!

【问题讨论】:

  • 我会将这个:var sheet = spreadsheet.getActiveSheet(); 更改为 var sheet = spreadsheet.getSheets()[0]; 并删除这一行:SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]); 试试这个并回复评论。
  • 它就像一个魅力!只是想知道“setActiveSheet”有什么问题吗?谢谢!!!
  • 我添加了我的评论作为答案。我认为“setActiveSheet”可能正在将活动单元格移动到 A1
  • 我接受了你的回答!谢谢你的帮助!

标签: google-apps-script google-sheets cursor cursor-position


【解决方案1】:

我会改变这个:

var sheet = spreadsheet.getActiveSheet();

到:

var sheet = spreadsheet.getSheets()[0]; 

并删除这一行:

SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);

【讨论】:

    猜你喜欢
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    相关资源
    最近更新 更多