【问题标题】:How do I read Google Sheet content via Android's Drive API?如何通过 Android 的 Drive API 阅读 Google 表格内容?
【发布时间】:2016-08-09 03:39:01
【问题描述】:

我目前正在开发一个应用程序,用户可以在该应用程序中从他们的 Google 云端硬盘中选择一个 Google 表格文件 (.xlxs)。然后,我的应用程序将提取并处理该工作表的某些内容。

我正在使用为 Android 开发的 Google Drive API,并使用来自 Google Drive Android Demos 的示例类

到目前为止,我已经实现了一个显示用户云端硬盘文件的云端硬盘文件选择器。选择一个文件会返回该文件的 ID。


第一个问题是我似乎无法设置 mime 类型,因此只能选择 xlsl 文件。谷歌搜索告诉我

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

是正确的 mime 类型。

我在这种情况下使用它

IntentSender intentSender = Drive.DriveApi
            .newOpenFileActivityBuilder()
            .setMimeType(new String[]{"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})
            .build(getGoogleApiClient());

我以前没有遇到过 mime 类型,但是“text/plain”作为 meme 类型似乎很有效,并且它们可以在相同的 mime 类型列表中找到..

第二个问题基本上是关于我应该如何从工作表中的某些列和行中提取字符串。

这是处理所选文件内容的代码(当然可以修改,就是不知道怎么修改)。

protected String doInBackgroundConnected(DriveId... params) {
        String contents = null;
        DriveFile file = params[0].asDriveFile();
        DriveContentsResult driveContentsResult =
                file.open(getGoogleApiClient(), DriveFile.MODE_READ_ONLY, null).await();
        if (!driveContentsResult.getStatus().isSuccess()) {
            return null;
        }
        DriveContents driveContents = driveContentsResult.getDriveContents();
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(driveContents.getInputStream()));
        StringBuilder builder = new StringBuilder();
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
            contents = builder.toString();
        } catch (IOException e) {
            Log.e(TAG, "IOException while reading from the stream", e);
        }

        driveContents.discard(getGoogleApiClient());
        return contents;
    }

【问题讨论】:

    标签: java android google-drive-api


    【解决方案1】:

    所以我用谷歌搜索并环顾了社区一段时间,并有以下建议来解决您的问题:

    第一个问题

    既然您只是想编辑表格,为什么不直接使用 setSelectionFilter 呢?它将选择器上显示的文件限制为指定的文件类型。

    对于第二个问题:

    我认为,为了使用(更新)Google 表格,您需要使用 Sheets API,就像 answer on a similar post 一样:

    “Google 电子表格 API 允许在电子表格中进行复杂的操作,例如按行和列访问数据。”

    【讨论】:

    • 哇,真不敢相信我没有找到 Sheets Api!我只用谷歌搜索与 xlsx 文件相关的东西,似乎图书馆是唯一的选择。
    • 关于问题一。这两种方法有什么区别?无论哪种方式,我似乎都找不到关于 Filter 对象如何工作的信息,或者我如何让它过滤掉 Excel 文件。您对此了解更多吗?
    • 我什至设法通过 MimeTypeMap.getSingleton().getMimeTypeFromExtension("xlsx") 打印出 mime 类型。结果:“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”。插上它。仍然不起作用。什么鬼?
    • 好吧,显然 xlsx 文件的实际 mime 类型“一般”不一样(我猜?)。 Mime 类型 application/vnd.google-apps.spreadsheet 现在正在为我工​​作。案件结案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    相关资源
    最近更新 更多