在将数据从源 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")`));
我正在使用以下代码将源 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")`));