将逗号分隔值(csv)的字符串加载到Quickoffice或Google Doc

时间:2011-09-26 01:31:53

标签: android excel csv quickoffice

我正在编写一个Android应用程序,它将数据收集为逗号分隔值的字符串(用'\ n'终止每一行),然后每月向我发送一次数据。

我的一位测试人员告诉我,他希望能够在上传之间查看中间数据。 (我认为)执行此操作的自然方式是将数据加载到“类似excel”的应用程序(例如QuickOffice或google doc的查看器)。我尝试将String写入文件,然后将其加载到QuickOffice中。我可以启动QuickOffice,但文件出现空白。另外,当我在SD卡上查找文件时,我找不到它。

我的代码:

File root = Environment.getExternalStorageDirectory();
try
{
    BufferedWriter out = new BufferedWriter(new FileWriter(root.toString() + "/ww.csv"));
    out.write(getPreferences(MODE_PRIVATE).getString("allTrips", ""));
    out.flush();  // Probably not necessary
    out.close();
}
catch (IOException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Intent i1 = new Intent(android.content.Intent.ACTION_VIEW);
Uri data = Uri.fromFile(new File(root.toString() + "/ww.csv"));
i1.setDataAndType(data, "application/vnd.ms-excel");
startActivity(i1);

请让我知道我做错了什么。我愿意对上面的代码进行小的调整,以及完成工作的完全不同的方法。

在你提问之前,我记得要添加

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

到我的清单。

另外,我很乐意写入内部文件系统而不是SD卡(我的数据很小)但我甚至无法打开QuickOffice。

数据的一个例子:

09/19/2011,AP2,Home,GW Parkway,12:03 PM,12:41 PM,38,Dry,Day
09/20/2011,Home,AP2,MacArthur Blvd,7:18 AM,8:32 AM,74,Rain,Day
09/20/2011,AP2,Home,Rock Creek Pkwy (Blagden),4:51 PM,5:45 PM,54,Dry,Day
09/21/2011,Home,AP2,Rte 295,6:44 AM,7:36 AM,52,Rain,Day

感谢。

更新(2011年10月9日):

有时在编写代码时,您需要退后一步,重新考虑您要完成的任务。我想要做的就是重新格式化我的临时数据,并为用户创建一个易于阅读的表,可以看到每月上传之间的数据。我最简单的方法是将我的.csv文件加载到电子表格中。 Nikolay建议使用外部库来确保我的文件格式正确可能有效,但我试图让这个应用程序尽可能精简,所以我想避免不必要地使用(并学习使用)外部库。所以,我的最终解决方案是使用html格式将更大的文件写入SD卡,然后以text / html而不是text / plain或application / vnd.ms-excel打开文件。这花费了大约一个小时的编码并很好地解决了这个问题,所以我将考虑关闭问题。

2 个答案:

答案 0 :(得分:1)

首先,您需要调试代码并弄清楚为什么文件没有正确写入SD卡(或者您只是在错误的地方寻找它?)。找到后,安装SD卡,并尝试在Excel / Open / LibreOffice中打开以确保其格式正确。您可能希望使用CSV库(例如opencsv)来生成CSV文件。处理空间,逃逸等可能会非常棘手,QuickOffice可能无法容忍格式错误的CSV。

Google Docs完全是另一回事,您需要使用用户的Google帐户进行身份验证,并使用GDocs API /客户端库上传文件。

答案 1 :(得分:0)

至少部分问题是文件格式。当我将“application / vnd.ms-excel”更改为“text / plain”时,我可以在文本文件中打开数据。这不太理想,因为它比在电子表格中打开更难阅读。

我会继续寻找更好的答案。

更新(2011年10月9日):

最后,我更好的答案是“使用HTML表作为解决方法”。事实证明这是阻力最小的道路。有关更长的解释,请参阅我的更新问题。