Используя сценарии Google Sheets, почему оператор if всегда возвращает false при сравнении значений ячеек? - PullRequest
3 голосов
/ 06 апреля 2020

Мне нужно сравнить две значения ячеек и действовать на них, если они разные. Однако мой оператор if всегда возвращает false при сравнении содержимого ячейки, и я не могу понять, почему:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1'); // apply to sheet name only 
  var testvalues = sheet.getRange('A1:A2').getValues(); // array of values to be tested
  var testvalue1 = testvalues[0]; // The contents from A1
  var testvalue2 = testvalues[1]; // The contents from A2
  var test1 = testvalue1 == testvalue2; // True False test
  var test2 = testvalue1 === testvalue2;// True False test
  Browser.msgBox(testvalue1 + " and " + testvalue2 + " being the same is " + test1 + " and " + test2); // Sentence revealing outcome
};

test1 и test2 всегда возвращают false независимо от содержимого ячеек A1 и A2 (пусто, число, текст, другое). Если я отредактирую значения тестов следующим образом:

  var testvalue1 = "We are the same value";
  var testvalue2 = "We are the same value";

или

  var testvalue1 = testvalues[0];
  var testvalue2 = testvalues[0];

, тогда оба теста внезапно вернут True, как и ожидалось. Может кто-нибудь сказать мне, что мне не хватает в этом, это бесит? В настоящее время в A1 и A2 используется значение 1 (до того, как меня потенциально спросят об этом).

Конечная цель - использовать границу для разделения содержимого различных ячеек. У меня все остальное работает отлично, но я изолировал проблему с вышеупомянутой концепцией.

Огромная благодарность за любую помощь!

Ответы [ 2 ]

5 голосов
/ 06 апреля 2020

Ответ:

Метод .getValues() возвращает двумерный массив, поэтому вы неправильно ссылаетесь на значения в каждой ячейке в вашем массиве.

Дополнительная информация:

Предположим, что и A1, и A2 содержат строку "THIS". Выполнение следующей строки:

var testvalues = sheet.getRange('A1:A2').getValues();

присвоит массиву [[THIS], [THIS]] значение testvalues.

Исправление кода:

Вам необходимо изменить:

var testvalue1 = testvalues[0]; // The contents from A1
var testvalue2 = testvalues[1]; // The contents from A2

до:

var testvalue1 = testvalues[0][0]; // The contents from A1
var testvalue2 = testvalues[1][0]; // The contents from A2

Я надеюсь, что это полезно для вас!

Ссылки:

2 голосов
/ 06 апреля 2020

Следующая строка кода неверна, ниже она исправлена.

  var testvalue1 = testvalues[0][0]; // The contents from A1
  var testvalue2 = testvalues[1][0]; // The contents from A2

Вы изначально захватываете всю строку вместо одной ячейки.

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