如何用JavaScript调用Google Sheets API获取所有工作表数据?
获取Google Sheets所有工作表数据的解决方案
Google Sheets API的spreadsheets.values.get接口不支持一次性拉取多个工作表的数据,你需要先获取文档内所有工作表的列表,再逐个获取每个表的内容。以下是完整实现代码:
const { google } = require("googleapis"); const spreadsheetId = '123456'; const auth = new google.auth.GoogleAuth({ keyFile: "credentials/sheets_token.json", scopes: "https://www.googleapis.com/auth/spreadsheets", }); // 主函数:获取所有工作表数据 async function getAllSheetsData() { const client = await auth.getClient(); const googleSheets = google.sheets({ version: "v4", auth: client }); // 1. 获取文档元数据,提取所有工作表标题 const spreadsheetMeta = await googleSheets.spreadsheets.get({ spreadsheetId, fields: 'sheets.properties(title)' // 仅请求必要字段,减少数据传输 }); const sheets = spreadsheetMeta.data.sheets; const allSheetData = {}; // 2. 遍历每个工作表,拉取对应数据 for (const sheet of sheets) { const sheetTitle = sheet.properties.title; const sheetRes = await googleSheets.spreadsheets.values.get({ spreadsheetId, range: sheetTitle // 用工作表标题作为范围参数,获取该表全部数据 }); // 处理空表情况:若工作表无数据,返回空数组 allSheetData[sheetTitle] = sheetRes.data.values || []; } return allSheetData; } // 调用并处理结果 getAllSheetsData() .then(data => console.log('所有工作表数据:', data)) .catch(err => console.error('获取失败:', err));
关键说明
- 你之前尝试的
空范围、省略range参数无效,因为spreadsheets.values.get必须明确指定单个工作表或表内具体范围;Sheet1:Sheet10这类跨表写法也不被API支持。 - 用
spreadsheets.get获取元数据时,通过fields参数精准请求工作表标题,避免返回冗余内容,提升请求效率。 - 遍历过程中以工作表标题作为
range参数,即可拉取对应表的全部行数据,同时处理空表的边界情况。
内容的提问来源于stack exchange,提问作者Scott Riva
相关产品推荐
相关产品推荐

