#node.js #asynchronous #npm #google-sheets-api
#node.js #асинхронный #npm #google-sheets-api
Вопрос:
Я использую «google-spreadsheet» и успешно создаю новый рабочий лист, но по какой-то причине я не могу управлять им или даже выбирать его. Я просматривал документы и сайты, но я все еще не мог найти решение.
async function startup () {
const doc = new GoogleSpreadsheet(config.sheetID);
let creds = require('login data')
await doc.useServiceAccountAuth(creds);
await doc.loadInfo(); // loads document properties and worksheets
console.log(doc.title);
for (var i = 0; i < config.channelID.length; i ) {
doc.addSheet({ title: config.channelID[i] })
let sheet = await doc.sheetsByTitle(config.channelID[i])
}
}
(node:50552) UnhandledPromiseRejectionWarning: TypeError: doc.sheetsByTitle is not a function
Ответ №1:
Когда я увидел скрипт «node-google-spreadsheet», кажется, что doc.sheetsByTitle
он возвращает объект. Ссылка Я подумал, что это может быть причиной вашей проблемы. Итак, как насчет следующей модификации?
От:
for (var i = 0; i < config.channelID.length; i ) {
doc.addSheet({ title: config.channelID[i] })
let sheet = await doc.sheetsByTitle(config.channelID[i])
}
Для:
for (var i = 0; i < config.channelID.length; i ) {
await doc.addSheet({ title: config.channelID[i] });
let sheet = doc.sheetsByTitle[config.channelID[i]];
console.log(sheet.title); // You can check the added sheet name here.
}
Или, в вашем случае, doc.addSheet
также возвращает объект листа. Итак, вы можете использовать следующий скрипт.
for (var i = 0; i < config.channelID.length; i ) {
const addedSheet = await doc.addSheet({ title: config.channelID[i] });
console.log(addedSheet.title); // You can check the added sheet name here.
}
Примечание:
- В этом измененном скрипте, пожалуйста, используйте
await
todoc.addSheet
. - Пожалуйста, используйте последнюю версию node-google-spreadsheet. Теперь, похоже, что это
google-spreadsheet@3.0.13
.