我寫Android應用收集的數據作爲逗號分隔值的字符串(終止與「\ n」各行),然後電子郵件我每月一次數據。負載字符串(CSV)進入的Quickoffice或谷歌文件
我的一個測試人員已經告訴我,他希望能夠上傳之間查看中間的數據。做到這一點的自然方式(在我看來)是將數據加載到「類似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卡,然後以文本/ html而不是text/plain或application/vnd.ms-excel打開文件。這花了大約一個小時的編碼,很好地解決了這個問題,所以我會考慮關閉問題。
您是否嘗試過用引號保存每個單元格的CSV文件? 「09/19/2011」,「AP2」,「Home」,「GW Parkway」,「12:03 PM」,「12:41 PM」,「38」,「Dry」,「Day」 我希望你能解決問題。 – Richard
感謝您的意見。我不記得那樣做,但我用完全不同的方式解決了我的問題 - 在我上次更新(2012年3月15日)後大約5個月,我將數據模型更改爲使用SQLite數據庫而不是CSV文本文件。我這樣做是因爲CSV文件上的操作太慢了。特別是,這將應用程序的初始設置時間從**分鐘**降低到了不明顯。副作用是我不再需要擁有自己的數據查看器,因爲有免費的應用程序可用於查看SQLite數據庫文件。 – Gdalya