การใช้งาน Python ควบคุม Google sheet

stackpython
4 min readMay 22, 2020

--

วันนี้ Stackpython จะมาบอกวิธีการดึงขอมูลหรือเเก้ไขปรับปรุง ข้อมูลใน Google sheet ด้วย Python

Google Sheets คือ App ในกลุ่มของ Google Drive ซึ่งเป็นนวัตกรรมของทาง Google ซึ่งมีลักษณะการทำงานที่คล้ายกับ Microsoft Excel มีการสร้าง Column Row สามารถใส่ข้อมูลลงไปใน Cell ได้และที่สำคัญคือไม่ต้องติดตั้งที่เครื่อง สามารถใช้งานบน Web ได้ โดย ไฟล์ที่เราทำนั้นจะถูกบันทึกไว้ใน Google Drive ทำให้สามารถเปิดใช้งานได้ ไม่ว่าจะอยู่ที่ใด

การเปิดช่องทางการเข้าถึง Google Sheet และกำหนดสิทธิ์ให้กับ Application ของเราที่ต้องการจะเข้าถึงข้อมูลผ่านตัว Google Sheet API มีวิธีดังต่อนี้

เริ่มสร้างโปรเจคท์

มาเริ่มสร้างโปรเจ็กต์ เพื่อเตรียมช่องทางการเข้าถึงข้อมูลใน Google Sheet ก่อนอื่นให้เข้า แพลตฟอร์ม Google Cloud และ เข้าเมนูเลือกไปที่ IAMและผู้ดูแลระบบ -> เลือกจัดการทรัพยากร

  1. ไปที่สร้างโปรเจ็กต์ -> ตั้งชื่อ โปรเจ็กต์ และกดสร้าง เมื่้อเสร็จจะมีเมนูที่เราสร้าง เด้งขึ้นมามุมบนขวามือ

2. เข้าที่เมนูอีกครั้ง แล้วเลือกไปที่ API และบริการ -> เลือกหน้าแดชบอร์ด จากนั้นคลิกที่ เลือกโปรเจ็กต์ เเละทำการเลือกโปรเจ็กต์ที่เราสร้างไว้ -> ไปที่ข้อมูลรับรอง

3. เมื่ออยู่ในหน้า ข้อมูลเข้าสู่ระบบ เราจะสร้างข้อมูลรับรองเป็นบัญชีบริการ เลือกที่สร้างข้อมูลรับรอง -> บัญชีบริการ

4. จากนั้นตั้งชื่อเเละกดสร้าง -> ให้เลือกบทบาทเป็นโปรเจ็กต์ ผู้เเก้ไข -> กดสร้างคีย์ และเลือก JSON มันจะโหลดไฟร์มาให้เราเก็บไว้ เมื่อกดปุ่มเสร็จสิ้น จะกลับมาที่หน้าหลัก ข้อมูลเข้าสู่ระบบ จะเห็นรายการ บัญชีบริการที่เราสร้างไว้ แสดงขึ้นมาด้านล่าง

5. ให้ทำการแก้ไขชื่อไฟล์ JSON ที่โหลดออกมาเป็นชื่อ creds.json ->ให้ Copy ข้อมูลส่วน client_email ไว้ เพื่อจะนำไปตั้งสิทธิให้เข้าถึง Google Sheet ที่เราต้องการโดย การกดปุ่ม แชร์ที่ Google Sheet และใส่ข้อมูล email เป็น ข้อมูล client_email ส่วนที่เรา Copy มาและกดส่ง เพื่อ setApplication ให้มีสิทธิเข้าถึง Google Sheet นี้ได้

6. จากนั้นให้ไป ไลบรารี ค้นหา Google Sheets API และ Google Drive API เพื่อเปิดใช้งาน ->ไปที่ Google Drive API กดสร้างข้อมูลเข้าสู้ระบบ และเลือก Google Drive API , เว็บเซิร์ฟเวอร์ , ข้อมูลแอปพลิเคชัน , ไม่ ฉันไม่ได้ใช้ แล้วกดฉันต้องใช้ข้อมูลรับรองใด -> กดเสร็จสิ้น

เขียนไพธอนดึงข้อมูลจาก Google Sheet

ขั้นตอนต่อไป เราจะมาเขียน Python ให้ดึงแก้ไขข้อมูลออกมาจาก Google Sheet กัน ก่อนอื่นต้องสร้าง virtualenvironment ใน folderที่เราเก็บไฟร์ที่โหลดมาไว้ (แนะนำให้สร้างใหม่เเละเก็บไว้ด้วยกัน) จากนั้นสร้าง file.py เพื่อใช้ในการเขียนโค้ด -> Install Library ที่จำเป็น oauth2client และ gspread ด้วยคำสั้ง pip install oauth2client , pip install gspread

โอเครเรามาดูโค้ดกัน(อันแรกเป็นการดึงข้อมูลมาแสดง)

import gspreadfrom oauth2client.service_account import ServiceAccountCredentialsfrom pprint import pprintscope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]cerds = ServiceAccountCredentials.from_json_keyfile_name("cerds.json", scope)client = gspread.authorize(cerds)sheet = client.open("ชื่อไฟล์งาน").worksheet('แผ่นที่จะเรียกเปิด') # เป็นการเปิดไปยังหน้าชีตนั้นๆdata = sheet.get_all_records()  # การรับรายการของระเบียนทั้งหมดpprint(data)

ตัวอย่างผลลัพธ์

(ต่อไปจะเป็นการแก้ไขข้อความ)

import gspreadfrom oauth2client.service_account import ServiceAccountCredentialsfrom pprint import pprintscope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]cerds = ServiceAccountCredentials.from_json_keyfile_name("cerds.json", scope)client = gspread.authorize(cerds)sheet = client.open("ชื่อไฟล์งาน").worksheet('แผ่นที่จะเรียกเปิด') # เป็นการเปิดไปยังหน้าชีตนั้นๆcell=sheet.cell(4,2).valuepprint(cell)sheet.update_cell(4,2,"แก้ไข")cell=sheet.cell(4,2).valuepprint(cell)

ตัวอย่างผลลัพธ์

นอกจากนี้ยังมีคำสั่งอีกมาก เช่น

sheet.row_value(*) #ใส่เลขที่ต้องการแทน *­­­­­­­­ sheet.col_value(*) #ใส่เลขที่ต้องการแทน *sheet.delete_row(*) #ใส่เลขที่ต้องการแทน *sheet.delete_columns(*) #ใส่เลขที่ต้องการแทน *sheet.insert_row([&],*)#ใส่เลขที่ต้องการแทน *และข้อความแทน &

ลองไปใช้กันดูนะครับ

ขอบคุณมากครับที่เข้ามาอ่านบทความของทางเพจ Stackpython ทั้งนี้ หากสงสัยตรงไหนเกี่ยวกับเนื้อหาในบทความสามารถติดต่อสอบถามทางเพจเราได้เลยครับ

ติดตาม STACKPYTHON กันต่อ ได้ในช่องทางต่อไปนี้ได้เลยครับ

--

--

stackpython
stackpython

Responses (2)