10

ユーザーの電話のSDカードにあるWordファイルにアクセスできるようにしたいのですが、ファイルはユーザーが選択します。ファイルを処理できるようにしたいと考えています。つまり、ファイルの内容を読み取り、ユーザーが望むように変更し、ユーザーが [保存] をクリックしたときにファイルを保存します。</p>

Androidで可能ですか?ファイルが Word ファイルであることをプログラムに認識させるにはどうすればよいですか?

Word ファイルを表示したくないことに注意してください。ユーザーが Word ファイルを選択すると、アプリはそれに変更を加えて保存できるはずです。

4

6 に答える 6

2

私見の最も簡単な方法は、Apache POIライブラリを Android に移植することです。それは可能であり、その証拠があります

POI を移植すると、Word 編集機能をアプリケーションに組み込むことができます。

次のようなコードの一部:

Intent intent = new Intent(Intent.ACTION_EDIT); 
Uri uri = Uri.parse("file:///"+file.getAbsolutePath()); 
intent.setDataAndType(uri, "plain/text"); 
startActivity(intent);

単純に、Word ファイルが他のアプリケーションによって編集されることを意味します - あなたのものではありません。私が理解している限り、それはまさにあなたが望むものではありません。

于 2012-05-13T18:25:43.037 に答える
1

よくわかりませんが、拡張子を確認するだけで、ファイルがワード文書であることを確認できるようにする必要があることを理解しています。

Word文書にはファイル署名があると思います(このリンクを参照してください)

その場合、ファイル署名は、ヘッダー位置に次のバイナリを持つ OLE 複合ファイル形式です。

d0 cf 11 e0 a1 b1 1a e1

したがって、対応するバイトをチェックすると、それがワード文書であるかどうかがわかります。注意してください。バイナリが word、doc、docx に固有のものなのか、すべての Microsoft Office (powerpoint、excel、word) で利用できるのかはわかりません。

Web で「microsoft word document file signature」を検索する必要があります。これにより、あなたが探している情報が確実に得られます。

さて、それを「編集」する方法は別の問題です。

于 2012-05-14T12:35:24.587 に答える
1

だから、上に書いたように。Word ファイル (.doc) かどうかを確認する最も簡単な方法は、絶対パスを取得して確認することです。path.endsWith(".doc");

Android には .doc ファイルを表示するデフォルトのアプリはありませんが、ユーザーがそのようなアプリ (Polaris Office など) をインストールしている場合は、次の方法で表示できます。

//Uri uri = Uri.parse("file://"+file.getAbsolutePath());
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
String type = "application/msword";
intent.setDataAndType(Uri.fromFile(file), type);
startActivity(intent);  
于 2012-05-11T09:16:21.577 に答える
1

あなたの質問にはもう少し説明が必要です

とにかく、これはファイルを編集するためにすべきことです

  1. ファイルを読む

    File sdcard = Environment.getExternalStorageDirectory();
    File file = new File(sdcard,"theFILE");
    StringBuilder content = new StringBuilder();
    try {
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        while ((line = br.readLine()) != null) {
            content.append(line);
            content.append('\n');
        }
    }
    catch (IOException e) {
    }
    
  2. コンテンツを編集する

    content.append("bla bla");
    content.append("kaza maza");
    
  3. ファイルを保存する

    FileOutputStream f = new FileOutputStream(file);
    f.write(content.toString().toCharArray());
    

マニフェストに SD カードへの書き込み権限を忘れずに追加してください。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

検証

残念ながら、これが最も難しい部分です。Apache POIを選択できます。ただし、正しい動作を保証しない大規模なライブラリです。

完全な解決策は、MS-DOC 形式を確認することです。それは本当に大きな要件です。このような限られたアプリケーションの場合、Web を検索しても何も見つからないでしょう。したがって、この形式に従うリーダーを実装する必要があります。

于 2012-05-18T10:07:46.580 に答える
1

Word 文書の読み書き

Apache POIを Android に移植することは、工数の制約があるプロジェクトにとっておそらく唯一の現実的なソリューションです。これは他の人によって行われており、その方法については Web で入手できる情報がいくつかあります。次のブログには、Word ソリューションの出発点として利用できる Excel の例があります。

AndroidはApache POIを使用してExcelファイルを読み書きします

検証

Apache POI が最適なオプションである可能性が最も高いですが、Apache POI で開くドキュメントの一部は MS Word で開くことができないため、有効な MS Word ドキュメントではありません。

Word 形式の構造は非常に複雑です。これは単なるタグ付きのテキスト ストリームではありません。これは独自の形式であり、形式構造にアクセスせずに Word ファイルを完全に正確に検証することは不可能です。

最終的に、Word 文書を 100% 正確に検証できるのは、MS Word で開いた場合のみです。Microsoft Word MVP である Jay Freedmanとのこのディスカッションでは、検証の質問に対する視点と、Word 形式の構造についての洞察を提供します。

ネットでは、Apache POI を使用する場合、いくつかの誤検出が発生します。これが許容されるかどうかは、顧客の要件によって異なります。

于 2012-05-14T13:55:33.160 に答える