Node.js调用Google Sheets API读取多表文档时遇ENAMETOOLONG错误
问题排查与解决
错误原因分析
Error: ENAMETOOLONG: name too long, open" 这个错误本质是文件路径处理异常,大概率是你给keyFile参数传的不是服务账号密钥文件的路径字符串,而是直接把密钥JSON的完整内容赋值给了credentials1变量。系统把超长的JSON内容当成文件名去读取,自然触发“文件名过长”的错误。
另外你的代码还存在两个潜在问题:
- Google Sheets API目前推荐使用v4版本,v2版本已被弃用,功能受限且可能出现兼容问题
sheets.spreadsheets.values.get的调用代码末尾少了一个闭合括号,会导致语法错误
修正后的代码示例
// 确保credentials1是服务账号密钥文件的路径,比如 './service-account-key.json' const auth = new google.auth.GoogleAuth({ keyFile: credentials1, scopes: ['https://www.googleapis.com/auth/spreadsheets.readonly'] }); // 使用v4版本的Sheets API const sheets = google.sheets({ version: 'v4', auth: auth }); try { const response = await sheets.spreadsheets.values.get({ spreadsheetId, range, majorDimension: 'ROWS' }); // 补上缺失的闭合括号 console.log('读取到的数据:', response.data.values); } catch (err) { console.error('请求出错:', err); }
额外检查事项
- 确认
credentials1变量存储的是相对/绝对文件路径,而非密钥JSON的文本内容 - 验证服务账号已被添加为目标Google表格的共享协作成员(赋予“查看者”权限即可)
- 确保
spreadsheetId和range变量的取值正确(range格式如'Sheet1!A1:C10')
内容的提问来源于stack exchange,提问作者testerghost
相关产品推荐
相关产品推荐

