Thao tác với google sheet vô cùng đơn giản trong Ruby on Rails
This post hasn't been updated for 5 years
1. Google developer console
1.1 Tạo new project
Đăng nhập vào https://console.developers.google.com/?angularJsUrl= Trên thanh header chọn [Select a project] để tạo mới project
Ví dụ như mình đã tạo google-sheet-api
1.2 Enable APIs and Service
Chọn project: google-sheet-api Click vào Enable APIs and Service Để xuất hiện màn hinh bên dưới. Tiếp đó tìm APIs và Service của Google driver API và Google sheet API để Enable nó lên
Sau đó click vào Google APIs để về trang chủ và chọn Credentials Click vào Create credentials và chọn option Service account key https://images.viblo.asia/316f0e00-8343-4889-94ac-d6e53965756c.png
Sau đó tạo service name của bạn và chọn role rồi create vào Create để download key về máy
2. Tạo Project google-sheet-api
Tạo thư mục project: mkdir google-sheet-api
Di chuyển key vừa download lúc nãy vào thư mục cp Downloads/google-sheet-api-8af1289c9ba0.json google-sheet-api/client_secret.json
Di chuyển tới thư mục project cd google-sheet-api
Tạo Gemfile bundle init
Tạo file spreadsheet touch spreadsheet.rb
2.1. Gemfile
Thêm gem "google_driver"
và chạy bundle
để cài đặt
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
# gem "rails"
gem "google_driver"
2.2 Chuẩn bị file google sheet và share quyền
Tiến hành share quyền cho email là value của key client_email trong file json client_secret.json mình tải về ban đầu đối với googlesheet mình muốn thao tác.
3. Thao tác với google sheet
3.1 Lấy dữ liệu từ google sheet
Lấy 3 dòng đầu và 2 cột
require "bundler"
Bundler.require
session = GoogleDrive::Session.from_service_account_key("client_secret.json")
spreadsheet = session.spreadsheet_by_title("Học Sinh")
worksheet = spreadsheet.worksheets.first # lấy ra sheet đầu tiên trong file googlesheet
worksheet.rows.first(3).each {|row| puts row.first(2).join(" | ")}
Chạy bundle exec ruby spreadsheet.rb
ta có Kết quả
3.2 Insert dữ liệu vào file googlesheet
require "bundler"
Bundler.require
session = GoogleDrive::Session.from_service_account_key("client_secret.json")
spreadsheet = session.spreadsheet_by_title("Học Sinh")
worksheet = spreadsheet.worksheets.first # lấy ra sheet đầu tiên trong file googlesheet
puts "importing"
new_records = [
[4, "Trần E", 19],
[5, "Lý F", 20]
]
worksheet.insert_rows(worksheet.num_rows + 1, new_records)
worksheet.save
puts "imported"
Chạy bundle exec ruby spreadsheet.rb
ta có Kết quả
https://images.viblo.asia/0a94c2ef-8ffc-4b1e-bc92-1f163e720bf4.png
3.3 Update dữ liệu file googlesheet
require "bundler"
Bundler.require
session = GoogleDrive::Session.from_service_account_key("client_secret.json")
spreadsheet = session.spreadsheet_by_title("Học Sinh")
worksheet = spreadsheet.worksheets.first # lấy ra sheet đầu tiên trong file googlesheet
puts "updating"
worksheet["B3"] = "Name Updated"
worksheet.save
puts "updated"
Chạy bundle exec ruby spreadsheet.rb
ta có Kết quả
3.4 Remove dữ liệu file googlesheet
require "bundler"
Bundler.require
session = GoogleDrive::Session.from_service_account_key("client_secret.json")
spreadsheet = session.spreadsheet_by_title("Học Sinh")
worksheet = spreadsheet.worksheets.first # lấy ra sheet đầu tiên trong file googlesheet
puts "deleting"
worksheet.delete_rows(4, 2) # remove 2 line tính từ line thứ 4
worksheet.save
puts "deleted"
Chạy bundle exec ruby spreadsheet.rb
ta có Kết quả
Tài liệu tham khảo
All Rights Reserved