You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NodeJS调用Google Sheets API时数值返回为字符串的问题排查

问题原因与解决方案

核心问题

Google Sheets API 的 spreadsheets.values.get 接口默认使用 FORMATTED_VALUE 作为 valueRenderOption 参数,这会将所有单元格值统一转换为字符串格式返回,无论单元格本身是数值、日期还是其他类型。

额外代码错误

你的代码里存在两处小问题:

  1. range: ${sheetId}!${_range}`` 中的 _range 是未定义变量,应使用前面声明的 range 变量
  2. 最后返回的 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 08:47:27