使用 importxml 在 Google Sheet 中创建每日投资组合跟踪器
Create a daily portfolio tracker in Google Sheet, with importxml
我正在尝试跟踪 Google Sheet 中某些股票的每日股票价值和日期。目前,数据捕获代码运行良好,但每次发生更改时它都会用新值替换所有值。
在 A2 中,我有一个基于 IMPORTXML 的单元格,它从 Morningstar 获取日期,在 B2 中,基于 SUBSTITUTE(SUBSTITUTE(importxml(CONCATENATE... 从 FT 获取每日值。
我的脚本代码如下:
function saveData() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet2")
var current_date = sheet.getRange('Tracker!A2').getValues();
var current_value = sheet.getRange('Tracker!B2').getValues();
sheet.appendrow([current_date, current_value]);
Tracker 是页面的名称。 运行 代码告诉我无法从 null 获取范围。请问是什么问题?
这个答案怎么样?
修改点:
- 在您的脚本中,使用了 3 个 sheet 名称,即 "sheet1"、"sheet2" 和 "Tracker"。
ss
和 sheet
分别是 "sheet1" 和 "sheet2" 的 sheet 对象。并且,current_date
和 current_value
分别从 "Tracker" 的 sheet 上的 "A2" 和 "B2" 中检索。
- 在这种情况下,我认为
Running code tells me that I cannot getRange from null.
错误的原因是"sheet2"的sheet名称的sheet可能不包含在你的点差sheet.
- 但是,在您的脚本中,使用了
sheet.appendrow([current_date, current_value]);
。所以你想把值放到 "sheet2" 或其他 sheet 的 sheet 中?关于这一点,我从你的问题中无法理解。
- 如果要使用
appendrow
,请修改为appendRow
。
- 在您的脚本中,
getValues()
检索到的二维数组用作 [current_date, current_value]
的值。在这种情况下,即使将 appendrow
修改为 appendRow
,像 [Ljava.lang.Object;@###
这样的值也会被放入单元格。
- 如果您想从 sheet "Tracker" 的 "A2" 和 "B2" 的单元格中检索值,并希望将检索到的值附加到 sheet,可以用
Tracker!A2:B2
作为范围。
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
请将目标 sheet 名称设置为 sheetName
。
function saveData() {
var sheetName = "###"; // Please set the destination sheet name.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var value = ss.getRange('Tracker!A2:B2').getValues();
ss.getSheetByName(sheetName).appendRow(value[0]);
}
参考文献:
我正在尝试跟踪 Google Sheet 中某些股票的每日股票价值和日期。目前,数据捕获代码运行良好,但每次发生更改时它都会用新值替换所有值。 在 A2 中,我有一个基于 IMPORTXML 的单元格,它从 Morningstar 获取日期,在 B2 中,基于 SUBSTITUTE(SUBSTITUTE(importxml(CONCATENATE... 从 FT 获取每日值。
我的脚本代码如下:
function saveData() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1");
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet2")
var current_date = sheet.getRange('Tracker!A2').getValues();
var current_value = sheet.getRange('Tracker!B2').getValues();
sheet.appendrow([current_date, current_value]);
Tracker 是页面的名称。 运行 代码告诉我无法从 null 获取范围。请问是什么问题?
这个答案怎么样?
修改点:
- 在您的脚本中,使用了 3 个 sheet 名称,即 "sheet1"、"sheet2" 和 "Tracker"。
ss
和sheet
分别是 "sheet1" 和 "sheet2" 的 sheet 对象。并且,current_date
和current_value
分别从 "Tracker" 的 sheet 上的 "A2" 和 "B2" 中检索。- 在这种情况下,我认为
Running code tells me that I cannot getRange from null.
错误的原因是"sheet2"的sheet名称的sheet可能不包含在你的点差sheet. - 但是,在您的脚本中,使用了
sheet.appendrow([current_date, current_value]);
。所以你想把值放到 "sheet2" 或其他 sheet 的 sheet 中?关于这一点,我从你的问题中无法理解。
- 在这种情况下,我认为
- 如果要使用
appendrow
,请修改为appendRow
。 - 在您的脚本中,
getValues()
检索到的二维数组用作[current_date, current_value]
的值。在这种情况下,即使将appendrow
修改为appendRow
,像[Ljava.lang.Object;@###
这样的值也会被放入单元格。 - 如果您想从 sheet "Tracker" 的 "A2" 和 "B2" 的单元格中检索值,并希望将检索到的值附加到 sheet,可以用
Tracker!A2:B2
作为范围。
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
请将目标 sheet 名称设置为 sheetName
。
function saveData() {
var sheetName = "###"; // Please set the destination sheet name.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var value = ss.getRange('Tracker!A2:B2').getValues();
ss.getSheetByName(sheetName).appendRow(value[0]);
}