配置Google API,用JavaScript和Python读取Google sheet里的数据

news2024/9/23 1:21:11

[发布时间是2024年8月。技术流程可能会存在一些变动]

源代码可以参考:victorspaceRMW/Read-Google-Sheet-with-API: The source code to read the Google Sheet with Google cloud API (github.com)

开头提醒一下各位公司,国内包括腾讯云华为云阿里云,国外包括AWS和GCP,希望你们在开发产品的同时把这方面的文档写的更清楚明白一些。

现在,随着办公逐渐云化,从云上读取数据是一件越来越普遍的事情。用JS或者Python从本地读文件,操作自不必说。

那么,如何从云上,比如Google Sheet里面去读取文件呢?

这看似是个非常简单的工作,但是其实第一次做,非常麻烦。在这里,我们分别给出如何在JS(开发环境选择CodePen)和Python(开发环境选择Anaconda Spyder)当中进行开发的方法。

(1). 在JS中做开发

在这里我们选择CodePen开发环境:

codePen,一个非常好的做前端开发的工具。

这里,我们首先开始学习如何配置在JavaScript环境中读取GoogleSheet。

首先大家在Google cloud console上注册一个自己的账号。流程在这里:

创建服务帐号 - Google Workspace 管理员帮助

注册的时候,把API类型搞成对应google sheet的那一类API即可。

首先提醒一下大家,google的文档写的非常模糊,整个操作界面也非常不清楚。

当我们已经注册好自己的账号以后,就可以开始创建一个自己的API,然后通过调用这个API来在JS环境里读取google sheet了。

具体的操作如下:

在这里,我们创建一个API密钥。

然后在底下,我们可以显示密钥的值:

在这里,点击显示密钥,就可以把这个API的数值copy下来。

那么,在JS里,如何读取我们想要读取的表呢?在这里我们附上这部分函数:

API我们都知道是在哪里。但是google sheet的ID(在下面这个代码里是SPREADSHEET_ID)在哪里读呢?

就是在这个地方。大家看到了么?

    const API_KEY = '你的API'; // 替换为你的Google API密钥
    const SPREADSHEET_ID = '你的表格的ID';//替换成你的表格的ID

    // 异步函数,用于获取表格名称
    async function fetchSheetNames() {
      const url = `https://sheets.googleapis.com/v4/spreadsheets/${SPREADSHEET_ID}?key=${API_KEY}`;
      try {
        const response = await fetch(url);
        if (!response.ok) {
          const errorDetails = await response.json();
          throw new Error(`HTTP错误!状态:${response.status}, 信息:${errorDetails.error.message}`);
        }
        const data = await response.json();
        if (data.error) {
          throw new Error(`API错误!信息:${data.error.message}`);
        }
        return data.sheets.map(sheet => sheet.properties.title);
      } catch (error) {
        console.error('获取表格名称时出错:', error);
      }
    }

    // 异步函数,用于获取表格数据
    async function fetchSheetData(sheetName) {
      const range = `${sheetName}!A1:Z100000`; // 根据你的表格调整范围
      const url = `https://sheets.googleapis.com/v4/spreadsheets/${SPREADSHEET_ID}/values/${range}?key=${API_KEY}`;

      try {
        const response = await fetch(url);
        if (!response.ok) {
          const errorDetails = await response.json();
          throw new Error(`HTTP错误!状态:${response.status}, 信息:${errorDetails.error.message}`);
        }
        const data = await response.json();
        if (data.error) {
          throw new Error(`API错误!信息:${data.error.message}`);
        }
        return data.values;
      } catch (error) {
        console.error('获取数据时出错:', error);
      }
    }

(2). 在Python中做开发

真心恳求google或者其他公司以后可以把自己的文档写的稍微清楚一点。这本来应该不是个特别麻烦的事儿。这个API搞的我已经不太让我相信他是google做的产品了。用户体验还不如高德。

与在JS中调用API相比,Python要调用这个API,需要生成一个.json文件然后放在本地。

首先,我们需要利用pip或者conda安装两个需要的库:

pip install gspread oauth2client

安装好以后重新启动kernel。

之后,我们在google cloud console上生成.json 文件。

调到这个地方:打开IAM和管理,然后点开“服务账号”这个地方。

点击添加密钥。

打开以后到这个地方,把那个JSON文件下载下来。

JSON 是 “JavaScript Object Notation” 的缩写。它是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。JSON 通常用于在服务器和 Web 应用程序之间传输数据。它以键值对的形式组织数据,类似于 JavaScript 中的对象表示法。JSON 的结构简单,广泛用于各种编程语言和平台。(GPT老师的讲解)

下载好这个.json文件以后把它和Python文件放在同一个directory下面:

之后我们就可以在Python里面写代码调用google sheet了。

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 12 17:42:09 2024

@author: Brian Wang
"""

import numpy as np
import pandas as pd
from datetime import datetime
import gspread
from oauth2client.service_account import ServiceAccountCredentials

# Define API scope
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]

# Authorize using the service account JSON key file
creds = ServiceAccountCredentials.from_json_keyfile_name('你那个json文件的名字', scope)

# Log in with the authorized credentials
client = gspread.authorize(creds)

# Open the Google Sheets file
spreadsheet_id = '要读取的表的ID'
sheet = client.open_by_key(spreadsheet_id)

# Select the worksheet to read
worksheet = sheet.sheet1  # or you can use sheet.get_worksheet(index)

# Get all data
data = worksheet.get_all_records()

# Convert data to Pandas DataFrame
df = pd.DataFrame(data)

好了,今天的讲解就到这里!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

echarts使图表组件根据屏幕尺寸变更而重新渲染大小

效果图&#xff1a; 通过 window.addEventListener(resize, this.resizeChart); 实现 完整代码&#xff1a; <template><div class"dunBlock"><div class"char2" id"char2" ref"chart"></div></div…

《光与夜之恋》3D建模含量超标,纯炫技还是释放新信号?

继叠纸的《恋与深空》之后&#xff0c;腾讯的《光与夜之恋》也卷起3D技术了。 《光与夜之恋》即将在8月12日上线的限定活动“大漠归墟”最新PV及男主六星卡面释出&#xff0c;相对于褒贬不一、引起争论的卡面美术&#xff0c;PV中的3D建模倒是收获了玩家的集体好评。 “大漠归…

读零信任网络:在不可信网络中构建安全系统18零信任代理

1. 零信任代理 1.1. 零信任代理是应用级代理服务器&#xff0c;用来保护零信任网络&#xff0c;它是处理认证、授权以及加密的基础设施 1.2. 零信任代理分为反向代理和前向代理两种工作模式 1.2.1. 运行时可以同时采用这两种工作模式&#xff0c;也可以只采用其中的一种 1.2…

libcurl8.9.1 上传json

在postman中 PUT----》body----》raw----》json 结构体定义&#xff1a; #define MAX_ARRAY_SIZE 5*1024*1024struct SMART_DATA_CACHE {char* buf;long dwTotalLen;SMART_DATA_CACHE(){dwTotalLen 0;buf nullptr;while (!buf) {try {buf new char[MAX_ARRAY_SIZE];}c…

C++:有序关联容器set

什么是有序关联容器 (1)顺序容器&#xff0c;容器中的元素是按它们在容器中的位置来顺序保存和访问的(可以理解是数组) (2)顺序容器有array、vector、deque、list、forward_list、string等 (3)关联容器中的元素是按关键字来保存和访问的&#xff0c;关联的意思就是关键字&…

STM32-外部中断-AFIO-串口-串口通信-串口中断(空闲中断和接收中断)-printf移植-ADC数模转换-初始化和读取光敏电阻AO

常用的中断包括外部中断、串口中断、定时器中断&#xff1b; 1、外部中断&#xff1a; 引脚复用按钮导致的外部中断&#xff1a; 注意&#xff1a;初始化引脚&#xff0c;添加引脚和EXTI输入线的映射&#xff1b;使用外部引脚的中断时需要使用AFIO映射&#xff1b; 操作步骤&…

如何获取android的SHA1或SHA256

在使用地图类的功能时&#xff0c;例如百度地图或者高德地图&#xff0c;会需要在开发者平台里填写SHA1或SHA256的指纹密钥&#xff0c;很多开发者小伙伴还不知道如何获取。当然关于如何获取android的SHA1或SHA256&#xff0c;网络上进行搜索已经有很多图文教程了&#xff0c;本…

mfc140u.dll丢失的科学修复手段,简单又方便的mfc140u.dll修复

遇到 "缺失 mfc140u.dll 文件" 的提示时可能会让你疑惑&#xff0c;但不用担心。这个文件是 Microsoft Visual C 2015 的重要组成部分&#xff0c;对运行特定程序非常关键。幸运的是&#xff0c;解决这一问题并不难。本文将简单指导你如何恢复或修复丢失的 mfc140u.d…

多台PC网络ADB连接同一台RK3399 Android7.1.2设备

在RK3399 Android7.1.2上面&#xff0c;进行网络ADB调试时&#xff0c;如果多台电脑连接同一台Android设备&#xff0c;第一台连接上的能正常操作&#xff0c;之后连接的看到设备状态为OFFLINE&#xff0c;分析了下ADBD相关代码&#xff0c;发现在ACCEPT Client的时候没有区分别…

设计师必备:2024最新PDF转CAD软件盘点

随着科技的飞速发展&#xff0c;设计师们不再受限于传统的设计流程&#xff0c;可以利用一些新欣的工具来提升工作效率、优化工作流程的新工具。其中&#xff0c;PDF转CAD工具成为了设计行业的一大热门话题。面对海量的数据和复杂的设计需求&#xff0c;一款高效、精准的PDF转C…

11、MySQL-SQL优化

目录 1、插入数据 1.1、批量插入 1.2、手动提交事务 1.3、主键顺序插入 1.4、大批量插入数据 2、主键优化 2.1 页分裂 2.2 主键顺序插入 2.3 主键乱序插入 2.4 页合并 2.5 主键的设计原则 3、order by优化 4、group by优化 5、limit优化 6、count优化 6.1 coun…

【Bifrost】ubuntu24.04 远程构建及clion设置编码风格google

Bifrost 构建通过clion 远程到ubuntu24.04 构建感觉是不认识这种写法,这种至少是c++11 fix : 修改absl 的构建cmakelist,明确c++17 好像还是不行error: ‘uint8_t’ was not declared in this scope加入:#include <stdint.h>可以解决一部分。那么,这种呢?/home/zha…

浅谈 DNS 篡改劫持

故事背景&#xff1a;产品反馈线上站点操作后跳转至空白页面&#xff0c;浏览器 URL 地址异常&#xff0c;ping 命令测试后定位可能是 DNS 解析异常&#xff0c;联系七牛云技术人员排查&#xff0c;反馈是由于带宽突变&#xff0c;触发节点防攻击策略所致&#xff0c;后续先调整…

keepalived安装-集群部署

1.服务器信息 服务器版本服务器IP介质版本安装用户CentOS Linux release 7.9.2009 (Core)192.168.10.244keepalived-2.2.8.tar.gz nginx-1.26.1 rootCentOS Linux release 7.9.2009 (Core)192.168.10.245keepalived-2.2.8.tar.gz nginx-1.26.1 root2.服务器基础配置 参考:Lin…

二、AI工作流(低代码)-输入-文本组件详解

对工作流感兴趣的小伙伴可以去试一试。&#x1f525;偷偷的告诉你&#xff0c;它的GPTo4.0 mini 不要&#x1f4b0;。传送门&#xff1a;https://www.nyai.chat/chat?invitenyai_1141439 一、能用AI工作流介绍 能用AI-工作流是一个“低代码”工具、它也是个人或者中小企业的…

Spring源码调试环境搭建(IDEA)

文章目录 引言开发环境搭建步骤步骤一&#xff1a;下载 Spring Boot 源码步骤二&#xff1a;导入项目到 IntelliJ IDEA步骤三&#xff1a;处理build报错报错一报错二 测试步骤新建module修改build.gradle新建测试类启动测试 引言 无论是面试&#xff0c;还是工作&#xff0c;S…

政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu系统部署及应用歌唱语音转换框架NeuCoSVC:歌曲音色转换工具

目录 论文简介 部署 模型下载 编译REAPER 最后 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 本文目标&#xff1a;《Neural Concate…

模拟三层--控制层、业务层和数据访问层

三层的概念:https://developer.aliyun.com/article/1390024 一、新建一个项目 我新建好的项目名为spring__ioc_02,然后在 src-main-java 下建立三层&#xff08;数据访问层、业务层和控制层&#xff09;的包 dao、service 和controller、并在包下建立相应的接口和实现类 Proje…

网络命令之查看网口最大网速的一些方法?(/sys/class/net/ethx/speed、ethtool ethx)

文章目录 背景方法1: sysfs的net方法2&#xff1a;ethtool方法3&#xff1a;通过网卡型号获取方法4&#xff1a;通过网卡lspci输出信息直接获取方法5&#xff1a;高性能网卡可以通过物理连线光口信息获取后记 背景 经常需要查看不同网卡的网速&#xff0c;甚至相同大版本型号网…

一个简单的pytorch项目框架

框架的基本功能&#xff1a; 1. 模型的定义、训练与测试 2. 数据生成与数据迭代器 3. 训练日志记录 4. 训练过程实时监控 有了这个框架&#xff0c;后续所有复杂的AI项目都可以在此基础上拓展开发。 项目基本结构&#xff1a; 四个文件&#xff1a; sequence_mean_generate…