如何在 Google Cloud 功能内使用 Google Sheets API

2023-12-30

我正在尝试 Google 的云功能服务,我想阅读和编写 Google 电子表格,但似乎找不到任何示例或方法来执行此操作。

我的问题源于 Google 云函数的示例 javascript 是:

exports.helloWorld = function helloWorld (req, res) {
  res.send(`Hello ${req.body.name || 'World'}!`);
};

这可行,但我想以谷歌为例从谷歌电子表格中读取:

  gapi.load('client:auth2', initClient);

  function initClient() {
    gapi.client.init({
      discoveryDocs: DISCOVERY_DOCS,
      clientId: CLIENT_ID,
      scope: SCOPES
    }).then(function () {
      // Listen for sign-in state changes.
      gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);

      // Handle the initial sign-in state.
              gapi.client.sheets.spreadsheets.values.get({
      spreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms',
      range: 'Class Data!A2:E',
    }).then(function(response) {
      var range = response.result;
      if (range.values.length > 0) {
        appendPre('Name, Major:');
        for (i = 0; i < range.values.length; i++) {
          var row = range.values[i];
          // Print columns A and E, which correspond to indices 0 and 4.
          appendPre(row[0] + ', ' + row[4]);
        }
      } else {
        appendPre('No data found.');
      }
    }, function(response) {
      appendPre('Error: ' + response.result.error.message);
    });
    });
  }

有谁知道这是否可能,或者有一个示例说明如何做类似的事情?


以下是我使用 Google Cloud Functions 的方法。我认为 OAuth 不太适合,因为云函数通常在无人值守的情况下运行。幸运的是有服务帐户,用于机器对机器通信。


1. 在您的云项目中创建一个服务帐户


2. 保存服务帐户密钥

在步骤 1 中,JSON 格式的密钥文件已下载到您的计算机上。将其保存到您的项目目录中并重命名credentials.json.


3. 创建 API 密钥


4. 保存API密钥

将步骤 3 中的 API 密钥复制并保存在名为api_key.json在你的项目目录中。它应该看起来像这样:

{
  "key": "<PASTE YOUR API KEY HERE>"
}

5. 授予电子表格对服务帐户的访问权限

与步骤 1 中创建的服务帐户电子邮件共享电子表格。


6. 单元格 Google Sheets API

这是我的代码,每次调用云函数时都会在电子表格中附加一行。

const {google} = require('googleapis');

exports.reply = (req, res) => {
  var jwt = getJwt();
  var apiKey = getApiKey();
  var spreadsheetId = '<PASTE YOUR SPREADSHEET ID HERE>';
  var range = 'A1';
  var row = [new Date(), 'A Cloud Function was here'];
  appendSheetRow(jwt, apiKey, spreadsheetId, range, row);
  res.status(200).type('text/plain').end('OK');
};

function getJwt() {
  var credentials = require("./credentials.json");
  return new google.auth.JWT(
    credentials.client_email, null, credentials.private_key,
    ['https://www.googleapis.com/auth/spreadsheets']
  );
}

function getApiKey() {
  var apiKeyFile = require("./api_key.json");
  return apiKeyFile.key;
}

function appendSheetRow(jwt, apiKey, spreadsheetId, range, row) {
  const sheets = google.sheets({version: 'v4'});
  sheets.spreadsheets.values.append({
    spreadsheetId: spreadsheetId,
    range: range,
    auth: jwt,
    key: apiKey,
    valueInputOption: 'RAW',
    resource: {values: [row]}
  }, function(err, result) {
    if (err) {
      throw err;
    }
    else {
      console.log('Updated sheet: ' + result.data.updates.updatedRange);
    }
  });
}

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Google Cloud 功能内使用 Google Sheets API 的相关文章

随机推荐

  • 来自 sk_buff 的 IP 地址

    我正在编写一个注册 netfilter 挂钩的内核模块 我试图通过使用来获取呼叫者的IP地址sk buff gt saddr成员 有没有办法获得人类可读的 IP 即 x x x x 格式 我找到了这个功能inet ntop 但它似乎在内核头
  • 如何从 VC++ 2008 开发的 GUI 中打开帮助文件(chm 等)?

    我正在尝试为我在 VC 2008 中开发的 GUI 添加一些帮助 我想编译一个 chm 文件 或者一个可以从我的菜单访问的 hlp 文件 任何人都可以告诉我如何执行此操作吗 多谢 Under HKLM Software Microsoft
  • 如何在 Heroku 上托管的 Django 项目中使用 Werkzeug 交互式回溯调试器?

    在 Django 项目中安装了 django extensions 后 您可以在本地计算机上使用manage py runserver plus激活非常有用的 Werkzeug 调试器 这样 500 错误页面就可以让您以交互方式浏览堆栈 从
  • 如果操作未经过身份验证,expressJS 呈现登录引导模式

    我正在编写一个expressjs ejs应用程序 它使用Twitter Bootstrap 3作为网页 我使用 Bootstrap Modal 进行登录 我已将模式包含在标题部分中 因此它可用于每个网页 但是 如果用户尚未登录 则需要先进行
  • 如何捕获Kafka-Spring中的反序列化错误?

    我正在启动一个使用 kafka 消息的应用程序 我跟着Spring文档 https docs spring io spring kafka docs 2 2 4 RELEASE reference error handling deseri
  • Android-L CardView 视觉触摸反馈

    谁能向我解释一下如何在 CardView 中实现 Google I O 2014 上演示的一些视觉触摸反馈 这是我在 XML 中使用 CardView 的方式 可能缺少一些小东西 所以我只是想知道是否有人可以帮助我
  • 导入其他依赖项需要的依赖项版本[重复]

    这个问题在这里已经有答案了 我有两个箱子X and Z我想同时使用但是X依赖于取决于Z在某些特定版本上 例如 mongodb依赖于tokio 0 2 而我使用的是tokio 0 3 X不再出口Z所以我 认为 必须手动指定Z in Cargo
  • 使用 Json.Net 反序列化,将子对象反序列化为保存 json 的 string/similar?

    我正在尝试使用 Json 创建一个配置文件 该文件将保存各种类型对象的配置 考虑这个文件 cameras type Some Namespace CameraClass assembly Some Assembly configuratio
  • 更改主页按钮的长按功能

    我正在寻找 Android 技巧 来更改长按主页按钮的功能 目前 长按主页按钮打开任务管理器 相反 我希望长单击充当短单击 这意味着将我们带到默认启动器的主页 理想情况下 这个技巧适用于所有 Android 版本 但如果它仅适用于 2 3
  • 通过 C# 在 excel 中使用模板

    作为我正在生成的 C 程序的一部分 我需要生成 1 个工作簿 其中包含 2 个不同的工作表和第 3 个可以多次生成的工作表 最有效的方法是什么 我已经研究过使用模板 尽管我不确定如何重复某些工作表 同时只显示其他工作表一次 任何帮助或建议将
  • 用于从视频创建小 gif 的 Lib/API?

    我想从现有视频创建 GIF 我搜索了相关问题 但没有找到任何可以帮助我的链接 我一直在寻找任何可以帮助我从视频创建位图的库或 API 然后我将再次从该位图创建 GIF 或直接从视频创建 GIF 是否有任何库或 API 可以从视频中捕获位图序
  • 打字稿“元素类型上不存在属性”

    我将开始我的 Typescript 之旅 所以我有video在我的 Html 和中标记 ts将这些行归档 class KomakhaPlayer private container private video Element this co
  • 使用 python mechanize 通过 NTLM 身份验证登录页面

    我想使用 mechanize 登录页面并检索一些信息 但是我尝试验证它只是失败并显示错误代码HTTP 401 如下所示 r br open http intra File bui e mechanize py line 203 in ope
  • 将包含字符串的 Pandas 系列转换为布尔值

    我有一个名为df as Order Number Status 1 1668 Undelivered 2 19771 Undelivered 3 100032108 Undelivered 4 2229 Delivered 5 00056
  • JPA - 定义@Entity对象的多个jar

    我们正在以非常模块化的方式使用 Spring Hibernate 和 Maven 开发 Web 应用程序 有定义数据访问和查看特定内容的核心项目 然后有定义逻辑和实体的模块 Entity 然后是定义控制器和视图的 Web 应用程序 现在我们
  • 使用 r 中的 if 语句填充列

    我有一个非常简单的问题 目前正在努力解决 如果我有一个示例数据框 a lt c 1 5 b lt c 1 3 5 9 11 df1 lt data frame a b 如何创建一个新列 c 然后使用 b 列上的 if 语句填充该列 例如 c
  • 多个模态视图控制器在旋转后将基本模态更改为全屏

    这个问题困扰了我很长一段时间 我对此做了很多研究 但找不到答案 我第一次在这里发帖 如有错误请指正 原谅 环境 iPad iOS 6 0 问题 旋转后基本模式视图更改为全屏 描述 我当前正在运行一个全屏应用程序 显示模式视图控制器 从显示的
  • 无法按日期/时间在 Waterline 中查找记录

    如何比较 sails js 模型中的日期时间 这就是我所做的 但没有运气 var date moment format YYYY MM DDTHH mm ss SSS Z Game find where active true start
  • 重写 jQuery .val() 函数?

    有没有办法轻松覆盖 jQueryval 功能 我想覆盖它的原因是我想在每次为元素设置值时添加一些处理 我不想制作另一个自定义值设置器 例如myVal 您可以存储对原始内容的引用val函数 然后覆盖它并进行处理 然后使用call 使用正确的上
  • 如何在 Google Cloud 功能内使用 Google Sheets API

    我正在尝试 Google 的云功能服务 我想阅读和编写 Google 电子表格 但似乎找不到任何示例或方法来执行此操作 我的问题源于 Google 云函数的示例 javascript 是 exports helloWorld functio