หากมีแอปที่ใช้ Google Sheets API v3 อยู่แล้ว คุณจะย้ายข้อมูลไปยัง Google Sheets API v4 ได้ เวอร์ชัน v4 เป็นแบบ JSON มีอินเทอร์เฟซที่ใช้งานง่ายขึ้น และเพิ่มฟังก์ชันการทำงานจำนวนมากที่เวอร์ชัน v3 ไม่มี
หน้านี้แสดงการแมประหว่างคำสั่ง Sheets API v3 เวอร์ชันเก่ากับการดำเนินการที่เทียบเท่าใน Sheets API v4 การแมปส่วนใหญ่จะมุ่งเน้นที่คอลเล็กชัน spreadsheets.values ซึ่งมีฟังก์ชันการอ่านและเขียนเซลล์โดยตรง ส่วนแง่มุมอื่นๆ เช่น การเพิ่มชีตหรืออัปเดตพร็อพเพอร์ตี้ชีตจะจัดการโดยคอลเล็กชันสเปรดชีต โปรดทราบว่าโครงสร้าง JSON ของ v4 API ใช้งานร่วมกับโครงสร้าง XML ที่ใช้กับ v3 ไม่ได้
ดูข้อมูลเพิ่มเติมเกี่ยวกับแหล่งข้อมูลที่มีอยู่ใน Sheets v4 API ได้ที่เอกสารอ้างอิง API
สัญกรณ์และข้อกำหนด
API เวอร์ชัน 3 จะเรียกชีตภายในสเปรดชีตหนึ่งๆ ว่า "เวิร์กชีต" ซึ่งตรงกับคําว่า "ชีต" ที่ v4 API ใช้
API มักกำหนดให้คุณระบุรหัสสเปรดชีตของสเปรดชีตที่คุณกำลังทำงานอยู่ นอกจากนี้ ผู้ใช้ยังต้องระบุรหัสของชีตที่จะดัดแปลงด้วย ค่าเหล่านี้จะปรากฏเป็นส่วนหนึ่งของ URL ปลายทางของ API, พารามิเตอร์การค้นหา หรือเป็นส่วนหนึ่งของเนื้อหาคำขอ ในหน้านี้ เป็นตัวยึดตําแหน่ง spreadsheetId และ sheetId ซึ่งหมายถึงรหัสสเปรดชีตและรหัสชีตตามลําดับ เมื่อใช้วิธีการที่อธิบายไว้ในหน้านี้ ให้แทนที่รหัสจริงในตำแหน่งเหล่านี้
นอกจากนี้ v3 API ยังกำหนดรหัสให้กับแถวที่ดึงข้อมูลโดยใช้ฟีดรายการด้วย ซึ่งจะแสดงในหน้านี้ด้วยตัวยึดตําแหน่ง rowId
ให้สิทธิ์คำขอ
เมื่อแอปทำงาน แอปจะขอให้ผู้ใช้ให้สิทธิ์บางอย่าง โดยขอบเขตที่คุณระบุในแอปพลิเคชันจะเป็นตัวกำหนดสิทธิ์ที่แอปขอ
v3 API
Sheets API v3 ทำงานด้วยขอบเขตการให้สิทธิ์เดียว ดังนี้
https://spreadsheets.google.com/feeds
ซึ่งเป็นชื่อแทนของ
https://www.googleapis.com/auth/spreadsheets
คุณจะใช้รูปแบบขอบเขตใดก็ได้
v4 API
ชีต 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 เวอร์ชันเก่า คำว่าระดับการเข้าถึงใช้เพื่อบ่งบอกความพร้อมใช้งานของสเปรดชีตหนึ่งๆ
v3 API
ชีต API v3 แสดงระดับการเข้าถึงในปลายทางโดยตรง สเปรดชีต public
ได้ "เผยแพร่ไปยังเว็บ" แล้ว API จึงเข้าถึงได้โดยไม่ต้องมีสิทธิ์เข้าถึง ส่วนสเปรดชีต private
ต้องมีการตรวจสอบสิทธิ์ ระดับการแชร์จะระบุไว้ในปลายทางหลังรหัสสเปรดชีต ดังนี้
https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full
v4 API
ในชีต API v4 เวอร์ชันใหม่ ไม่มีการประกาศระดับการเข้าถึงอย่างชัดเจน การเรียก API จะใช้รหัสสเปรดชีต หากแอปพลิเคชันไม่มีสิทธิ์เข้าถึงสเปรดชีตที่ระบุ ระบบจะแสดงข้อผิดพลาด ไม่เช่นนั้น ระบบจะโทรต่อ
การฉายภาพ
Sheets API v3 ใช้คำว่าการฉายภาพเพื่ออ้างอิงชุดข้อมูลที่แสดงผลจากการเรียก API หนึ่งๆ ไม่ว่าจะเป็นชุดข้อมูลทั้งหมดหรือชุดย่อยแบบคงที่ที่กําหนดไว้ใน API ชีต API v4 ไม่ได้ใช้การโปรเจ็กต์ แต่ให้คุณควบคุมข้อมูลที่จะแสดงผลได้มากขึ้น
v3 API
การตั้งค่าการโปรเจ็กต์ที่เป็นไปได้ใน Sheets API v3 มีเพียง 2 แบบเท่านั้น full
projection จะแสดงข้อมูลทั้งหมดที่มี ส่วน basic
จะแสดงข้อมูลชุดย่อยที่เล็กลงและคงที่ (สำหรับฟีดเวิร์กชีต รายการ และเซลล์)
เช่นเดียวกับระดับการเข้าถึง คุณต้องระบุโปรเจ็กชันในปลายทาง API (หลังจากการตั้งค่าระดับการเข้าถึง) ดังนี้
https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/public/basic
ชุดข้อมูลย่อยขนาดเล็กที่โปรเจ็กชัน basic
ให้ไว้มีประโยชน์ในการทําให้โค้ดมีประสิทธิภาพมากขึ้น แต่ปรับแต่งไม่ได้
v4 API
แม้ว่า Sheets API v4 จะแสดงชุดข้อมูลทั้งหมดได้ แต่ก็ไม่ได้กำหนดชุดย่อยแบบคงที่ซึ่งคล้ายกับการตั้งค่าระดับการแชร์ basic
ของ Sheets API v3
เมธอดในคอลเล็กชันสเปรดชีตจะจํากัดจํานวนข้อมูลที่แสดงผลผ่านการใช้พารามิเตอร์การค้นหาฟิลด์
เช่น การค้นหาต่อไปนี้จะแสดงเฉพาะชื่อชีตทั้งหมดในสเปรดชีตหนึ่งๆ
GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId?fields=sheets.properties.title
สร้างสเปรดชีต
v3 API
ชีต API v3 ไม่มีวิธีสร้างสเปรดชีตใหม่ แต่จะใช้เมธอด Drive API Files.create เพื่อสร้างไฟล์สเปรดชีตใหม่ได้ ซึ่งแอปพลิเคชันต้องประกาศขอบเขต https://www.googleapis.com/auth/drive
v4 API
นอกจากนี้ คุณยังใช้เมธอด 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"} }
แสดงรายการสเปรดชีตของผู้ใช้ที่ได้รับการตรวจสอบแล้ว
v3 API
ฟีด Sheets API v3 ช่วยให้แอปพลิเคชันเรียกข้อมูลรายการสเปรดชีตทั้งหมดที่ผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์เข้าถึงได้ ปลายทางของฟีดสเปรดชีตมีดังนี้
GET https://spreadsheets.google.com/feeds/spreadsheets/private/full
v4 API
Sheets API v4 ไม่มีการดำเนินการที่เฉพาะเจาะจงนี้ เราขอแนะนําให้ย้ายข้อมูลแอปของคุณเพื่อใช้ขอบเขต drive.file ร่วมกับเครื่องมือเลือกของ Google สําหรับการเลือกสเปรดชีต
ในกรณีที่จำเป็นต้องแสดงรายการสเปรดชีต คุณสามารถจำลองรายการได้ผ่านเมธอด Drive API Files.list โดยใช้การค้นหา mimeType
ดังนี้
GET https://www.googleapis.com/drive/v3/files ?q=mimeType='application/vnd.google-apps.spreadsheet'
การใช้เมธอด files.list ของ Drive API เพื่อแสดงรายการสเปรดชีตทั้งหมดของผู้ใช้ต้องใช้ขอบเขตที่จํากัด
ดึงข้อมูลเมตาของชีต
ชีต API v3 มีฟีดสําหรับเข้าถึงข้อมูลเมตาของชีตที่อยู่ในสเปรดชีตหนึ่งๆ (เข้าถึงข้อมูลแถวและเซลล์ผ่านฟีดแยกต่างหาก) ข้อมูลเมตาประกอบด้วยข้อมูลต่างๆ เช่น ชื่อชีตและข้อมูลขนาด
เมธอด spreadsheets.get ของ Sheets API v4 จะให้สิทธิ์เข้าถึงข้อมูลนี้และอีกมากมาย
v3 API
ฟีดเวิร์กชีตเข้าถึงได้จากปลายทาง 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>
v4 API
คุณสามารถใช้เมธอด 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 ให้คุณเพิ่มชีตใหม่ลงในสเปรดชีตที่มีอยู่ได้
v3 API
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>
v4 API
คุณเพิ่มชีตใหม่ได้โดยส่งคําขอ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 ก็ทำเช่นเดียวกัน แต่ยังสามารถใช้อัปเดตพร็อพเพอร์ตี้อื่นๆ ของสเปรดชีตได้ด้วย โปรดทราบว่าการลดขนาดชีตอาจทำให้ระบบลบข้อมูลในเซลล์ที่ครอบตัดออกโดยไม่มีการเตือน
v3 API
หากต้องการเปลี่ยนชื่อหรือขนาดของเวิร์กชีต ให้เริ่มด้วยการเรียกใช้ฟีดเวิร์กชีตและค้นหารายการเวิร์กชีตที่ต้องการซึ่งมี 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>
v4 API
หากต้องการอัปเดตขนาด ชื่อ และพร็อพเพอร์ตี้อื่นๆ ของชีต ให้ส่งคำขอ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
ลบชีต
API ทั้ง 2 รายการสามารถนำชีตออกจากสเปรดชีตหนึ่งๆ ได้
v3 API
หากต้องการลบเวิร์กชีต ให้เริ่มด้วยการเรียกข้อมูลฟีดเวิร์กชีต จากนั้นส่งคำขอ DELETE
ใน URL edit
ของรายการเวิร์กชีตเป้าหมาย
DELETE https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version
v4 API
หากต้องการลบชีต ให้ส่งคำขอ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 ยังเข้าถึงชุดเซลล์ที่ไม่ต่อเนื่องกันได้อีกด้วย
v3 API
หากต้องการระบุ 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 ยังอนุญาตให้กรองแถวที่เฉพาะเจาะจงผ่าน Structured Query (อ้างอิงตามส่วนหัวของคอลัมน์) ได้ด้วย
GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full ?sq=age>25%20and%20height<175
v4 API
เมื่อใช้ 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 ใดก็ได้
v3 API
หากต้องการระบุ 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>
ระบบจะเพิ่มแถวใหม่ต่อท้ายชีตที่ระบุ
v4 API
เมื่อใช้ Sheets API v4 คุณสามารถเพิ่มแถวต่อท้ายได้โดยใช้เมธอด spreadsheets.values.append ตัวอย่างต่อไปนี้จะเขียนข้อมูลแถวใหม่ใต้ตารางสุดท้ายใน "ชีต 1" ของสเปรดชีต
POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/append/Sheet1
{ "values": [["Elizabeth", "2", "0.5", "60"]] }
นอกจากนี้ ชีต API v4 ยังให้คุณเพิ่มเซลล์ที่มีพร็อพเพอร์ตี้และการจัดรูปแบบที่เฉพาะเจาะจงได้โดยใช้คำขอ AppendCells ใน spreadsheets.batchUpdate
แก้ไขแถวด้วยข้อมูลใหม่
ทั้ง 2 API อนุญาตให้อัปเดตข้อมูลแถวด้วยค่าใหม่
v3 API
หากต้องการแก้ไขแถวข้อมูล ให้ตรวจสอบฟีดรายการเพื่อค้นหารายการของแถวที่ต้องการอัปเดต อัปเดตเนื้อหาของรายการนั้นตามต้องการ ตรวจสอบว่าค่ารหัสในรายการที่คุณใช้ตรงกับรหัสของรายการที่มีอยู่ทุกประการ
เมื่ออัปเดตรายการแล้ว ให้ส่งคำขอ 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>
v4 API
เมื่อใช้ 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 ได้อีกด้วย ซึ่งการใช้เมธอดนี้จะมีประสิทธิภาพมากกว่าหากคุณต้องการอัปเดตแถวหรือเซลล์หลายรายการ
นอกจากนี้ ชีต API v4 ยังให้คุณแก้ไขพร็อพเพอร์ตี้ของเซลล์และการจัดรูปแบบของเซลล์ได้โดยใช้คำขอ UpdateCells หรือ RepeatCell ใน spreadsheets.batchUpdate
ลบแถว
ทั้ง 2 API รองรับการลบแถว ระบบจะนำแถวที่ลบออกจากสเปรดชีต และเลื่อนแถวที่อยู่ด้านล่างขึ้น 1 แถว
v3 API
หากต้องการลบแถว ให้ดึงข้อมูลแถวที่จะลบจากฟีดรายการ จากนั้นส่งคําขอ 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 (ในกรณีนี้ คุณไม่จําเป็นต้องดึงข้อมูลแถวก่อนที่จะลบ)
v4 API
การลบแถวด้วย 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
ดึงข้อมูลเครือข่ายมือถือ
ชีต API v3 มีฟีดเซลล์สําหรับการเข้าถึงพื้นฐานของข้อมูลทั้งหมดที่จัดเก็บในสเปรดชีต สําหรับสิทธิ์การอ่าน ฟีดเซลล์สามารถแสดงเนื้อหาทั้งชีตหรือช่วงของเซลล์ในชีตที่กําหนดโดยชุดพารามิเตอร์การค้นหาได้ แต่จะแสดงเป็นบล็อกเดียวเท่านั้น และต้องดึงข้อมูลช่วงที่ไม่ต่อเนื่องแยกกันโดยใช้คําขอ GET
เพิ่มเติม
ชีต API v4 สามารถดึงข้อมูลเซลล์ชุดใดก็ได้จากชีต (รวมถึงช่วงที่ไม่ต่อเนื่องหลายช่วง) ชีต API v3 จะแสดงผลเนื้อหาเซลล์เป็นค่าอินพุต (ตามที่ผู้ใช้ป้อนจากแป้นพิมพ์) และ/หรือเอาต์พุตของสูตร (หากเป็นตัวเลข) เท่านั้น ส่วนชีต API v4 จะให้สิทธิ์เข้าถึงค่า สูตร การจัดรูปแบบ ไฮเปอร์ลิงก์ การตรวจสอบข้อมูล และพร็อพเพอร์ตี้อื่นๆ อย่างเต็มรูปแบบ
v3 API
หากต้องการระบุ 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>
v4 API
เรียกข้อมูลเซลล์โดยเรียกใช้เมธอด 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
แก้ไขเซลล์
ชีต API v3 ช่วยให้คุณแก้ไขเนื้อหาของเซลล์ได้โดยออกคำสั่ง PUT
ไปยังฟีดเซลล์ที่มีรายการเซลล์ที่แก้ไขแล้วเป็นส่วนเนื้อหาของคำขอ
ในทางตรงกันข้าม Sheets API v4 มีเมธอด spreadsheets.values.update และ spreadsheets.values.batchUpdate สำหรับการเปลี่ยนแปลงเนื้อหาเซลล์
v3 API
หากต้องการแก้ไขเนื้อหาของเซลล์เดียว ก่อนอื่นให้ค้นหารายการของเซลล์ในฟีดเซลล์
รายการมี 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>
v4 API
การแก้ไขเซลล์เดียวใน 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 จะแสดงข้อผิดพลาดหากการอัปเดตแบบเป็นกลุ่มไม่สำเร็จ และจะไม่ใช้การอัปเดตใดๆ ในกรณีดังกล่าว
v3 API
หากต้องการแก้ไขหลายเซลล์ ให้ดึงข้อมูลฟีดเซลล์สำหรับเวิร์กชีตก่อน รายการมี 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
ที่มีเส้นทางแบบเต็มไปยังรหัสของเซลล์ ต้องกรอกข้อมูลให้ครบทุกช่องสำหรับแต่ละรายการ
v4 API
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 จะแสดงข้อผิดพลาด