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);
使用ContentResolverのためthis..thanksを解決することができる)。ある、getPath()'パスないファイルへ – Selvin
方法缶私はパスを取得? – Navas
何のため?あなたはストリームが必要です... ContentProviderのドキュメントには常にパスがありません... ContentResolverを使用してuriからストリームを開きます... – Selvin