【问题标题】:Stock market on google sheets谷歌表格上的股市
【发布时间】:2020-06-24 15:35:06
【问题描述】:

我正在尝试在谷歌表格上制作一个模型股票市场。链接:https://docs.google.com/spreadsheets/d/1OmOWKfxYAdNRPcF4yfX4jJ0DX3UvUutaHJINHRU8vqo/edit?usp=sharing A-D 列是我为买入价、卖出价、买入数量、卖出数量输入的随机数。 F-I 列是按排序顺序排列的这些变量。单元格 E13 是更新后的价格。我希望单元格 E14 成为更新的销售数量。请帮忙!!

以下是我使用的代码:

function myFunction() {
  
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
  
  var Buyprice=sheet.getRange("F2").getValues(); 
  var Sellprice=sheet.getRange("H2").getValues();
  var Buyquantity=sheet.getRange("G2").getValues();
  var Sellquantity=sheet.getRange("I2").getValues();
  if(Buyprice>Sellprice){
    sheet.getRange("E13").setValues(Sellprice);
    var Buyquantity=Buyquantity- Math.min(Buyquantity,Sellquantity);
    var Sellquantity=Sellquantity- Math.min(Buyquantity,Sellquantity);
    sheet.getRange("E14").setValues(Sellquantity);}
  else{ }
}

运行此脚本时,我得到:参数(数字)与 SpreadsheetApp.Range.setValues 的方法签名不匹配。

【问题讨论】:

    标签: javascript google-sheets google-sheets-api google-sheets-query google-sheets-macros


    【解决方案1】:

    您需要将setValues() 更改为setValue()

    正如您在documentation 中看到的那样:

    getValues()

    返回此范围的矩形网格值

    setValues(值)

    设置一个矩形网格值

    现在,如果您在代码中实现日志,例如

    ...
     Logger.log(Sellquantity);
     var Sellquantity=Sellquantity- Math.min(Buyquantity,Sellquantity);
     Logger.log(Sellquantity);
    ...
    

    输出将是:

    [[6.0]]
    6.0
    

    也就是说,矩形网格会被另一个值的子部分转换为整数值。

    现在,sheet.getRange("E14").setValues(Sellquantity); 需要一个二维数组而不是一个会导致错误的数字。

    所以,请改用setValue()

    setValue()

    设置范围的值。值可以是数字、字符串、布尔值 或日期。

    确实,如果您比较类型为 [[]] 的数组元素,比较 if(Buyprice>Sellprice) 也可能无法正常工作,因此最好同时使用 getValue() 而不是 getValues()

    示例:

    function myFunction() {
      
      var ss=SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      
      var Buyprice=sheet.getRange("F2").getValue(); 
      var Sellprice=sheet.getRange("H2").getValue();
      var Buyquantity=sheet.getRange("G2").getValue();
      var Sellquantity=sheet.getRange("I2").getValue();
      if(Buyprice>Sellprice){
        sheet.getRange("E13").setValue(Sellprice);
        var newBuyquantity=Buyquantity- Math.min(Buyquantity,Sellquantity);
        var newSellquantity=Sellquantity- Math.min(Buyquantity,Sellquantity);
        sheet.getRange("E14").setValue(newSellquantity);
      }
      else{ } 
    }
    

    【讨论】:

    • 感谢您的宝贵反馈。我能够执行代码。虽然,现在卖出数量是 6。从技术上讲,应该是 2。你能指出代码有什么问题吗?我将不胜感激!
    • 我认为问题在于您无意中覆盖了Buyquantity。我更新了我的答案以显示如何将更新的购买数量保存为新变量并避免覆盖。很高兴为您提供帮助!如果可以的话,出于文档目的,请接受对您有帮助的答案 (✓) - 它可以帮助将来遇到相同问题的其他人也找到解决方案:)
    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多