Номер строки возврата соответствует ошибке

1

У меня есть несколько таблиц на одном листе, и мне нужно сделать скрипт для отправки электронной почты каждый день. Сценарий, который он ищет сегодня, дату, сопоставляет его с моей таблицей и возвращает номер столбца, затем я ищу Total в первом столбце (A) и однажды нашел его, вернул номер строки. Как только у меня будет номер строки и номер столбца, верните общее значение для этого дня. Я не продвинутый с JavaScript, и я борюсь с массивами (все еще изучая). Сценарий, который я до сих пор работает, очень хорош, так как на этом листе у меня есть только одна таблица, но на листе будет более 50 таблиц, каждая из которых будет иметь итоговое значение в конце. Формула я найдет Total, но вернет все итоговые значения (номера строк) в виде строк. Мне нужно получить только первое Total (номер строки). Надеюсь, все это имеет смысл.

Я приложил изображение, чтобы составить представление, и мой сценарий, который у меня есть до сих пор:

function getTodaysTotal() {
 function toDateFormat(date) {
try {return date.setHours(0,0,0,0);}
catch(e) {return;}
}

var values = SpreadsheetApp
  .openById("ID")
  .getSheetByName("Q3 - W27 - 39")
  .getDataRange()
  .getValues();


for (i in values){
 if (values[i][0]=='Total'){
var nr = i;

   Logger.log(nr); // will return two values (41 - first total and 
   104 second total ... if you add more Total it will return all rows 
   numbers that contain word Total

 }
}

var today = toDateFormat(new Date());
var todaysColumn = 
values[5].map(toDateFormat).map(Number).indexOf(+today);
var output = values[nr][todaysColumn];
 //     Logger.log(output);
var emailDate = Utilities.formatDate(new Date(today),"GMT+1", 
 "dd/MM/yyyy");

Изображение 174551

Это только первая таблица, но в ней будет больше, и каждый будет иметь Total.

Спасибо!

С уважением!

  • 0
    Можете ли вы предоставить пример листа с 50 таблицами или, что еще лучше, ссылку на настоящий лист? Что однозначно отличает каждую таблицу от других?
  • 0
    Я могу предоставить тестовый файл с 2 таблицами. шаблон будет одинаковым для всех 50. drive.google.com/… . ....
Показать ещё 1 комментарий
Теги:
arrays
google-apps-script
google-apps

1 ответ

2
Лучший ответ

Вы должны объявить nr вне своего цикла, так как вы будете использовать значение.

var nr = 0;

Поскольку вы читаете массив, вы должны использовать длину массива для цикла

for (var i=0; i<values.length; i++){
  if (values[i][0]=='Total'){
    nr = i;
    Logger.log(nr); 
    break; // this will stop at the first match
  }
}

После того, как вы получите свою сумму как строку, вы можете преобразовать ее в число, вызвав следующую функцию.

var string = values[a][b];
var num = Number(string);
  • 0
    Спасибо! Работает отлично :)
  • 0
    Быстрый вопрос ... что, если я хочу второе значение или третье? Я имею в виду только для строки (Всего). Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню