基本书写

借助 Google Sheets API,您可以向单元格、范围、范围集以及整个工作表写入值和公式。本页面上的示例说明了如何使用 Sheets API 的 spreadsheets.values 资源实现一些常见的写入操作。

请注意,您也可以使用 spreadsheet.batchUpdate 方法写入单元格值,如果您想同时更新单元格格式或 spreadsheets.values 资源不影响的其他属性,此方法会很有用。例如,如果要将一系列单元格从一个工作表复制到另一个工作表中,同时覆盖单元格公式和单元格格式,您可以使用带有 spreadsheet.batchUpdateUpdateCellsRequest 方法。

不过,对于简单的值写入,spreadsheets.values.update 方法或 spreadsheets.values.batchUpdate 方法更简单。

这些示例以 HTTP 请求的形式呈现,与语言无关。如需了解如何使用 Google API 客户端库以不同语言实现写入,请参阅读取和写入单元格值

在这些示例中,占位符 SPREADSHEET_ID 表示您将提供电子表格 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 Engine $100 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 Engine 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 Engine
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 数据 123.45 TRUE =MAX(D2:D4) 10
2

请注意,“TRUE”居中且是一个布尔值,而“123.45”由于是数字而右对齐,“10”由于是字符串而靠左对齐。公式不会被解析,并且会以字符串的形式显示。

附加值

从下表所示的工作表开始:

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 Engine $100 1 2016 年 3 月 20 日
5