如何在Google Apps Script中为GOOGLEFINANCE结果添加除以100运算
解决方案
要实现将GOOGLEFINANCE获取的历史价格除以100(GBX转GBP),你需要修改生成公式的逻辑——因为GOOGLEFINANCE返回的是包含日期和价格的二维数组,得用ARRAYFORMULA批量处理价格列,同时保留日期列的完整性。
修改后的代码
function generateHistoricalPriceSheetForSymbol(symbol, fromDate) { var symbolSheet = createNewOrClearOldSheet(symbol) var fromDateFunction = "DATE(" + fromDate.getFullYear() + "," + (fromDate.getMonth() + 1) + "," + fromDate.getDate() + ")" // 修改公式:用LET缓存GOOGLEFINANCE结果,避免重复调用;仅对数据行的价格列除以100,保留表头 var historicalPricesFormula = 'ARRAYFORMULA(LET(data, GOOGLEFINANCE("' + symbol + '", "price", ' + fromDateFunction + ', TODAY(), "DAILY"), IF(ROW(data)=1, data, {INDEX(data,,1), INDEX(data,,2)/100})))' symbolSheet.getRange('A1').setFormula(historicalPricesFormula) var fontFamily = getConfigurationByKey('Font Family') var dateFormat = getConfigurationByKey('Date Format') symbolSheet.getRange('A:A').setNumberFormat(dateFormat).setFontFamily(fontFamily) var numberFormat = getConfigurationByKey('Number Format') symbolSheet.getRange('B:B').setNumberFormat(numberFormat).setFontFamily(fontFamily) cleanUnusedCells(symbolSheet) }
关键说明
- 使用
LET函数缓存GOOGLEFINANCE的查询结果,避免重复调用API,提升效率 - 用
IF(ROW(data)=1, data, ...)判断表头行,确保第一行的"Price"表头不会被除以100 - 通过
{INDEX(data,,1), INDEX(data,,2)/100}拆分数组:保留第一列(日期)不变,第二列(价格)除以100后重新组合
内容的提问来源于stack exchange,提问作者Guillermo
相关产品推荐
相关产品推荐

