有没有办法在两列中突出显示值的重复组合,而不管顺序如何?
Is there a way to highlight duplicate combinations of values in two columns, regardless of the order?
我有一个 UFC 数据库,我正在寻找重赛。因此,我需要找到重复的名称组合;出现不止一次的组合。但是,由于首战的胜者可能会输掉复赛,所以无论出现的顺序如何,我都需要找到重复的。
这是我的数据库的结构:
database example。
斗士1胜斗士2负
这是一个 link 到数据库(从 kaggle 得到的):https://docs.google.com/spreadsheets/d/19ISNhYFdGzgLZz1x4h2v_Q5Pq0cofw2rkUtwk3xPXGQ/edit?usp=sharing
请随意使用它。
关于如何解决这个问题有什么想法吗?
这是我理想中想要的结果示例:
image example
只是对重复项的简单突出显示。
为了给你更准确的帮助,如果你能举例说明你想要的结果会很有帮助。如前所述,如果有很多重复项并且你用不同的颜色标记每个组,它可能会在视觉上造成混淆。
无论如何,我已经用 Apps Script and Spreadsheet Service 编写了几个函数,您可能会发现它们对您的项目有用。
代码 1
使用这些功能,您将能够获取您之前定义的两个战士参加的所有战斗:
function main() {
var name1 = 'Conor McGregor'
var name2 = 'Nate Diaz'
var result = findDuplicates(name1, name2)
console.log(result)
}
function findDuplicates(name1, name2) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Ark1')
var lastRow = sheet.getLastRow()
var lastCol = sheet.getLastColumn()
var range = sheet.getRange(1, 1, lastRow, lastCol).getValues()
var result = []
for (var i = 0; i < range.length; i++) {
if (range[i].includes(name1) && range[i].includes(name2)) {
result.push(range[i])
}
}
return result
}
代码 2
使用此功能,您可以在第三列中添加每对战士的相同编号。这样,很容易将“添加数字”更改为“给单元格涂上颜色”。
function findPairs() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Ark2')
var lastRow = sheet.getLastRow()
var lastCol = sheet.getLastColumn()
var range = sheet.getRange(1, 1, lastRow, lastCol).getValues()
var indexToSkip = []
var k = 0
for (var i = 0; i < range.length; i++) {
if (!indexToSkip.includes(i)) {
var match = range[i]
indexToSkip.push(i)
sheet.getRange(i + 1, 3).setValue(k)
for (var j = i + 1; j < range.length; j++) {
if (range[j].includes(match[0]) && range[j].includes(match[1])) {
indexToSkip.push(j)
sheet.getRange(j + 1, 3).setValue(k)
}
}
k = k+1
}
}
}
参考文献:
我有一个 UFC 数据库,我正在寻找重赛。因此,我需要找到重复的名称组合;出现不止一次的组合。但是,由于首战的胜者可能会输掉复赛,所以无论出现的顺序如何,我都需要找到重复的。
这是我的数据库的结构: database example。 斗士1胜斗士2负
这是一个 link 到数据库(从 kaggle 得到的):https://docs.google.com/spreadsheets/d/19ISNhYFdGzgLZz1x4h2v_Q5Pq0cofw2rkUtwk3xPXGQ/edit?usp=sharing
请随意使用它。
关于如何解决这个问题有什么想法吗?
这是我理想中想要的结果示例:
image example
只是对重复项的简单突出显示。
为了给你更准确的帮助,如果你能举例说明你想要的结果会很有帮助。如前所述,如果有很多重复项并且你用不同的颜色标记每个组,它可能会在视觉上造成混淆。
无论如何,我已经用 Apps Script and Spreadsheet Service 编写了几个函数,您可能会发现它们对您的项目有用。
代码 1
使用这些功能,您将能够获取您之前定义的两个战士参加的所有战斗:
function main() {
var name1 = 'Conor McGregor'
var name2 = 'Nate Diaz'
var result = findDuplicates(name1, name2)
console.log(result)
}
function findDuplicates(name1, name2) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Ark1')
var lastRow = sheet.getLastRow()
var lastCol = sheet.getLastColumn()
var range = sheet.getRange(1, 1, lastRow, lastCol).getValues()
var result = []
for (var i = 0; i < range.length; i++) {
if (range[i].includes(name1) && range[i].includes(name2)) {
result.push(range[i])
}
}
return result
}
代码 2
使用此功能,您可以在第三列中添加每对战士的相同编号。这样,很容易将“添加数字”更改为“给单元格涂上颜色”。
function findPairs() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Ark2')
var lastRow = sheet.getLastRow()
var lastCol = sheet.getLastColumn()
var range = sheet.getRange(1, 1, lastRow, lastCol).getValues()
var indexToSkip = []
var k = 0
for (var i = 0; i < range.length; i++) {
if (!indexToSkip.includes(i)) {
var match = range[i]
indexToSkip.push(i)
sheet.getRange(i + 1, 3).setValue(k)
for (var j = i + 1; j < range.length; j++) {
if (range[j].includes(match[0]) && range[j].includes(match[1])) {
indexToSkip.push(j)
sheet.getRange(j + 1, 3).setValue(k)
}
}
k = k+1
}
}
}