Сценарий приложения.getValue(), возвращающий #N/A
У меня проблема с этим сценарием приложений, который пытается добавить данные в мою базу данных Google Cloud. Проблемные переменные: Open, High, Low, Close; это все значения, найденные по формулам на листе "RAW". Формулы за Open, High, Low, Close выглядят так:
=round(index(B6:B35,match($A$3,$A$6:$A$35,0))/index(AUD!C:C,match(A3,AUD!A:A,0)),8)
Когда запрос пытается выполнить, getValue() возвращает #N/A, как и getDisplayValue(), который не совпадает с параметрами таблицы.
Проблема возникает только тогда, когда ячейки ссылки содержат формулы, когда я изменяю эти ячейки на целые числа, чтобы проверить, проходит ли это к базе данных без проблем.
Есть ли другой способ сделать это, или прекратить getValue(), возвращая #N/A?
Большое спасибо!
ОМ.
function insert() {
// RAW Variables
var date_ = Utilities.formatDate(SpreadsheetApp.getActiveSpreadsheet().getSheetByName('RAW').getRange('A3').getValue(), "GMT+10", "yyyy-MM-dd");
var open_ = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('RAW').getRange('B3').getValue()
var high_ = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('RAW').getRange('C3').getValue()
var low_ = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('RAW').getRange('D3').getValue()
var close_ = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('RAW').getRange('E3').getValue()
var volume_= SpreadsheetApp.getActiveSpreadsheet().getSheetByName('RAW').getRange('F3').getValue()
// Connection Variables
var connectionName = '.....';
var user = '.....';
var userPwd = '......';
var db = '.....';
var dbUrl = 'jdbc:google:mysql://' + connectionName + '/' + db;
var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);
var stmt = conn.createStatement()
// Query
var query="insert into test(Date, Open, High, Low, Close, Volume) values('"+date_+"','"+open_+"','"+high_+"','"+low_+"','"+close_+"','"+volume_+"')"
stmt.execute(query)
stmt.close()
conn.close()
}
Обновить:
Добавив iferror() в начало формул, я смог получить значение ошибки в таблице, однако для меня это не идеальный результат.
Тот факт, что getValue() или getDisplayValues () не возвращает результат формулы, является моей самой большой проблемой. Что самое странное, это то, что самый правый столбец также является формулой: =index(F6:F35,match($A$3,$A$6:$A$35,0))
Единственная разница между этой формулой и проблемными - это оператор деления '/'. Есть мысли по этому поводу?
Вне тестирования запроса вставки я также проверял, используя Open, High.. to cell.setValue(), внутри листов и получая тот же результат # N / A.
| 2018-05-13 | 11278.421244330 | 11620.21125128 | 11118.99605973 | 11554.50481772 | 5866380000 |
| 2018-05-14 | 11576.562811400 | 11799.80070418 | 11118.00969906 | 11581.46548861 | 7364150000 |
| 2018-05-15 | 11657.201395350 | 11832.62472130 | 11324.11133355 | 11396.32950125 | 6705710000 |
| 2018-05-16 | 0.000000000 | 0.00000000 | 0.00000000 | 0.00000000 | 6760220000 |
+------------+-----------------+----------------+----------------+----------------+-------------+
Результат от запроса вставки ^
2 ответа
Используйте IFERROR для устранения N/A и #DIV/0!
=IFERROR(formula, "value to display if an error occurs")
Я не могу проверить ваши, но я бы сказал, что это то, что вы ищете:
=IFERROR(round(index(B6:B35,match($A$3,$A$6:$A$35,0))/index(AUD!C:C,match(A3,AUD!A:A,0)),8), 0)
getValue () теперь всегда будет возвращать 0 или результат.
У меня была аналогичная проблема при попытке получить информацию из запроса с importrange. Я думаю, что вы не можете использовать данные из диапазона импорта в качестве значения, хотя это может быть комбинация обоих. Если значение вашего индекса в формуле представляет собой данные importrange, вероятно, это и есть причина.
Я пытался создать динамическую формулу для вставки на листы на основе выбранного столбца. Он продолжал давать #N/A, пока я пытался получить информацию о столбце из диапазона импорта. Как только я перешел от сопоставления, в котором использовались данные importrange, к расчетному способу определения столбца, все заработало.