2011-01-08 6 views
10

Tengo una base de datos que contiene una tabla, quiero generar el archivo CSV con los valores de esta tabla.Android - Generar archivo CSV de la mesa valora

En realidad, quiero envía este archivo CSV como archivo adjunto. Sé acerca de enviar archivos como datos adjuntos en el correo electrónico intent(ACTION_SEND), pero no sé el procedimiento de creación o el método por el cual puedo crear archivos con formato CSV.

Por favor, dame sugerencias o ideas.

Respuesta

32

Se puede utilizar para este opencsv

Descargar la biblioteca de aquí:

http://sourceforge.net/projects/opencsv/

En este se puede encontrar el archivo jar.

Dentro de su utilización actividad de esto:

CSVWriter writer = null; 
try 
{ 
    writer = new CSVWriter(new FileWriter("/sdcard/myfile.csv"), ','); 
    String[] entries = "first#second#third".split("#"); // array of your values 
    writer.writeNext(entries); 
    writer.close(); 
} 
catch (IOException e) 
{ 
    //error 
} 
+0

i have visité el enlace que me proporcionó, pero no llegué a saber cómo incluirlo en mi aplicación de Android. por favor, hágamelo saber, gracias por su rápida respuesta –

+0

creo que quiere decir que debería incluir esta clase CSVWriter y luego debería jugar con esta clase CSVWriter, ¿verdad? –

+0

@PM: sí, veo que he actualizado mi respuesta –

3

Esto se ve muy prometedor. Se llevará a cualquier objeto Java y convertirlo en un archivo CSV:

http://supercsv.sourceforge.net/

También podría ser posible recuperar los datos de la base de datos en formato CSV.

11

Esto podría ser necesario helpfull.I ';' como separador entre los valores del campo. Utilice ',' en consecuencia para la generación de CSV.

Gracias, Darshan

private void exportTheDB() throws IOException 
{ 
     File myFile; 
    Calendar cal = Calendar.getInstance(); 
    SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy"); 
    String TimeStampDB = sdf.format(cal.getTime()); 

    try { 

     myFile = new File(extStorageDirectory+"/Export_"+TimeStampDB+".csv"); 
     myFile.createNewFile(); 
     FileOutputStream fOut = new FileOutputStream(myFile); 
     OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); 
     myOutWriter.append("Start time;End time;Elapse;Sports type"); 
     myOutWriter.append("\n"); 
     sampleDB = this.openOrCreateDatabase(DB_NAME,MODE_PRIVATE, null); 

     Cursor c = sampleDB.rawQuery("SELECT * FROM Sport_Records ", null); 

     if (c != null) { 
      if (c.moveToFirst()) { 
       do { 


        String start_Time = c.getString(c.getColumnIndex("startTimeDate")); 
        String end_Time = c.getString(c.getColumnIndex("endTimeDate")); 
        String elapse_Time = calculateTimeDifferece(end_Time, start_Time); 
        String sport_Name = c.getString(c.getColumnIndex("label")); 

        myOutWriter.append(start_Time+";"+end_Time+";"+elapse_Time+";"+sport_Name); 
        myOutWriter.append("\n"); 
       } 

       while (c.moveToNext()); 
      } 

      c.close(); 
      myOutWriter.close(); 
      fOut.close(); 

     } 
    } catch (SQLiteException se) 
    { 
     Log.e(getClass().getSimpleName(),"Could not create or Open the database"); 
    } 

    finally { 

     sampleDB.close(); 

    } 






} 
+0

funciona cuando la cadena contiene espacio ?? – PankajAndroid

1

Agregando a @ Cocos2dx respuesta:

Cuando se consultan desde db es posible que tenga campos nulos, en mi caso yo uso un controlador para recuperar los datos de un objeto lista, pero si no lo hace debe verificar los valores nulos o vacíos y formatearlos (o pueden hacer que su tabla se vea rara):

String[] details = { 
     replaceNull(someObject.getId()), 
     replaceNull(someObject.getName()) 
}; 


public static String replaceNull(String input) { 
    return ((input == null || input.isEmpty()) ? " " : input); 
} 

writer.writeNext(details); 
Cuestiones relacionadas