Android - Генерация CSV-файла из табличных значений - PullRequest
10 голосов
/ 08 января 2011

У меня есть база данных, содержащая одну таблицу, я хочу создать файл CSV со значениями этой таблицы.

На самом деле, я хочу отправить этот файл CSV по электронной почте как вложение.Я знаю об отправке файла в виде вложения в электронном письме intent(ACTION_SEND), но я не знаю ни процедуры создания, ни способа, с помощью которого я могу создать файл в формате CSV.

Пожалуйста, дайте мне предложения или идеи.

Ответы [ 4 ]

33 голосов
/ 08 января 2011

Вы можете использовать opencsv для этого

Скачать библиотеку можно здесь:

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

В этом вы можете найти файл jar.

Внутри вашей деятельности используйте это:

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
}
12 голосов
/ 05 декабря 2011

Это может быть полезно. Мне нужно ';' в качестве разделителя между значениями поля. Пожалуйста, используйте ',' соответственно для генерации CSV.

Спасибо, Даршан

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();

    }






}
3 голосов
/ 08 января 2011

Это выглядит действительно многообещающе. Он возьмет любой объект Java и преобразует его в файл CSV:

http://supercsv.sourceforge.net/

Также возможно получить данные из базы данных в формате CSV.

1 голос
/ 10 апреля 2014

Добавление к @ Cocos2dx ответу:

При запросе из db у вас могут быть нулевые поля, в моем случае я использую контроллер для извлечения данных из списка объектов, но если вы этого не сделаете, вам следует проверить нулевые или пустые значения и правильно отформатировать их (или они могут заставить ваш стол выглядеть странно):

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


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

writer.writeNext(details);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...