javascript - 匹配列标题并使用 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' ],
[ '', '', '', '' ],
[ '', '', '', '' ],
[ '', '', '', '' ] ]
解决方案
假设标题版本按降序排列,版本 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)))
推荐阅读
- mongodb - 存在 $out 操作问题的 MongoDB 聚合管道
- android - 使用 ffmpeg 扩展构建 Exoplayer
- python - 机器人框架:我可以从多个测试文件中设置套件而不在同一个文件中定位吗?
- ruby - -7 % 3 = 2、-13 % 3 = 2 或 -1 % 3 = 2 在幕后究竟表现如何?红宝石
- python - Pandas groupby 和数据透视表绘图
- list - 该表达式的类型为“void”,因此无法使用其值 - Flutter Dart 无法将自定义对象添加到 for 循环中的列表中
- c# - 错误1053,服务没有及时响应请求
- php - Laravel 8:如何修复 ParseError 语法错误,意外的 ';'
- apache-fop - fox:alt-text 不允许出现在元素 'fo:external-graphic' 中。”
- youtube - 如何解决视频分级已禁用?