Как получить A2: длина с помощью скриптов Google - PullRequest
0 голосов
/ 27 января 2020

Мне нужно отправить электронное письмо с моих листов на основе первых входов в столбцы (идентификаторы электронной почты) и (которые являются динамическими c строкой и обновляются в зависимости от времени). Как я могу вернуть только A2: длина, используя скрипт Google. Кроме того, как я могу сделать это в Excel?

    var formattedDate = Utilities.formatDate(new Date(), "GMT-6", "'Date: ' yyyy-MM-dd ' Time: ' HH:mm:ss ' CDT'");

var EMAIL_SENT = 'Email Success ! '+ "\n\n" + formattedDate; 



/**
 * Sends non-duplicate emails with data from the current spreadsheet.
 */function sendEmails2() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Script (Beta)").activate();


  var startRow = 2; // First row of data to process
  var numRows = 120; // Number of rows to process

  // Fetch the range of cells 'A' columns

  var dataRange = sheet.getRange(startRow, 1, numRows, 3);
  // Fetch values for each row in the Range.

  var data = dataRange.getValues();

  for (var i = 0; i < data.length; ++i) {

    var row = data[i];
    var emailAddress = row[0]; // First column
    var message = row[1]; // Second column
    var emailSent = row[2]; // Third column


    if (emailSent !== EMAIL_SENT) { // Prevents sending duplicates

      var subject = '[Auto] The Process Has Not Yet Been Started';

      if(emailSent =='')
      break;

      MailApp.sendEmail(emailAddress, subject, message, {htmlBody: message,
                                                         cc: 'abc@xyz.com',
                                                         bcc:'cde@xyz.com'});

      sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);

      // Make sure the cell is updated right away in case the script is interrupted
      Logger.log(sendEmails2);
      SpreadsheetApp.flush();
    }}}

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Чтобы получить последнюю строку столбца 'A', вы можете сначала получить все значения строки:

var dataRange = sheet.getRange('A:A').getValues();

getValues ​​() возвращает двойную размерный массив значений, проиндексированный по строке, затем по столбцу

Поскольку мы уже установили для столбца значение A, нам потребуется только один for до l oop через массив:

  var lastDataPosition = 0; // Create variable to set the last row of the column that has data

  for (var i = 0; i < dataRange.length; ++i) {
    if (dataRange[i] != '') { // Check if the array position has data
      lastDataPosition = i + 1 // If the position has data in it -> assign that position to 'lastDataPosition' as the last one
    }
  }

* Мы добавляем +1 к позиции массива, поскольку первая ячейка листа равна 1, а первая позиция массива - 0

Таким образом, вы получаете последнюю строку с данными даже если в середине есть несколько пустых ячеек.

Для excel , я рекомендую вам создать новый вопрос с соответствующими тегами.

0 голосов
/ 28 января 2020
function A2A(col,sh,ss) {
  var ss=ss || SpreadsheetApp.getActive();
  var sh=sh || ss.getActiveSheet();
  var col=col || 1;
  return sh.getRange(2,col,sh.getLastRow()-1,1).getValues().filter(String).length;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...