google-apps-script - 通过电报机器人和谷歌应用脚本在谷歌表格中填写订单
问题描述
我正在尝试通过电报机器人在谷歌表格中填写订单。在用户输入订单名称(例如“Sheet1”)后,我想一次从订单中发送一个项目的用户项目并填写谷歌表的相关答案。
例如:用户:Sheet1。机器人:苹果。用户:5。机器人:香蕉。用户:2
现在我可以在一个答案中向用户发送所有项目,但我不知道如何一次发送一个项目并将答案写入相应的单元格。
var token = "xxx"; //token of telegram-bot from BotFather
var telegramUrl = "https://api.telegram.org/bot" + token;
var webAppUrl = "https://script.google.com/macros/s/xxx/exec";
var ssId = "xxx"; /*token of google spreadsheet in
https://docs.google.com/spreadsheets/d/xxx/edit#gid=0 */
function getMe() {
var url = telegramUrl + "/getMe";
var response = UrlFetchApp.fetch(url);}
function setWebhook() {
var url = telegramUrl + "/setWebhook?url=" + webAppUrl;
var response = UrlFetchApp.fetch(url);}
function sendText(id,text) {
var url = telegramUrl + "/sendMessage?chat_id=" + id + "&text=" + text;
var response = UrlFetchApp.fetch(url);}
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;
var out = []; //array to store name of all sheets in spreadsheet
var sheets = SpreadsheetApp.openById(ssId).getSheets();
for (var y = 0 ; y < sheets.length ; y++) {
out.push( [ sheets[y].getName() ] );}
var sheet = SpreadsheetApp.openById(ssId).getSheetByName(text);
if (inArray(text, out) == true){
var cache = CacheService.getScriptCache();
if (cache.get('order') == text){
var range_test = SpreadsheetApp.openById(ssId).getSheetByName(text).getRange("A1:A3").getValues();
//B10 value is 0
var range_item = SpreadsheetApp.openById(ssId).getSheetByName(text).getRange("B10").getValues();
for (var r = 0; r < range_test.length; r++){
//send to telegram names of all items
sendText(id,range_test[r])}
//trying to cash some values and write it to a cell
var cashed_item = cache.put(range_item, range_test[0], 30);
var cashed_item_get = cache.get(range_item)
sheet.getRange('A9').setValue(text);
sheet.getRange('A10').setValue(cashed_item_get);
}
else {
// Puts the value from text into the cache using the key 'order'
var cached = cache.put('order', text, 30)}
}
else {sendText(id,"Error. Write the correct vendor name")
sendText(id,out)}
}
function inArray(target, array) {
for(var k = 0; k < array.length; k++) {
if(array[k] == target) {
return true; }
}
return false;
}
现在上面的代码是这样工作的:PrtScn from telegram。用户两次输入供应商名称并获得所有项目名称的答案。
解决方案
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("666").getRange(57, 1).setValue([text])
推荐阅读
- c# - C# 和 ArcMaps:如何在不获取 SERVERFAULT 的情况下将 ui 输入传递给后台线程?
- sql - SQL Order By 没有按我的意愿工作
- javascript - Lib fork 成功,但安装后出现错误
- angular - angular 2+ iframe src 反向代理
- solr - 胡萝卜2工作台和solr
- python-3.x - 可以导入模块但不能使用里面的函数
- javascript - 如何实现这种运动模糊着色器效果?
- reactjs - 使用命名导入反应惰性导入
- vhdl - 奇怪的 VHDL 问题:rising_edge(CLK) 未触发
- plsql - 由于 PLS-00049 创建了带有编译错误的触发器:绑定变量错误