我正在使用for循环来迭代Google电子表格中的工作表并访问每个工作表中的特定单元格。我有一个包含五个工作表Sheet1,Sheet2,..,Sheet5的Google电子表格。如果我正在读取的单元格的值为Value1,...,Value5。 我希望得到的结果显示如下:
Sheet1
Value1
Sheet2
Value2
:
Sheet5
Value5
但是我得到了
Sheet1
Undefined
Sheet2
Undefined
:
Sheet5
Undefined
Value1
Value2
:
Value5.
我意识到我需要使用async / await,但无法立即使用google.spreadsheet.get来解决。 在此先感谢您的指导。 我的代码:
function getData (auth) {
var sheets = google.sheets('v4')
sheets.spreadsheets.get(
{
auth: auth,
spreadsheetId: sheet_id
},
(err, response) => {
if (err) console.log('The API returned an error: ' + err)
}
)
var no_sheets = response.data.sheets.length
for (var i = 0; i < no_sheets; i++) {
try {
console.log(response.data.sheets[i].properties.title)
var sheet_title = response.data.sheets[i].properties.title
var cell_value = getCellValue(auth, sheet_title)
console.log(cell_value)
} catch (err) {
console.log(err)
continue
}
}
}
function getCellValue (auth, sheet_title) {
sheets.spreadsheets.values.get(
{
auth: auth,
spreadsheetId: sheet_id,
range: sheet_title + '!A1:A1'
},
(err, response) => {
if (err) {
console.log('The API returned an error: ' + err)
return
}
var rows = response.data.values
if (rows.length === 0) {
console.log('No data found.')
} else {
for (var i = 0; i < rows.length; i++) {
var cell_value = rows[i]
}
console.log(cell_value)
return cell_value
}
}
)
}
答案 0 :(得分:1)
如果您要使用异步/等待而不是回调,则可以使用,因为googleapi返回了Promise。这些Promise是异步/等待的基础,并且以前是goto。如果您使用async / await或Promises,则您的代码将更易于阅读和理解。
所以不要打电话:
sheets.spreadsheets.get({
auth: auth,
spreadsheetId: sheet_id
},
(err, response) => {
if (err) console.log('The API returned an error: ' + err)
});
您可以致电:
try {
const response = sheets.spreadsheets.get({
auth: auth,
spreadsheetId: sheet_id
});
}
catch(err) {
console.log('The API returned an error: ' + err);
}
事情是,您只能在await
函数中使用async
关键字。您可以阅读有关异步/等待here的更多信息。