我正在编写一个 Android 应用程序,它以逗号分隔值的字符串形式收集数据(每行以“\n”结尾),然后每月通过电子邮件将数据发送给我一次。
我的一位测试人员告诉我,他希望能够查看上传之间的中间数据。执行此操作的自然方法(在我看来)是将数据加载到“类似 excel”的应用程序(例如 QuickOffice 或 google doc 的查看器)。我尝试将字符串写入文件,然后将其加载到 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"/>
到我的 list 。
此外,我很乐意写入内部文件系统而不是 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 打开文件。这花了大约一个小时的编码时间并很好地解决了问题,所以我打算考虑关闭该问题。
最佳答案
首先,您需要调试您的代码并找出文件没有正确写入 SD 卡的原因(或者您可能只是在错误的地方寻找它?)。找到后,挂载SD卡,尝试用Excel/Open/LibreOffice打开,确保格式正确。您可能想要使用 CSV 库(例如 opencsv)来生成 CSV 文件。处理空格、转义等可能很棘手,而且 QuickOffice 可能无法容忍格式错误的 CSV。
Google Docs 完全是另一回事,您需要使用用户的 Google 帐户进行身份验证,并使用 GDocs API/客户端库上传文件。
关于android - 将逗号分隔值字符串 (csv) 加载到 Quickoffice 或 Google Doc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549857/