War*_*rem 12 google-finance google-sheets google-apps-script array-formulas google-sheets-formula
=ARRAYFORMULA(IF(ROW(B:B)=1, "Share Price", IF(ISBLANK(B:B), "", googlefinance(B:B, "price"))))
Run Code Online (Sandbox Code Playgroud)
我试图让第 1 行(我的标题行)有一个名称,然后在其下方,如果 B 列中输入了有效的股票代码,则让 google Finance 获取该股票的价格。然而,我在“股价”下方的所有单元格中都得到了“N/A”,并且不明白为什么。
请帮助。
在单元格 C1 中使用以下公式:
\n=MAP(B:B,LAMBDA(ticker,IF(ROW(ticker)=1,"Share Price",if(isblank(ticker),,GOOGLEFINANCE(ticker,"price")))))\nRun Code Online (Sandbox Code Playgroud)\n这是自引入以来的新方法LAMBDA其辅助函数以来的一种新方法。
现在可以通过使用around 它而不是 来GOOGLEFINANCE解决的一些不便。据我了解,这里的技巧是,分别计算输入数组中每一行的指定公式(效果类似于在整个范围内手动扩展公式),而将整个数组作为参数传递给公式(很特殊,并且不能直观地使用此类输入)。MAP(LAMBDA)ARRAYFORMULAMAP(LAMBDA)ARRAYFORMULAGOOGLEFINANCE
此通用方法可用于GOOGLEFINANCE以类似的方式(即从指定范围)将另一个参数传递给函数。如果这样指定的参数之一应该是 start_date (在这种情况下没有指定 end_date|num_days ),那么我们还需要使用INDEX(GOOGLEFINANCE(),2,2),因为 with start_date (并且没有 end_date|num_days )的输出GOOGLEFINANCE将是一个 2\xc3\x972 数组,其中只有最后一个值是我们需要的。
为了更好地说明这种方法,我遇到了一个类似的问题:假设我们想要 A2:A、B2:B 范围内指定的货币之间的兑换率(及其适当的三个字母代码),在每种情况下从指定的日期开始范围 C2:C。解决方案将是单元格 D2 中的以下公式:
\n=MAP(A2:A,B2:B,C2:C,LAMBDA(currency_1,currency_2,date,INDEX(GOOGLEFINANCE("currency:" & currency_1 & currency_2,"price",date),2,2)))\nRun Code Online (Sandbox Code Playgroud)\n
GOOGLEFINANCE已经有点 ArrayFormula 所以这不会像你期望的那样工作......
您将需要使用脚本:
function onOpen(e){this.arrayThis("C1:C");} //COLUMN WHERE YOU WANT TO HAVE THE RESULT
function arrayThis(range){
SpreadsheetApp.getActiveSpreadsheet().getRange(range).setValue(SpreadsheetApp.getActiveSpreadsheet().getRange(range).getCell(1,1).getFormula());
}
Run Code Online (Sandbox Code Playgroud)
其中 C1 需要是:
=IF(ROW(B1)=1, "Share Price", IF(B1="",,GOOGLEFINANCE(B1, "price")))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5146 次 |
| 最近记录: |