【问题标题】:Apps script .getValue() returning #N/A应用程序脚本 .getValue() 返回 #N/A
【发布时间】:2018-10-27 20:55:47
【问题描述】:

我在尝试将数据添加到我的 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() 不返回公式的 result 是我最大的担忧。最奇怪的是,最右边的一列也是一个公式:=index(F6:F35,match($A$3,$A$6:$A$35,0))

该公式与问题公式之间的唯一区别是除法运算符“/”。对此有什么想法吗?

除了对插入查询进行测试外,我还在工作表中使用 Open、High.. 到 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 |
+------------+-----------------+----------------+----------------+----------------+-------------+

插入查询的结果 ^

【问题讨论】:

    标签: google-apps-script getvalue


    【解决方案1】:

    使用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 或结果。

    【讨论】:

    • 感谢 Aidan,iferrror() 有点工作,但仍然不是我想要的结果。我在上面添加了一些附加信息以及您的建议的结果。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2016-11-19
    • 2014-04-23
    相关资源
    最近更新 更多