将逗号分隔值(csv)的string加载到Quickoffice或Google文档中

我正在编写一个Android应用程序,以逗号分隔值(以\ n结尾每行)收集数据,然后每月向我发送一次数据。

我的一个betatesting人员告诉我,他希望能够查看上传之间的中间数据。 自然而然的做法(在我看来)是将数据加载到“类似excel”的应用程序(例如QuickOffice或Google文档的查看器)。 我试图写出一个文件的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文件加载到电子表格中。 Nikolaybuild议使用外部库来确保我的文件格式正确,但是我试图保持这个应用程序尽可能的精简,所以我想避免不必要地使用(和学习使用)外部库。 所以,我的最终解决scheme是使用html格式将一个稍大的文件写入SD卡,然后以文本/ html而不是text / plain或application / vnd.ms-excel打开文件。 这花了大约一个小时的编码,很好地解决了这个问题,所以我会考虑closures的问题。

首先,你需要debugging你的代码,并找出为什么文件没有正确写入到SD卡(或者你只是在错误的地方寻找它?)。 find之后,安装SD卡,并尝试在Excel / Open / LibreOffice中打开以确保其格式正确。 您可能需要使用CSV库(如opencsv)来生成CSV文件。 处理空格,转义等可能会非常棘手,而QuickOffice可能不允许格式错误的CSV。

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

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

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

更新(2011年10月9日):

最后,我的更好的答案是“使用HTML表格作为解决scheme”。 原来是阻力最小的path。 看到我更新的问题有更长的解释。