我有从SQL数据库导出的客户购买数据。Google sheets的输出格式是这样的。
ID name address phone product name
1 Bob 2030 random road 6265609245 A
1 B
2 Peter 5453 golden drive A
2 D
3 Jason 1 dna way C
4 James sfo drive A
4 B
4 C
我想知道是否可以在空白单元格中自动填入上层单元格的值 如果它们有相同的ID。为了说明这一点,请看下面所需的输出格式。
ID name address phone product name
1 Bob 2030 random road 6265609245 A
1 Bob 2030 random road 6265609245 B
2 Peter 5453 golden drive A
2 Peter 5453 golden drive D
3 Jason 1 dna way C
4 James sfo drive A
4 James sfo drive B
4 James sfo drive C
任何帮助将是非常感激的!
我假设你想根据ID来完成这一行。如果我的假设是正确的,你可以使用这个Apps Script代码。
function so62048323() {
var data = SpreadsheetApp.getActive().getDataRange().getValues();
var nameDictionary = new Object();
var addressDictionary = new Object();
var phoneDictionary = new Object();
for (var r = 1; r < data.length; r++) {
if (data[r][0] != '') {
if (data[r][1] != '') {
nameDictionary[data[r][0]] = data[r][1];
}
if (data[r][2] != '') {
addressDictionary[data[r][0]] = data[r][2];
}
if (data[r][3] != '') {
phoneDictionary[data[r][0]] = data[r][3];
}
}
}
for (var r = 1; r < data.length; r++) {
if (data[r][1] == '') {
data[r][1] = nameDictionary[data[r][0]];
}
if (data[r][2] == '') {
data[r][2] = addressDictionary[data[r][0]]
}
if (data[r][3] == '') {
data[r][3] = phoneDictionary[data[r][0]];
}
}
SpreadsheetApp.getActive().getDataRange().setValues(data)
}
该代码将启动读取你所有的表与。SpreadsheetApp.getActive()
, Spreadsheet.getDataRange()
和 Range.getValues()
. 之后,它将创建三个 对象 作为字典。
之后,代码将遍历每一行,并在字典中记录与ID相关的每个值(姓名、电话和地址)。之后,代码将重复操作,但写下这些值。最后,所有的数据都会用Range.setValues()加载到工作表中。例如,如果我们有这个电子表格。
而我们使用这个脚本,我们最终会得到这样的结果:
请注意,一些ID没有任何电话,这些都是空的。我知道你可能使用了一个非常大的数据库,所以我对代码进行了优化,使其在不考虑数据大小的情况下运行速度最快。另外,即使行没有排序,这段代码也能运行。如果你有疑问,不要犹豫,可以问我任何问题。