Jef*_*hen 5 xcode ios swift google-sheets-api
我正在尝试通过遵循此google api写入Google表格文档,但没有取得太大的成功。我什至不确定我是否遵循正确的api,因为它显示为“ Appscript”,看起来像Swift。
我已经能够使用以下方法从工作表中读取数据:
private let scopes = [kGTLRAuthScopeSheetsSpreadsheets]
private let service = GTLRSheetsService()
override func viewDidLoad() {
super.viewDidLoad()
self.service.authorizer = GIDSignIn.sharedInstance().currentUser.authentication.fetcherAuthorizer()
getData()
}
func getData() {
let spreadsheetId = "1OAbhzY7RlfCEre-I5e-Kcgz16eHz2cGpO9HZKOiizCs" // Portfolio
let query = GTLRSheetsQuery_SpreadsheetsValuesGet.query(withSpreadsheetId: spreadsheetId, range:range)
service.executeQuery(query, delegate: self, didFinish: #selector(displayResultWithTicket(ticket:finishedWithObject:error:)))
}
Run Code Online (Sandbox Code Playgroud)
我尝试按照api所说的部分进行操作:
// This code uses the Sheets Advanced Service, but for most use cases
// the built-in method SpreadsheetApp.getActiveSpreadsheet()
// .getRange(range).setValues(values) is more appropriate.
var values = [
[
// Cell values ...
]
// Additional rows ...
];
var valueRange = Sheets.newValueRange();
valueRange.values = values;
var result = Sheets.Spreadsheets.Values.update(valueRange, spreadsheetId, range, {
valueInputOption: valueInputOption
});
Run Code Online (Sandbox Code Playgroud)
但是我对SpreadsheetsApp.getActiveSpreadsheet()的来源很迷失。我真的不知道SpreadsheetsApp或Sheets对象/库是什么,当我尝试在代码中使用它时似乎不存在
我对如何做到这一点完全迷失了,我尝试:
func writeData() {
let spreadsheetId = "1OAbhzY7RlfCEre-I5e-Kcgz16eHz2cGpO9HZKOiizCs"
let range = "A1:E"
let query = GTLRSheetsQuery_SpreadsheetsValuesGet.query(withSpreadsheetId: spreadsheetId, range:range)
var values = [[]]
var valueRange = query.newValueRange()
valueRange.values = values
var result = query.values.update(valueRange, spreadsheetId, range, {
valueInputOption: valueInputOption
})
}
Run Code Online (Sandbox Code Playgroud)
但是,正如预期的那样,由于查询没有newValueRange方法,values.update方法或类似的东西,我遇到了很多错误。
谁能帮我吗?我很迷路
这是使用GoogleAPIClientForREST您在原始问题中引用的库对您的问题的答案(不是使用AlamoFire不正确,但 Google Sheets API 将是更规范的方法):
func updateSheets() {
let range = "Sheet1!A3:C3" // Sheet titled "Sheet1", range A3 to C3
let updateValues = [["Foo", "Bar", "Baz"]]
let valueRange = GTLRSheets_ValueRange() // GTLRSheets_ValueRange holds the updated values and other params
valueRange.majorDimension = "ROWS" // Indicates horizontal row insert
valueRange.range = range
valueRange.values = updateValues
let query = GTLRSheetsQuery_SpreadsheetsValuesAppend.query(withObject: valueRange, spreadsheetId: kSpreadsheetID, range: range) // Use an append query to append at the first blank row
query.valueInputOption = "USER_ENTERED"
service.executeQuery(query) { ticket, object, error in
print("object")
} // `GTLRServiceCompletionHandler` closure containing the service ticket, `GTLRSheets_AppendValuesResponse`, and any error
}
Run Code Online (Sandbox Code Playgroud)
我设法弄清楚了。因此,为了写入 Google 表格,我需要一个 JSON PUT 请求(或 POST 请求),我使用 Alamofire 发送该请求。由于我之前已经在我的应用程序中配置了 Google Sign-In,因此只需弄清楚语法并应用我的授权令牌GIDSignIn.sharedInstance().currentUser.authentication.accessToken并将其用作 Alamofire JSON 请求中的标头即可。这是代码:
import GoogleSignIn
import GoogleAPIClientForREST
import Foundation
import Alamofire
class TestController: UIViewController {
private let scopes = [kGTLRAuthScopeSheetsSpreadsheets]
private let service = GTLRSheetsService()
override func viewDidLoad() {
super.viewDidLoad()
let sheetID = "1OAbhzY7RlfCEre-I5e-Kcgz16eHz2cGpO9HZKOiizCs"
let range = "A3:B4"
let requestParams = [
"values": [
["hi1", "hi2"],
["hi3", "hi4"]
]
]
let accessToken = GIDSignIn.sharedInstance().currentUser.authentication.accessToken!
let header = ["Authorization":"Bearer \(accessToken)"]
let requestURL = "https://sheets.googleapis.com/v4/spreadsheets/\(sheetID)/values/\(range)?valueInputOption=USER_ENTERED"
let req = Alamofire.request(requestURL, method: .put, parameters: requestParams, encoding: JSONEncoding.default, headers: header)
req.responseJSON { response in debugPrint(response) }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1801 次 |
| 最近记录: |