Di chuyển từ API Trang tính v3

Nếu các ứng dụng hiện tại của bạn dựa trên Google Sheets API phiên bản 3, thì bạn có thể di chuyển sang Google Sheets API phiên bản 4. Phiên bản 4 dựa trên JSON, có giao diện dễ sử dụng hơn và thêm một lượng lớn chức năng không thể có trong phiên bản 3.

Trang này cung cấp thông tin liên kết giữa các lệnh Sheets API v3 cũ và các thao tác tương đương trong Sheets API v4. Việc ánh xạ chủ yếu tập trung vào tập hợp spreadsheets.values, cung cấp chức năng đọc và ghi ô trực tiếp. Các khía cạnh khác, chẳng hạn như thêm trang tính hoặc cập nhật thuộc tính trang tính, sẽ do tập hợp bảng tính xử lý. Xin lưu ý rằng các cấu trúc JSON của API phiên bản 4 không tương thích ngược với các cấu trúc XML được dùng trong phiên bản 3.

Để biết thêm thông tin về các tài nguyên có trong API Trang tính phiên bản 4, hãy xem Tài liệu tham khảo API.

Ký hiệu và thuật ngữ

API phiên bản 3 gọi các trang tính trong một bảng tính cụ thể là "trang tính". Thuật ngữ này đồng nghĩa với "trang tính" mà API v4 sử dụng.

Các API thường yêu cầu bạn chỉ định mã nhận dạng bảng tính của bảng tính mà bạn đang làm việc. Các hàm này cũng thường yêu cầu mã của trang tính đang được thao tác. Các giá trị này xuất hiện trong URL điểm cuối API, dưới dạng tham số truy vấn hoặc trong nội dung yêu cầu. Trên trang này, phần giữ chỗ spreadsheetIdsheetId lần lượt tham chiếu đến mã bảng tính và mã trang tính. Khi sử dụng các phương thức được mô tả trên trang này, hãy thay thế bằng mã nhận dạng thực tế ở các vị trí này.

API phiên bản 3 cũng chỉ định mã nhận dạng cho các hàng được truy xuất bằng nguồn cấp dữ liệu danh sách; mã nhận dạng này được biểu thị trong trang này bằng phần giữ chỗ rowId.

Cấp phép cho yêu cầu

Khi chạy, ứng dụng sẽ yêu cầu người dùng cấp một số quyền nhất định; phạm vi mà bạn chỉ định trong ứng dụng sẽ xác định những quyền mà ứng dụng yêu cầu.

API phiên bản 3

Sheets API v3 hoạt động với một phạm vi uỷ quyền duy nhất:

https://spreadsheets.google.com/feeds

là bí danh của

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

Bạn có thể sử dụng một trong hai định dạng phạm vi.

API phiên bản 4

Sheets API phiên bản 4 sử dụng một hoặc nhiều nhóm phạm vi sau:

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

Sử dụng phạm vi chỉ có thể đọc nếu ứng dụng của bạn không cần chỉnh sửa trang tính hoặc thuộc tính trang tính của người dùng. Sử dụng phạm vi bảng tính thay vì phạm vi Drive nếu ứng dụng không cần quyền truy cập chung vào Drive.

Chế độ hiển thị

Trong các phiên bản API cũ, thuật ngữ visibility (chế độ hiển thị) được dùng để chỉ khả năng sử dụng của một bảng tính nhất định.

API phiên bản 3

Sheets API phiên bản 3 thể hiện chế độ hiển thị ngay trong các điểm cuối của API. Bảng tính public đã được "Xuất bản lên web" và do đó API có thể truy cập mà không cần uỷ quyền, trong khi bảng tính private yêu cầu xác thực. Chế độ hiển thị được chỉ định trong điểm cuối sau mã bảng tính:

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

API phiên bản 4

Trong Sheets API v4 mới, không có nội dung khai báo rõ ràng về chế độ hiển thị. Các lệnh gọi API được thực hiện bằng mã bảng tính. Nếu ứng dụng không có quyền truy cập vào bảng tính được chỉ định, thì hệ thống sẽ trả về lỗi. Nếu không, lệnh gọi sẽ tiếp tục.

Dự đoán

Thuật ngữ phép chiếu được API Trang tính phiên bản 3 sử dụng để chỉ tập dữ liệu mà một lệnh gọi API nhất định trả về (tất cả dữ liệu hoặc một tập hợp con cố định được xác định trong API). Sheets API phiên bản 4 không sử dụng phép chiếu; thay vào đó, API này cho phép bạn kiểm soát nhiều hơn đối với dữ liệu được trả về.

API phiên bản 3

Chỉ có hai chế độ cài đặt phép chiếu có thể dùng trong Sheets API phiên bản 3. Bản chiếu full trả về tất cả thông tin có sẵn, trong khi basic trả về một tập hợp con dữ liệu cố định, nhỏ hơn (đối với nguồn cấp dữ liệu trang tính, danh sách và ô). Giống như chế độ hiển thị, bạn phải chỉ định chế độ chiếu trong điểm cuối API (sau chế độ cài đặt chế độ hiển thị):

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

Tập hợp con dữ liệu nhỏ hơn do phép chiếu basic cung cấp rất có giá trị để giúp mã hoạt động hiệu quả hơn, nhưng không thể tuỳ chỉnh.

API phiên bản 4

Mặc dù Sheets API phiên bản 4 có thể trả về một tập dữ liệu đầy đủ, nhưng API này không xác định các tập con cố định tương tự như chế độ hiển thị basic của Sheets API phiên bản 3. Các phương thức trong tập hợp bảng tính hạn chế lượng dữ liệu mà các phương thức này trả về thông qua việc sử dụng tham số truy vấn trường.

Ví dụ: truy vấn sau đây chỉ trả về tiêu đề của tất cả các trang tính trong một trang tính cụ thể:

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

Tạo bảng tính

API phiên bản 3

API Trang tính phiên bản 3 không cung cấp phương thức để tạo bảng tính mới; thay vào đó, bạn có thể sử dụng phương thức Files.create của API Drive để tạo tệp bảng tính mới. Điều này yêu cầu ứng dụng khai báo phạm vi https://www.googleapis.com/auth/drive.

API phiên bản 4

Bạn cũng có thể sử dụng phương thức Drive API Files.create với Sheets API v4, nhưng yêu cầu ứng dụng cung cấp phạm vi https://www.googleapis.com/auth/drive.

Để thay thế tương đương, Trang tính API phiên bản 4 cung cấp phương thức spreadsheets.create. Phương thức này cũng có thể tuỳ ý thêm trang tính, đặt thuộc tính trang tính và bảng tính, cũng như thêm dải ô được đặt tên. Ví dụ: đoạn mã sau đây sẽ tạo một bảng tính mới và đặt tên là "NewTitle":

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

Liệt kê các bảng tính mà người dùng đã xác thực có thể truy cập

API phiên bản 3

Nguồn cấp dữ liệu Sheets API v3 cho phép ứng dụng truy xuất danh sách tất cả bảng tính mà người dùng đã xác thực có thể truy cập. Điểm cuối của nguồn cấp dữ liệu bảng tính là:

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

API phiên bản 4

Sheets API v4 không cung cấp thao tác cụ thể này. Bạn nên di chuyển ứng dụng của mình để sử dụng phạm vi drive.file kết hợp với bộ chọn Google để chọn bảng tính.

Trong trường hợp cần phải liệt kê bảng tính, bạn có thể sao chép bảng tính đó thông qua phương thức Files.list của API Drive bằng cách sử dụng truy vấn mimeType:

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

Bạn cần có phạm vi bị hạn chế để sử dụng phương thức files.list của API Drive nhằm liệt kê tất cả bảng tính của người dùng.

Truy xuất siêu dữ liệu của trang tính

Sheets API phiên bản 3 cung cấp một nguồn cấp dữ liệu để truy cập siêu dữ liệu của trang tính có trong một bảng tính nhất định (dữ liệu hàng và ô được truy cập thông qua một nguồn cấp dữ liệu riêng biệt). Siêu dữ liệu bao gồm các thông tin như tiêu đề trang tính và thông tin về kích thước.

Phương thức spreadsheets.get của Sheets API v4 cung cấp quyền truy cập vào thông tin này và nhiều thông tin khác.

API phiên bản 3

Bạn có thể truy cập nguồn cấp dữ liệu trang tính từ điểm cuối API này (bằng cách sử dụng tiêu đề uỷ quyền thích hợp):

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

Phản hồi cho yêu cầu này có cấu trúc tương tự như sau, với dữ liệu của mỗi trang tính nằm trong một <entry> riêng biệt:

<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 phiên bản 4

Bạn có thể sử dụng phương thức spreadsheets.get để thu thập các thuộc tính của bảng và siêu dữ liệu khác – nhiều hơn nhiều so với những gì có sẵn khi sử dụng API Trang tính v3. Nếu bạn chỉ muốn đọc các thuộc tính của trang tính, hãy đặt tham số truy vấn includeGridData thành false để ngăn việc đưa dữ liệu ô trong bảng tính vào:

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

Phản hồi Spreadsheet chứa một mảng các đối tượng Sheet; bạn có thể tìm thấy thông tin cụ thể về tiêu đề trang tính và kích thước trong phần tử SheetProperties của các đối tượng này. Ví dụ:

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

Thêm trang tính vào bảng tính

Cả hai API đều cho phép bạn thêm trang tính mới vào bảng tính hiện có.

API phiên bản 3

Sheets API v3 có thể thêm trang tính mới vào bảng tính bằng cách tạo yêu cầu POST (đã xác thực) sau đây. Bạn có thể chỉ định kích thước của trang tính mới:

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 phiên bản 4

Bạn có thể thêm trang tính mới bằng cách tạo yêu cầu AddSheet trong phương thức spreadsheets.batchUpdate. Trong phần nội dung yêu cầu, bạn có thể chỉ định các thuộc tính trang tính cho trang tính mới; tất cả các thuộc tính đều không bắt buộc. Bạn sẽ gặp lỗi nếu cung cấp tiêu đề được dùng cho một trang tính hiện có.

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

Thay đổi tiêu đề và kích thước trang tính

Sheets API v3 cho phép bạn cập nhật tiêu đề và kích thước trang tính; Sheets API v4 cũng cho phép bạn làm việc này, nhưng cũng có thể dùng để cập nhật các thuộc tính khác của trang tính. Xin lưu ý rằng việc giảm kích thước của một trang tính có thể khiến dữ liệu trong các ô bị cắt bị xoá mà không có cảnh báo.

API phiên bản 3

Để thay đổi tiêu đề hoặc kích thước của một trang tính, hãy bắt đầu bằng cách truy xuất nguồn cấp dữ liệu trang tính và tìm mục nhập trang tính mong muốn, trong đó chứa URL edit. Cập nhật siêu dữ liệu của trang tính rồi gửi siêu dữ liệu đó dưới dạng nội dung của yêu cầu PUT đến URL chỉnh sửa. Ví dụ:

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 phiên bản 4

Để cập nhật kích thước, tiêu đề và các thuộc tính khác của trang tính, hãy tạo một yêu cầu updateSheetProperties trong phương thức spreadsheets.batchUpdate. Phần nội dung yêu cầu POST phải chứa các thuộc tính cần thay đổi và tham số fields phải liệt kê rõ ràng các thuộc tính đó (nếu bạn muốn cập nhật tất cả các thuộc tính, hãy sử dụng fields:"*" làm viết tắt để liệt kê tất cả các thuộc tính). Ví dụ: nội dung sau đây chỉ định rằng bạn nên cập nhật thuộc tính tiêu đề và kích thước của trang tính có mã nhận dạng đã cho:

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)"
     }
   }
  ],
}

Để truy xuất sheetId của một trang tính, hãy sử dụng phương thức bảng tính spreadsheets.get.

Xoá trang tính

Cả hai API đều có thể xoá các trang tính khỏi một bảng tính nhất định.

API phiên bản 3

Để xoá một trang tính, hãy bắt đầu bằng cách truy xuất nguồn cấp dữ liệu trang tính, sau đó gửi yêu cầu DELETE trên URL edit của mục trang tính mục tiêu.

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

API phiên bản 4

Để xoá một trang tính, hãy tạo yêu cầu DeleteSheet trong phương thức spreadsheets.batchUpdate. Nội dung yêu cầu POST chỉ được chứa sheetId của trang tính cần xoá. Ví dụ:

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

Để truy xuất sheetId của một trang tính riêng lẻ, hãy sử dụng phương thức spreadsheets.get của bảng tính.

Truy xuất dữ liệu hàng

Nguồn cấp dữ liệu danh sách hàng là một trong hai phương thức mà Sheets API v3 cung cấp để truy cập dữ liệu trong các ô của bảng tính (phương thức còn lại là nguồn cấp dữ liệu ô). Nguồn cấp dữ liệu hàng dùng để hỗ trợ các thao tác thường dùng trên bảng tính (đọc từng hàng, thêm hàng, sắp xếp), nhưng đưa ra một số giả định nhất định khiến nguồn cấp dữ liệu này không phù hợp với một số tác vụ. Cụ thể, nguồn cấp dữ liệu danh sách giả định rằng các hàng trống là điểm kết thúc nguồn cấp dữ liệu và các tiêu đề bắt buộc có trong hàng đầu tiên của trang tính.

Ngược lại, Sheets API phiên bản 4 không sử dụng các phương thức truy cập dành riêng cho hàng. Thay vào đó, dữ liệu trong ô của trang tính được truy cập bằng cách tham chiếu đến các dải ô cụ thể cần thiết bằng ký hiệu A1. Dải ô có thể là các khối ô, toàn bộ hàng, toàn bộ cột hoặc toàn bộ trang tính. API cũng có thể truy cập vào các tập hợp ô không liên kết.

API phiên bản 3

Để xác định URL của nguồn cấp dữ liệu dựa trên danh sách cho một trang tính nhất định, hãy truy xuất nguồn cấp dữ liệu trang tính và tìm URL nguồn cấp dữ liệu danh sách trong mục trang tính mà bạn quan tâm.

Để truy xuất nguồn cấp dữ liệu dựa trên danh sách, hãy gửi yêu cầu GET đến URL nguồn cấp dữ liệu danh sách bằng cách sử dụng tiêu đề uỷ quyền thích hợp. Ví dụ:

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

Phản hồi cho yêu cầu này chứa các mục nhập tương ứng với các hàng cụ thể. Các ô riêng lẻ được tham chiếu theo tên được cung cấp trong hàng tiêu đề trang tính (bắt buộc). Ví dụ: sau đây là một mục nhập một hàng:

<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>

Theo mặc định, các hàng được trả về trong nguồn cấp dữ liệu danh sách được trả về theo thứ tự hàng. Sheets API phiên bản 3 cung cấp các tham số truy vấn để thay đổi thứ tự đó.

Thứ tự đảo ngược:

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

Sắp xếp theo một cột cụ thể:

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

Sheets API phiên bản 3 cũng cho phép lọc các hàng cụ thể thông qua truy vấn có cấu trúc (được tham chiếu theo tiêu đề cột):

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

API phiên bản 4

Với Sheets API phiên bản 4, bạn có thể truy xuất các hàng theo dải ô bằng các phương thức spreadsheets.values.get hoặc spreadsheets.values.batchGet. Ví dụ: hàm sau đây trả về tất cả các hàng trong "Sheet1":

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

Phản hồi cho yêu cầu này có cấu trúc tương tự như sau:

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

Các ô trống ở cuối không được đưa vào phản hồi khi truy xuất toàn bộ hàng, cột hoặc trang tính.

Sheets API v4 không có các tham số tương đương cho truy vấn thứ tự hàng do Sheets API v3 cung cấp. Thứ tự đảo ngược là không quan trọng; bạn chỉ cần xử lý mảng values được trả về theo thứ tự đảo ngược. Tính năng sắp xếp theo cột không được hỗ trợ cho các thao tác đọc, nhưng bạn có thể sắp xếp dữ liệu trong trang tính (bằng cách sử dụng yêu cầu SortRange) rồi đọc dữ liệu đó.

Sheets API v4 hiện không có tính năng tương đương trực tiếp với các truy vấn có cấu trúc của Sheets API v3. Tuy nhiên, bạn có thể truy xuất dữ liệu có liên quan và phân loại dữ liệu đó nếu cần trong ứng dụng của mình.

Thêm một hàng dữ liệu mới

Bạn có thể thêm một hàng dữ liệu mới vào trang tính bằng một trong hai API này.

API phiên bản 3

Để xác định URL của nguồn cấp dữ liệu dựa trên danh sách cho một trang tính nhất định, hãy truy xuất nguồn cấp dữ liệu trang tính và tìm URL bài đăng trong mục trang tính mà bạn quan tâm.

Để thêm một hàng dữ liệu, hãy gửi yêu cầu POST đến URL bài đăng bằng cách sử dụng tiêu đề uỷ quyền thích hợp. Ví dụ:

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

Nội dung của yêu cầu POST phải chứa một mục nhập cho dữ liệu hàng cần thêm, với các ô riêng lẻ được tham chiếu theo tiêu đề cột:

<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>

Các hàng mới sẽ được thêm vào cuối trang tính đã chỉ định.

API phiên bản 4

Với Sheets API phiên bản 4, bạn có thể thêm các hàng bằng phương thức spreadsheets.values.append. Ví dụ sau đây ghi một hàng dữ liệu mới bên dưới bảng cuối cùng trong "Sheet1" của bảng tính.

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

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

Ngoài ra, Trang tính API phiên bản 4 cũng cho phép bạn nối các ô có các thuộc tính và định dạng cụ thể bằng cách sử dụng các yêu cầu AppendCells trong spreadsheets.batchUpdate.

Chỉnh sửa hàng có dữ liệu mới

Cả hai API đều cho phép cập nhật dữ liệu hàng bằng các giá trị mới.

API phiên bản 3

Để chỉnh sửa một hàng dữ liệu, hãy kiểm tra nguồn cấp dữ liệu danh sách để tìm mục nhập cho hàng mà bạn muốn cập nhật. Cập nhật nội dung của mục đó nếu cần. Hãy đảm bảo rằng giá trị mã nhận dạng trong mục nhập mà bạn sử dụng khớp chính xác với mã nhận dạng của mục nhập hiện có.

Sau khi cập nhật mục nhập, hãy gửi yêu cầu PUT với mục nhập làm phần nội dung yêu cầu đến URL edit được cung cấp trong mục nhập hàng đó, bằng cách sử dụng tiêu đề uỷ quyền thích hợp. Ví dụ:

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 phiên bản 4

Với Sheets API phiên bản 4, bạn có thể chỉnh sửa một hàng bằng cách sử dụng ký hiệu A1 của hàng bạn muốn chỉnh sửa và đưa ra yêu cầu spreadsheets.values.update để ghi đè hàng đó. Phạm vi được chỉ định chỉ cần tham chiếu đến ô đầu tiên trong hàng; API suy luận các ô cần cập nhật dựa trên các giá trị được cung cấp cùng với yêu cầu. Nếu bạn chỉ định một dải ô nhiều ô, thì các giá trị bạn cung cấp phải nằm trong dải ô đó; nếu không, API sẽ trả về lỗi.

Yêu cầu mẫu và nội dung yêu cầu sau đây sẽ thêm dữ liệu vào hàng thứ tư của "Sheet1":

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

Bạn cũng có thể cập nhật dữ liệu hàng từ phương thức spreadsheet.values.batchUpdate; bạn nên sử dụng phương thức này nếu đang cập nhật nhiều hàng hoặc ô.

Ngoài ra, Sheets API phiên bản 4 cũng cho phép bạn chỉnh sửa các thuộc tính và định dạng của ô bằng cách sử dụng các yêu cầu UpdateCells hoặc RepeatCell trong spreadsheets.batchUpdate.

Xoá hàng

Cả hai API đều hỗ trợ việc xoá hàng. Hàng đã xoá sẽ bị xoá khỏi bảng tính và các hàng bên dưới hàng đó sẽ được đẩy lên một hàng.

API phiên bản 3

Để xoá một hàng, trước tiên, hãy truy xuất hàng cần xoá từ nguồn cấp dữ liệu danh sách, sau đó gửi yêu cầu DELETE đến URL edit được cung cấp trong mục nhập của hàng. Đây cũng là URL dùng để cập nhật hàng.

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

Nếu bạn muốn đảm bảo rằng bạn không xoá một hàng đã được ứng dụng khác thay đổi kể từ khi bạn truy xuất hàng đó, hãy thêm tiêu đề HTTP If-Match chứa giá trị ETag của hàng ban đầu. Bạn có thể xác định giá trị ETag của hàng ban đầu bằng cách kiểm tra thuộc tính gd:etag của phần tử mục nhập.

Nếu bạn muốn xoá hàng bất kể người khác có cập nhật hàng đó sau khi bạn truy xuất hay không, hãy sử dụng If-Match: * và không thêm ETag. (Trong trường hợp này, bạn không cần truy xuất hàng trước khi xoá hàng đó.)

API phiên bản 4

Việc xoá hàng bằng Sheets API v4 được xử lý bằng lệnh gọi phương thức spreadsheet.batchUpdate, sử dụng yêu cầu DeleteDimension. Bạn cũng có thể dùng yêu cầu này để xoá cột và nhà phát triển có thể chọn chỉ xoá một phần của hàng hoặc cột. Ví dụ: nội dung sau đây sẽ xoá hàng thứ 6 của một trang tính có mã nhận dạng nhất định (chỉ mục hàng dựa trên số 0, bao gồm cả startIndex và không bao gồm endIndex):

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

Bạn có thể truy xuất sheetId của một trang tính bằng cách sử dụng phương thức spreadsheet.get.

Truy xuất dữ liệu ô

Sheets API phiên bản 3 cung cấp nguồn cấp dữ liệu ô để truy cập cơ bản vào tất cả dữ liệu được lưu trữ trong một bảng tính. Đối với quyền đọc, nguồn cấp dữ liệu ô có thể cung cấp toàn bộ nội dung trang tính hoặc một dải ô của trang tính được xác định bằng một bộ tham số truy vấn, nhưng chỉ dưới dạng một khối duy nhất – các dải ô không liên kết phải được truy xuất riêng bằng các yêu cầu GET bổ sung.

Trang tính API phiên bản 4 có thể truy xuất bất kỳ tập hợp dữ liệu ô nào từ một trang tính (bao gồm cả nhiều dải ô không liên kết). API Trang tính phiên bản 3 chỉ có thể trả về nội dung ô dưới dạng giá trị đầu vào (do người dùng nhập bằng bàn phím) và/hoặc kết quả của công thức (nếu là số); API Trang tính phiên bản 4 cấp quyền truy cập đầy đủ vào các giá trị, công thức, định dạng, siêu liên kết, xác thực dữ liệu và các thuộc tính khác.

API phiên bản 3

Để xác định URL của nguồn cấp dữ liệu dựa trên ô cho một trang tính nhất định, hãy kiểm tra nguồn cấp dữ liệu trang tính và tìm URL nguồn cấp dữ liệu ô trong mục trang tính mà bạn quan tâm.

Để truy xuất nguồn cấp dữ liệu dựa trên ô, hãy gửi yêu cầu GET đến URL nguồn cấp dữ liệu ô bằng cách sử dụng tiêu đề uỷ quyền thích hợp. Ví dụ:

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

Các ô được tham chiếu bằng số hàng và số cột. Bạn có thể tìm nạp một dải ô cụ thể bằng cách sử dụng các tham số truy vấn max-row, min-row, max-colmin-col. Ví dụ: nội dung sau đây sẽ truy xuất tất cả các ô trong cột 4 (D), bắt đầu từ hàng 2:

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

Sheets API phiên bản 3 trả về inputValue của các ô được truy xuất – giá trị mà người dùng sẽ nhập vào giao diện người dùng Google Trang tính để thao tác với ô. inputValue có thể là một giá trị cố định hoặc một công thức. Đôi khi, API cũng trả về một numericValue; ví dụ: khi một công thức trả về một số. Ví dụ: một phản hồi có thể bao gồm các mục nhập ô có cấu trúc tương tự như sau:

<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 phiên bản 4

Truy xuất dữ liệu ô bằng cách gọi phương thức spreadsheets.values.get hoặc spreadsheets.values.batchGet cho dải ô hoặc các dải ô mà bạn quan tâm. Ví dụ: hàm sau đây sẽ trả về các ô trong cột D của "Sheet2", bắt đầu từ hàng 2, theo thứ tự chính theo cột và trả về các công thức đã nhập (bỏ qua các ô trống ở cuối):

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

Phản hồi cho yêu cầu này có cấu trúc tương tự như:

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

Bạn nên sử dụng hàm spreadsheet.values.batchGet nếu có ý định truy xuất nhiều dải ô dữ liệu. Nếu bạn muốn truy cập vào các thuộc tính của ô, chẳng hạn như định dạng, thì bạn bắt buộc phải sử dụng phương thức spreadsheet.get.

Chỉnh sửa ô

Sheets API phiên bản 3 cho phép bạn chỉnh sửa nội dung ô bằng cách đưa ra lệnh PUT cho nguồn cấp dữ liệu ô, trong đó mục nhập ô đã sửa đổi là nội dung yêu cầu.

Ngược lại, Sheets API v4 cung cấp các phương thức spreadsheets.values.updatespreadsheets.values.batchUpdate để thay đổi nội dung ô.

API phiên bản 3

Để chỉnh sửa nội dung của một ô, trước tiên, hãy tìm mục nhập của ô đó trong nguồn cấp dữ liệu ô. Mục nhập chứa URL chỉnh sửa. Cập nhật mục nhập để phản ánh nội dung mà bạn muốn ô có, sau đó đưa ra yêu cầu PUT đến URL chỉnh sửa với mục nhập ô đã cập nhật làm nội dung của yêu cầu. Ví dụ: nội dung sau đây sẽ cập nhật ô D2 (R2C4) để chứa công thức 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 phiên bản 4

Bạn có thể chỉnh sửa một ô trong Sheets API v4 bằng phương thức spreadsheets.values.update. Phương thức này yêu cầu một tham số truy vấn ValueInputOption, tham số này chỉ định liệu dữ liệu đầu vào có được coi là được nhập vào giao diện người dùng Trang tính (USER_ENTERED) hay không được phân tích cú pháp và được lấy nguyên trạng (RAW). Ví dụ: nội dung cập nhật sau đây cho ô D2 bằng một công thức:

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

Nếu bạn đang chỉnh sửa nhiều ô, hãy sử dụng phương thức spreadsheets.values.batchUpdate để thực hiện các thao tác chỉnh sửa đó trong một yêu cầu.

Chỉnh sửa nhiều ô thông qua yêu cầu hàng loạt

Cả hai API đều cung cấp phương tiện để thay đổi nội dung của nhiều ô bằng một yêu cầu (hàng loạt) duy nhất. Các ô được tham chiếu đến bằng yêu cầu hàng loạt không bắt buộc phải nằm trong một dải ô liên tục.

Trong trường hợp một hoặc nhiều thao tác chỉnh sửa ô trong lô không thành công, Sheets API v3 sẽ cho phép các thao tác khác thành công. Tuy nhiên, Sheets API v4 sẽ trả về lỗi nếu bất kỳ bản cập nhật hàng loạt nào không thành công và không áp dụng bất kỳ bản cập nhật nào trong trường hợp đó.

API phiên bản 3

Để chỉnh sửa nhiều ô, trước tiên, hãy truy xuất nguồn cấp dữ liệu ô cho trang tính. Mục nhập chứa một URL hàng loạt. Gửi yêu cầu POST đến URL này, cùng với nội dung yêu cầu mô tả các ô bạn muốn cập nhật và nội dung ô mới. Yêu cầu POST và nội dung yêu cầu có cấu trúc tương tự như sau:

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>

Trường batch:id phải xác định riêng yêu cầu trong lô. Trường batch:operation phải là update để chỉnh sửa ô. gs:cell xác định ô theo số hàng và số cột, đồng thời cung cấp dữ liệu mới để chèn vào đó. id chứa URL đầy đủ đến ô cần cập nhật. link phải có thuộc tính href chứa đường dẫn đầy đủ đến mã nhận dạng của ô. Bạn phải điền vào tất cả các trường này cho mỗi mục nhập.

API phiên bản 4

Sheets API phiên bản 4 cung cấp tính năng chỉnh sửa hàng loạt giá trị ô thông qua phương thức spreadsheets.values.batchUpdate.

Bạn có thể chỉnh sửa nhiều ô bằng cách đưa ra yêu cầu POST với các thay đổi về dữ liệu được chỉ định trong nội dung yêu cầu. Ví dụ:

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"]]
       }
  ]
}

Nếu bạn chỉ định một ô làm dải ô, thì tất cả giá trị được cung cấp sẽ được ghi vào trang tính bắt đầu bằng ô đó làm toạ độ trên cùng bên trái. Nếu bạn chỉ định một dải ô nhiều ô, thì các giá trị bạn cung cấp phải khớp chính xác với dải ô đó; nếu không, API sẽ trả về lỗi.