Я провел два полных рабочих дня в поисках форумов и устранении неполадок в целом, но, поскольку я относительно новичок в java, это может быть случай, когда новичок нарушает основы. Если это правда, прошу прощения.
Контекст: экономическое обоснование, для которого я кодирую, требует сравнения записей между двумя отдельными файлами электронных таблиц Google, очень похоже на то, как sql запрашивает две таблицы с использованием первичных и внешних ключей. Для облегчения два диапазона из соответствующих файлов электронных таблиц загружаются в отдельные массивы, а затем поля, действующие как первичные и внешние ключи, сравниваются на соответствие.
Проблема: код выполняется, и, судя по тому, что я наблюдал с помощью отладчика, совпадение должно быть определено, если оператор IF должен был оценить, но оператор IF не может оценить, и поэтому такого соответствия нет. идентифицировано. Я попытался сделать так, чтобы это было легко увидеть в журнале, который будет создан при запуске кода в сопутствующая реконструкция (где i = 2, а совпадающее значение – 32).
Я проверил, что типы данных сравниваемых полей одинаковы в двух электронных таблицах, и поэкспериментировал с разными операторами сравнения в случае, если значения массива были числами с плавающей запятой. Кроме того, я попытался загрузить массивы с помощью цикла for после объявления их с помощью синтаксиса [ [ ],[ ] ] вместо синтаксиса, используемого в сопутствующей реконструкции. И, наконец, я сделал так, чтобы оператор IF правильно вычислялся только тогда, когда аргументы функции вообще не хранятся в массиве. Однако это неудовлетворительное решение из-за упомянутого ниже ограничения.
Ограничения. Обходные пути, исключающие использование массивов, скорее всего, нецелесообразны, если они увеличивают число обращений к серверу, как это было в случае, когда я пытался использовать метод getValue() в единственном числе (вместо метода getValues() во множественном числе). ) для загрузки массива по одному значению за раз. Это явление не будет наблюдаться в сопроводительной реконструкции, поскольку две таблицы, предназначенные для сравнения, находятся в одном файле.
Кроме того, в то время как две серии, загруженные в массив, находятся в соседних столбцах в сопутствующей реконструкции, в моем реальном случае их нет. По этой причине любые обходные пути, объединяющие два метода getValues() в один, скорее всего, также будут непрактичными.
Как будет выглядеть успех: когда переменная с именем «return» перестанет быть неопределенной в журнале после выполнения кода, значит, совпадение было идентифицировано и сохранено!
Дополнительный материал: суть этой проблемы воссоздана для вас в этот Google Sheet для иллюстрации, и я скопирую приведенный ниже код.
function simulation() {
var thisSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var nameObj = {}
var nameArray = []
nameObj.name = thisSheet.getRange(2,1,3,1).getValues();
nameObj.number = thisSheet.getRange(2,2,3,1).getValues();
nameArray.push(nameObj);
var vendorObj = {}
var vendorArray = []
vendorObj.vendorName = thisSheet.getRange(2,4,3,1).getValues();
vendorObj.vendorNumber = thisSheet.getRange(2,5,3,1).getValues();
vendorArray.push(vendorObj);
for (var i = 1; i < vendorArray[0].vendorNumber.length + 1; i++) {
matchOnNumber(nameArray,vendorArray[0].vendorNumber[i - 1]);
}
}
function matchOnNumber(nameArray, vendorNumber) {
var thisSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
for (var i = 0; i < nameArray[0].name.length; i++) {
Logger.log("vendorNumber = " + vendorNumber + ", i = " + i + ", Matched against: " + nameArray[0].number[i]);
if (nameArray[0].number[i] == vendorNumber) {
var result = nameArray[0].number[i];
}
}
Logger.log("Result: " + result);
return result;
}