从存储在内存中的excel文件中读取数据

时间:2015-03-24 12:59:57

标签: android

您好我的目的是从移动设备外部存储器中的文件的某些单元格中读取数据,然后将它们放到几个文本字段中,用户可以修改它们。我已经导入了库jar apache POI,我没有做任何应用程序。在我的代码中,我通过检查外部存储器的状态来获取路径,获取根目录的路径并添加文件的名称。然后我创建了一个从行和单元格中读取数据的过程,它将作为参数进入,但不会对第二部分做出反应。

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R. layout.user); findViewById(R. id.Btsalir).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish();
        }
    });
    final Button borra = (Button) findViewById(R.id.btnborra);
    if (estadisponible()) {
        String rutafinal = File.separator + "documents" + File.separator + "Siniestros.xlsx";
        obtenruta(rutafinal);
        try {
            leerdato(rutafinal,4,2);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    else {
        Toast to = Toast.makeText(getApplicationContext(),"La memoria no esta disponible",Toast.LENGTH_LONG);

    };

}

public static boolean estadisponible(){
    String estado = Environment.getExternalStorageState();
    if (estado.equals(Environment.MEDIA_MOUNTED)) {
        return true;
    }
    else {return false;}
}
public  void obtenruta (String rutafinal ){
    File fichero = Environment.getExternalStorageDirectory();
    File ruta = new File (fichero.getAbsolutePath(),rutafinal);
    Toast r = Toast.makeText(getApplicationContext(),"ruta completa:" +ruta,Toast.LENGTH_LONG);
    r.show();

}

private void leerdato (String fichero, int fila, int celda) throws IOException {

    //instanciamos  el fichero pasado como argumento
    FileInputStream Fis = new FileInputStream(fichero);
    //instanciamos estructura de sistema de fichero
    POIFSFileSystem sistema = new POIFSFileSystem(Fis);
    //creamos un libro
    HSSFWorkbook libro = new HSSFWorkbook(sistema);
    //creamos hoja de un libro
    HSSFSheet hoja = libro.getSheetAt(0);
    HSSFRow mifila = hoja.createRow(fila);
    HSSFCell micelda = mifila.getCell(celda);
    String dato = micelda.getStringCellValue();
    Toast toa = Toast.makeText(getApplicationContext(), "la celda contiene :" + dato, Toast.LENGTH_LONG);
    toa.show();
}
}

任何人都可以有任何想法......我被锁定在这一部分。

1 个答案:

答案 0 :(得分:1)

您有一个调用leerdato(rutafinal,4,2)的IOException。 rutafinal是一种相对的路径。在obtenruta()中添加外部存储目录。你也应该在leerdato()中做到这一点。在logcat中查找FileNotFoundException。还要在leerdato()(或之前)中添加代码以检查文件是否存在。