【问题标题】:How to create a Google Drive Spreadsheet using Google Drive Android Api如何使用 Google Drive Android Api 创建 Google Drive 电子表格
【发布时间】:2014-07-21 22:12:27
【问题描述】:

我正在创建一个应用程序,用户可以在其中从列表视图中选择项目,并且我想发送该数据并创建一个包含该数据的新 Google Drive 电子表格。这是我第一次使用 API,我真的不知道自己在做什么。我已经按照他们在 GitHub 上的演示教程进行操作,并且能够创建屏幕,用户可以在其中选择驱动器中的文件夹来发送数据,但我不知道如何准确发送数据。在这个方法中:

final ResultCallback<ContentsResult> contentsCallback = new ResultCallback<ContentsResult>() {
        @Override
        public void onResult(ContentsResult result) {
            MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder()
                    .setMimeType("text/html").build();
            IntentSender intentSender = Drive.DriveApi
                    .newCreateFileActivityBuilder()
                    .setInitialMetadata(metadataChangeSet)
                    .setInitialContents(result.getContents())
                    .build(getGoogleApiClient());
            try {
                startIntentSenderForResult(
                        intentSender, REQUEST_CODE_CREATOR, null, 0, 0, 0);
            } catch (SendIntentException e) {
                Log.w(TAG, "Unable to send intent", e);
            }
        }
    };

我是否已将元数据设置为要发送的数据?我基本上希望能够访问电子表格的某些工作表以及行和列,但我还没有找到一种方法来做到这一点。我真的很困惑。非常感谢任何帮助。

【问题讨论】:

    标签: android google-spreadsheet-api google-drive-android-api


    【解决方案1】:

    Google Drive Android API 对电子表格、图像、文本等一无所知...它处理具有元数据的对象,这些元数据指定对象(文件、文件夹)从外部“看起来”的内容。元数据指定其标题、描述、星标状态、所有权、与父母的关系等...... 它还有内容,您可以将其作为 byte[] 缓冲区写入或读取。如果您编写电子表格、jpeg 图像或其他任何内容,API 对此一无所知。

    这里是一些 sn-p 的代码来帮助('await' 风格看起来很简单):

    GoogleApiClient _gac;
    ...
    // parentEID - parent Encoded DriveID ("root" for root, "appfolder" for appfolder)
    // name - file name
    // mime - mime type
    // buf - data to write 
    void create(String parentEID, String name, String mime, byte[] buf) {
      try {
        DriveFolder pFld = getFldr(pEID);
        if (pFld != null) {
          MetadataChangeSet.Builder bldr = 
                                   new MetadataChangeSet.Builder().setTitle(name).setMimeType(mime);
          MetadataChangeSet meta = bldr.build();
          ContentsResult ctR0 = Drive.DriveApi.newContents(_gac).await();
          if ((ctR0 != null) && (ctR0.getStatus().isSuccess())) {
            DriveFileResult dfRt = pFld.createFile(_gac, meta, ctR0.getContents()).await();
            DriveFile dFil = (dfRt != null) && dfRt.getStatus().isSuccess() ? 
                                                                dfRt.getDriveFile() : null;
            if (dFil != null) {
              ContentsResult ctR1 = dFil.openContents(_gac, DriveFile.MODE_WRITE_ONLY, null)
                                                                                      .await();
               if ((ctR1 != null ) && (ctR1.getStatus().isSuccess())) {
                 ctR1.getContents().getOutputStream().write(buf);
                 Status stts = dFil.commitAndCloseContents(_gac, ctR1.getContents()).await();
                 if ((stts != null) && stts.isSuccess()) {
                   MetadataResult mdRt = dFil.getMetadata(_gac).await();
                   if ((mdRt != null) && mdRt.getStatus().isSuccess())
                     Metadata md = mdRt.getMetadata();
                 }
               }
            }
          }
        }
      } catch (Exception e) {}
    }
    // eid - Endoded ID produced by DriveId..encodeToString() 
    DriveFolder getFldr(String eid) {
      DriveFolder dFld = null;
      if (eid != null ) try {
        if (eid.equals("root")) {
          dFld = Drive.DriveApi.getRootFolder(_gac);
        } else if (eid.equals("appfolder")) {
          dFld = Drive.DriveApi.getAppFolder(_gac);
        } else {  
          dFld = Drive.DriveApi.getFolder(_gac, DriveId.decodeFromString(eid)) ;
        }
      } catch (Exception e) {}   
      return dFld;
    }
    

    因此,您调用此方法,指定它的去向(父 ID)、文件名、它的 mime 类型和二进制内容。该文件将显示在 Google Drive 中(如果您通过了授权挑战 - 但这是另一回事)。顺便说一句,我假设你在谈论一个 Android 应用程序,对吧? 祝你好运

    【讨论】:

    • 是的,我说的是安卓。如何指定数据进入哪些行/列?
    • 正如我所说,您可以将整个对象(电子表格)从您的应用程序复制到 Google Drive。上面的 'byte[] buf' 变量将包含电子表格。 Google Drive Android API 不处理电子表格的细节,如行/列。见developers.google.com/drive/android/get-started
    • 好吧,你的意思是我可以在byte[] buf变量中设置电子表格数据,但是没有办法处理电子表格的细节?所以我无法将数据放入特定的行/列?
    • 在 Android (developers.google.com/google-apps/spreadsheets) 上可能有一种处理电子表格的方法,但它与 Google Drive API 无关。此 API 仅处理 Drive 对象的创建和操作。我试图帮助解决云端硬盘上传问题,但对电子表格 API 一无所知。
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 2012-12-16
    • 2021-08-22
    • 2015-07-22
    • 2012-09-27
    • 2012-09-05
    相关资源
    最近更新 更多