【问题标题】:Uploading a spreadsheet file on Google Drive in Swift在 Swift 中将电子表格文件上传到 Google Drive
【发布时间】:2016-06-02 20:57:24
【问题描述】:

我可以将 NSMutableString 字符串(以逗号分隔)作为 CSV 文件上传到 Swift 中的 Google Drive。但是,我想将其保存为 Google 电子表格。

显然,当您使用 queryForFilesInsertWithObject 方法时,它们在 Objective-C 中具有“转换”属性。但是,我找不到这个的 Swift 版本。我这样创建了我的查询:

让查询 = GTLQueryDrive.queryForFilesCreateWithObject(metadata, uploadParameters: uploadParameters)

由于没有q.convert属性,我尝试了以下两种说法:

query.q = "convert=true"
query.q = "convert=YES"

但是,它们都不起作用。

我也尝试将 mimeType 设置为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 和 application/vnd.google-apps.spreadsheet,但它们也没有帮助。

我的代码如下:

let data = NSMutableString()
var i = 0
repeat {
       data.appendString("\(measures[i]), \(SegmentedControlChoiceValues[i])\n")
       i += 1
} while i < measures.count
let dataAsString = data as String

let metadata = GTLDriveFile()
metadata.mimeType = "text/csv"
metadata.name = "Subject01.bar"

let dataToUpload = dataAsString.dataUsingEncoding(NSUTF8StringEncoding)
let uploadParameters = GTLUploadParameters(data: dataToUpload!, MIMEType: metadata.mimeType)
let query = GTLQueryDrive.queryForFilesCreateWithObject(metadata, uploadParameters: uploadParameters)

query.q = "convert=true"

Constants.service.executeQuery(query, completionHandler:  { (ticket, insertedFile , error) -> Void in

     if error == nil {
        print("File Saved: " + metadata.name)
        success(createdFileID: insertedFile.identifier)
     } else {
        print("An error occurred" + error.description)
        success(createdFileID: "")
     }
})

我将不胜感激。

【问题讨论】:

    标签: ios swift csv google-sheets google-drive-api


    【解决方案1】:

    您需要先上传文件,Drive API 中的文件由 GTLDriveFile 类表示。文件的内容必须单独获取或上传。

    您需要将其转换为可移植格式。创建新文件时,您可以使用GTLDriveFile 指定初始元数据,并使用 GTLUploadParameters 指定内容。将convert property to yes 设置为GTLQueryDrive

    尝试使用此代码上传文件并将其转换为电子表格:

    GTLUploadParameters *uploadParameters = nil; self.driveFile = [[GTLDriveFile alloc]init];

    NSData *dat = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:root]];
    uploadParameters =
    [GTLUploadParameters uploadParametersWithData:dat MIMEType:@"text/csv"];
    
    self.driveFile.title = @"Report.csv";
    GTLQueryDrive *query = nil;
    if (self.driveFile.identifier == nil || self.driveFile.identifier.length == 0)
    {
        query = [GTLQueryDrive queryForFilesInsertWithObject:self.driveFile
                                            uploadParameters:uploadParameters];
    
        query.convert = YES;   // Convert file format to spread sheet
    
    }
    else
    {
        query = [GTLQueryDrive queryForFilesUpdateWithObject:self.driveFile
                                                      fileId:self.driveFile.identifier
                                            uploadParameters:uploadParameters];
    }
    UIAlertView *alert = [DrEditUtilities showLoadingMessageWithTitle:@"While data is uploading..."
                                                             delegate:self];
    
    [self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
                                                              GTLDriveFile *updatedFile,
                                                              NSError *error)
     {
        appDel.File_Id = updatedFile.identifier;
        [alert dismissWithClickedButtonIndex:0 animated:YES];
        if (error == nil)
        {
            self.driveFile = updatedFile;
    
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Feel Fix" message:@"Successfully Uploaded" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
            [alert show];
        }
        else
        {
            NSLog(@"An error occurred: %@", error);
            [DrEditUtilities showErrorMessageWithTitle:@"Unable to save file"
                                               message:[error description]
                                              delegate:self];
        }
    }];
    

    更多信息请查看Google Drive API IOS官方谷歌文档:https://developers.google.com/drive/ios/reference/ios-client/interface_g_t_l_upload_parameters#properties

    【讨论】:

      猜你喜欢
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      相关资源
      最近更新 更多