在将数据从源 sheet 复制到目标 sheet 时附加 GoogleFinance

Appending GoogleFinance while copy data from source sheet to target sheet

我正在使用以下代码将源 sheet 数据复制到目标 sheet(感谢 Iamblichus)。

如何将目标 sheet 数据分别附加到所有行的“=GOOGLEFINANCE(A1,price)”。 我想复制公式而不是公式的值,这样我可以获得实时值。

目标 sheet 的 A 列有股票代码。

const ss = SpreadsheetApp.getActiveSpreadsheet();
const sourceSheet = ss.getSheetByName("Source");
const targetSheet = ss.getSheetByName("Target");
const startRow = 2; 
const CHECK_COLUMN = 1; // Column A

function appendToRecords() {
  const numRows = sourceSheet.getLastRow() - 1; // Number of rows to process
  const numCols = sourceSheet.getLastColumn();
  const lastTargetRow = targetSheet.getLastRow();
  const dataRange = sourceSheet.getRange(startRow, 1, numRows, sourceSheet.getLastColumn()); // Fetch the range of cells being used
  const sourceData = dataRange.getValues(); // Fetch values for each row in the Range.
  let targetData = [];
  // if (lastTargetRow > 1) targetData = targetSheet.getRange(startRow, 1, lastTargetRow-startRow+1, numCols).getValues();  // For heading in TSheet
  if (lastTargetRow > 0) targetData = targetSheet.getRange(1, 1, lastTargetRow, numCols).getValues();   // For no heading in Tsheet 
  const newData = sourceData.filter(sourceRow => {
    const columnA = sourceRow[CHECK_COLUMN-1];
    return !targetData.some(targetRow => targetRow[CHECK_COLUMN-1] === columnA);
  });
  if (newData.length) {
    targetSheet.getRange(lastTargetRow+1, 1, newData.length, newData[0].length).setValues(newData);
  }
}

不确定要在哪里写公式,但是,如果您想将它们添加到第一个空列 (I),您可以只使用 map 附加每行的公式:

  const newData = sourceData.filter(sourceRow => {
    const columnA = sourceRow[CHECK_COLUMN-1];
    return !targetData.some(targetRow => targetRow[CHECK_COLUMN-1] === columnA);
  }).map(row => row.concat(`=GOOGLEFINANCE("${row[0]}","price")`));