当前位置: 首页 > 知识库问答 >
问题:

如何在discord.js嵌入中使用谷歌表单api数据?

申屠泳
2023-03-14

我正在设置我的第一个不和谐机器人,它将能够从谷歌电子表格、官方应用编程接口中获取数据,并将其作为不和谐的嵌入信息。问题是在. addField()级别,我不能输入单元格的值。我该怎么做呢?

const { Client, RichEmbed } = require('discord.js');
const client= new Client();
const GoogleSpreadsheet = require('google-spreadsheet');
const {promisify} = require('util');
const creds = require('./client_secret.json');

client.on('message', message => {
    if (message.content === '!bot'){

        async function accessSpreadsheet() {
            const doc = new GoogleSpreadsheet('1qA11t460-ceILmwu6RtfiPGb_n9MUD_7z6Ld7I_Z6yc');
            await promisify(doc.useServiceAccountAuth)(creds);
            const info = await promisify(doc.getInfo)();
            var sheet = info.worksheets[0];

            var cells = await promisify(sheet.getCells)({
                'min-row': 2,
                'max-row': 5,
                'min-col': 3,
                'max-col': 3,
                'return-empty': true,
            })
            for (var cell of cells) {
                message.author.send(cell.value)
            }
        }

        accessSpreadsheet();
        const embede = new RichEmbed()
    .setColor('#0099ff')
    .setTitle("My Title")
    .addBlankField()
    .setDescription('Some description')
    .addBlankField()
    .addField('Name', '•'+ cell[1].value , true)
    .setTimestamp();

        message.author.send(embede) }
})
client.login('xxx')

我期望输出“Terrassycup 3”,但实际输出是控制台中的“ReferenceError:cell未定义”。日志

共有1个答案

康元凯
2023-03-14

我发现您的代码存在一些问题:

  • 访问Spread表()不返回它访问的任何值。
  • 访问Spreadhseet()返回一个Promise,因为它被声明为异步,但它从未等待过。
  • cell的作用域在访问表()函数内的for...的范围内,但是您尝试在它之外很好地使用它。

您可以将它们作为字段添加到您声明的函数中的嵌入(限制为25),而不是将每个值发送给用户。

async function accessSpreadsheet(embed) {
  // Insert the code already being used up to the for loop.

  for (let i = 0; i < 25 && cells[i]; i++) embed.addField('Name', `•${cells[i].value}`, true);
}

var embed = new RichEmbed()
  .setColor('#0099ff')
  .setTitle('**Spreadsheet Info**')
  .setDescription('Showing as many values as possible...');

accessSpreadsheet(embed)
  .then(() => message.author.send(embed))
  .catch(console.error);

 类似资料:
  • 答案是接下来: 1) 谷歌表单单元格“A11”中有公式,例如“=F11 C11”; 2)我在https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/batchUpdate或https://developers.google.com/sheets/api/reference/rest/v4/spre

  • 在继续使用GoogleApps脚本构建Google电子表格的过程中,我已经完成了获取Bittrex和Poloniex余额的工作,但无法使用Cryptopia。 下面是我与Bittrex将JSON对象数组映射到字符串的斗争的链接 以下是官方API链接:https://www.cryptopia.co.nz/Forum/Thread/256 以下是一些例子: https://www.cryptopia

  • 我希望有人能帮我调整(甚至替代)我在谷歌表单中使用的一个公式,根据谷歌表单输入的信息自动填充列。 简单地说,我使用索引函数来匹配从谷歌表格中的下拉菜单中选择的名称,并到达谷歌表格的E列,在“表格2”的A列中收到与相同名称列表的响应。索引公式从表2中获取与该名称相关的信息(例如:注册号、电子邮件地址),并将其放在“表格回复1”表中,与谷歌表格的输入一起(当然包括出现在E栏中的名称)。 我一直在使用(

  • 我试图使用c#和谷歌表格api在电子表格中追加一行单元格。我拿到密码了 问题是我得到的唯一一个sheetID来自url,是一个String。在哪里可以找到作为整数的工作表ID以及如何执行AppendCellsRequest? 希望你能帮忙。

  • 我如何使用https://maps.googleapis.com/maps/api/js在谷歌地图的webview中,我试图展示一张谷歌地图,就像来自waqi weather的地图一样,地图上包含关于空气污染的信息。就这样https://aqicn.org/faq/2015-09-18/map-web-service-real-time-air-quality-tile-api/

  • 此函数工作正常。当当前工作表不是Google表单响应工作表时。我正在使用(每分钟)触发器 图像:沙子数据(主数据)表至(共享数据1)表 我正在寻找一个,当用户提交的谷歌表格的状态是(支付),数据应该在第二页,这是(shareData1) 这里的问题是,当我使用谷歌表单响应表时,这个函数将不再工作。它显示了一个错误。错误图像 在降级的错误图像中,我手动运行此函数,相同的错误显示在AppScript面