如何在Swift 4中使用Sheets API v4创建Google表格并获取表格ID
在Swift 4中使用Google Sheets API创建新表格并获取Spreadsheet ID
我来帮你搞定这个问题——你当前的代码只是发起了一个GET请求,但Google Sheets API创建新表格需要用POST请求,还要带上必要的认证信息和请求体。下面是完整的实现步骤和代码示例:
关键前提
首先要确保你已经完成了基础配置:
- 在Google Cloud Console中启用了Sheets API
- 获取了OAuth 2.0客户端ID,并且已经通过认证流程拿到了有效的访问令牌(令牌需要包含
https://www.googleapis.com/auth/spreadsheets权限范围)
完整实现代码
import Foundation func createNewSheet(withAccessToken token: String, completion: @escaping (String?, Error?) -> Void) { // 校验API URL有效性 guard let apiUrl = URL(string: "https://sheets.googleapis.com/v4/spreadsheets") else { let invalidURLError = NSError(domain: "SheetAPIError", code: -1, userInfo: [NSLocalizedDescriptionKey: "无效的API地址"]) completion(nil, invalidURLError) return } // 构造请求体:定义新表格的基本属性(这里自定义表格标题) let spreadsheetProperties: [String: Any] = [ "properties": [ "title": "我的新表格" ] ] // 将请求体序列化为JSON数据 guard let requestBodyData = try? JSONSerialization.data(withJSONObject: spreadsheetProperties) else { let serializationError = NSError(domain: "SheetAPIError", code: -2, userInfo: [NSLocalizedDescriptionKey: "请求体序列化失败"]) completion(nil, serializationError) return } // 配置请求 var request = URLRequest(url: apiUrl) request.httpMethod = "POST" // 创建表格必须用POST request.httpBody = requestBodyData // 添加认证头:Bearer + 访问令牌 request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization") // 声明请求体格式为JSON request.setValue("application/json", forHTTPHeaderField: "Content-Type") // 发起网络请求 let task = URLSession.shared.dataTask(with: request) { responseData, _, requestError in // 先处理网络错误 if let error = requestError { completion(nil, error) return } // 校验返回数据是否存在 guard let data = responseData else { let noDataError = NSError(domain: "SheetAPIError", code: -3, userInfo: [NSLocalizedDescriptionKey: "未收到API返回数据"]) completion(nil, noDataError) return } // 解析响应JSON,提取spreadsheetId do { if let responseJSON = try JSONSerialization.jsonObject(with: data) as? [String: Any], let sheetId = responseJSON["spreadsheetId"] as? String { // 成功获取表格ID,回调返回 completion(sheetId, nil) } else { let parseError = NSError(domain: "SheetAPIError", code: -4, userInfo: [NSLocalizedDescriptionKey: "无法从响应中提取表格ID"]) completion(nil, parseError) } } catch let jsonError { completion(nil, jsonError) } } task.resume() } // 使用示例 // 替换成你实际获取到的有效访问令牌 let userAccessToken = "YOUR_VALID_ACCESS_TOKEN" createNewSheet(withAccessToken: userAccessToken) { sheetId, error in if let id = sheetId { print("表格创建成功!ID:\(id)") // 这里就可以用这个ID进行后续的表格操作了(比如写入数据、读取内容等) } else if let err = error { print("创建失败:\(err.localizedDescription)") } }
核心要点说明
- 请求方法必须是POST:GET请求仅用于查询现有表格信息,创建操作必须用POST。
- 认证头不可少:创建表格需要用户授权,所以必须在请求头中携带
Bearer + 访问令牌,API密钥无法用于创建表格(仅能访问公开资源)。 - 请求体定义表格属性:至少要指定表格标题,你也可以添加更多属性(比如默认工作表名称、格式等)。
- 提取spreadsheetId:API响应的JSON中会直接返回
spreadsheetId字段,这就是你后续复用表格需要的唯一标识。
内容的提问来源于stack exchange,提问作者Carlos27
相关产品推荐
相关产品推荐

