2011-09-26 70 views
1

我寫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打開文件。這花了大約一個小時的編碼,很好地解決了這個問題,所以我會考慮關閉問題。

+0

您是否嘗試過用引號保存每個單元格的CSV文件? 「09/19/2011」,「AP2」,「Home」,「GW Parkway」,「12:03 PM」,「12:41 PM」,「38」,「Dry」,「Day」 我希望你能解決問題。 – Richard

+0

感謝您的意見。我不記得那樣做,但我用完全不同的方式解決了我的問題 - 在我上次更新(2012年3月15日)後大約5個月,我將數據模型更改爲使用SQLite數據庫而不是CSV文本文件。我這樣做是因爲CSV文件上的操作太慢了。特別是,這將應用程序的初始設置時間從**分鐘**降低到了不明顯。副作用是我不再需要擁有自己的數據查看器,因爲有免費的應用程序可用於查看SQLite數據庫文件。 – Gdalya

回答

0

問題的至少一部分是文件格式。當我將「application/vnd.ms-excel」更改爲「text/plain」時,我可以在文本文件中打開數據。這並不理想,因爲閱讀比在電子表格中打開更難。

我會繼續尋找更好的答案。

更新(2011年10月9日):

最後,我更好的答案是「使用HTML表作爲一個變通」。原來,這是阻力最小的路徑。查看我更新的問題以獲取更長的解釋。

1

首先,您需要調試您的代碼並找出爲什麼文件沒有正確寫入SD卡(或者您只是在錯誤的位置尋找它?)。找到它後,安裝SD卡,並嘗試在Excel/Open/LibreOffice中打開以確保其格式正確。您可能希望使用CSV庫(如opencsv)來生成CSV文件。處理空間,轉義等可能會非常棘手,而且QuickOffice可能無法容忍格式錯誤的CSV。

Google Docs完全是另一回事,您需要使用用戶的Google帳戶進行身份驗證,然後使用GDocs API /客戶端庫上傳文件。