2011-01-08 12 views
10

Mam bazę danych zawierającą jedną tabelę, chcę wygenerować plik CSV z wartościami tej tabeli.Android - Wygeneruj plik CSV z wartości tabeli

Właściwie chcę przesłać ten plik CSV jako załącznik. Wiem o wysłaniu pliku jako załącznik w e-mailu intent(ACTION_SEND), ale nie znam procedury tworzenia ani metody, za pomocą której mogę utworzyć plik w formacie CSV.

Podaj mi sugestie lub pomysły.

Odpowiedz

32

Można użyć opencsv tego

pobrać bibliotekę stąd:

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

W ten sposób można znaleźć pliku jar.

Wewnątrz korzystania działalności to:

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

Mam odwiedził podany link, ale nie wiedziałem, jak to uwzględnić w mojej aplikacji na Androida. proszę dać mi znać, Thanx za szybką odpowiedź –

+0

Myślę, że masz na myśli, że powinienem dołączyć tę klasę CSVWriter, a następnie powinienem grać z tą klasą CSVWriter, czy tak jest? –

+0

@PM: tak, widzę, że zaktualizowałem moją odpowiedź: –

3

To wygląda naprawdę obiecująco. To zajmie dowolny obiekt Java i konwertować je do pliku CSV:

http://supercsv.sourceforge.net/

To również może być możliwe, aby pobrać dane z bazy danych w formacie CSV.

11

Może to być potrzebne helpfull.I ';' jako separator pomiędzy wartościami pola. Proszę użyć "," odpowiednio do generacji CSV.

Dzięki, 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

to działa, gdy ciąg zawiera przestrzeń? – PankajAndroid

1

Dodawanie do @ Cocos2dx odpowiedź:

Kiedy zapytań db może masz pola NULL, w moim przypadku mogę używać kontrolera do pobrania danych w obiekcie lista, ale jeśli nie, powinieneś sprawdzić puste lub puste wartości i poprawnie je sformatować (lub sprawić, że Twój stół będzie wyglądał dziwnie):

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


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

writer.writeNext(details); 
Powiązane problemy