首页 > 解决方案 > 匹配列标题并使用 for 循环获取下面的行

问题描述

我想从tabData( B1:I) 中获取所有列数据,其中标题 ( B1:1) 是> version( A3)。

因此,在下图中,所有数据都以绿色 ( B2:E)突出显示

最后,我只想拥有独特的价值观。

我尝试了几种不同的功能,但没有取得多大成功。关于我所做的最好的事情是将我的范围tabData缩小到比赛> version。在进入 for 循环之前,我尝试过展平数据。我已经尝试过tabData首先制作独特的。但是,我无法将数据与标题相关联(至少,我不确定如何)。我可能过于复杂了应该很容易的事情,但我没有看到它。我确定我走在正确的轨道上,只是做事无序之类的。

这是我的脚本的链接(function getTabArray在 update.gs 中),如果您想看看我到目前为止所做的工作。

在此处输入图像描述

function getTabArray() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var version = ss.getRangeByName("version").getValue().toString();
  var updateTabsName = "updateTabs";
  var updateTabsSheet = ss.getSheetByName(updateTabsName);
  var tabDataRows = updateTabsSheet.getLastRow();
  var tabDataCols = updateTabsSheet.getLastColumn() - 1; // -1 because we're starting in Col B
  var tabDataRange = updateTabsSheet.getRange(1, 2, tabDataRows, tabDataCols);
  var tabData = tabDataRange.getValues();
  var tabDataLen = tabData.length;
  Logger.log("// END VARIABLES //");

  // var tabDataFlat = [].concat(...tabData); // Flatten array
  // console.log(tabDataFlat);

  // tabDataFlat = tabDataFlat.filter(item => item); // Remove empties

  for (var i = 0; i < tabData.length; i++) {
    for (var j = 0; j < tabDataCols; j++) {
      if (tabData[i] != "" && tabData[0][i] > version) {
        // Logger.log("tabData[0][i] = " + tabData[0][i]);
        Logger.log("tabData[j] = " + tabData[j]);
        // Logger.log("tabData[i][j] = " + tabData[i][j]);
      }
    }
  }
}

这是数据的 CSV 版本。我确信有一种方法可以在记录器中以不同的方式对其进行格式化,但我找不到它。

[ [ '2.20200514.2', '2.20200514.0', '2.20200513.2', '2.20200513.1' ],
  [ 'Sheet6', 'Sheet7', 'Sheet6', 'Sheet7' ],
  [ 'settings', '', 'Sheet8', 'settings' ],
  [ '', '', '', '' ],
  [ '', '', '', '' ],
  [ '', '', '', '' ] ]

标签: javascriptarraysgoogle-apps-scriptgoogle-sheets

解决方案


假设标题版本按降序排列,版本 A3 存在于 1:1 范围内,

片段:

const tabData = tabDataRange.getValues();
const indexOfVersion = tabData[0].indexOf(version);
tabData.forEach(row => row.length = indexOfVersion);
console.info(tabData)

const tabData = [ [ '2.20200514.2', '2.20200514.0', '2.20200513.2', '2.20200513.1' ],
  [ 'Sheet6', 'Sheet7', 'Sheet6', 'Sheet7' ],
  [ 'settings', '', 'Sheet8', 'settings' ],
  [ '', '', '', '' ],
  [ '', '', '', '' ],
  [ '', '', '', '' ] ];
const version = '2.20200513.1';
const indexOfVersion = tabData[0].indexOf(version);
tabData.forEach(row => row.length = indexOfVersion);
console.info(tabData.filter(row => row.some(String)))


推荐阅读