首页 > 解决方案 > 在 Google 表格中的表格顶部添加 fow

问题描述

我在 Google 表格中跟踪我的股票投资组合。下面的脚本在每天晚上收市后触发。它采用某些值并将它们写入名为 的表Portfolio中,我会在其中保留这些指标随时间推移的历史记录。

var currSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var shtPortfolio    = currSpreadsheet.getSheetByName('Portfolio');

function savePortfolio()
{  
  var rngMarketValue     = shtPortfolio.getRange("G3:G3").getValues();
  var rngCost            = shtPortfolio.getRange("G2:G2").getValues();
  var rngUnrealizedPL    = shtPortfolio.getRange("L2:L2").getValues();
  var rngUnrealizedYield = shtPortfolio.getRange("K3:K3").getValues();
  var rngRealizedPL      = shtPortfolio.getRange("J2:J2").getValues();
  var rngRealizedReturn  = shtPortfolio.getRange("L6:L6").getValues();
  var rngDividends       = shtPortfolio.getRange("N2:N2").getValues();
  var rngYield           = shtPortfolio.getRange("M3:M3").getValues();

  const d = new Date();
  const mn = new Intl.DateTimeFormat('en', { minute: '2-digit' }).format(d);
  const hr = new Intl.DateTimeFormat('en', { hour: '2-digit', hour12: false }).format(d);
  const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d);
  const mo = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(d);
  const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d);
  
  var arrNewRow = ['', // column A always empty
      (`${da}.${mo}.${ye} ${hr}:${mn}`),
      rngMarketValue[0][0],
      rngCost[0][0],
      rngRealizedPL[0][0],
      rngRealizedReturn[0][0],
      rngUnrealizedPL[0][0],
      rngUnrealizedYield[0][0],
      rngDividends[0][0],
      rngYield[0][0]
  ];
  shtPortfolio.appendRow(arrNewRow);
}

它工作得很好,但让我感到困扰的是最新的日子,在工作表的底部。我想做相反的事情:在工作表顶部连续添加最新条目,如下所示:

这就是日志现在的样子。请注意,我保留的历史记录仅从第 4 行开始;上面的行中有需要留在那里的东西。

    A     B           C               D           E
1         Here I have some stuff written that needs to stay on top of the sheet
2
3         Date        MarketValue     Cost ...    RealizedPL
4         14.01.2021  4500            4000        100
5         13.01.2021  4600            3900        100

今天之后,脚本将一如既往地获取值,但现在在第 4 行上方创建一个新行(而不是仅在第 6 行中追加):

    A     B           C               D           E
1         Here I have some stuff written that needs to stay on top of the sheet
2
3         Date        MarketValue     Cost ...    RealizedPL
4         15.01.2021  4300            4000        100
5         14.01.2021  4500            4000        100
6         13.01.2021  4600            3900        100

可以这样做吗,如果可以,有人可以帮助我吗?我正在寻找一个名为prepend但它似乎不存在的函数。

标签: javascriptgoogle-sheets

解决方案


您可以使用insertRowBefore(beforePosition)在特定行索引之前添加新行。

之后,在新添加的行中选择要设置数据值的范围。

样本:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var data = [[new Date(),100,100,100] ];
sheet.insertRowBefore(4);
sheet.getRange(4,2,1,4).setValues(data);

输出:

在此处输入图像描述


推荐阅读