# Google Sheets

## **การอ่านหรือเขียนข้อมูลในสเปรดชีต Google Sheets**

### **การเข้าถึงสเปรดชีต**

ก่อนที่คุณจะใช้ Node นี้ คุณต้องให้สิทธิ์ Automation ในการเข้าถึงสเปรดชีตก่อน โดยสิทธิ์ในการเข้าถึงของชีตจะแบ่งออกเป็น 2 ประเภทด้วยกัน

***

### **การเข้าถึงชีตรูปแบบ Public**

เป็นการเข้าถึงสเปรดชีตแบบสาธารณะ สามารถเลือกได้โดยการตั้งค่าชีต และเปลี่ยนสิทธิ์การเข้าถึงให้เป็น “ทุกคนที่มีลิงก์”

<div align="center"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfPUpvbaZPo8UAuJyr5XZp-Lm6xvUEREn_fwbgBjorjjA6cnD2h0hBxhtsd8fvQUAnLmA1LHlzJfsP80BYXGSYYB5nBu2uk9tTYiOH4TuQPbdX5zJge8c1p5EYmp1wVQb0JBRoIgg?key=_7yctlX4sedn-Xd6TKLsh92z" alt=""><figcaption><p><strong>ตัวอย่าง</strong> การตั้งค่าสาธารณะ</p></figcaption></figure></div>

***

### **การเข้าถึงชีตรูปแบบ Private**

เป็นการเข้าถึงสเปรดชีตในรูปแบบส่วนตัว โดยคุณสามารถตั้งค่าการเชื่อมต่อ Google Sheets API ด้วย Service Account ดังนี้

#### **การเชื่อมต่อ Google Sheets API ด้วย Service Account**

ก่อนที่จะสามารถเข้าถึง สเปรดชีตส่วนตัวได้ คุณต้องทำการเชื่อมต่อกับ Google Sheets API ด้วย Service Account ก่อน

#### **สิ่งที่ต้องมี:**

1. Google Cloud Account: สามารถสมัครหรือล็อกอินเข้าใช้งานได้ที่ [Google Cloud Console](https://console.cloud.google.com/)
2. Google Sheets Document: เข้าไปยังชีตของท่าน หรือสร้างชีตใหม่ ที่ [Google Sheets](https://docs.google.com/spreadsheets/)
3. Service Account: เราจะสอนคุณสร้างบัญชีนี้ในขั้นตอนด้านล่าง เพื่อใช้สำหรับการยืนยันตัวตน

#### **ขั้นตอนการเชื่อมต่อ:**

<details>

<summary><strong>การสร้างโปรเจคใหม่บน Google Cloud</strong></summary>

1. ไปยังหน้า [Google Cloud Console](https://console.cloud.google.com/)
2. คลิกเลือกโปรเจค ตรงเมนูด้านบน<br>

   <div align="left"><figure><img src="/files/5hJW3PXkIcoJQJVpwzXY" alt="" width="375"><figcaption></figcaption></figure></div>
3. เลือกที่ `New Project`&#x20;
4. ใส่ชื่อโปรเจค เช่น “Google Sheets API Integration” จากนั้นกด `Create`
5. **อย่าลืม** เลือกเป็นโปรเจคที่เพิ่งสร้าง<br>

   <div align="left"><figure><img src="/files/NBImJ7NaKJaZxiQ5MnFY" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

<details>

<summary><strong>เปิดใช้งาน Google Sheets API และ Google Drive API</strong></summary>

1. ในหน้า Google Cloud Console, ไปยัง APIs & Services -> Library<br>

   <div align="left"><figure><img src="/files/mSfzHVUhAY1n13bzkS8j" alt="" width="375"><figcaption></figcaption></figure></div>
2. กดพิมพ์ค้นหา “Google Sheets API”<br>

   <div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfZKoNh4hwU_DddgWQiAYehg6TBURqw3Ty5vcoqY8YOg0LoALgAijK4mqzJkSq3pyGHinqxo1_rLKEVj-lHwTowHPowpmfIWKZpiUaoOhyS3kAOwPA33ozW8_YdrPu1F6ymwG6M?key=_7yctlX4sedn-Xd6TKLsh92z" alt="" width="375"><figcaption></figcaption></figure></div>
3. กด `Enable` เพื่อเปิดใช้งาน<br>

   <div align="left"><figure><img src="/files/KMkSoxehaXGHkzMk6O26" alt="" width="375"><figcaption></figcaption></figure></div>
4. กดกลับไปที่หน้า ค้นหา
5. กดพิมพ์ค้นหา “Google Drive API”<br>

   <div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeRLk6_8l1BJ8Kdrunz673yDZNyxUFX0Et-Vo9neM0VZqcs-z-4WLLCJ-Zt_uUeSUSM6Rz5oF6dRnlukn6W2HlFwQQ2dD-M8v0DuqncpxgMlnidBOV202gh9XJXKGoMfcqrMVEHBQ?key=_7yctlX4sedn-Xd6TKLsh92z" alt=""><figcaption></figcaption></figure></div>
6. กด `Enable` เพื่อเปิดใช้งาน<br>

   <div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeXUIfaY3fAtFNysSHc68t88GFeqj0EqYE7ay-LvI7ie3sV_LUbuM0FTdxBrWtQwm4ccMeP_6LIT3Cd46EN6Tf30Z3A-JXPjZWfRQkoYQRi-1-zF4CzJbm9lDZE4wr-UPMx4kMP0g?key=_7yctlX4sedn-Xd6TKLsh92z" alt=""><figcaption></figcaption></figure></div>

</details>

<details>

<summary><strong>การสร้าง Service Account</strong></summary>

1. ไปที่ `IAM & Admin` -> `Service Accounts`<br>

   <div align="left"><figure><img src="/files/hJaZFvV7Uw4C2Y5xrOKO" alt="" width="375"><figcaption></figcaption></figure></div>
2. กดไปที่ `Create service account` <br>

   <div align="left"><figure><img src="/files/J4trRWu4HdzTjenJY75J" alt="" width="375"><figcaption></figcaption></figure></div>
3. กรอกข้อมูลเหล่านี้ให้เรียบร้อย<br>

   <div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdNQq6waC07rumY6hcr2IlCNBBJi-Gd_wEhbU4EC4jxYIDlYw9C9V4WQEyx9QeVkV7P5xPTIZ82zvVTAAk8fVtNQsvAFvksVpUlb88LUZf8Du7AdGMMMrJ95N954il6SSAfCGtU-Q?key=_7yctlX4sedn-Xd6TKLsh92z" alt="" width="375"><figcaption></figcaption></figure></div>

   * Service account name: ชื่อบัญชี เช่น “Sheets API Service”
   * Service account ID: รหัสบัญชี (ระบบจะสร้างให้อัตโนมัติ)
   * Description: คำอธิบาย (ไม่บังคับกรอก)
4. เมื่อกรอกเสร็จ คลิก `Create and Continue`&#x20;

</details>

<details>

<summary><strong>การให้สิทธิ์เข้าถึงกับ Service Account</strong></summary>

<div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXexWDVBpSRwrC-ZGJfOp7j9fW4jWX6z011NjNa_j6vJDwzwixHPo1fpbIXOenbN8h_3QKmty0IpJtB7pJvHBy3Na85_XszQF6hd-xyZMyuQNTumDSNXfKjnQzGu_GhfshWHT5apcw?key=_7yctlX4sedn-Xd6TKLsh92z" alt=""><figcaption></figcaption></figure></div>

1. เมื่ออยู่หน้า Grant this service account to project แล้ว ให้เลือก Role เป็น Editor (หรือ Owner สำหรับการเข้าถึงเต็มรูปแบบ)
2. กดคลิก `Continue`&#x20;
3. คลิก `Done` เพื่อเสร็จสิ้นการตั้งค่า<br>

   <div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeKbc0Hy7dMV9ziK1Gf-U0NysauTqss0w5mLQK61ZsZzbb6yLhjZ4XxkLTrxP4dhc0yOmwGHICNnov8OSmOcKDGbc_4CAG3EyJyU-zMS7oOfF2f7ShzLGqJMiYDHJj84dCuanVwAw?key=_7yctlX4sedn-Xd6TKLsh92z" alt=""><figcaption></figcaption></figure></div>

</details>

<details>

<summary><strong>การสร้าง Service Account Key (JSON)</strong></summary>

1. ในลิสต์รายการ ให้คุณค้นหาบัญชีที่สร้าง
2. คลิกที่ชื่อบัญชีเพื่อเปิด<br>

   <figure><img src="/files/4j1XNDn14BoxU9TEQvB8" alt=""><figcaption></figcaption></figure>
3. ไปที่แทบ `Keys`<br>

   <div align="left"><figure><img src="/files/fXyy53EN2t4V3Oq6ULia" alt=""><figcaption></figcaption></figure></div>
4. คลิกไปที่ `Add Key` -> `Create New Key` <br>

   <div align="left"><figure><img src="/files/xkK30UlkvuOGyr6MP65p" alt=""><figcaption></figcaption></figure></div>
5. เลือกเป็น `JSON` แล้วกด `Create` <br>

   <div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcf5XMgXNQM1oSxA77txlv0w7_qN2cQt_4F3vbA3QdzPh8uXyUFXYKNb_aVKlKX7tz7Wf_HNjOv2v5s8BFIfZP8NfgXZZuqu6NYphwR5x_VxQwE9Y6L3EUV-ozQMTk0KH2Lj21wFA?key=_7yctlX4sedn-Xd6TKLsh92z" alt=""><figcaption></figcaption></figure></div>
6. ดาวน์โหลดไฟล์ `JSON` แล้วเก็บไว้ในที่ปลอดภัย เนื่องจากไฟล์นี้อาจมีข้อมูลที่เป็นความลับ

</details>

<details>

<summary><strong>แชร์เอกสาร Google Sheets ของคุณ</strong></summary>

1. เปิดเอกสาร Google Sheets ที่ต้องการใช้

2. กดแชร์ ที่มุมขวาบน

3. เปิดไฟล์ JSON ที่ดาวน์โหลด<br>

   <figure><img src="/files/T7cHkbsEjvXU6VP7yrgL" alt=""><figcaption></figcaption></figure>

4. แชร์เอกสารกับ client\_email ในไฟล์ JSON (เช่น <your-service-account@project-id.iam.gserviceaccount.com>)<br>

   <div align="left"><figure><img src="/files/By4OsAeGvP9gXl6j3WfE" alt="" width="375"><figcaption></figcaption></figure></div>

5. หลังตรวจสอบความเรียบร้อยแล้วให้คลิกที่ `ส่ง`<br>

   <div align="left"><figure><img src="/files/BXEOvwLftbOVE7DiptNi" alt="" width="375"><figcaption></figcaption></figure></div>

</details>

***

## **รายละเอียดการตั้งค่าในบล็อค**

### Spreadsheet **ID**&#x20;

สามารถระบุสเปรดชีต ID ของเอกสาร เพื่อเชื่อมต่อบล็อคเข้ากับเอกสารที่ต้องการใช้งาน

<div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfVk7W_c-FzJ4f3MEWzoK-i-ldp3PflJUl6S8wM0LfLFFwk6cFW93DPWEFkoAcZSf_GVeV4UWQycdPpPdDNKZys-WQBr4aEpgePIRF-ijN8jeg7nvzPvufiPF7QT99eaopaCPWxLQ?key=_7yctlX4sedn-Xd6TKLsh92z" alt=""><figcaption></figcaption></figure></div>

#### **การระบุ ID ของสเปรดชีต**

ID ของสเปรดชีตประกอบด้วยตัวอักษร ตัวเลข เครื่องหมายขีดกลาง หรือเครื่องหมายขีดล่าง และคุณสามารถพบได้ใน URL ของ Google Sheets:&#x20;

```
https://docs.google.com/spreadsheets/d/1ZOVnxQDdNm2rOCMIn_a9y2-ZxUqwVAR0fcYzc6X43nY/edit#gid=0
```

ค่าของสเปรตชีต ID จะอยู่ระหว่าง `/d/สเปรตชีต ID/edit`

**ซึ่ง ID ของสเปรดชีต คือ:**&#x20;

```
1ZOVnxQDdNm2rOCMIn_a9y2-ZxUqwVAR0fcYzc6X43nY
```

***

### Range (ช่วง)

<div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfkSy2McQprFy5kgE-zzVtrqFni5Tv8SbJtbys9iAB2aGBCpZDDt9MXfkeBplTha2Q4cwszpyTJmqZBxZlKaU4tlMTHEA043dt2ws1IxHynZ_zUqt5nhN8jDZGoE3alCduvjv8PeQ?key=_7yctlX4sedn-Xd6TKLsh92z" alt=""><figcaption></figcaption></figure></div>

ช่วงของค่าที่คุณต้องการดึง อัปเดต หรือ ลบ เช่น หากใช้งานฟังค์ชั่นดึงข้อมูล สามารถระบุเป็น Sheet1!A1:A3 เพื่อรับข้อมูล 3 เซลล์

<div align="left"><figure><img src="/files/1mQ5E4AecZllUCEs7b7X" alt="" width="375"><figcaption></figcaption></figure></div>

***

### **Reference key (การกำหนดคีย์อ้างอิง)**

เมื่อกำหนดคีย์อ้างอิง ผลลัพธ์ที่ได้จากการดึงข้อมูล จะอยู่ในคีย์ที่กำหนด เช่น

<div align="left"><figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcct-1aQ7iS5wTJTrfQXhmqC5Xr09XSlo6UBK7SP4_Iqgud3KF34uwMnwlEz8ffIuIffyFQL9inrxBdaVsNmVROSGRta8P41XfKm-gIiQhXS7U8CobQMwOdt903x1_2zxEYnCVebA?key=_7yctlX4sedn-Xd6TKLsh92z" alt=""><figcaption></figcaption></figure></div>

* **ตัวอย่าง** การกำหนดคีย์อ้างอิง ชื่อ “names”

<div align="left"><figure><img src="/files/EoKx70WVUNPAWdza6bSn" alt="" width="172"><figcaption></figcaption></figure></div>

จะเห็นได้ว่า ผลลัพธ์ทั้งหมดจะถูกเก็บ**ไว้ในลิสต์**ของ**คีย์อ้างอิง**

***

### **การใช้แถวแรกเป็นคีย์**

เมื่อเลือกใช้แถวแรกของสเปรดชีตเป็นคีย์ ค่าที่อยู่ในคอลัมน์ที่สอดคล้องกันจะถูกระบุตามคีย์นั้น\
และคุณสามารถดึงค่าต่างๆ ได้โดยใช้คีย์นี้

**ตัวอย่าง**: เมื่อคุณมีสเปรดชีตดังนี้

<table><thead><tr><th width="236">name</th><th width="100">age</th></tr></thead><tbody><tr><td>foo</td><td>22</td></tr><tr><td>bar</td><td>23</td></tr></tbody></table>

```
// ไม่เลือกแถวแรกเป็นคีย์
[["name", "age"], ["foo", 22], ["bar", 23]]
//เลือกแถวแรกเป็นคีย์
[{ "name": "foo", "age": 22 }, { "name": "bar", "age": 23 }]
```

***

### **ชื่อคอลัมน์ที่ใช้เป็นคีย์หลัก**

การใช้คอลัมน์เป็นคีย์หลักช่วยให้คุณสามารถดึงข้อมูลจากสเปรดชีตตามค่าที่กำหนดในคอลัมน์นั้น เช่น ในกรณีที่ข้อมูลถูกจัดกลุ่มตามโปรไฟล์ ID หรือรหัสเฉพาะ คุณสามารถใช้คอลัมน์นี้เป็นตัวระบุ (Key) เพื่อเข้าถึงข้อมูลได้ง่ายขึ้น

**ตัวอย่าง**: เมื่อคุณมีสเปรดชีตดังนี้

| profileId | name | age |
| --------- | ---- | --- |
| 2         | foo  | 22  |
| 3         | bar  | 23  |

หากคุณต้องการให้เมื่อรันโปรไฟล์ที่มี ID เท่ากับ 2 2 และ 3 สามารถใช้คีย์ profileId ในการเข้าถึงข้อมูล เช่น

* **สำหรับโปรไฟล์ ID 2:** `{{googleSheets.referenceKey.[2].name}}` จะได้ค่าเป็น `foo`
* **สำหรับโปรไฟล์ ID 3:** `{{googleSheets.referenceKey.[3].name}}` จะได้ค่าเป็น `bar`

***

### **การดึงช่วงของสเปรดชีต**

ดึงค่าช่วงของสเปรดชีต จากนั้นกำหนดค่านั้นให้กับตัวแปรหรือคอลัมน์ที่ต้องการ

ช่วงของสเปรดชีต

* กำหนดให้ตัวแปร: กำหนดช่วงของข้อมูลให้กับตัวแปร
* แทรกลงในตาราง: กำหนดช่วงของข้อมูลให้กับคอลัมน์

***

### **การอัปเดตค่าของเซลล์ในสเปรดชีต**

เมื่ออัปเดตข้อมูลในสเปรดชีต คุณสามารถกำหนดวิธีที่ข้อมูลจะถูกแปลความหมายก่อนจัดเก็บลงในเซลล์ โดยมีตัวเลือกหลัก ๆ ดังนี้:

#### **ตัวเลือกการป้อนค่า (Input Modes)**

* **RAW (ค่าดิบ)**:&#x20;
  * ข้อมูลจะถูกเก็บตามที่ป้อนโดยไม่มีการแปลงใด ๆ
  * เหมาะสำหรับข้อมูลที่ต้องการเก็บในรูปแบบข้อความ (String)

    **ตัวอย่าง**: ป้อน `"123"` จะถูกเก็บเป็น `"123"` (ข้อความ)
* **USER\_ENTERED (ค่าที่ป้อนโดยผู้ใช้):**
  * ข้อมูลจะถูกแปลความหมายเหมือนกับการป้อนใน Google Sheets โดยตรง
  * ตัวเลขและวันที่อาจถูกแปลงโดยอัตโนมัติตามรูปแบบใน Google Sheets
  * **ตัวอย่าง**: ป้อน `"123"` จะถูกเก็บเป็น `123` (ตัวเลข)

#### **ตัวเลือกแหล่งข้อมูล (Data From)**

ข้อมูลจากแหล่งข้อมูลเพื่ออัปเดตสเปรดชีต ค่าเริ่มต้นคือ ตาราง

* **ตาราง (Table):**&#x20;
  * ดึงข้อมูลจากตารางที่มีอยู่ในสเปรดชีต
  * เหมาะสำหรับข้อมูลที่ถูกจัดเรียงเป็นแถวและคอลัมน์
* **ใช้คีย์เป็นแถวแรก (Use First Row as Key):**&#x20;
  * ใช้คอลัมน์แรกเป็นคีย์หลักในการดึงข้อมูล
  * ข้อมูลจะถูกอ้างอิงตามคีย์ในแถวแรก
* **กำหนดเอง (Custom):**
  * ป้อนข้อมูลในรูปแบบ JSON array
  * **ตัวอย่าง**: `["1","2","3"]`

***

### **ตัวเลือกการแทรกข้อมูลลงในสเปรดชีต**

เมื่อเพิ่มข้อมูลลงในสเปรดชีต คุณสามารถกำหนดวิธีการแทรกข้อมูลเพื่อให้สอดคล้องกับรูปแบบที่ต้องการ มีตัวเลือกดังนี้:

#### **วิธีการแทรกข้อมูล (Insert Modes)**

* **OVERWRITE (เขียนทับ):**
  * เขียนทับข้อมูลเดิมในช่วงเซลล์ที่กำหนด
  * เหมาะสำหรับข้อมูลที่ต้องการอัปเดตแบบคงที่
  * **ตัวอย่าง**: อัปเดตข้อมูลในช่วง `A2:B4` โดยเขียนทับข้อมูลที่มีอยู่
* **INSERT\_ROWS (แทรกแถวใหม่):**
  * แทรกแถวใหม่สำหรับข้อมูลใหม่ โดยไม่เขียนทับข้อมูลเดิม
  * เหมาะสำหรับการเพิ่มข้อมูลใหม่ เช่น รายการขายหรือรายชื่อลูกค้า

#### **แหล่งข้อมูลสำหรับการแทรก (Data From)**

* ตาราง (Table):&#x20;
  * ดึงข้อมูลจากตารางที่มีอยู่
  * เหมาะสำหรับข้อมูลที่มีโครงสร้างชัดเจน เช่น ข้อมูลการขายหรือข้อมูลลูกค้า
* ใช้คีย์เป็นแถวแรก (Use First Row as Key):&#x20;
  * ใช้คอลัมน์แรกเป็นคีย์หลักในการดึงข้อมูล
  * ข้อมูลจะถูกอ้างอิงตามคีย์ในแถวแรก
* กำหนดเอง (Custom):&#x20;
  * ป้อนข้อมูลในรูปแบบ JSON array
  * ตัวอย่าง: `["1", "2", "3"]`

***

### **การเข้าถึงข้อมูลของสเปรดชีต**

การเข้าถึงข้อมูลจากสเปรดชีตใน Node สามารถทำได้โดยใช้สูตร (Syntax) สำหรับอ้างอิงข้อมูลภายในแผ่นงาน โดยใช้รูปแบบ: `{{ googleSheets.referenceKey.path }}`

**ตัวอย่างการเข้าถึงข้อมูล**

ข้อมูลใน Google Sheets:

| name    | age |
| ------- | --- |
| Alice   | 25  |
| Bob     | 30  |
| Charlie | 35  |

หากข้อมูลนี้ถูกเชื่อมต่อกับ Node ที่มีคีย์อ้างอิงชื่อ `data` คุณสามารถเข้าถึงข้อมูลแต่ละแถวได้ดังนี้:

* ดึงชื่อของแถวแรก: `{{googleSheets.data.0.name}}` จะได้ค่าเป็น **Alice**
* ดึงอายุของแถวแรก: `{{googleSheets.data.0.age}}` จะได้ค่าเป็น **25**
* ดึงชื่อของแถวที่สอง: `{{googleSheets.data.1.name}}` จะได้ค่าเป็น **Bob**
* ดึงอายุของแถวที่สาม: `{{googleSheets.data.2.age}}` จะได้ค่าเป็น **35**

#### **กรณีใช้แถวแรกเป็นคีย์**

หากคุณเลือกใช้แถวแรกเป็นคีย์ ค่าที่เรียกใช้อาจเปลี่ยนรูปแบบ เช่น:

* `{{googleSheets.data.Alice.age}}` จะได้ค่าเป็น **25**
* `{{googleSheets.data.Bob.age}}` จะได้ค่าเป็น **30**

***

## **คลิปสอนการใช้งานบล็อค Google Sheets**

{% embed url="<https://youtu.be/fAMD3sN6nl8>" %}

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://manual.gemlogin.io/software-manual/gemlogin/automation-command-blocks/online-services/google-sheets.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
