2017-10-03 10 views
0

私はAndroidで新しいです。私はアンドロイドアプリケーションで.xlsxファイルの内容を読み込もうとしています。.xlsxファイルの内容を読むandroid

デバイスの内部ストレージまたは外部ストレージからファイルをピックアップしているか、クラウドからいつかです。

これを達成する方法がわかりません。ファイルパス

public class MainActivity extends Activity { 
EditText output; 
Button btn_p; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    output = (EditText) findViewById(R.id.textOut); 

    btn_p = (Button) findViewById(R.id.btn_p); 

    btn_p.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
      intent.setType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
      startActivityForResult(intent, 7); 
     } 
    });} @Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 

    switch(requestCode){ 

     case 7: 

      if(resultCode==RESULT_OK) 
      { 

       String PathHolder = data.getData().getPath(); 

       Toast.makeText(MainActivity.this, PathHolder , Toast.LENGTH_LONG).show(); 

       onReadClick(PathHolder); 

      } 
      break; 

    } 
} 

public void onReadClick(String filepath) 
{ 
    printlnToUser("reading XLSX file from resources"); 

    File inputfile=new File(filepath);/*line to be commented*/ 

    //below line should uncomment 
    //InputStream stream = getResources().openRawResource(R.raw.test); 

    try 
    { 

     InputStream stream=new FileInputStream(inputfile);/*line to be commented*/ 

     XSSFWorkbook workbook = new XSSFWorkbook(stream); 

     XSSFSheet sheet = workbook.getSheetAt(0); 
     int rowsCount = sheet.getPhysicalNumberOfRows(); 
     FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator(); 
     for (int r = 0; r<rowsCount; r++) { 
      Row row = sheet.getRow(r); 
      int cellsCount = row.getPhysicalNumberOfCells(); 
      for (int c = 0; c<cellsCount; c++) { 
       String value = getCellAsString(row, c, formulaEvaluator); 
       String cellInfo = "r:"+r+"; c:"+c+"; v:"+value; 
       printlnToUser(cellInfo); 
      } 
     } 
    } catch (Exception e) 
    { 
     /* proper exception handling to be here */ 
     printlnToUser(e.toString()); 
    } 
} 



protected String getCellAsString(Row row, int c, FormulaEvaluator formulaEvaluator) { 
    String value = ""; 
    try { 
     Cell cell = row.getCell(c); 
     CellValue cellValue = formulaEvaluator.evaluate(cell); 
     switch (cellValue.getCellType()) { 
      case Cell.CELL_TYPE_BOOLEAN: 
       value = ""+cellValue.getBooleanValue(); 
       break; 
      case Cell.CELL_TYPE_NUMERIC: 
       double numericValue = cellValue.getNumberValue(); 
       if(HSSFDateUtil.isCellDateFormatted(cell)) { 
        double date = cellValue.getNumberValue(); 
        SimpleDateFormat formatter = 
          new SimpleDateFormat("dd/MM/yyyy"); 
        value = formatter.format(HSSFDateUtil.getJavaDate(date)); 
       } else { 
        value = ""+numericValue; 
       } 
       break; 
      case Cell.CELL_TYPE_STRING: 
       value = ""+cellValue.getStringValue(); 
       break; 
      default: 
     } 
    } catch (NullPointerException e) { 
     /* proper error handling should be here */ 
     printlnToUser(e.toString()); 
    } 
    return value; 
} 

/** 
* print line to the output TextView 
* @param str 
*/ 
private void printlnToUser(String str) { 
    final String string = str; 
    if (output.length()>8000) { 
     CharSequence fullOutput = output.getText(); 
     fullOutput = fullOutput.subSequence(5000,fullOutput.length()); 
     output.setText(fullOutput); 
     output.setSelection(fullOutput.length()); 
    } 
    output.append(string+"\n"); 
} } 

それが例外を見つけていないファイルを表示を使用しようとしたときにコードの下

私は正常に動作します

InputStream stream = getResources().openRawResource(R.raw.test);

から読み取ろうとしました。.. it..butを読むことができました。このコードを使用して

+0

使用ContentResolverのためthis..thanksを解決することができる)。ある、getPath()'パスないファイルへ – Selvin

+0

方法缶私はパスを取得? – Navas

+1

何のため?あなたはストリームが必要です... ContentProviderのドキュメントには常にパスがありません... ContentResolverを使用してuriからストリームを開きます... – Selvin

答えて

0

Uri uri = data.getData(); InputStream stream = getContentResolver().openInputStream(uri); XSSFWorkbook workbook = new XSSFWorkbook(stream);

私は明らか `data.getData(AS Selvin

関連する問題