コンマ区切り値の文字列としてデータを収集し(各行を「\ n」で終了)、月に1回データをメールで送信するAndroidアプリを作成しています。
ベータ テスターの 1 人から、アップロード間の中間データを表示できるようにしたいとの連絡がありました。これを行う自然な方法 (私の考えでは) は、データを「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 ファイルをスプレッドシートに読み込むことです。私のファイルが適切にフォーマットされていることを確認するために外部ライブラリを使用するという Nikolay の提案はうまくいったかもしれませんが、私はこのアプリをできるだけ無駄のないものにしようとしているので、不必要に外部ライブラリを使用 (および使用方法の学習) を避けたいと考えています。したがって、私の最終的な解決策は、html 形式を使用して少し大きなファイルを SD カードに書き込み、そのファイルを text/plain または application/vnd.ms-excel ではなく text/html として開くことでした。コーディングには約 1 時間かかり、問題はうまく解決したので、問題は解決したと考えます。