基本書寫

GoogleSheet API 可讓您將值和公式寫入儲存格、範圍、範圍組合和整份工作表。本頁的範例將說明如何使用試算表 API 的 spreadsheets.values 資源執行一些常見的寫入作業。

請注意,您也可以使用 spreadsheet.batchUpdate 方法寫入儲存格值,如果您想同時更新 spreadsheets.values 資源不會影響儲存格的格式或其他屬性,這個方法就能派上用場。舉例來說,如果想將某個工作表中的儲存格範圍複製到另一個工作表,同時覆寫儲存格公式和儲存格格式,您可以搭配 spreadsheet.batchUpdate 使用 UpdateCellsRequest 方法。

不過,如果是簡單的值寫入作業,使用 spreadsheets.values.update 方法或 spreadsheets.values.batchUpdate 方法會比較容易。

這些範例是以 HTTP 要求形式呈現,採用不受語言限制。如要瞭解如何使用 Google API 用戶端程式庫以不同語言實作寫入作業,請參閱讀取及寫入儲存格值

在這些範例中,預留位置 SPREADSHEET_ID 會指出您要提供試算表 ID 的位置,並且可從試算表網址找到。要寫入的範圍是使用 A1 標記法指定。例如 Sheet1!A1:D5。

寫入單一範圍

從新的空白試算表開始,下列 spreadsheets.values.update 程式碼範例顯示如何將值寫入範圍。ValueInputOption 查詢參數是必要項目,用來判斷寫入的值是否經過剖析 (例如,字串是否轉換為日期)。

要求主體是一個 ValueRange 物件,用於描述要寫入的範圍值。majorDimension 欄位表示陣列是按資料列分類的值清單。目標範圍內的現有值會遭到覆寫。

要求通訊協定如下所示。

PUT https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values/Sheet1!A1:D5?valueInputOption=VALUE_INPUT_OPTION
{
  "range": "Sheet1!A1:D5",
  "majorDimension": "ROWS",
  "values": [
    ["Item", "Cost", "Stocked", "Ship Date"],
    ["Wheel", "$20.50", "4", "3/1/2016"],
    ["Door", "$15", "2", "3/15/2016"],
    ["Engine", "$100", "1", "3/20/2016"],
    ["Totals", "=SUM(B2:B4)", "=SUM(C2:C4)", "=MAX(D2:D4)"]
  ],
}

回應包含 UpdateValuesResponse 物件,如下所示:

{
  "spreadsheetId": SPREADSHEET_ID,
  "updatedRange": "Sheet1!A1:D5",
  "updatedRows": 5,
  "updatedColumns": 4,
  "updatedCells": 20,
}

產生的工作表如下所示:

A B C D
1 項目 費用 有存貨 出貨日期
2 摩天輪 $20.50 美元 4 2016 年 3 月 1 日
3 $15 2 2016 年 3 月 15 日
4 引擎 NT$3,000 元 1 2016 年 3 月 20 日
5 總計 $135.5 美元 7 2016 年 3 月 20 日

選擇性寫入範圍

在將值寫入範圍時,您可以將對應的陣列元素設為 null,以避免變更某些現有的儲存格。您也可以將空字串 ("") 寫入儲存格來清除儲存格。

從包含上方範例產生的相同資料的工作表開始,下列 spreadsheets.values.update 程式碼範例顯示如何將值寫入 B1:D4 範圍,選擇性地保留部分儲存格並清除其他儲存格。ValueInputOption 查詢參數是必要項目,用來判斷寫入的值是否經過剖析 (例如,字串是否轉換為日期)。

要求主體是一個 ValueRange 物件,用於描述要寫入的範圍值。majorDimension 欄位表示陣列是按資料欄分類的值清單。

要求通訊協定如下所示。

PUT https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values/Sheet1!B1?valueInputOption=VALUE_INPUT_OPTION
{
  "range": "Sheet1!B1",
  "majorDimension": "COLUMNS",
  "values": [
    [null,"$1","$2", ""],
    [],
    [null,"4/1/2016", "4/15/2016", ""]
  ]
}

這裡的 values 欄位會列出範圍內每欄所做的變更。第一個陣列表示 B1 為保持不變 (因為 null 陣列元素的關係),而 B4 應清除 (空字串)。B2 和 B3 的值都已更新。第三個陣列在 D 欄上執行相同的作業,第二個空白陣列則表示 C 欄為保持不變。

回應包含 UpdateValuesResponse 物件,如下所示:

{
  "spreadsheetId": SPREADSHEET_ID,
  "updatedRange": "Sheet1!B1:D5",
  "updatedRows": 3,
  "updatedColumns": 2,
  "updatedCells": 6,
}

產生的工作表如下所示:

A B C D
1 項目 費用 有存貨 出貨日期
2 摩天輪 $1.00 4 2016 年 4 月 1 日
3 $2 美元 2 2016 年 4 月 15 日
4 引擎 1
5 總計 $3.00 7 2016 年 4 月 15 日

請注意,即使此要求未直接變更,「總計」列仍會變動,因為其儲存格中包含的公式會依附已修改的儲存格。

寫入多個範圍

從空白工作表開始,下列 spreadsheets.values.batchUpdate 程式碼範例說明如何將值寫入 Sheet1!A1:A4 和 Sheet1!B1:D2 範圍。目標範圍中的現有值會遭到覆寫。要求主體包含 ValueInputOption 物件,用於解讀輸入資料和對應每個寫入範圍的 ValueRange 物件陣列。majorDimension 欄位會決定內含的陣列是否會解讀為欄或列的陣列。

要求通訊協定如下所示。

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values:batchUpdate
{
  "valueInputOption": "VALUE_INPUT_OPTION",
  "data": [
    {
      "range": "Sheet1!A1:A4",
      "majorDimension": "COLUMNS",
      "values": [
        ["Item", "Wheel", "Door", "Engine"]
      ]
    },
    {
      "range": "Sheet1!B1:D2",
      "majorDimension": "ROWS",
      "values": [
        ["Cost", "Stocked", "Ship Date"],
        ["$20.50", "4", "3/1/2016"]
      ]
    }
  ]
}

回應包含列出更新後的儲存格統計資料和 UpdateValuesResponse 物件的陣列,每個更新的範圍各有一個物件。例如:

{
  "spreadsheetId": SPREADSHEET_ID,
  "totalUpdatedRows": 4,
  "totalUpdatedColumns": 4,
  "totalUpdatedCells": 10,
  "totalUpdatedSheets": 1,
  "responses": [
    {
      "spreadsheetId": SPREADSHEET_ID,
      "updatedRange": "Sheet1!A1:A4",
      "updatedRows": 4,
      "updatedColumns": 1,
      "updatedCells": 4,
    },
    {
      "spreadsheetId": SPREADSHEET_ID,
      "updatedRange": "Sheet1!B1:D2",
      "updatedRows": 2,
      "updatedColumns": 3,
      "updatedCells": 6,
    }
  ],
}

產生的工作表如下所示:

A B C D
1 項目 費用 有存貨 出貨日期
2 摩天輪 $20.50 美元 4 2016 年 3 月 1 日
3
4 引擎
5

在不剖析的情況下寫入值

從空白工作表開始,下列 spreadsheets.values.update 程式碼範例顯示如何將值寫入 Sheet1!A1:E1 範圍,但又使用 RAW ValueInputOption 查詢參數,避免將寫入的字串剖析為公式、布林值或數字。這些文字會以字串的形式顯示,而工作表中的文字對齊方式則會左右對齊。

要求主體是一個 ValueRange 物件,用於描述要寫入的範圍值。majorDimension 欄位表示陣列是按資料列分類的值清單。目標範圍內的現有值會遭到覆寫。

要求通訊協定如下所示。

PUT https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values/Sheet1!A1:E1?valueInputOption=RAW
{
  "range": "Sheet1!A1:E1",
  "majorDimension": "ROWS",
  "values": [
    ["Data", 123.45, true, "=MAX(D2:D4)", "10"]
  ],
}

回應包含 UpdateValuesResponse 物件,如下所示:

{
  "spreadsheetId": SPREADSHEET_ID,
  "updatedRange": "Sheet1!A1:E1",
  "updatedRows": 1,
  "updatedColumns": 5,
  "updatedCells": 5,
}

產生的工作表如下所示:

A B C D E
1 資料 1,2345 萬 TRUE =MAX(D2:D4) 10
2

請注意,「TRUE」是以布林值為中心,而「123.45」則靠右對齊;「123.45」則是左右對齊,因為它是字串。系統不會剖析公式,且會以字串的形式顯示。

附加值

我們從下表開始著手:

A B C D
1 項目 費用 有存貨 出貨日期
2 摩天輪 $20.50 美元 4 2016 年 3 月 1 日
3

下列 spreadsheets.values.append 程式碼範例說明如何新增從第 3 列開始的兩個新資料列。ValueInputOption 查詢參數是必要項目,用來判斷寫入的值是否經過剖析 (例如,字串是否轉換為日期)。

要求主體是一個 ValueRange 物件,用於描述要寫入的範圍值。majorDimension 欄位表示陣列是按資料列分類的值清單。

要求通訊協定如下所示。

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values/Sheet1!A1:E1:append?valueInputOption=VALUE_INPUT_OPTION
{
  "range": "Sheet1!A1:E1",
  "majorDimension": "ROWS",
  "values": [
    ["Door", "$15", "2", "3/15/2016"],
    ["Engine", "$100", "1", "3/20/2016"],
  ],
}

回應包含 AppendValuesResponse 物件,如下所示:

{
  "spreadsheetId": SPREADSHEET_ID,
  "tableRange": "Sheet1!A1:D2",
  "updates": {
    "spreadsheetId": SPREADSHEET_ID,
    "updatedRange": "Sheet1!A3:D4",
    "updatedRows": 2,
    "updatedColumns": 4,
    "updatedCells": 8,
  }
}

產生的工作表如下所示:

A B C D
1 項目 費用 有存貨 出貨日期
2 摩天輪 $20.50 美元 4 2016 年 3 月 1 日
3 $15 2 2016 年 3 月 15 日
4 引擎 NT$3,000 元 1 2016 年 3 月 20 日
5