使用NodeJS调用Google Sheets API时数值返回为字符串的问题排查
问题原因与解决方案
核心问题
Google Sheets API 的 spreadsheets.values.get 接口默认使用 FORMATTED_VALUE 作为 valueRenderOption 参数,这会将所有单元格值统一转换为字符串格式返回,无论单元格本身是数值、日期还是其他类型。
额外代码错误
你的代码里存在两处小问题:
range:${sheetId}!${_range}`` 中的_range是未定义变量,应使用前面声明的range变量- 最后返回的
res.status(200).send(values);中,values未定义,应改为data.values
解决步骤
在请求配置中添加 valueRenderOption: 'UNFORMATTED_VALUE',让 API 返回单元格的原始数据类型:
const options = { spreadsheetId: docId, range: `${sheetId}!${range}`, // 修正变量名错误 valueRenderOption: 'UNFORMATTED_VALUE' // 添加此参数获取原始数据类型 };
参数说明
valueRenderOption 支持三个可选值:
FORMATTED_VALUE(默认):返回用户看到的格式化字符串,比如带千分位的数值、格式化后的日期UNFORMATTED_VALUE:返回单元格原始值,数值会以 Number 类型返回,日期会返回 Unix 时间戳(毫秒级)FORMULA:若单元格包含公式,返回公式字符串;否则返回单元格值
修改后的完整代码
const { google } = require('googleapis'); exports.readGoogleSheet = async (req, res) => { try { const auth = new google.auth.GoogleAuth({ keyFile: '...', scopes: 'https://www.googleapis.com/auth/spreadsheets.readonly' }); const client = await auth.getClient() const sheets = google.sheets({ version: 'v4', auth: client }); // read body params const docId = req.body.docId; const sheetId = req.body.sheetId; const range = req.body.range; // check if blank if (!docId || !sheetId || !range) { return res.status(400).send('Invalid Parameters') // 添加return避免后续代码执行 } const options = { spreadsheetId: docId, range: `${sheetId}!${range}`, valueRenderOption: 'UNFORMATTED_VALUE' }; const { data } = await sheets.spreadsheets.values.get(options); console.log(data.values); // 现在会输出: [ [ 'name', 'value', 'units' ], [ 'Sales', 350000, '$' ] ] // 350000 会是 Number 类型 res.status(200).send(data.values); } catch (err) { res.status(400).send(err.message); } };
内容的提问来源于stack exchange,提问作者RmR
相关产品推荐
相关产品推荐

