如何在Google Sheets中用If/Else语句跳过重复行,在HTML UI表格展示唯一值
嘿,我明白你的问题了——你现在的脚本会把所有采购订单号都显示出来,包括重复的,但你只想展示唯一的编号对吧?别担心,我来帮你搞定这个!
核心思路
问题出在你没有对获取到的订单号做去重处理。与其用容易出错的if/else逐个判断,不如利用JavaScript的Set对象来快速去重,它天生就会自动过滤重复值,代码还更简洁。
步骤1:修改后端Apps Script代码
首先更新你的脚本,先从工作表获取数据,然后去重,再把处理好的唯一值传给HTML界面:
// 获取所有唯一的采购订单号 function getUniquePurchaseOrders() { const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const poSheet = spreadsheet.getSheetByName('POHistory'); // 获取A列数据(假设A1是表头,从A2开始是订单号) const allPOs = poSheet.getRange('A2:A').getValues().flat(); // 去重+过滤空单元格:先用filter去掉空值,再用Set去重,最后转成数组 const uniquePOs = [...new Set(allPOs.filter(po => po !== ''))]; return uniquePOs; } // 显示HTML UI function showPOUi() { const htmlTemplate = HtmlService.createTemplateFromFile('你的HTML文件名'); // 把唯一订单号数组传给模板 htmlTemplate.uniquePOs = getUniquePurchaseOrders(); // 弹出对话框 SpreadsheetApp.getUi().showModalDialog( htmlTemplate.evaluate().setWidth(400).setHeight(300), '唯一采购订单编号' ); }
步骤2:调整HTML界面渲染
接下来修改你的HTML文件,遍历去重后的数组来生成表格:
<!DOCTYPE html> <html> <head> <base target="_top"> <style> table {border-collapse: collapse; width: 100%; margin: 10px 0;} th, td {border: 1px solid #ccc; padding: 8px; text-align: left;} th {background-color: #f5f5f5;} </style> </head> <body> <h3>唯一采购订单</h3> <table> <tr> <th>订单编号</th> </tr> <!-- 遍历唯一订单号数组生成行 --> <? for (let po of uniquePOs) { ?> <tr> <td><?= po ?></td> </tr> <? } ?> </table> <button onclick="google.script.host.close()">关闭</button> </body> </html>
为什么你的if/else没生效?
大概率是你的判断逻辑有漏洞:比如你可能在遍历的时候没有正确跟踪已经显示过的订单号,或者判断条件写得不对(比如没考虑空值)。而用Set的方式更可靠,它会自动帮你处理所有重复值,代码也少很多,不容易出错。
如果你的订单号有大小写差异(比如PO123和po123算同一个),还可以在去重的时候统一转成大写/小写:
const uniquePOs = [...new Set(allPOs.filter(po => po !== '').map(po => po.toUpperCase()))];
内容的提问来源于stack exchange,提问作者Korslin
相关产品推荐
相关产品推荐

