如何使用appscript比较两个电子表格中的数据



我有两个名为source_datatarget_data电子表格。我将它们与下面的代码进行比较,但我希望此代码返回进行更改的确切单元格地址。还有确切的变化,那个单元格的前一个值和那个单元格的新值。两张表都有相同的范围,因为我已经用另一个函数将source_data的数据复制到target_data表中。

function updateSheet() {
const actualSheet = SpreadsheetApp.openById("1dtyM-Q3ej4q3NORbPAgTNlymcdLlBCXd4wbNbMMc8fE");
const copiedSheet = SpreadsheetApp.openById("14xvI7fUVxsMNMfAPWP-WUcoX2bo35S93CylC6RnjP7k");
let sourceValues = actualSheet.getSheetByName("admanager").getRange("A:D").getValues().filter(String)
let targetSheet =  copiedSheet.getSheetByName("admanager")
let targetRange =  targetSheet.getRange("A:D");
let targetValues = targetRange.getValues().filter(String)
let diff = targetValues.showDif(sourceValues)
Logger.log(diff);
// targetRange.clearContent();
// targetValues = (diff && diff.length) ? targetValues.concat(diff) : targetValues;
// targetSheet.getRange(15, 5, targetValues.length, targetValues[0].length).setValues(targetValues)
}
Array.prototype.showDif = function (array) {
let that = this;
return array.filter(function (r) {
return !that.some(function (x) {
return r.join() === x.join();
})
})
}

这段代码在一个数组中给出输出,该数组返回有差异的整行。输出>gt;

1:54:04 PM  Info    [[a, bcd, lorem ipsumdh dchdbcbdj. bhjdbc.], [b, language, Lorem ipsum hbfhbfhdv]]

请告诉我如何修改此代码,使其返回准确的单元格位置及其值,而不是包含整行的数组?

我相信你的目标如下。

  • 您想要检查";admanager"在";actualSheet";片材和片材";admanager"在";copiedSheet";工作表使用谷歌应用程序脚本
  • 您希望将差值作为坐标返回;actualSheet";片材和";copiedSheet";表

在这种情况下,下面的修改脚本如何?

修改的脚本:

function updateSheet() {
const a1Notation = "'admanager'!A:D"; // Please set the range.
const sourceSpreadsheetId = "###"; // Please set the Spreadsheet ID.
const targetSpreadsheetId = "###"; // Please set the Spreadsheet ID.
const [sourceValues, targetValues] = [sourceSpreadsheetId, targetSpreadsheetId].map(id => SpreadsheetApp.openById(id).getRange(a1Notation).getDisplayValues());
const diff = sourceValues.reduce((ar, r, i) => {
r.forEach((c, j) => {
if (c != targetValues[i][j]) ar.push({row: i + 1, col: j + 1, sourceValue: c, targetValue: targetValues[i][j]});
});
return ar;
}, []);
console.log(diff);
}
  • 在此示例脚本中,比较sourceSpreadsheetIdtargetSpreadsheetId的两个电子表格的单元格值,当单元格值不同时,返回单元格坐标和每个值

结果:

当运行上述脚本时,将获得以下结果。

[
{ row: 1, col: 1, sourceValue: 'a1', targetValue: 'updated' },
,
,
,
]

参考文献:

  • map((
  • reduce((

最新更新