2

私はアンドロイドが初めてです。私のアプリでは、.doc と .docx およびその他のオフィス スーツ ファイルを読み取る必要があります。彼らの存在に依存します。アプリで Intent を使わずに読みたいです。多くのコードを試しましたが、正しく動作しません。私のコードは、さまざまなモジュールを使用して以下に示すとおりです。どのような変更を行う必要がありますか、またはこのファイルを読み取る他の方法はありますか?

私のコードは次のとおりです。

/**
     *  Apache OPI Code.
     */
    if(Environment.getExternalStorageState().equalsIgnoreCase("y")){
        TextView tv = (TextView) findViewById(R.id.textview_data_rla);
        WordExtractor extractor = null;
        try {
           File file = new File(getExternalFilesDir(null),"n.doc");
           FileInputStream fis=new FileInputStream(file.getAbsolutePath());
           Log.d("File", fis.toString());
           HWPFDocument document=new HWPFDocument(fis);
           extractor = new WordExtractor(document);
           String[] fileData = extractor.getParagraphText();
           for(int i=0;i<fileData.length;i++){
             if(fileData[i] != null){
               tv.setText(fileData[i]);
               Log.d("file",fileData[i]);
             }
           }
        }
        catch(Exception exep){

        }
    }

    /**
     *  Using HWPFDocument.
     */

    try {
        TextView tv = (TextView) findViewById(R.id.textview_data_rla);

        File sdcard = Environment.getExternalStorageDirectory();
        File file = new File(sdcard,"n.doc");

        //InputStream fis = new FileInputStream(file);
        POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file));  
        HWPFDocument doc = new HWPFDocument(fs);  

        Range range = doc.getRange();  
        CharacterRun run = null;
        for (int i=0; i<range.numCharacterRuns(); i++) {  
            run = range.getCharacterRun(i);  
            Log.d("character  run",String.valueOf(i+1));
            Log.d("Text",run.text().toString());
        }
        tv.setText(run.text().toString());
        OutputStream out = new FileOutputStream(new File("/mnt/sdcard/new.doc"));
        doc.write(out);
        out.flush();
        out.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }  

    /**
     *  Apache POI using NPOIFSFileSystem.
     */
    File sdcard = Environment.getExternalStorageDirectory();
    File file = new File(sdcard,"n.doc");
    WordExtractor extractor1 = null;
    try{
        NPOIFSFileSystem fs = new NPOIFSFileSystem(file);
        extractor1 = new WordExtractor(fs.getRoot(), null);
    } catch (Exception e){
        e.printStackTrace();
    }

    for(String rawText : extractor1.getParagraphText()) {
    String text = WordExtractor.stripFields(rawText);
    Log.d("text",text);
    }

    /**
     *  Apache Tika code.
     */

    TikaConfig tika = TikaConfig.getDefaultConfig();
    TikaInputStream stream = TikaInputStream.get(file);
    ContentHandler handler = new BodyContentHandler();
    Metadata metadata = new Metadata();
    tika.getParser().parse(file, handler, metadata, new ParseContext());
    String text = handler.toString();


    /**
     *  Code using jOpenDocument.jar
     */

    final OpenDocument doc = new OpenDocument();
    doc.loadFrom("invoice.ods");

    // Show time !
    final JFrame f = new JFrame("Invoice Viewer");
    ODSViewerPanel viewer = new ODSViewerPanel(doc);
    f.setContentPane(viewer);
    f.pack();
    f.setVisible(true);
}

これは私が使用しなければならない正しい方法です。

できる限り早くご回答ください。前もって感謝します。

4

0 に答える 0