ย้ายข้อมูลจาก Sheets API v3

หากมีแอปที่สร้างขึ้นโดยอิงตาม Google Sheets API v3 คุณสามารถย้ายข้อมูลไปยัง Google Sheets API v4 ได้ เวอร์ชัน v4 เป็นแบบ JSON มีอินเทอร์เฟซที่ใช้งานง่ายกว่า และเพิ่มฟังก์ชันการทำงานจำนวนมากซึ่งไม่สามารถทำได้ ในเวอร์ชัน v3

หน้านี้แสดงการแมประหว่างคำสั่ง Sheets API v3 รุ่นเก่า กับการดำเนินการที่เทียบเท่าใน Sheets API v4 การแมปจะเน้นไปที่คอลเล็กชัน spreadsheets.values เป็นหลัก ซึ่งมีฟังก์ชันการอ่านและเขียนเซลล์โดยตรง ส่วนอื่นๆ เช่น การเพิ่มชีตหรือการอัปเดตพร็อพเพอร์ตี้ของชีต จะจัดการโดยคอลเล็กชันสเปรดชีต โปรดทราบว่าโครงสร้าง JSON ของ API เวอร์ชัน 4 ไม่สามารถใช้งานร่วมกับโครงสร้าง XML ที่ใช้ในเวอร์ชัน 3 ได้

ดูข้อมูลเพิ่มเติมเกี่ยวกับแหล่งข้อมูลที่มีอยู่ใน Sheets v4 API ได้ที่เอกสารอ้างอิง API

สัญกรณ์และคำศัพท์

API เวอร์ชัน 3 จะอ้างอิงชีตภายในสเปรดชีตหนึ่งๆ เป็น "เวิร์กชีต" ซึ่งมีความหมายเหมือนกับคำว่า "ชีต" ที่ API v4 ใช้

API มักกำหนดให้คุณระบุรหัส สเปรดชีตของสเปรดชีตที่คุณ กำลังทำงานด้วย นอกจากนี้ ยังมักต้องใช้รหัสของชีตที่กำลังจัดการด้วย ค่าเหล่านี้จะปรากฏเป็นส่วนหนึ่งของ URL ปลายทาง API เป็นพารามิเตอร์การค้นหา หรือเป็นส่วนหนึ่งของเนื้อหาคำขอ ในหน้านี้ ตัวยึดตำแหน่ง spreadsheetId และ sheetId หมายถึงรหัสสเปรดชีตและรหัสชีตตามลำดับ เมื่อใช้วิธีการที่อธิบายไว้ในหน้านี้ ให้แทนที่รหัสจริงในตำแหน่งต่อไปนี้

นอกจากนี้ API v3 ยังกำหนดรหัสให้กับแถวที่ดึงข้อมูลโดยใช้ฟีดรายการ ซึ่งแสดงในหน้านี้ด้วยตัวยึดตำแหน่ง rowId

ให้สิทธิ์คำขอ

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

API เวอร์ชัน 3

Sheets API v3 ทำงานกับขอบเขตการให้สิทธิ์เดียว ดังนี้

https://spreadsheets.google.com/feeds

ซึ่งเป็นชื่อแทนของ

https://www.googleapis.com/auth/spreadsheets

คุณใช้รูปแบบขอบเขตใดก็ได้

API v4

Sheets API v4 ใช้ชุดขอบเขตต่อไปนี้อย่างน้อย 1 ชุด

https://www.googleapis.com/auth/spreadsheets.readonly
https://www.googleapis.com/auth/spreadsheets
https://www.googleapis.com/auth/drive.readonly
https://www.googleapis.com/auth/drive

ใช้ขอบเขตแบบอ่านอย่างเดียวหากแอปพลิเคชันของคุณไม่จำเป็นต้องแก้ไขชีตหรือพร็อพเพอร์ตี้ชีตของผู้ใช้ ใช้ขอบเขตของสเปรดชีตแทนขอบเขตของไดรฟ์ หากแอปพลิเคชันไม่จำเป็นต้องเข้าถึงไดรฟ์ทั่วไป

ระดับการแชร์

ใน API เวอร์ชันเก่า คำว่าระดับการเข้าถึงใช้เพื่ออ้างถึงความพร้อมใช้งานของสเปรดชีตที่ระบุ

API เวอร์ชัน 3

Sheets API v3 แสดงการมองเห็นโดยตรงในเอนด์พอยต์ public สเปรดชีตได้รับการ "เผยแพร่บนเว็บ" จึงเข้าถึงได้โดย API โดยไม่ต้องมีการให้สิทธิ์ ส่วนสเปรดชีต private ต้องมีการ ตรวจสอบสิทธิ์ มีการระบุระดับการเข้าถึงในปลายทางหลังจากรหัสสเปรดชีต ดังนี้

https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full

API v4

ในชีต API v4 ใหม่ จะไม่มีการประกาศการมองเห็นอย่างชัดเจน การเรียก API จะทำโดยใช้รหัสสเปรดชีต หากแอปพลิเคชันไม่มีสิทธิ์เข้าถึงสเปรดชีตที่ระบุ ระบบจะแสดงข้อผิดพลาด ไม่เช่นนั้น ระบบจะดำเนินการโทรต่อ

การฉายภาพ

คำว่าการฉายภาพใช้โดย Sheets API v3 เพื่ออ้างอิงถึงชุดข้อมูล ที่การเรียก API ที่ระบุส่งคืน ไม่ว่าจะเป็นทั้งหมดหรือชุดย่อยคงที่ ที่กำหนดไว้ภายใน API Sheets API v4 ไม่ได้ใช้การฉายภาพ แต่จะช่วยให้คุณควบคุมข้อมูลที่จะแสดงได้มากขึ้น

API เวอร์ชัน 3

การตั้งค่าการฉายภาพที่เป็นไปได้ในชีต API v3 มีเพียง 2 แบบเท่านั้น full projection จะแสดงข้อมูลที่มีอยู่ทั้งหมด ในขณะที่ basic จะแสดง ชุดข้อมูลย่อยที่เล็กลงและคงที่ (สำหรับฟีดเวิร์กชีต รายการ และเซลล์) เช่นเดียวกับระดับการเข้าถึง คุณต้องระบุการฉายภาพในปลายทาง API (หลังการตั้งค่าระดับการเข้าถึง) ดังนี้

https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/public/basic

ชุดข้อมูลย่อยที่เล็กลงซึ่งได้จากbasicการฉายภาพมีประโยชน์ ในการเพิ่มประสิทธิภาพโค้ด แต่ปรับแต่งไม่ได้

API v4

แม้ว่า Sheets API v4 จะแสดงชุดข้อมูลทั้งหมดได้ แต่ก็ไม่ได้กำหนดชุดข้อมูลย่อยแบบคงที่ซึ่งคล้ายกับbasicการตั้งค่าระดับการแชร์ของ Sheets API v3 เมธอดในคอลเล็กชันสเปรดชีต จะจำกัดจำนวนข้อมูลที่แสดงผลผ่านการใช้ พารามิเตอร์การค้นหาฟิลด์

ตัวอย่างเช่น การค้นหาต่อไปนี้จะแสดงเฉพาะชื่อของชีตทั้งหมดในสเปรดชีตหนึ่งๆ

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId?fields=sheets.properties.title

สร้างสเปรดชีต

API เวอร์ชัน 3

Sheets API v3 ไม่มีวิธีสร้างสเปรดชีตใหม่ แต่คุณสามารถใช้เมธอด Drive API Files.create เพื่อสร้างไฟล์สเปรดชีตใหม่ได้ ซึ่งกำหนดให้แอปพลิเคชันต้องประกาศhttps://www.googleapis.com/auth/driveขอบเขต

API v4

นอกจากนี้ยังใช้เมธอด Drive API Files.create กับ Sheets API v4 ได้ด้วย แต่แอปพลิเคชันต้องระบุขอบเขต https://www.googleapis.com/auth/drive

Sheets API v4 มีเมธอด spreadsheets.create ซึ่งเป็นทางเลือกที่เทียบเท่ากัน และยังเพิ่มชีต ตั้งค่าคุณสมบัติของสเปรดชีตและชีต รวมถึงเพิ่มช่วงที่มีชื่อได้ด้วย (ไม่บังคับ) ตัวอย่างเช่น คำสั่งต่อไปนี้จะสร้างสเปรดชีตใหม่และตั้งชื่อว่า "NewTitle"

POST https://sheets.googleapis.com/v4/spreadsheets
{
 "properties": {"title": "NewTitle"}
}

แสดงรายการสเปรดชีตสำหรับผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์

API เวอร์ชัน 3

ฟีด Sheets API v3 อนุญาตให้แอปพลิเคชันเรียกรายการสเปรดชีตทั้งหมดที่ผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์เข้าถึงได้ ปลายทางฟีดสเปรดชีต คือ

GET https://spreadsheets.google.com/feeds/spreadsheets/private/full

API v4

Sheets API v4 ไม่มีการดำเนินการนี้โดยเฉพาะ เราขอแนะนำ ให้ย้ายข้อมูลแอปเพื่อใช้ขอบเขต drive.file ร่วมกับ Google Picker สำหรับการเลือกสเปรดชีต

ในกรณีที่ต้องแสดงสเปรดชีต คุณสามารถจำลองได้ ผ่านเมธอด Drive API Files.list โดยใช้ การค้นหา mimeType

GET https://www.googleapis.com/drive/v3/files
             ?q=mimeType='application/vnd.google-apps.spreadsheet'

การใช้เมธอด files.list ของ Drive API เพื่อแสดงสเปรดชีตทั้งหมดของผู้ใช้ ต้องใช้ขอบเขตที่จำกัด

ดึงข้อมูลเมตาของชีต

Sheets API v3 มีฟีดสำหรับเข้าถึงข้อมูลเมตาของชีต ที่อยู่ในสเปรดชีตที่กำหนด (เข้าถึงข้อมูลแถวและเซลล์ได้ผ่าน ฟีดแยกต่างหาก) ข้อมูลเมตารวมถึงข้อมูลต่างๆ เช่น ชื่อชีตและ ข้อมูลขนาด

เมธอด spreadsheets.get ของ Sheets API v4 จะให้สิทธิ์เข้าถึงข้อมูลนี้และอื่นๆ อีกมากมาย

API เวอร์ชัน 3

เข้าถึงฟีดเวิร์กชีตได้จากปลายทาง API นี้ (โดยใช้ส่วนหัวการให้สิทธิ์ที่เหมาะสม)

GET https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full

การตอบกลับคำขอนี้มีโครงสร้างคล้ายกับตัวอย่างต่อไปนี้ โดยข้อมูลของแต่ละชีตจะอยู่ใน <entry> แยกกัน

<feed xmlns="http://www.w3.org/2005/Atom"
    xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006"
    xmlns:gd="http://schemas.google.com/g/2005"
    gd:etag='W/"D0cERnk-eip7ImA9WBBXGEg."'>
  <id>https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <title type="text">Groceries R Us</title>
  <link rel="alternate" type="text/html"
      href="https://spreadsheets.google.com/ccc?key=spreadsheetId"/>
  <link rel="http://schemas.google.com/g/2005#feed"
      type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <link rel="self" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <author>
    <name>Fitzwilliam Darcy</name>
    <email>fitz@example.com</email>
  </author>
  <openSearch:totalResults>1</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>1</openSearch:itemsPerPage>
  <entry gd:etag='"YDwqeyI."'>
    <id>https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId</id>
    <updated>2006-11-17T18:23:45.173Z</updated>
    <title type="text">Sheet1</title>
    <content type="text">Sheet1</content>
    <link rel="http://schemas.google.com/spreadsheets/2006#listfeed"
        type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full"/>
    <link rel="http://schemas.google.com/spreadsheets/2006#cellsfeed"
        type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full"/>
    <link rel="self" type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId"/>
    <link rel="edit" type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version"/>
    <gs:rowCount>100</gs:rowCount>
    <gs:colCount>20</gs:colCount>
  </entry>
</feed>

API v4

คุณใช้เมธอด spreadsheets.get เพื่อรับพร็อพเพอร์ตี้ชีตและข้อมูลเมตาอื่นๆ ได้ ซึ่งมีมากกว่า ที่ใช้ได้โดยใช้ Sheets API v3 หากต้องการอ่านเฉพาะพร็อพเพอร์ตี้ของชีต ให้ตั้งค่าพารามิเตอร์includeGridDataคำค้นหา เป็น false เพื่อป้องกันไม่ให้รวมข้อมูลเซลล์สเปรดชีต

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId?includeGridData=false

การตอบกลับของ Spreadsheet ประกอบด้วยอาร์เรย์ของออบเจ็กต์ Sheet คุณสามารถดูชื่อชีตและข้อมูลขนาดได้ ในองค์ประกอบ SheetProperties ของออบเจ็กต์เหล่านี้ เช่น

{
  "spreadsheetId": spreadsheetId,
  "sheets": [
      {"properties": {
          "sheetId": sheetId,
          "title": "Sheet1",
          "index": 0,
          "gridProperties": {
              "rowCount": 100,
              "columnCount": 20,
              "frozenRowCount": 1,
              "frozenColumnCount": 0,
              "hideGridlines": false
          },
          ...
       },
       ...
      },
      ...
  ],
  ...
}

เพิ่มชีตลงในสเปรดชีต

ทั้ง 2 API นี้ช่วยให้คุณเพิ่มชีตใหม่ลงในสเปรดชีตที่มีอยู่ได้

API เวอร์ชัน 3

Sheets API v3 สามารถเพิ่มเวิร์กชีตใหม่ลงในสเปรดชีตได้โดยส่งPOSTคำขอต่อไปนี้ (ที่ผ่านการตรวจสอบสิทธิ์) คุณระบุขนาดของ ชีตใหม่ได้ดังนี้

POST https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full
<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <title>Expenses</title>
  <gs:rowCount>50</gs:rowCount>
  <gs:colCount>10</gs:colCount>
</entry>

API v4

คุณเพิ่มชีตใหม่ได้โดยส่งคำขอ AddSheet ในเมธอด spreadsheets.batchUpdate คุณระบุพร็อพเพอร์ตี้ชีตสำหรับชีตใหม่ได้ในส่วนเนื้อหาของคำขอ โดยพร็อพเพอร์ตี้ทั้งหมดเป็นแบบไม่บังคับ การระบุ ชื่อที่ใช้สำหรับชีตที่มีอยู่ถือเป็นข้อผิดพลาด

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [{
      "addSheet": {
          "properties": {
            "title": "Expenses",
            "sheetType": "GRID",
            "gridProperties": {
              "rowCount": 50,
              "columnCount": 10
            }
          }
      }
  }],
}

เปลี่ยนชื่อและขนาดชีต

Sheets API v3 ช่วยให้คุณอัปเดตชื่อและขนาดชีตได้ ส่วน Sheets API v4 ก็ช่วยให้คุณอัปเดตชื่อและขนาดชีตได้เช่นกัน แต่ยังใช้เพื่ออัปเดตพร็อพเพอร์ตี้อื่นๆ ของชีตได้ด้วย โปรดทราบว่าการลดขนาดชีตอาจทำให้ระบบลบข้อมูลใน เซลล์ที่ครอบตัดโดยไม่มีคำเตือน

API เวอร์ชัน 3

หากต้องการเปลี่ยนชื่อหรือขนาดของเวิร์กชีต ให้เริ่มโดยการดึงข้อมูลฟีดเวิร์กชีตและค้นหารายการเวิร์กชีตที่ต้องการ ซึ่งมี URL edit อัปเดตข้อมูลเมตาของเวิร์กชีตและส่งเป็นเนื้อหาของPUTคำขอ ไปยัง URL การแก้ไข เช่น

PUT https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version
<entry>
  <id>
    https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId
  </id>
  <updated>2007-07-30T18:51:30.666Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#worksheet"/>
  <title type="text">Expenses</title>
  <content type="text">Expenses</content>
  <link rel="http://schemas.google.com/spreadsheets/2006#listfeed"
    type="application/atom+xml" href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full"/>
  <link rel="http://schemas.google.com/spreadsheets/2006#cellsfeed"
    type="application/atom+xml" href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full"/>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version"/>
  <gs:rowCount>45</gs:rowCount>
  <gs:colCount>15</gs:colCount>
</entry>

API v4

หากต้องการอัปเดตขนาด ชื่อ และพร็อพเพอร์ตี้อื่นๆ ของชีต ให้ส่งคำขอ updateSheetProperties ในเมธอด spreadsheets.batchUpdate เนื้อหาคำขอ POST ควรมีพร็อพเพอร์ตี้ที่จะเปลี่ยนแปลง และพารามิเตอร์ fields ควรแสดงรายการพร็อพเพอร์ตี้เหล่านั้นอย่างชัดเจน (หากต้องการอัปเดตพร็อพเพอร์ตี้ทั้งหมด ให้ใช้ fields:"*" เป็นคำย่อสำหรับแสดงรายการพร็อพเพอร์ตี้ทั้งหมด) ตัวอย่างเช่น รายการต่อไปนี้ระบุว่าควรมีการอัปเดตพร็อพเพอร์ตี้ชื่อและขนาดของชีต สำหรับชีตที่มีรหัสที่ระบุ

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "updateSheetProperties": {
          "properties": {
            "sheetId": sheetId,
            "title": "Expenses",
            "gridProperties": {
              "rowCount": 45,
              "columnCount": 15,
            }
          },
          "fields": "title,gridProperties(rowCount,columnCount)"
     }
   }
  ],
}

หากต้องการดึงข้อมูล sheetId ของชีต ให้ใช้เมธอด spreadsheets.get ของสเปรดชีต

ลบชีต

ทั้ง 2 API สามารถนำชีตออกจากสเปรดชีตที่ระบุได้

API เวอร์ชัน 3

หากต้องการลบแผ่นงาน ให้เริ่มโดยการเรียกข้อมูลฟีดแผ่นงาน จากนั้นส่งคำขอ DELETE ใน URL edit ของรายการแผ่นงานเป้าหมาย

DELETE https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version

API v4

หากต้องการลบชีต ให้ส่งคำขอ DeleteSheet ในเมธอด spreadsheets.batchUpdate เนื้อหาของคำขอ POST ควรมีเฉพาะ sheetId สำหรับ ชีตที่จะลบ เช่น

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "deleteSheet": {
        "sheetId": sheetId
      }
    }
  ],
}

หากต้องการเรียกข้อมูล sheetId ของชีตแต่ละรายการ ให้ใช้เมธอด สเปรดชีต spreadsheets.get

ดึงข้อมูลแถว

ฟีดรายการแถวเป็นหนึ่งใน 2 วิธีที่ Sheets API v3 มีไว้เพื่อ เข้าถึงข้อมูลภายในเซลล์ของสเปรดชีต (อีกวิธีคือฟีดเซลล์) ฟีด แถวมีไว้เพื่อรองรับการดำเนินการในสเปรดชีตทั่วไป (การอ่านทีละแถว การต่อท้ายแถว การจัดเรียง) แต่มีการตั้งสมมติฐานบางอย่างที่ทำให้ไม่เหมาะกับ งานบางอย่าง โดยเฉพาะอย่างยิ่ง ฟีดรายการจะถือว่าแถวว่างคือการสิ้นสุดฟีด และส่วนหัวที่จำเป็นจะอยู่ในแถวแรกของ ชีต

ในทางตรงกันข้าม Sheets API v4 ไม่ได้ใช้วิธีการเข้าถึงที่ เจาะจงแถว แต่จะเข้าถึงข้อมูลในเซลล์ชีตได้โดยอ้างอิงช่วงที่เฉพาะเจาะจงที่ต้องการโดยใช้รูปแบบ A1 ช่วงอาจเป็นกลุ่มเซลล์ แถวทั้งแถว คอลัมน์ทั้งคอลัมน์ หรือชีตทั้งชีต นอกจากนี้ API ยังเข้าถึงชุดเซลล์ที่แยกกันได้ด้วย

API เวอร์ชัน 3

หากต้องการกำหนด URL ของฟีดแบบรายการสำหรับสเปรดชีตที่ต้องการ ให้เรียกข้อมูลฟีดสเปรดชีตและค้นหา URL ฟีดรายการในรายการสเปรดชีตที่สนใจ

หากต้องการดึงข้อมูลฟีดตามรายการ ให้ส่งคำขอ GET ไปยัง URL ของฟีดรายการ โดยใช้ส่วนหัวการให้สิทธิ์ที่เหมาะสม เช่น

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full

การตอบกลับคำขอนี้จะมีรายการ ที่สอดคล้องกับแถวที่เฉพาะเจาะจง ระบบจะอ้างอิงเซลล์แต่ละเซลล์ตาม ชื่อที่ระบุในแถวส่วนหัวของชีต (ต้องระบุ) ตัวอย่างเช่น รายการแถวเดียวมีลักษณะดังนี้

<entry gd:etag='"S0wCTlpIIip7ImA0X0QI"'>
  <id>rowId</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
      term="http://schemas.google.com/spreadsheets/2006#list"/>
  <title type="text">Bingley</title>
  <content type="text">Hours: 10, Items: 2, IPM: 0.0033</content>
  <link rel="self" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId"/>
  <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version"/>
  <gsx:name>Bingley</gsx:name>
  <gsx:hours>10</gsx:hours>
  <gsx:items>2</gsx:items>
  <gsx:ipm>0.0033</gsx:ipm>
</entry>

โดยค่าเริ่มต้น แถวที่แสดงผลในฟีดรายการจะแสดงผลตามลำดับแถว Sheets API v3 มีพารามิเตอร์การค้นหาเพื่อเปลี่ยนลำดับดังกล่าว

ลำดับย้อนกลับ

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full?reverse=true

จัดเรียงตามคอลัมน์ที่เฉพาะเจาะจง

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full
             ?orderby=column:lastname

นอกจากนี้ Sheets API v3 ยังอนุญาตให้กรองแถวที่เฉพาะเจาะจงผ่านการค้นหาที่มีโครงสร้าง (อ้างอิงตามส่วนหัวของคอลัมน์) ด้วย

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full
             ?sq=age>25%20and%20height<175

API v4

เมื่อใช้ Sheets API v4 คุณจะดึงข้อมูลแถวตามช่วงได้โดยใช้เมธอด spreadsheets.values.get หรือ spreadsheets.values.batchGet เช่น คำสั่งต่อไปนี้จะแสดงผลทุกแถวใน "ชีต1"

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1

การตอบกลับคำขอนี้มีโครงสร้างคล้ายกับตัวอย่างต่อไปนี้

{
  "range": "Sheet1",
  "majorDimension": "ROWS",
  "values": [["Name", "Hours", "Items", "IPM"],
             ["Bingley", "10", "2", "0.0033"],
             ["Darcy", "14", "6", "0.0071"]]
}

ระบบจะไม่รวมเซลล์ว่างต่อท้ายไว้ในคำตอบเมื่อดึงข้อมูลทั้งแถว คอลัมน์ หรือชีต

Sheets API v4 ไม่มีพารามิเตอร์การค้นหาลำดับแถวที่เทียบเท่ากับพารามิเตอร์ที่ Sheets API v3 มีให้ การย้อนกลับลำดับเป็นเรื่องง่าย เพียงแค่ ประมวลผลอาร์เรย์ values ที่ส่งคืนตามลำดับย้อนกลับ ระบบไม่รองรับการจัดเรียงตามคอลัมน์สำหรับการอ่าน แต่คุณสามารถจัดเรียงข้อมูลในชีตได้ (โดยใช้คำขอ SortRange) แล้วจึงอ่าน

ปัจจุบัน Sheets API v4 ยังไม่มีคำค้นหาที่มีโครงสร้างที่เทียบเท่าโดยตรงกับ Sheets API v3 อย่างไรก็ตาม คุณสามารถดึงข้อมูลที่เกี่ยวข้องและ จัดเรียงข้อมูลดังกล่าวได้ตามต้องการในแอปพลิเคชัน

เพิ่มแถวข้อมูลใหม่

คุณเพิ่มแถวข้อมูลใหม่ลงในชีตได้โดยใช้ API ใดก็ได้

API เวอร์ชัน 3

หากต้องการกำหนด URL ของฟีดแบบรายการสำหรับสเปรดชีตที่ต้องการ ให้เรียกข้อมูลฟีดสเปรดชีตและค้นหา URL ของโพสต์ในรายการสเปรดชีตที่สนใจ

หากต้องการเพิ่มแถวของข้อมูล ให้ส่งคำขอ POST ไปยัง URL ของโพสต์ โดยใช้ส่วนหัวการให้สิทธิ์ที่เหมาะสม เช่น

POST https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full

เนื้อหาของคำขอ POST ควรมีรายการสำหรับข้อมูลแถวที่จะเพิ่ม โดยอ้างอิงเซลล์แต่ละเซลล์ตามส่วนหัวของคอลัมน์

<entry xmlns="http://www.w3.org/2005/Atom"
       xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">
  <gsx:hours>2</gsx:hours>
  <gsx:ipm>0.5</gsx:ipm>
  <gsx:items>60</gsx:items>
  <gsx:name>Elizabeth</gsx:name>
</entry>

ระบบจะต่อท้ายแถวใหม่ที่ท้ายชีตที่ระบุ

API v4

Sheets API v4 ช่วยให้คุณสามารถต่อท้ายแถวได้โดยใช้เมธอด spreadsheets.values.append ตัวอย่างต่อไปนี้จะเขียนแถวข้อมูลใหม่ใต้ตารางสุดท้ายใน "ชีต1" ของสเปรดชีต

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/append/Sheet1

{
   "values": [["Elizabeth", "2", "0.5", "60"]]
}

นอกจากนี้ Sheets API v4 ยังให้คุณต่อท้ายเซลล์ที่มีพร็อพเพอร์ตี้และการจัดรูปแบบที่เฉพาะเจาะจงได้โดยใช้คำขอ AppendCells ใน spreadsheets.batchUpdate

แก้ไขแถวด้วยข้อมูลใหม่

ทั้ง 2 API อนุญาตให้อัปเดตข้อมูลแถวด้วยค่าใหม่

API เวอร์ชัน 3

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

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

PUT https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version
<entry gd:etag='"S0wCTlpIIip7ImA0X0QI"'>
  <id>rowId</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#list"/>
  <title type="text">Bingley</title>
  <content type="text">Hours: 10, Items: 2, IPM: 0.0033</content>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version"/>
  <gsx:name>Bingley</gsx:name>
  <gsx:hours>20</gsx:hours>
  <gsx:items>4</gsx:items>
  <gsx:ipm>0.0033</gsx:ipm>
</entry>

API v4

Sheets API v4 ช่วยให้คุณแก้ไขแถวได้โดยใช้รูปแบบ A1 ของแถวที่ต้องการแก้ไขและส่งคำขอ spreadsheets.values.update เพื่อเขียนทับแถวนั้น ช่วงที่ระบุต้องอ้างอิงถึง เซลล์แรกในแถวเท่านั้น API จะอนุมานเซลล์ที่จะอัปเดตตาม ค่าที่ระบุในคำขอ หากคุณระบุช่วงหลายเซลล์แทน ค่าที่คุณระบุจะต้องอยู่ในช่วงนั้น หากไม่อยู่ API จะแสดงข้อผิดพลาด

คำขอและเนื้อหาคำขอตัวอย่างต่อไปนี้จะเพิ่มข้อมูลลงใน แถวที่ 4 ของ "ชีต1"

PUT https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1!A4
{
   "values": [["Elizabeth", "2", "0.5", "60"]]
}

นอกจากนี้ คุณยังอัปเดตข้อมูลแถวจากเมธอด spreadsheet.values.batchUpdate ได้ด้วย ซึ่งการใช้วิธีนี้จะมีประสิทธิภาพมากกว่าหากคุณทำการอัปเดตแถวหรือเซลล์หลายรายการ

นอกจากนี้ Sheets API v4 ยังให้คุณแก้ไขพร็อพเพอร์ตี้ของเซลล์และ การจัดรูปแบบของเซลล์ได้โดยใช้คำขอ UpdateCells หรือ RepeatCell ใน spreadsheets.batchUpdate

ลบแถว

API ทั้ง 2 รายการรองรับการลบแถว ระบบจะนำแถวที่ลบออกจาก สเปรดชีต และเลื่อนแถวที่อยู่ด้านล่างขึ้น 1 แถว

API เวอร์ชัน 3

หากต้องการลบแถว ให้ดึงข้อมูลแถวที่จะลบจากฟีดรายการก่อน จากนั้นส่งคำขอ DELETE ไปยัง URL edit ที่ระบุในรายการของแถว ซึ่งเป็น URL เดียวกันที่ใช้ในการอัปเดตแถว

DELETE https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version

หากต้องการตรวจสอบว่าคุณไม่ได้ลบแถวที่มีการเปลี่ยนแปลง โดยไคลเอ็นต์อื่นตั้งแต่ที่คุณดึงข้อมูลมา ให้ใส่ส่วนหัว HTTP If-Match ที่มีค่า ETag ของแถวเดิม คุณกำหนดค่า ETag ของแถวต้นฉบับได้โดยตรวจสอบแอตทริบิวต์ gd:etag ขององค์ประกอบรายการ

หากต้องการลบแถวโดยไม่คำนึงว่าจะมีผู้อื่นอัปเดตแถวนั้นตั้งแต่ที่คุณดึงข้อมูลมาหรือไม่ ให้ใช้ If-Match: * และไม่ต้องระบุ ETag (ในกรณีนี้ คุณไม่จำเป็นต้องดึงข้อมูลแถวก่อนที่จะลบ)

API v4

การลบแถวด้วย Sheets API v4 จะจัดการโดยการเรียกเมธอด spreadsheet.batchUpdate โดยใช้คำขอ DeleteDimension คำขอนี้ยังใช้เพื่อนำคอลัมน์ออกได้ด้วย และนักพัฒนาแอป สามารถเลือกที่จะนำออกเฉพาะบางส่วนของแถวหรือคอลัมน์ได้ ตัวอย่างเช่น คำสั่งต่อไปนี้จะนำแถวที่ 6 ของชีตที่มีรหัสที่ระบุออก (ดัชนีแถว เป็นแบบอิงตาม 0 โดยมี startIndex รวมอยู่ด้วยและ endIndex ไม่รวมอยู่ด้วย)

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "deleteDimension": {
        "range": {
          "sheetId": sheetId,
          "dimension": "ROWS",
          "startIndex": 5,
          "endIndex": 6
        }
      }
    }
  ],
}

คุณเรียกข้อมูล sheetId ของชีตได้โดยใช้เมธอด spreadsheet.get

ดึงข้อมูลเซลล์

Sheets API v3 มีฟีดเซลล์สำหรับการเข้าถึงข้อมูลทั้งหมดที่จัดเก็บไว้ในสเปรดชีตขั้นพื้นฐาน สำหรับการเข้าถึงแบบอ่าน ฟีดเซลล์จะให้เนื้อหาของทั้งชีต หรือช่วงของเซลล์ในชีตที่กำหนดโดยชุดพารามิเตอร์การค้นหา แต่จะให้ได้เพียงบล็อกเดียวเท่านั้น ช่วงที่แยกกันจะต้องดึงข้อมูล แยกกันโดยใช้คำขอ GET เพิ่มเติม

Sheets API v4 สามารถดึงข้อมูลชุดเซลล์ใดก็ได้จากชีต (รวมถึง ช่วงที่ไม่ต่อเนื่องหลายช่วง) Sheets API v3 จะแสดงได้เฉพาะเนื้อหาของเซลล์เป็น ค่าอินพุต (ตามที่ผู้ใช้จะป้อนในแป้นพิมพ์) และ/หรือเอาต์พุตของ สูตร (หากเป็นตัวเลข) ส่วน Sheets API v4 จะให้สิทธิ์เข้าถึงค่า สูตร การจัดรูปแบบ ไฮเปอร์ลิงก์ การตรวจสอบข้อมูล และพร็อพเพอร์ตี้อื่นๆ อย่างเต็มรูปแบบ

API เวอร์ชัน 3

หากต้องการกำหนด URL ของฟีดที่อิงตามเซลล์สำหรับเวิร์กชีตที่ต้องการ ให้ตรวจสอบฟีดเวิร์กชีต และค้นหา URL ของฟีดเซลล์ในรายการเวิร์กชีตที่สนใจ

หากต้องการดึงข้อมูลฟีดตามเซลล์ ให้ส่งคำขอ GET ไปยัง URL ของฟีดเซลล์ โดยใช้ส่วนหัวการให้สิทธิ์ที่เหมาะสม เช่น

GET https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full

ระบบจะอ้างอิงเซลล์โดยใช้หมายเลขแถวและคอลัมน์ คุณดึงข้อมูลช่วงที่เฉพาะเจาะจงช่วงเดียวได้โดยใช้พารามิเตอร์การค้นหา max-row, min-row, max-col และ min-col ตัวอย่างเช่น คำสั่งต่อไปนี้จะดึงข้อมูลเซลล์ทั้งหมดในคอลัมน์ 4 (D) โดยเริ่มจากแถวที่ 2

GET https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full
             ?min-row=2&min-col=4&max-col=4

Sheets API v3 จะแสดง inputValue ของเซลล์ที่เรียกข้อมูล ซึ่งก็คือค่าที่ผู้ใช้จะพิมพ์ลงในอินเทอร์เฟซผู้ใช้ของ Google ชีตเพื่อจัดการเซลล์ inputValue อาจเป็นค่าลิเทอรัล หรือสูตรก็ได้ นอกจากนี้ API ยังอาจแสดง numericValue ในบางครั้งด้วย เช่น เมื่อสูตรแสดงผลเป็นตัวเลข เช่น การตอบกลับอาจมีรายการเซลล์ ที่มีโครงสร้างคล้ายกับรายการต่อไปนี้

<entry gd:etag='"ImB5CBYSRCp7"'>
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4</id>
  <updated>2006-11-17T18:27:32.543Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#cell"/>
  <title type="text">D4</title>
  <content type="text">5</content>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4/srevc"/>
  <gs:cell row="4" col="4" inputValue="=FLOOR(C4/(B4*60),.0001)"
    numericValue="5.0">5</gs:cell>
</entry>

API v4

เรียกข้อมูลในเซลล์โดยเรียกใช้เมธอด spreadsheets.values.get หรือ spreadsheets.values.batchGet สำหรับช่วงหรือช่วงที่สนใจตามลำดับ เช่น คำสั่งต่อไปนี้จะแสดงเซลล์ในคอลัมน์ D ของ "ชีต2" โดยเริ่มจากแถวที่ 2 ในลำดับคอลัมน์หลัก และแสดงสูตรตามที่ป้อน (ระบบจะละเว้นเซลล์ว่างต่อท้าย)

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet2!D2:D?majorDimension=COLUMNS&valueRenderOption=FORMULA

การตอบกลับคำขอนี้มีโครงสร้างคล้ายกับ

{
  "spreadsheetId": spreadsheetId,
  "valueRanges": [
      {"range": "Sheet2!D2:D",
       "majorDimension": "COLUMNS",
       "values": [["Widget", 234, "=FLOOR(C4/(B4*60),.0001)", "=D4\*1000"]]
      }]
}

การใช้ spreadsheet.values.batchGet จะมีประสิทธิภาพมากกว่าหากคุณต้องการดึงข้อมูลเซลล์หลายช่วง หากต้องการเข้าถึงพร็อพเพอร์ตี้ของเซลล์ เช่น การจัดรูปแบบ คุณต้องใช้เมธอด spreadsheet.get

แก้ไขเซลล์

Sheets API v3 ช่วยให้คุณแก้ไขเนื้อหาของเซลล์ได้โดยการออกPUTคำสั่งไปยัง ฟีดเซลล์ที่มีรายการเซลล์ที่แก้ไขเป็นส่วนเนื้อหาของคำขอ

ในทางตรงกันข้าม Sheets API v4 มีเมธอด spreadsheets.values.update และ spreadsheets.values.batchUpdate สำหรับการเปลี่ยนเนื้อหาของเซลล์

API เวอร์ชัน 3

หากต้องการแก้ไขเนื้อหาของเซลล์เดียว ให้ค้นหารายการของเซลล์ในฟีดเซลล์ก่อน รายการมี URL การแก้ไข อัปเดตรายการให้แสดงเนื้อหา ที่คุณต้องการให้เซลล์มี แล้วส่งPUTคำขอไปยัง URL การแก้ไข โดยใช้รายการเซลล์ที่อัปเดตแล้วเป็นเนื้อหาของคำขอ ตัวอย่างเช่น การอัปเดตต่อไปนี้จะอัปเดตเซลล์ D2 (R2C4) ให้มีสูตร SUM

PUT https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full//R2C4/srevc

<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4</id>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4"/>
  <gs:cell row="2" col="4" inputValue="=SUM(A1:B6)"/>
</entry>

API v4

การแก้ไขเซลล์เดียวใน Sheets API v4 ทำได้ด้วยเมธอด spreadsheets.values.update วิธีนี้ต้องใช้พารามิเตอร์การค้นหา ValueInputOption ซึ่ง ระบุว่าควรถือว่าข้อมูลที่ป้อนเหมือนกับป้อนลงใน UI ของชีต (USER_ENTERED) หรือปล่อยให้ไม่ได้แยกวิเคราะห์และใช้ตามที่เป็นอยู่ (RAW) ตัวอย่างเช่น การดำเนินการต่อไปนี้จะอัปเดตเซลล์ D2 ด้วยสูตร

PUT https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/D2?valueInputOption=USER_ENTERED
{"values": [["=SUM(A1:B6)"]]}

หากคุณทำการแก้ไขหลายเซลล์ ให้ใช้วิธีการ spreadsheets.values.batchUpdate เพื่อออกคำขอในครั้งเดียว

แก้ไขหลายเซลล์ผ่านคำขอแบบกลุ่ม

ทั้ง 2 API มีวิธีในการเปลี่ยนแปลงเนื้อหาของหลายเซลล์ ด้วยคำขอเดียว (แบบกลุ่ม) เซลล์ที่คำขอแบบกลุ่มอ้างถึง ไม่จำเป็นต้องอยู่ในช่วงที่ต่อเนื่องกัน

ในกรณีที่การแก้ไขเซลล์อย่างน้อย 1 รายการในกลุ่มไม่สำเร็จ Sheets API v3 จะอนุญาตให้รายการอื่นๆ สำเร็จ อย่างไรก็ตาม Sheets API v4 จะแสดงข้อผิดพลาด หากการอัปเดตแบบเป็นกลุ่มรายการใดรายการหนึ่งไม่สำเร็จ และจะไม่ใช้การอัปเดตใดๆ ในกรณีดังกล่าว

API เวอร์ชัน 3

หากต้องการแก้ไขหลายเซลล์ ให้ดึงข้อมูลฟีดเซลล์ สำหรับเวิร์กชีตก่อน รายการมี URL แบบกลุ่ม ส่งPOST คำขอไปยัง URL นี้พร้อมกับเนื้อหาคำขอที่อธิบายเซลล์ที่คุณ ต้องการอัปเดตและเนื้อหาใหม่ของเซลล์ POST คำขอและเนื้อหาคำขอ มีโครงสร้างคล้ายกับตัวอย่างต่อไปนี้

POST https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/batch
<feed xmlns="http://www.w3.org/2005/Atom"
      xmlns:batch="http://schemas.google.com/gdata/batch"
      xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full</id>
  <entry>
    <batch:id>request1</batch:id>
    <batch:operation type="update"/>
    <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4</id>
    <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4/version"/>
    <gs:cell row="2" col="4" inputValue="newData"/>
  </entry>
  ...
  <entry>
    <batch:id>request2</batch:id>
    <batch:operation type="update"/>
    <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C5</id>
    <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C5/version"/>
    <gs:cell row="5" col="2" inputValue="moreInfo"/>
  </entry>
</feed>

batch:id ฟิลด์ควรระบุคำขอที่ไม่ซ้ำกันภายในกลุ่ม ฟิลด์ batch:operation ควรเป็น update สำหรับการแก้ไขเซลล์ gs:cell ระบุเซลล์ตามหมายเลขแถวและคอลัมน์ และระบุข้อมูลใหม่ ที่จะแทรก id มี URL แบบเต็มของเซลล์ที่จะอัปเดต link ต้องมีแอตทริบิวต์ href ที่มีเส้นทางแบบเต็มไปยังรหัสของเซลล์ ต้องกรอกข้อมูลในช่องเหล่านี้ทั้งหมดสำหรับแต่ละรายการ

API v4

Sheets API v4 มีการแก้ไขค่าเซลล์แบบเป็นชุดผ่านเมธอด spreadsheets.values.batchUpdate

การแก้ไขหลายเซลล์สามารถทำได้โดยการส่งPOSTคำขอที่มีการเปลี่ยนแปลงข้อมูลที่ระบุในเนื้อหาของคำขอ เช่น

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values:batchUpdate
{
  "valueInputOption": "USER_ENTERED"
  "data": [
       {"range": "D4",
        "majorDimension": "ROWS",
        "values": [["newData"]]
       },
       {"range": "B5",
        "majorDimension": "ROWS",
        "values": [["moreInfo"]]
       }
  ]
}

หากคุณระบุเซลล์เดียวเป็นช่วง ระบบจะเขียนค่าทั้งหมดที่ระบุลงในชีตโดยเริ่มจากเซลล์ดังกล่าวเป็นพิกัดบนซ้าย หากคุณระบุช่วงหลายเซลล์แทน ค่าที่คุณระบุจะต้องพอดีกับช่วงนั้นพอดี หากไม่พอดี API จะแสดงข้อผิดพลาด