Создавая пользовательскую функцию в Google Sheets, код работает вне листов, но не в листах - PullRequest
0 голосов
/ 21 апреля 2020

Итак, я пишу пользовательскую функцию для листов Google, которая должна занимать одну строку или ячейки, создавать одномерный массив и использовать эти данные для создания URL. Это в основном так, чтобы я мог помочь своим друзьям отследить цены на предмет в видеоигре.

Я запускал код в среде javascript за пределами Google Sheets, и все действовало так, как ожидалось. Но когда я помещаю код в редактор сценариев, он работает с неожиданным поведением. Диапазон ячеек всегда будет 1 строка на 13 столбцов, но некоторые столбцы могут быть пустыми, поэтому предполагается, что скрипт усекает массив значений, чтобы не было пустых индексов. Затем предполагается вставить «.» между каждым значением, поскольку оно объединено в строку для получения окончательного URL. По какой-то причине он не удаляет какие-либо значения и "." are "," s, когда URL создается в ячейке.

Вот код:

function STONKLINK(prices, premrkt) {
  var webLink = "https://turnipprophet.io?prices=";
  var priceLink = "";

  for (i = (prices.length - 1); prices[i] == 0; i--){
    prices.pop();
  }
  for (i = 0; i < prices.length; i++) {
    priceLink = (priceLink + prices[i] + ".") 
  }

  priceLink = priceLink.substring(0, priceLink.length - 1);

  if (premrkt == "N/A") {
    webLink = webLink + priceLink;
  } else if (premrkt == "Fluctuating") {
    webLink = webLink + priceLink + "&pattern=0";
  } else if (premrkt == "Small Spike") {
    webLink = webLink + priceLink + "&pattern=3";
  } else if (premrkt == "Large Spike") {
    webLink = webLink + priceLink + "&pattern=1";
  } else if (premrkt == "Decreasing") {
    webLink = webLink + priceLink + "&pattern=2";
  }
  return webLink;

}

Любая помощь очень ценится. Большое вам спасибо.

РЕДАКТИРОВАТЬ: Хотя я до сих пор не понимаю, почему это происходит, и я хотел бы понять, я добавил простую работу вокруг. Если добавить эту строку кода

webLink = webLink.replace(/,/g, ".");

перед return, все запятые будут заменены точками. Тем не менее, любое понимание проблемы будет высоко ценится. Еще раз спасибо.

1 Ответ

0 голосов
/ 27 апреля 2020

Когда вы сохраняете значения в электронных таблицах, значения, имеющие ,, считаются strings, тогда как значения, имеющие ., считаются numbers.

. Например, если эти значения хранятся в столбце B:

values in spreadsheet

Если вы регистрируете typeof(val1) и typeof(val2) (где val1 и val2 - это значения, хранящиеся в B1 соответственно B2), вот что вы получите:

logging the values

Так что проблема, с которой вы столкнулись, связана с этим фактом. Значения, которые вы сохранили на своем листе, являются числами, и когда вы пытаетесь построить строку webLink, они преобразуются в строки - поэтому . для числа становится ,.

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...