应用程序脚本 .getValue() 返回 #N/A



我在尝试将数据添加到我的 Google Cloud 数据库的这个应用程序脚本时遇到问题。问题变量为开盘价、最高价、最低价、收盘价;这些都是由"RAW"表中的公式找到的值。开盘价、最高价、最低价、收盘价背后的公式如下所示:

=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 |
+------------+-----------------+----------------+----------------+----------------+-------------+

插入查询的结果 ^

使用 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 从查询中获取信息时,我遇到了类似的问题。我认为您不能使用导入范围中的数据作为值,尽管它可以是两者的组合。如果公式中的索引值是导入范围数据,则可能是原因。

我试图制作一个动态公式,以根据所选列粘贴到我的工作表上。当我试图从导入范围获取列的信息时,它一直在给出 #N/A。一旦我从使用导入范围数据的匹配转到计算方式来确定列,它就起作用了。

最新更新