我又回来了。我需要你的帮助。
我有一个 Google 表格,其中复制了所有玩命运轮盘的用户。 例如,在 E 列中,这些值是从数据库复制的: "a:1:{i:0;s:12:"半价";}"
我希望脚本只提取同一行 H 列中赢得的“半价”奖品。 如果没有获胜(如 E7)我可以写“NO WIN”
为了清晰起见,我附上图片
感谢大家的宝贵帮助。 毛罗
使用Apps脚本
对于这一部分,循环遍历每一行以提取奖品文本或“NO WIN”
const results = data.map(row => {
const prizeData = row[0];
if (prizeData === 'a:0:{}') {
return ['NO WIN'];
}
这个正则表达式从模式 a:1:
{i:0;s:12:"Metà Prezzo";}
中提取奖品文本
const match = prizeData.match(/s:\d+:\"([^\"]+)\"/);
const prize = match ? match[1] : null;
function myFunction() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const dataRange = sheet.getRange(2, 5, sheet.getLastRow() - 1);
const prizeColumn = sheet.getRange(2, 8, sheet.getLastRow() - 1);
const data = dataRange.getValues();
const results = data.map(row => {
const prizeData = row[0];
if (prizeData === 'a:0:{}') {
return ['NO WIN'];
}
const match = prizeData.match(/s:\d+:\"([^\"]+)\"/);
const prize = match ? match[1] : null;
if (prize === "Metà Prezzo" || prize === "NO WIN") {
return [prize];
} else {
return [''];
}
});
prizeColumn.setValues(results);
}
示例输出
BYROW函数与LAMBDA、IF和FIND结合使用,处理从
E2
到E8
的单元格范围内的每个值,检查特定条件,并根据条件返回相应值那些条件。
=BYROW(E2:E8, LAMBDA(r, IF(r = "a:0:{}", "No Win", IFERROR(IF(FIND("Metà Prezzo",r)>0,r,""),""))))