工具:update_spreadsheet
对电子表格应用一项或多项更新。
对应于 REST API 中的 spreadsheets.batchUpdate:https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/batchUpdate
可能的更新列表如下:
updateSpreadsheetProperties:更新电子表格的属性。架构:properties(对象,必需):要更新的电子表格属性 ({"title": string, "locale": string, "timeZone": string})。fields(字符串,必需):要更新的媒体资源的字段掩码(例如"title"或"*")。updateSheetProperties:更新工作表的属性。架构:properties(对象,必需):工作表属性 ({"sheetId": int, "title": string, "index": int, "gridProperties": {"rowCount": int, "columnCount": int, "frozenRowCount": int, "frozenColumnCount": int, "hideGridlines": bool}, "hidden": bool, "tabColorStyle": {"rgbColor": {"red": float, "green": float, "blue": float}}})。fields(字符串,必需):要更新的属性的字段掩码(例如"title"、"gridProperties.frozenRowCount")。updateDimensionProperties:更新维度属性(例如行高或列宽)。架构:range(对象,必需):维度范围 ({"sheetId": int, "dimension": "ROWS"|"COLUMNS", "startIndex": int, "endIndex": int})。properties(对象,必需):维度属性 ({"pixelSize": int, "hiddenByUser": bool})。fields(字符串,必需):要更新的属性的字段掩码(例如"pixelSize")。updateNamedRange:更新命名的范围。架构:namedRange(对象,必需):已命名的范围定义 ({"namedRangeId": string, "name": string, "range": {"sheetId": int, "startRowIndex": int, "endRowIndex": int, "startColumnIndex": int, "endColumnIndex": int}})。fields(字符串,必需):要更新的字段的字段掩码(例如"name,range"或"*")。repeatCell:在某个范围内重复单个单元格。架构:range(对象,必需):应用单元格数据/格式设置的网格范围 ({"sheetId": int, "startRowIndex": int, "endRowIndex": int, "startColumnIndex": int, "endColumnIndex": int})。cell(对象,必需):移动数据 ({"userEnteredValue": {"stringValue": str, "numberValue": float, "formulaValue": str}, "userEnteredFormat": {"textFormat": {"bold": bool, "italic": bool, "fontSize": int}, "backgroundColorStyle": {"rgbColor": {"red": float, "green": float, "blue": float}}, "horizontalAlignment": "LEFT"|"CENTER"|"RIGHT", "wrapStrategy": "WRAP"|"CLIP"|"OVERFLOW_CELL"}})。fields(字符串,必需):要更新的单元格字段的字段掩码(例如"userEnteredFormat.textFormat.bold"或"userEnteredValue")。addNamedRange:添加命名的范围。架构:namedRange(对象,必需):要添加的命名的范围 ({"namedRangeId": string (optional), "name": string, "range": {"sheetId": int, "startRowIndex": int, "endRowIndex": int, "startColumnIndex": int, "endColumnIndex": int}})。deleteNamedRange:按 ID 删除命名的范围。架构:namedRangeId(字符串,必需):要删除的命名的范围的 ID。addSheet:添加工作表。架构:properties(对象,可选):工作表属性 ({"title": string, "sheetId": int (optional), "index": int (optional), "gridProperties": {"rowCount": int, "columnCount": int}})。deleteSheet:删除工作表。架构:sheetId(整数,必需):要删除的工作表的 ID。autoFill:根据现有数据自动填充更多数据。架构:range(对象,可选):要检查并填充到{"sheetId": int, "startRowIndex": int, "endRowIndex": int, "startColumnIndex": int, "endColumnIndex": int}中的范围。sourceAndDestination(对象,可选):明确的来源和填充长度 ({"source": GridRange, "dimension": "ROWS"|"COLUMNS", "fillLength": int})。useAlternateSeries(布尔值,可选):是否使用备选序列。cutPaste:剪切某个区域的数据并将其粘贴到另一个区域。架构:source(对象,必需):源网格范围。destination(对象,必需):左上角目标坐标 ({"sheetId": int, "rowIndex": int, "columnIndex": int})。pasteType(字符串,可选):"PASTE_NORMAL"、"PASTE_VALUES"、"PASTE_FORMAT"、"PASTE_NO_BORDERS"、"PASTE_FORMULA"。copyPaste:将数据从一个区域复制到另一个区域。架构:source(对象,必需):源网格范围。destination(对象,必需):目标网格范围。pasteType(字符串,可选):"PASTE_NORMAL"、"PASTE_VALUES"、"PASTE_FORMAT"、"PASTE_NO_BORDERS"、"PASTE_FORMULA"。pasteOrientation(字符串,可选):"NORMAL"或"TRANSPOSE"。mergeCells:将单元格合并在一起。架构:range(对象,必需):要合并的网格范围。mergeType(字符串,必需):"MERGE_ALL"、"MERGE_COLUMNS"或"MERGE_ROWS"。unmergeCells:取消合并已合并的单元格。架构:range(对象,必需):要取消合并所有单元格的网格范围。updateBorders:更新某个单元格范围内的边框。架构:range(对象,必需):要更新边框的网格范围。top/bottom/left/right/innerHorizontal/innerVertical(对象,可选):边框样式 ({"style": "SOLID"|"DASHED"|"DOTTED"|"DOUBLE"|"NONE", "width": int, "colorStyle": {"rgbColor": {"red": float, "green": float, "blue": float}}})。updateCells:一次性更新多个单元格。架构:- 面积(必须提供一个):
start(对象):左上角坐标 ({"sheetId": int, "rowIndex": int, "columnIndex": int})。range(对象):网格范围。
rows(RowData 的数组,必需):单元格 ([{"values": [{"userEnteredValue": {"stringValue": str, "numberValue": float, "formulaValue": str}}]}]) 行。fields(字符串,必需):要更新的单元格字段的字段掩码(例如"userEnteredValue"或"userEnteredFormat")。addFilterView:添加过滤视图。架构:filter(对象,必需):过滤视图定义 ({"title": string, "range": GridRange, "criteria": map, "sortSpecs": list})。appendCells:将单元格附加到工作表中包含数据的最后一行的后面。架构:sheetId(整数,必需):要向其附加数据的工作表 ID。rows(RowData 数组,必需):要附加的数据行。fields(字符串,必需):字段掩码(例如"userEnteredValue")。clearBasicFilter:清除工作表上的基本过滤条件。架构:sheetId(整数,必需):要清除基本过滤器的工作表的 ID。deleteDimension:删除工作表中的行或列。架构:range(对象,必需):要删除的维度范围 ({"sheetId": int, "dimension": "ROWS"|"COLUMNS", "startIndex": int, "endIndex": int})。deleteEmbeddedObject:删除工作表中的嵌入式对象(例如图表、图片)。架构:objectId(整数,必需):要删除的嵌入式对象的 ID。deleteFilterView:从工作表中删除过滤视图。架构:filterId(整数,必需):要删除的过滤视图的 ID。duplicateFilterView:复制过滤视图。架构:filterId(整数,必需):要复制的过滤视图的 ID。duplicateSheet:复制工作表。架构:sourceSheetId(整数,必需):要复制的工作表 ID。insertSheetIndex(整数,可选):应插入新工作表的索引(从零开始)。newSheetId(整数,可选):新工作表的 ID。newSheetName(字符串,可选):新工作表的名称。findReplace:查找并替换某些文本。架构:find(字符串,必需):要搜索的值。replacement(字符串,必需):替换值。- 范围(必须指定一个):
range(对象):网格范围。sheetId(整数):工作表 ID。allSheets(布尔值):true表示搜索所有工作表。
matchCase/matchEntireCell/searchByRegex/includeFormulas(布尔值,可选)。insertDimension:在工作表中插入新行或新列。架构:range(对象,必需):要插入的维度范围 ({"sheetId": int, "dimension": "ROWS"|"COLUMNS", "startIndex": int, "endIndex": int})。inheritFromBefore(布尔值,可选):true表示继承前一行/列的格式。insertRange:在工作表中插入新单元格,并移动现有单元格。架构:range(对象,必需):要插入单元格的网格范围。shiftDimension(字符串,必需):"ROWS"或"COLUMNS"。moveDimension:将行或列移动到工作表中的其他位置。架构:source(对象,必需):来源维度范围 ({"sheetId": int, "dimension": "ROWS"|"COLUMNS", "startIndex": int, "endIndex": int})。destinationIndex(整数,必需):从零开始的目标索引。updateEmbeddedObjectPosition:更新嵌入式对象(例如图表、图片)的位置。架构:objectId(整数,必需):嵌入式对象的 ID。newPosition(对象,必需):新位置 ({"overlayPosition": {"anchorCell": {"sheetId": int, "rowIndex": int, "columnIndex": int}, "widthPixels": int, "heightPixels": int}})。fields(字符串,必需):字段掩码(例如"overlayPosition.anchorCell")。pasteData:将数据(HTML 或分隔数据)粘贴到工作表中。架构:coordinate(对象,必需):左上角坐标 ({"sheetId": int, "rowIndex": int, "columnIndex": int})。data(字符串,必需):带分隔符的文本或 HTML 数据。delimiter(字符串,可选)或html(布尔值,可选)。type(字符串,可选):"PASTE_NORMAL"、"PASTE_VALUES"等。textToColumns:将文本列转换为多个文本列。架构:source(对象,必需):单列网格范围。delimiterType(字符串,必需):"COMMA"、"SEMICOLON"、"PERIOD"、"SPACE"、"CUSTOM"、"AUTODETECT"。delimiter(字符串,可选):当delimiterType为"CUSTOM"时,使用的分隔符字符。updateFilterView:更新过滤视图的属性。架构:filter(对象,必需):过滤视图定义,包括filterViewId。fields(字符串,必需):字段掩码(例如"title,criteria"或"*")。deleteRange:从工作表中删除一定范围的单元格,并移动剩余的单元格。架构:range(对象,必需):要删除的网格范围。shiftDimension(字符串,必需):"ROWS"或"COLUMNS"。appendDimension:将维度附加到工作表的末尾。架构:sheetId(整数,必需):工作表 ID。dimension(字符串,必需):"ROWS"或"COLUMNS"。length(整数,必需):要附加的行数或列数。addConditionalFormatRule:添加新的条件格式规则。架构:rule(对象,必需):条件格式规则 ({"ranges": [GridRange], "booleanRule": {"condition": {"type": "NUMBER_GREATER_THAN_EQ"|"TEXT_CONTAINS"|..., "values": [{"userEnteredValue": string}]}, "format": CellFormat}, "gradientRule": {...}})。index(整数,可选):规则应插入的索引(从零开始)。updateConditionalFormatRule:更新现有的条件格式规则。架构:rule(对象,必需):新的条件格式规则。- 索引 / 规则 ID(必须提供一个):
index(整数):规则的索引(从零开始)。sheetId(整数):如果按工作表索引更新,则为工作表 ID。
newIndex(整数,可选):用于移动规则的新索引。deleteConditionalFormatRule:删除现有的条件格式规则。架构:index(整数,必需):要删除的规则的索引(从 0 开始)。sheetId(整数,必需):规则的工作表 ID。sortRange:对某个范围中的数据进行排序。架构:range(对象,必需):要排序的网格范围。sortSpecs(SortSpec 数组,必需):排序规范 ([{"dimensionIndex": int, "sortOrder": "ASCENDING"|"DESCENDING"}])。setDataValidation:为一个或多个单元格设置数据验证。架构:range(对象,必需):网格范围。rule(对象,可选):验证规则 ({"condition": {"type": "ONE_OF_LIST"|"NUMBER_BETWEEN"|..., "values": [{"userEnteredValue": string}]}, "strict": bool, "showCustomUi": bool})。如果省略,则清除验证。setBasicFilter:设置工作表的基本过滤条件。架构:filter(对象,必需):基本过滤条件定义 ({"range": GridRange, "criteria": map, "sortSpecs": list})。addProtectedRange:添加受保护的范围。架构:protectedRange(对象,必需):受保护的范围定义 ({"range": GridRange, "description": string, "warningOnly": bool, "editors": {"users": [string]}})。updateProtectedRange:更新受保护的范围。架构:protectedRange(对象,必需):包含protectedRangeId的受保护的范围定义。fields(字符串,必需):字段掩码(例如"description,warningOnly"或"*")。deleteProtectedRange:删除受保护的范围。架构:protectedRangeId(整数,必需):要删除的受保护范围的 ID。autoResizeDimensions:根据单元格内容自动调整一个或多个维度的大小。架构:dimensions(对象,必需):维度范围 ({"sheetId": int, "dimension": "ROWS"|"COLUMNS", "startIndex": int, "endIndex": int})。addChart:添加图表。架构:chart(对象,必需):图表定义 ({"spec": {"title": string, "basicChart": {"chartType": "COLUMN"|"BAR"|"LINE"|"PIE"|"COMBO"|"SCATTER", "legendPosition": string, "axis": list, "domains": list, "series": list}}, "position": {"overlayPosition": {"anchorCell": {"sheetId": int, "rowIndex": int, "columnIndex": int}}}})。updateChartSpec:更新图表的规范。架构:chartId(整数,必需):图表的 ID。spec(对象,必需):新图表规范。updateBanding:更新分段范围。架构:bandedRange(对象,必需):包含bandedRangeId的分段范围定义。fields(字符串,必需):字段掩码。addBanding:添加新的分档范围。架构:bandedRange(对象,必需):分段范围定义 ({"range": GridRange, "rowProperties": {"headerColorStyle": ColorStyle, "firstBandColorStyle": ColorStyle, "secondBandColorStyle": ColorStyle}})。deleteBanding:移除分档范围。架构:bandedRangeId(整数,必需):要删除的频段范围的 ID。createDeveloperMetadata:创建新的开发者元数据。架构:developerMetadata(对象,必需):元数据定义 ({"metadataKey": string, "metadataValue": string, "location": {"locationType": "ROW"|"COLUMN"|"SHEET"|"SPREADSHEET", "sheetId": int}, "visibility": "DOCUMENT"|"PROJECT"})。updateDeveloperMetadata:更新现有的开发者元数据条目。架构:dataFilters(DataFilter 的数组,必需):用于选择元数据的过滤条件。developerMetadata(对象,必需):更新后的元数据值。fields(字符串,必需):字段掩码。deleteDeveloperMetadata:删除开发者元数据。架构:dataFilter(对象,必需):用于描述要删除的元数据的过滤条件。randomizeRange:随机排列指定范围内的行。架构:range(对象,必需):要随机化的网格范围。addDimensionGroup:在指定范围内创建群组。架构:range(对象,必需):要分组的维度范围 ({"sheetId": int, "dimension": "ROWS"|"COLUMNS", "startIndex": int, "endIndex": int})。deleteDimensionGroup:删除指定范围内的群组。架构:range(对象,必需):要删除的组的维度范围。updateDimensionGroup:更新指定群组的状态。架构:dimensionGroup(对象,必需):群组定义 ({"range": DimensionRange, "depth": int, "collapsed": bool})。fields(字符串,必需):字段掩码(例如"collapsed")。trimWhitespace:去除单元格中的空格(例如空格、制表符或换行符)。架构:range(对象,必需):要剪裁的网格范围。deleteDuplicates:移除单元格范围的指定列中包含重复值的行。架构:range(对象,必需):要从中移除重复项的网格范围。comparisonColumns(DimensionRange 数组,可选):要分析的特定列。updateEmbeddedObjectBorder:更新嵌入式对象的边框。架构:objectId(整数,必需):嵌入式对象的 ID。border(对象,必需):边框定义 ({"colorStyle": ColorStyle, "section": "ALL"})。fields(字符串,必需):字段掩码。addSlicer:添加切片器。架构:slicer(对象,必需):切片器定义 ({"spec": {"dataRange": GridRange, "columnIndex": int, "title": string}, "position": {"overlayPosition": {"anchorCell": {"sheetId": int, "rowIndex": int, "columnIndex": int}}}})。updateSlicerSpec:更新切片器的规范。架构:slicerId(整数,必需):切分器的 ID。spec(对象,必需):新的切片器规范。fields(字符串,必需):字段掩码。addDataSource:添加数据源。架构:dataSource(对象,必需):数据源定义 ({"spec": {"bigQuery": {"projectId": string, "query": string}}})。updateDataSource:更新数据源。架构:dataSource(对象,必需):包含dataSourceId的数据源定义。fields(字符串,必需):字段掩码。deleteDataSource:删除数据源。架构:dataSourceId(字符串,必需):要删除的数据源的 ID。refreshDataSource:刷新一个或多个数据源及关联的数据库对象。架构:dataSourceId(字符串,可选)或isAll(布尔值,可选)或references(对象,可选)。force(布尔值,可选):是否强制刷新。cancelDataSourceRefresh:取消一个或多个数据源及关联的数据库对象的刷新。架构:dataSourceId(字符串,可选)或isAll(布尔值,可选)或references(对象,可选)。addTable:添加表格。架构:table(对象,必需):表格定义 ({"range": GridRange, "name": string, "hasHeaderRow": bool, "hasTotalsRow": bool})。updateTable:更新表。架构:table(对象,必需):包含tableId的表定义。fields(字符串,必需):字段掩码。deleteTable:删除表的请求。架构:tableId(字符串,必需):要删除的表的 ID。insertComment:在电子表格中插入注释。架构:content(字符串,必需):纯文本评论内容。coordinate(对象,必需):工作表中用于锚定注释的网格坐标:sheetId(整数,必需):工作表 ID。rowIndex(整数,必需):从零开始的行索引。columnIndex(整数,必需):从 0 开始的列索引。
assigneeEmailAddress(字符串,可选):评论分配对象的电子邮件地址。addCommentReply:向现有评论串添加回复。还用于解决或重新打开帖子。架构:commentId(字符串,必需):评论串的 ID。post(对象,必需):content(字符串,必需,除非 commentAction 为 RESOLVE 或 REOPEN):回复帖子的纯文本内容。commentAction(字符串,可选):对此回复采取的操作("RESOLVE"或"REOPEN")。assigneeEmail(字符串,可选):要将相应线程新分配到的电子邮件地址。
updateCommentPost:更新评论串中评论帖子的内容。架构:commentId(字符串,必需):评论串的 ID。postId(字符串,必需):要更新的评论帖子的 ID。content(字符串,必需):评论帖子的更新后内容。deleteComment:删除评论串。架构:commentId(字符串,必需):要删除的评论串的 ID。deleteCommentReply:删除回复帖子。架构:commentId(字符串,必需):评论串的 ID。postId(字符串,必需):要删除的回复帖子的 ID。
以下代码示例展示了如何使用 curl 调用 update_spreadsheet MCP 工具。
| Curl 请求 |
|---|
curl --location 'https://sheetsmcp.googleapis.com/mcp' \ --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ --header 'content-type: application/json' \ --header 'accept: application/json, text/event-stream' \ --data '{ "method": "tools/call", "params": { "name": "update_spreadsheet", "arguments": { // Provide these details according to the MCP tool specification. } }, "jsonrpc": "2.0", "id": 1 }' |
输入架构
UpdateContentRequest
| JSON 表示法 |
|---|
{
"spreadsheetId": string,
"requests": [
{
object
}
],
"writeControl": {
object ( |
| 字段 | |
|---|---|
spreadsheetId |
必需。要更新的电子表格的 ID。 |
requests[] |
必需。要应用于电子表格的更新列表。每个请求都应是一个有效的 spreadsheets.batchUpdate 请求对象,使用文档中记录的架构:https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request。系统将按指定顺序应用请求。如果任何请求无效,则不会应用任何请求。 |
writeControl |
可选。提供对写入请求执行方式的控制。 |
结构体
| JSON 表示法 |
|---|
{ "fields": { string: value, ... } } |
| 字段 | |
|---|---|
fields |
无序的动态类型值映射。 包含一系列 |
FieldsEntry
| JSON 表示法 |
|---|
{ "key": string, "value": value } |
| 字段 | |
|---|---|
key |
|
value |
|
值
| JSON 表示法 |
|---|
{ "nullValue": null, "numberValue": number, "stringValue": string, "boolValue": boolean, "structValue": { object }, "listValue": array } |
| 字段 | |
|---|---|
联合字段 kind。值的类型。kind 只能是下列其中一项: |
|
nullValue |
表示 JSON |
numberValue |
表示 JSON 数字。不得为 |
stringValue |
表示 JSON 字符串。 |
boolValue |
表示 JSON 布尔值(JSON 中的 |
structValue |
表示 JSON 对象。 |
listValue |
表示 JSON 数组。 |
ListValue
| JSON 表示法 |
|---|
{ "values": [ value ] } |
| 字段 | |
|---|---|
values[] |
动态类型值的重复字段。 |
WriteControl
| JSON 表示法 |
|---|
{ "requiredRevisionId": string } |
| 字段 | |
|---|---|
联合字段 control。确定要写入的电子表格修订版本,以及如果该修订版本不是电子表格的当前修订版本,请求应如何运行。control 只能是下列其中一项: |
|
requiredRevisionId |
写入请求将应用于的电子表格的修订版本 ID。如果这不是文档的最新修订版本,系统将不会处理相应请求,并会返回 400 错误请求错误。 当响应中返回必需的修订版本 ID 时,表示应用请求后的电子表格的修订版本 ID。 |
NullValue
表示 JSON null。
NullValue 是一个标记,使用只有一个值的枚举来表示 Value 类型联合的 null 值。
如果类型为 NullValue 的字段的值不是 0,则视为无效。大多数 ProtoJSON 序列化程序都会发出一个 Value,并将 null_value 设置为 JSON null,无论整数值是多少,因此会往返于 0 值。
| 枚举 | |
|---|---|
NULL_VALUE |
Null 值。 |
输出架构
表示 JSON 对象。
一种无序的键值对映射,旨在完美捕获 JSON 对象的语义。这样一来,便可将任何任意 JSON 载荷解析为 ProtoJSON 格式的消息字段。
这遵循了 RFC 8259 中关于可互操作 JSON 的准则:值得注意的是,此类型无法表示较大的 Int64 值或 NaN/Infinity 数字,因为 JSON 格式通常不支持其数字类型中的这些值。
如果您不打算将任意 JSON 解析到消息中,则应首选自定义类型的消息,而不是使用此类型。
结构体
| JSON 表示法 |
|---|
{ "fields": { string: value, ... } } |
| 字段 | |
|---|---|
fields |
无序的动态类型值映射。 包含一系列 |
FieldsEntry
| JSON 表示法 |
|---|
{ "key": string, "value": value } |
| 字段 | |
|---|---|
key |
|
value |
|
值
| JSON 表示法 |
|---|
{ "nullValue": null, "numberValue": number, "stringValue": string, "boolValue": boolean, "structValue": { object }, "listValue": array } |
| 字段 | |
|---|---|
联合字段 kind。值的类型。kind 只能是下列其中一项: |
|
nullValue |
表示 JSON |
numberValue |
表示 JSON 数字。不得为 |
stringValue |
表示 JSON 字符串。 |
boolValue |
表示 JSON 布尔值(JSON 中的 |
structValue |
表示 JSON 对象。 |
listValue |
表示 JSON 数组。 |
ListValue
| JSON 表示法 |
|---|
{ "values": [ value ] } |
| 字段 | |
|---|---|
values[] |
动态类型值的重复字段。 |
NullValue
表示 JSON null。
NullValue 是一个标记,使用只有一个值的枚举来表示 Value 类型联合的 null 值。
如果类型为 NullValue 的字段的值不是 0,则视为无效。大多数 ProtoJSON 序列化程序都会发出一个 Value,并将 null_value 设置为 JSON null,无论整数值是多少,因此会往返于 0 值。
| 枚举 | |
|---|---|
NULL_VALUE |
Null 值。 |
工具注释
工具注释会发送给 MCP 客户端,用于描述指定工具的基本风险。大多数客户端会将这些提示视为不受信任的,但它们可用于确定何时向用户发送确认提示。
除了标题字符串之外,还定义了以下布尔值提示:
readOnlyHint:如果为 true,则工具不会修改其环境。默认值:false。destructiveHint:如果为 true,则工具可以执行破坏性操作。如果为 false,则该工具只能执行添加操作。默认值:true。idempotentHint:如果为 true,则使用相同实参重复调用该工具不会对其环境产生任何额外影响。默认值:false。openWorldHint:如果为 true,则工具可以与外部实体的“开放世界”进行交互。如果为 false,则该工具只能与内部实体互动。例如,网络搜索工具是开放世界,而内存工具不是开放世界。
破坏性提示:❌ | 等幂性提示:❌ | 只读提示:❌ | 开放世界提示:✅
授权范围
需要以下 OAuth 范围之一:
https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/drive.filehttps://www.googleapis.com/auth/spreadsheets