Android - Generate CSV file from table values

后端 未结 5 845
半阙折子戏
半阙折子戏 2020-12-01 04:47

I have a database containing one table, i want to generate CSV file with values of this table.

Actually, I want to email this CSV file as an attachment. I know about

相关标签:
5条回答
  • 2020-12-01 05:19

    You can use opencsv for this

    Download the library from here:

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

    In this you can find jar file.

    Inside your activity use this:

    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 讨论(0)
  • 2020-12-01 05:21

    Adding to @Cocos2dx answer:

    When querying from db you may have null fields, in my case i use a Controller to fetch the data in an object list, but either if you don`t you should check for null or empty values and proper format them (or they can make your table look weird):

    String[] details = { 
            replaceNull(someObject.getId()),
            replaceNull(someObject.getName())
    };
    
    
    public static String replaceNull(String input) {
        return ((input == null || input.isEmpty()) ? " " : input);
    }
    
    writer.writeNext(details);
    
    0 讨论(0)
  • 2020-12-01 05:29

    In case of using Kotlin, I recommend kotlin-csv library.

    Just get the list of DB table objects, go through all of them and add the column values to CSV rows, one by one, like this:

    csvWriter().open(csvFile) {
        // Header
        writeRow(listOf("[id]", "[name]", "[age]"))
    
        peopleList.forEachIndexed { index, person ->
            writeRow(listOf(index, person.fullName, person.age))
        }
    }
    

    I explain the whole process of creating csv file here.

    0 讨论(0)
  • 2020-12-01 05:32

    THis might be helpfull.I needed ';' as seperator in between the feild values. Please use ',' accordingly for CSV generation.

    Thanks, 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 讨论(0)
  • 2020-12-01 05:34

    This looks really promising. It will take any Java object and convert it to a CSV file:

    http://supercsv.sourceforge.net/

    It also might be possible to retrieve the data from the database in CSV format.

    0 讨论(0)
提交回复
热议问题