【问题标题】:Apps Script - compare two arrays, find differences (value and index of cells)Apps 脚本 - 比较两个数组,找出差异(单元格的值和索引)
【发布时间】:2021-06-09 05:31:44
【问题描述】:

我有两个垂直的一维数组,一个包含现有数据,另一个可能(可能)存在差异。

我希望能够比较两个数组,找出不同之处以及每个不同单元格的索引。

然后,我将使用该信息在现有数据中找到需要更改的适当单元格,并在这些特定单元格中设置新值,而无需复制和粘贴整个数组。

例如:

Existing Data New Data
John Smith John Smith
012345 012345
6th grade 7th grade
555-1234 555-1357
Trumpet Trumpet
5th period 2nd period
Jane Smith Jane Smith
js@email.com js@email.com

在这种情况下,代码会看到第 3、4 和 6 行存在差异,将这些新值及其在数组中的位置保存,然后在主数据列表中更新适当的值而不更改任何其他内容。

我尝试了多种方法来比较两个数组并获取有差异的行的索引,这是我所获得的没有错误或“空”结果的情况:

function updateInfo() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var currentSheet = ss.getSheetByName("CURRENT");
var infoSheet = ss.getSheetByName("INFO Search");

var origVal = infoSheet.getRange(5,2,52,1).getValues();
var newVal = infoSheet.getRange(5,4,52,1).getValues();
var list = [];

var origData = origVal.map(function(row,index){
  return [row[0],index];
});
 Logger.log(origData);

var newData = newVal.map(function(row,index){
  return [row[0],index];
});
Logger.log(newData);

这只是给了我每个单元格的值和索引。 有没有一种快速有效的方法来比较两个数组,获取我需要的数据,并更改原始列的某些单元格中的值? 我不能只是复制和粘贴整个列,因为在需要保持完整的各行中嵌入了公式。

感谢您提供的任何帮助!

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。不幸的是,来自This just gives me the value and index of each cell. Is there a fast and efficient way to compare the two arrays, get the data I need, and change the values in just certain cells of the original column?,我无法理解您的目标。为了正确理解您的问题,您能否提供您期望的示例输入和输出值?顺便问一下你问题中的表格和你的脚本之间的关系吗?
  • 嗨,this answer 对您有用吗?如果是这种情况,请考虑接受这个stackoverflow.com/help/someone-answers。

标签: arrays google-apps-script google-sheets indexof


【解决方案1】:

解决办法:

遍历新的数据数组。对于每个值,检查新值是否与旧值匹配。如果是这种情况,请将相应的值和索引添加到您的 list。

然后遍历您的list,并为每一对值和索引,将值写入相应的单元格。

代码sn-p:

newVal.forEach(function(row, index) {
  if (row[0] === origVal[index][0]) {
    list.push([row[0], index]);
  }
});
var firstRow = 2; // Change according to your preferences
var columnIndex = 1; // Change according to your preferences
list.forEach(data => {
  sheet.getRange(data[1] + firstRow, columnIndex).setValue(data[0]);
});

注意事项:

  • 我不知道数据应该写在哪里,所以我使用未定义的sheet,以及firstRow 和columnIndex 的随机值。请根据您的喜好更改这些设置。
  • 从脚本的角度来看,一次将整个列写入目标范围会更有效,因为这样可以最大限度地减少脚本和电子表格之间的交互次数(请参阅Use batch operations)。不过,由于您只想写入更新后的数据,因此我提供了一个脚本来执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    相关资源
    最近更新 更多