我正在编写一个Android应用程序,它以逗号分隔的值来收集数据(用‘\n’结束每一行),然后每个月给我发一封电子邮件。
我的一个测试版测试员告诉我,他希望能够查看上传之间的中间数据。这样做的自然方法(在我看来)是将数据加载到一个类似于excel的应用程序中(比如QuickOffice或google的查看器)。我尝试将字符串写入文件,然后将其加载到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/平原或application/vnd.ms-excel的形式打开该文件。这花费了大约一个小时的编码时间,并且很好地解决了这个问题,所以我将考虑这个问题已经解决了。
发布于 2011-09-28 00:45:58
至少部分问题是文件格式。当我将"application/vnd.ms-excel“更改为”text /平原“时,我可以打开文本文件中的数据。这并不理想,因为它比在电子表格中打开更难阅读。
我会继续寻找更好的答案。
更新(2011年10月9日):
最后,我更好的回答是“使用HTML表作为一个工作”。事实证明,这是阻力最小的道路。请参阅我最新的问题,以获得更长的解释。
发布于 2011-09-26 01:41:56
首先,您需要调试代码并找出为什么文件没有正确地写入SD卡(或者您只是在错误的地方查找它?)。找到它之后,挂载SD卡,然后尝试在Excel/ open /LibreOffice中打开,以确保它的格式正确。您可能需要使用CSV库(如opencsv )来生成CSV文件。处理空间,逃避等,可能是棘手的,QuickOffice可能不能容忍畸形的CSV。
Google是另一回事,您需要使用用户的Google进行身份验证,并使用GDocs API/客户端库上传文件。
https://stackoverflow.com/questions/7549857
复制相似问题