1

コンマ区切り値の文字列としてデータを収集し(各行を「\ 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 時間かかり、問題はうまく解決したので、問題は解決したと考えます。

4

2 に答える 2

1

まず、コードをデバッグして、ファイルが SD カードに正しく書き込まれない理由を突き止める必要があります (または、間違った場所でファイルを探しているだけなのでしょうか?)。見つかったら、SD カードをマウントし、Excel/Open/LibreOffice で開いてみて、正しくフォーマットされていることを確認します。opencsv などの CSV ライブラリを使用して、CSV ファイルを生成することができます。スペースやエスケープなどの処理は難しい場合があり、QuickOffice は不正な形式の CSV を許容できない場合があります。

Google ドキュメントはまったく別の問題です。ユーザーの Google アカウントで認証し、GDocs API/クライアント ライブラリを使用してファイルをアップロードする必要があります。

于 2011-09-26T01:41:56.070 に答える
0

問題の少なくとも一部はファイル形式です。「application/vnd.ms-excel」を「text/plain」に変更すると、データをテキスト ファイルで開くことができます。スプレッドシートで開いた場合よりも読みにくいため、これは理想的とは言えません。

より良い答えを探し続けます。

更新 (2011 年 10 月 9 日):

最終的に、私のより良い答えは「回避策として HTML テーブルを使用する」でした。それが最も抵抗の少ない道であることが判明しました。より長い説明については、私の更新された質問を参照してください。

于 2011-09-28T00:45:58.200 に答える