Python với Excel và Google sheets tạo 'server database online' miễn phí (2 người xem)

  • Thread starter Thread starter befaint
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

befaint

|||||||||||||
Tham gia
6/1/11
Bài viết
14,608
Được thích
19,858
218606

Bài này sẽ giới thiệu một cách kết hợp Python, MS Excel, Google sheets để tạo 'server database online' miễn phí, cho phép đẩy dữ liệu từ Excel lên Google sheets để lưu trữ online, và lấy dữ liệu từ Google sheets xuống bảng tính Excel để làm gì đó theo mong muốn..

1/ Các công cụ:
- Python 3.x cài trên Windows (hoặc Mac)
- Thư viện gspread cho Python.
- Google Sheets API v4. Để sử dụng Google Sheets API trên Python cần thư viện oauth2client (kèm gói hỗ trợ PyOpenSSL).
* Cài đặt các thư viện gspread, oauth2client, PyOpenSSL:
PHP:
#install for Python 3.x
#Mac:
sudo python3 -m pip install PyOpenSSL
sudo python3 -m pip install --upgrade oauth2client
sudo python3 -m pip install gspread
#Windows:
py -m pip install PyOpenSSL
py -m pip install --upgrade oauth2client
py -m pip install gspread
* Cài đặt Google Sheets API v4
- Vào trang Google Developers Console tạo mới một project (đăng nhập bằng tài khoản Google).

218607
218610

Tiếp đó, vào mục Library, tìm Google sheets và kích hoạt API

218608
218609

218612

Tiếp theo, vào mục Credentials, tạo một "Service account key"..

218613
218614
218615
218616

Kết quả, tải một file key.json về máy tính, có nội dung như hình dưới.

218618

(Xem tiếp bài sau..)
 
Lần chỉnh sửa cuối:
{tiếp}

Đăng nhập vào Google sheets, tạo một trang tính mới (đặt tên, chọn nơi lưu trữ trên Google Drive...)

Click vào mục Share (ở góc trên phải), và nhập vào địa chỉ client_email lấy từ trong file key.json tải được ở bước cài đặt Google Sheets API để thiết lập chia sẻ bảng tính cho client_email đó, click nút Send để thực hiện.
Sau đó, chép lại File_ID cho bước sau.
219579


2/ Upload dữ liệu lên Google Sheets
Mục này, ta làm một ví dụ đơn giản: Điền số thứ tự 1-100 vào A1:A100.
Code Python như sau:
PHP:
import gspread, os, json
from oauth2client.service_account import ServiceAccountCredentials

file_api_key = "api_gsheets.json"
file_id = "1fX7a3J1H1Mit0-IBQeygKh2GuT7hy7A2mX..."

def get_json_file(file_path):
  json_file = open(file_path, 'r', encoding='utf-8')
  json_content = json.load(json_file)
  json_file.close()
  return json_content

def write_data_2range(worksheet, range_upload):
  """ ví dụ đơn giản - điền số 1,2,3.. vào range_upload
  worksheet - google sheets
  range_upload - một range của worksheet
  """
  i = 1
  for cell in range_upload: # ghi dữ liệu vào từng cell của range_upload
     cell.value = i
     i += 1
  worksheet.update_cells(range_upload) # cập nhật dữ liệu đã ghi 

def upload_data(file_id_):
  top_path = os.path.dirname(os.path.abspath(__file__))
  keyfile_path = os.path.join(top_path, file_api_key)
  keyfile_dict = get_json_file(keyfile_path)
  scope = ['https://spreadsheets.google.com/feeds',
         'https://www.googleapis.com/auth/drive']
  try: 
    credentials = ServiceAccountCredentials.from_json_keyfile_dict(keyfile_dict, scope)
    gc = gspread.authorize(credentials)
    worksheet = gc.open_by_key(file_id_).sheet1
    range_upload = worksheet.range('A1:A100')
    write_data_2range(worksheet,range_upload)
    print("Done!")
  except:
    print("Error!")

# run 
upload_data(file_id)
Mở file python-gsheets.py bằng IDLE Python rồi Run module.
Xem video:


(Xem tiếp bài sau - Lấy dữ liệu từ file Excel đẩy lên Google sheets..)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bài này hay quá anh, hóng tiếp bài sau ạ.
 
Upvote 0
Bài từ 2019 mà chưa có bài tiếp theo. chắc hóng cũng không có đâu
 
Lần chỉnh sửa cuối:
Upvote 0
Share tiếp đi anh
{tiếp}

Đăng nhập vào Google sheets, tạo một trang tính mới (đặt tên, chọn nơi lưu trữ trên Google Drive...)

Click vào mục Share (ở góc trên phải), và nhập vào địa chỉ client_email lấy từ trong file key.json tải được ở bước cài đặt Google Sheets API để thiết lập chia sẻ bảng tính cho client_email đó, click nút Send để thực hiện.
Sau đó, chép lại File_ID cho bước sau.
View attachment 219579


2/ Upload dữ liệu lên Google Sheets
Mục này, ta làm một ví dụ đơn giản: Điền số thứ tự 1-100 vào A1:A100.
Code Python như sau:
PHP:
import gspread, os, json
from oauth2client.service_account import ServiceAccountCredentials

file_api_key = "api_gsheets.json"
file_id = "1fX7a3J1H1Mit0-IBQeygKh2GuT7hy7A2mX..."

def get_json_file(file_path):
  json_file = open(file_path, 'r', encoding='utf-8')
  json_content = json.load(json_file)
  json_file.close()
  return json_content

def write_data_2range(worksheet, range_upload):
  """ ví dụ đơn giản - điền số 1,2,3.. vào range_upload
  worksheet - google sheets
  range_upload - một range của worksheet
  """
  i = 1
  for cell in range_upload: # ghi dữ liệu vào từng cell của range_upload
     cell.value = i
     i += 1
  worksheet.update_cells(range_upload) # cập nhật dữ liệu đã ghi

def upload_data(file_id_):
  top_path = os.path.dirname(os.path.abspath(__file__))
  keyfile_path = os.path.join(top_path, file_api_key)
  keyfile_dict = get_json_file(keyfile_path)
  scope = ['https://spreadsheets.google.com/feeds',
         'https://www.googleapis.com/auth/drive']
  try:
    credentials = ServiceAccountCredentials.from_json_keyfile_dict(keyfile_dict, scope)
    gc = gspread.authorize(credentials)
    worksheet = gc.open_by_key(file_id_).sheet1
    range_upload = worksheet.range('A1:A100')
    write_data_2range(worksheet,range_upload)
    print("Done!")
  except:
    print("Error!")

# run
upload_data(file_id)
Mở file python-gsheets.py bằng IDLE Python rồi Run module.
Xem video:


(Xem tiếp bài sau - Lấy dữ liệu từ file Excel đẩy lên Google sheets..)
 
Upvote 0
{tiếp}

Đăng nhập vào Google sheets, tạo một trang tính mới (đặt tên, chọn nơi lưu trữ trên Google Drive...)

Click vào mục Share (ở góc trên phải), và nhập vào địa chỉ client_email lấy từ trong file key.json tải được ở bước cài đặt Google Sheets API để thiết lập chia sẻ bảng tính cho client_email đó, click nút Send để thực hiện.
Sau đó, chép lại File_ID cho bước sau.
View attachment 219579


2/ Upload dữ liệu lên Google Sheets
Mục này, ta làm một ví dụ đơn giản: Điền số thứ tự 1-100 vào A1:A100.
Code Python như sau:
PHP:
import gspread, os, json
from oauth2client.service_account import ServiceAccountCredentials

file_api_key = "api_gsheets.json"
file_id = "1fX7a3J1H1Mit0-IBQeygKh2GuT7hy7A2mX..."

def get_json_file(file_path):
  json_file = open(file_path, 'r', encoding='utf-8')
  json_content = json.load(json_file)
  json_file.close()
  return json_content

def write_data_2range(worksheet, range_upload):
  """ ví dụ đơn giản - điền số 1,2,3.. vào range_upload
  worksheet - google sheets
  range_upload - một range của worksheet
  """
  i = 1
  for cell in range_upload: # ghi dữ liệu vào từng cell của range_upload
     cell.value = i
     i += 1
  worksheet.update_cells(range_upload) # cập nhật dữ liệu đã ghi

def upload_data(file_id_):
  top_path = os.path.dirname(os.path.abspath(__file__))
  keyfile_path = os.path.join(top_path, file_api_key)
  keyfile_dict = get_json_file(keyfile_path)
  scope = ['https://spreadsheets.google.com/feeds',
         'https://www.googleapis.com/auth/drive']
  try:
    credentials = ServiceAccountCredentials.from_json_keyfile_dict(keyfile_dict, scope)
    gc = gspread.authorize(credentials)
    worksheet = gc.open_by_key(file_id_).sheet1
    range_upload = worksheet.range('A1:A100')
    write_data_2range(worksheet,range_upload)
    print("Done!")
  except:
    print("Error!")

# run
upload_data(file_id)
Mở file python-gsheets.py bằng IDLE Python rồi Run module.
Xem video:


(Xem tiếp bài sau - Lấy dữ liệu từ file Excel đẩy lên Google sheets..)
hay đấy 5 năm rồi nay mới xem lại .. Python nó tích hợp cho thư viện sau rất ổn áp

from oauth2client.service_account import ServiceAccountCredentials
 
Upvote 0
chủ đề thớt này ứng dụng cho các ngôn ngữ khác OK nhé ... Lưu ý dòng sau tự viết hay dùng đồ của ai đó

from oauth2client.service_account import ServiceAccountCredentials
 
Upvote 0
Tới hôm nay khi viết Go khá tốt tôi mới nhận ra nhiều thứ liên quan viết hàm sử dụng Dịch vụ google

1/ uỷ toàn quyền đọc, ghi, xoá, tạo cho bên thứ ba
( quá nguy hiểm dùng chung thôi không có gì hay ho cả khi quá nhiều máy khách sử dụng quá tải google khoá là chết cả hệ thống ... thực ra là nhúng OAuth 2.0 của họ xong cho người dùng cuối sử dụng chung )

2/ do người dụng tạo và lấy OAuth 2.0 xong sử dụng mã rất an toàn và không cần API key

Nhờ AI và viết Go phát hiện ra thôi .... Copy nội dung này ChatGPT phân tích như sau

Nhận xét của bạn đi đúng trọng tâm của cách Google OAuth vận hành khi triển khai ở hệ thống lớn.
Có thể tách rõ 2 mô hình để nhìn “đúng bản chất” hơn:

1. OAuth dạng “ủy quyền tập trung” (service-owned / delegated admin)​

Đây là kiểu bạn nói “uỷ toàn quyền đọc/ghi/xoá cho bên thứ ba”.

Bản chất​

  • App của bạn là chủ OAuth client
  • Người dùng chỉ “đăng nhập và cấp quyền”
  • Scope thường rộng: Drive, Sheets, Gmail…
  • Token được lưu và dùng lại cho nhiều request / nhiều user

Vấn đề thực tế​

  • Single point of failure về quota & policy
  • Nếu hàng nghìn/mười nghìn máy cùng dùng:
    • dễ bị:
      • quota API
      • refresh token revoke hàng loạt
      • suspicious traffic → Google khóa OAuth client
  • Risk cao nhất: vi phạm pattern usage của Google
Cách này chỉ hợp:
  • internal tool nhỏ
  • enterprise có kiểm soát user
  • hệ thống ít phân tán

2. OAuth “user-owned consent” (mỗi user tự cấp quyền)​

Đây là kiểu bạn nói “người dùng tự tạo OAuth 2.0 rồi dùng mã”.

Bản chất đúng hơn:​

  • Mỗi user là resource owner
  • App chỉ là “client”
  • User login Google → cấp scope
  • nhận:
    • access token
    • refresh token (offline access nếu có)

Điểm quan trọng​

  • Không cần API key cho hầu hết API Google (Drive/Sheets/Gmail…)
  • API key chỉ dùng cho public data hoặc quota tracking nhẹ

So sánh nhanh​

Tiêu chíUỷ quyền tập trungUser OAuth riêng
Kiểm soátApp giữ toàn quyềnUser tự cấp
Scale lớnRất rủi roAn toàn hơn
Dễ bị khóaCaoThấp hơn
Token reusechungriêng từng user
Phù hợpinternalSaaS / multi-user

Điểm bạn chạm đúng (rất quan trọng)​

1. “Quá nhiều máy khách → Google khóa”​

Đúng. Google không chỉ nhìn API call mà còn:
  • pattern IP
  • refresh token reuse bất thường
  • tốc độ tạo token / luồng login
  • scope nhạy cảm (Gmail/Drive)

2. “User tự OAuth thì an toàn hơn”​

Đúng, nhưng cần hiểu thêm 1 lớp:
  • An toàn về mặt chính sách Google
  • Nhưng hệ thống của bạn phải xử lý:
    • refresh token storage
    • revoke handling
    • per-user quota tracking

Kiến trúc thực tế (khuyến nghị cho hệ thống lớn)​

Nếu bạn đang làm Go + DLL bridge kiểu RPC/Excel add-in:

Mô hình đúng:​

  • mỗi user → 1 OAuth flow riêng
  • backend lưu:
    • refresh token per user
  • worker service gọi API theo user context

KHÔNG nên:​

  • dùng 1 OAuth client + share refresh token cho 100k máy

Một điểm nhiều người hay hiểu sai​

“Không cần API key nên an toàn”
Không hẳn.
  • OAuth ≠ miễn quota
  • OAuth ≠ miễn policy enforcement
  • OAuth chỉ thay thế authentication/authorization

Kết luận ngắn​

  • Bạn nhận ra vấn đề “scale + quota + policy” là đúng hướng hệ thống lớn
  • Mô hình an toàn nhất vẫn là:
    user-consent OAuth per user, không tập trung quyền

Nếu bạn muốn, tôi có thể vẽ cho bạn một kiến trúc Go + DLL bridge kiểu:
  • Excel add-in
  • multi-user OAuth
  • token cache + refresh queue
  • chống Google ban theo pattern
cái này thực tế quan trọng hơn code rất nhiều.
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom