使用Google Apps Script将表格行转为格式化列表发送给Telegram机器人
解决方案
要把Google表格里的单列姓名转换成Telegram支持的项目符号列表,用map+join组合就能轻松实现,比forEach更简洁直观。
完整实现代码
function sendlist(chatId) { // 从表格获取所有行数据(二维数组格式) var rows = SpreadsheetApp.openById(neueliste).getSheetByName('Liste').getDataRange().getValues(); // 可选:如果表格第一行是表头(比如"姓名"),移除表头行 rows.shift(); // 将二维数组转换为带项目符号的字符串 var formattedList = rows.map(row => `- ${row[0]}`).join('\n'); // 处理空列表场景,避免发送空消息 if (!formattedList) { formattedList = "当前列表为空"; } // 调用Telegram机器人的发送方法 sendText(chatId, formattedList); }
关键逻辑说明
数组转换:
rows.map(row =>- ${row[0]}):遍历每一行数据,取出单列的姓名(row[0]),给每个姓名加上-前缀,生成单个项目符号行。.join('\n'):把所有项目行用换行符拼接成完整的列表字符串,Telegram会自动识别换行并显示为多行项目列表。
表头处理:
- 如果你的表格第一行是表头(比如"姓名"),用
rows.shift()移除第一行;如果没有表头,直接删除这行代码即可。
- 如果你的表格第一行是表头(比如"姓名"),用
空列表兼容:
- 当表格没有数据时,
formattedList会是空字符串,这里加了判断,替换成提示文本,避免发送空消息。
- 当表格没有数据时,
命令调用示例
在你的机器人命令处理逻辑里,添加/getlist命令的触发:
if (text.startsWith('/getlist')) { sendlist(id); // id为Telegram聊天的唯一ID }
补充:forEach的实现方式(如果你想尝试)
之前用forEach没成功,可能是没正确拼接字符串,以下是forEach的写法:
function sendlist(chatId) { var rows = SpreadsheetApp.openById(neueliste).getSheetByName('Liste').getDataRange().getValues(); rows.shift(); // 移除表头(可选) var formattedList = ''; rows.forEach(row => { formattedList += `- ${row[0]}\n`; }); // 移除最后多余的换行符 formattedList = formattedList.trim(); if (!formattedList) { formattedList = "当前列表为空"; } sendText(chatId, formattedList); }
内容的提问来源于stack exchange,提问作者mega
相关产品推荐
相关产品推荐

