Как мне отсортировать информацию из таблицы Google в массив, используя node.js - PullRequest
0 голосов
/ 26 мая 2020

Недавно я пытался преобразовать часть своей базы данных в таблицу Google, чтобы пользователи могли отправлять данные с помощью формы Google, и они автоматически помещаются в лист, после чего я могу извлечь данные с помощью пакета npm гугл-таблица. Но я хочу иметь возможность поместить эти данные в массив для использования в моем приложении node.js.

Приведенный ниже код в основном просто получает информацию из документа и отображает ее для меня заранее (по крайней мере, столбцы / строки, которые я хочу)

    function factdoc(fact) {
        msg.channel.send(`Fact: ${fact.facts}`);
        msg.channel.send(`------------------------`);
    }

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

        const rows = await promisify(sheet.getRows)({
            offset: 1
        });
        rows.forEach(row => {
            factdoc(row);
        })
    }


    if (msg.content == prefix + 'test') {
        accessSpreadsheet();
        msg.delete();
    }

вывод выглядит следующим образом

enter image description here

и таблица Google выглядит так

enter image description here

Итак, это чтение с листа Google нормально. Однако, прочитав документацию и просмотрев пару руководств, я не знаю, как продолжить.

Я хочу взять эту информацию и сохранить ее в виде массива, чтобы, если бы я набрал msg.channel.send(fact[0]); например, тогда будет отображаться test0. Или, если бы я сделал случайный факт, я мог бы сделать что-то вроде этого (очевидно, не совсем так)

if (msg.content == prefix + "randomfact"){
randomfact = Math.floor(Math.random() * sheet.rowCount);
msg.channel.send(fact[randomfact]);
}

, тогда он посчитал бы строки, что позволило мне поместить его в math.random и позволяя мне вывести случайный факт из списка. Я возился с этим пару часов и продолжаю нарушать свой код. Я не уверен, как реализовать функции из документации, поскольку я никогда раньше с этим не работал.

1 Ответ

0 голосов
/ 27 мая 2020

У меня все заработало, все, что вам нужно сделать, это удалить для каждого, создать новую переменную и проанализировать функцию factdoc в составе строк

    function factdoc(fact) {
        msg.channel.send(`Fact: ${fact.facts}`);
        msg.channel.send(`------------------------`);
    }

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

        const rows = await promisify(sheet.getRows)({
            offset: 1
        });
        row = factdoc(rows[arrayno#]); //new code
    }


    if (msg.content == prefix + 'test') {
        accessSpreadsheet();
        msg.delete();
    }
...