search - 如何匹配特定列中的精确文本并输出整行信息?
问题描述
我一直在尝试创建一个 Telegram 机器人来搜索预先存在的数据库并根据搜索查询输出信息,基本上我希望机器人通过 Telegram 接收包含发票号的文本并输出有关该订单的所有相关信息(整个行信息)。
由于我正在处理发票号和跟踪号,有时机器人会导出不正确的信息,因为当前脚本与确切的文本或特定列不匹配。
例如,它不是搜索和查找发票编号,而是选择部分匹配的跟踪编号并输出错误信息。
我想将其设置为搜索特定列,即。第 3 列 - “Invoice #”,然后输出整行信息。
提前致谢!
我一直在使用 Google App Script:
var token = "";
var telegramUrl = "https://api.telegram.org/bot" + token;
var webAppUrl = "";
var ssId = "";
function getMe() {
var url = telegramUrl + "/getMe";
var response = UrlFetchApp.fetch(url);
Logger.log(response.getContentText());
}
function setWebhook() {
var url = telegramUrl + "/setWebhook?url=" + webAppUrl;
var response = UrlFetchApp.fetch(url);
Logger.log(response.getContentText());
}
function sendText(id,text) {
var url = telegramUrl + "/sendMessage?chat_id=" + id + "&text=" + text;
var response = UrlFetchApp.fetch(url);
Logger.log(response.getContentText());
}
function doGet(e) {
return HtmlService.createHtmlOutput("Hi there");
}
function doPost(e) {
var data = JSON.parse(e.postData.contents);
var text = data.message.text;
var id = data.message.chat.id;
var name = data.message.chat.first_name + " " + data.message.chat.last_name;
var answer = "Hi " + name + ", please enter invoice number.";
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Orders");
var search_string = text
var textFinder = sheet.createTextFinder(search_string)
var search_row = textFinder.findNext().getRow();
var value = SpreadsheetApp.getActiveSheet().getRange("F"+search_row).getValues();
var value_a = SpreadsheetApp.getActiveSheet().getRange("G"+search_row).getValues();
sendText(id,value+" "+ value_a)
}
解决方案
我会查找存储订单号的特定列。
我不确定这是否是性能方面的最佳方式,但我认为它应该有效。
function orderInformation(orderNumber){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Orders");
//Gets last row in Orders sheet
var lastRow = sheet.getLastRow();
//Here you can change column where is order number stored
var orderNumberRange = sheet.getRange("A1:A" + lastRow);
//Gets all order number values
var orderNumbers = orderNumberRange.getValues();
//You can use indexOf to find which row has information about requested order
var orderLocation = orderNumbers.indexOf(orderNumber);
//Now get row with order data, lets suppose that your order information is from column A to Z
var orderData = sheet.getRange("A" + (orderLocation + 1) + ":Z" + (orderLocation + 1)).getValues();
//Now you have all data in array, where you can loop through and generate response text for a customer.
}
抱歉,我还没有测试过,目前我没有时间制作测试表,但这是我会这样做的方式,我认为它应该可以工作。
我可能会在以后能够制作测试表时对其进行测试。
推荐阅读
- kubernetes - Kubernetes 中的日志审计
- ruby-on-rails - Rails 6 会话数据不持久
- python - 我可以检查:ONE if 语句中的字符串中的 x, y 而不使用额外的 elifs
- android - ViewModel 的 observe() 方法没有正确观察
- go - 通过 Golang 代码使用服务帐户凭据从 GCR 中提取图像
- python-3.x - 如何跟踪可移动 QTab 的本地位置?
- python - 使用 NEOS 作为 Pyomo 求解器
- swift - 在 Stripe PaymentOptionViewController 中未调用添加新卡
- ios - 如果不推荐使用 NetService,我应该如何在 macOS 上执行 mDNS?
- java - spring boot 用类建模 MySQL 原生查询结果而不创建表实体