How to create a .csv on android

前端 未结 3 1848
隐瞒了意图╮
隐瞒了意图╮ 2020-11-27 20:33

My aim is to create a .csv file from a table, to print a report. I can then store this .csv file into my sdCard. I have referred to some questions similar to this but they a

相关标签:
3条回答
  • 2020-11-27 20:48

    this will work :)

        try {
        String TestString="";
    
        FileOutputStream fOut = openFileOutput(filename, MODE_WORLD_READABLE);
    
        OutputStreamWriter osw = new OutputStreamWriter(fOut); 
    
           // Write the string to the file
         for( i=1; i<total_row; i++)
            {
    
                for( j=1; j<total_col; j++)
                {
                    TestString+=table[i][j].getText().toString();        // to pass in every widget a context of activity (necessary) 
                    TestString += " ,";
                }
                 TestString+="\n";
            }
         Log.v("the string is",TestString);
         osw.write(TestString);
         osw.flush();
         osw.close();
        }
        catch (IOException ioe) 
          {ioe.printStackTrace();}
    

    in manifest u would have to write

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    just before the application tag

    0 讨论(0)
  • 2020-11-27 20:54

    check below code to generate CSV file. no need to use jar file.

    you have to save one csv file in to SD-CARD.

    Sample CSV FILE

    public void exportEmailInCSV() throws IOException {
            {
    
                File folder = new File(Environment.getExternalStorageDirectory()
                        + "/Folder");
    
                boolean var = false;
                if (!folder.exists())
                    var = folder.mkdir();
    
                System.out.println("" + var);
    
    
                final String filename = folder.toString() + "/" + "Test.csv";
    
                // show waiting screen
                CharSequence contentTitle = getString(R.string.app_name);
                final ProgressDialog progDailog = ProgressDialog.show(
                        MailConfiguration.this, contentTitle, "even geduld aub...",
                        true);//please wait
                final Handler handler = new Handler() {
                    @Override
                    public void handleMessage(Message msg) {
    
    
    
    
                    }
                };
    
                new Thread() {
                    public void run() {
                        try {
    
                            FileWriter fw = new FileWriter(filename);
    
                            Cursor cursor = db.selectAll();
    
                            fw.append("No");
                            fw.append(',');
    
                            fw.append("code");
                            fw.append(',');
    
                            fw.append("nr");
                            fw.append(',');
    
                            fw.append("Orde");
                            fw.append(',');
    
                            fw.append("Da");
                            fw.append(',');
    
                            fw.append("Date");
                            fw.append(',');
    
                            fw.append("Leverancier");
                            fw.append(',');
    
                            fw.append("Baaln");
                            fw.append(',');
    
                            fw.append("asd");
                            fw.append(',');
    
                            fw.append("Kwaliteit");
                            fw.append(',');
    
                            fw.append("asd");
                            fw.append(',');
    
                            fw.append('\n');
    
                            if (cursor.moveToFirst()) {
                                do {
                                    fw.append(cursor.getString(0));
                                    fw.append(',');
    
                                    fw.append(cursor.getString(1));
                                    fw.append(',');
    
                                    fw.append(cursor.getString(2));
                                    fw.append(',');
    
                                    fw.append(cursor.getString(3));
                                    fw.append(',');
    
                                    fw.append(cursor.getString(4));
                                    fw.append(',');
    
                                    fw.append(cursor.getString(5));
                                    fw.append(',');
    
                                    fw.append(cursor.getString(6));
                                    fw.append(',');
    
                                    fw.append(cursor.getString(7));
                                    fw.append(',');
    
                                    fw.append(cursor.getString(8));
                                    fw.append(',');
    
                                    fw.append(cursor.getString(9));
                                    fw.append(',');
    
                                    fw.append(cursor.getString(10));
                                    fw.append(',');
    
                                    fw.append('\n');
    
                                } while (cursor.moveToNext());
                            }
                            if (cursor != null && !cursor.isClosed()) {
                                cursor.close();
                            }
    
                            // fw.flush();
                            fw.close();
    
                        } catch (Exception e) {
                        }
                        handler.sendEmptyMessage(0);
                        progDailog.dismiss();
                    }
                }.start();
    
            }
    
        }
    

    add this permission in manifest

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    0 讨论(0)
  • 2020-11-27 20:57

    After searching lots over internet i got solution of creating Csv file inside android App, internal storage (without SD Card), So i decided to share with others how to create csv file in android & How to attach it with mail.

    First Download Opencsv.jar library and add to your android project. https://sourceforge.net/projects/opencsv/files/opencsv/

    Add the implementation directly (no download of .jar)

    implementation 'com.opencsv:opencsv:4.6' // Here is opencsv library 
    

    Or add jar file in android project :

    1. Change Android Studio file structure Android to Project ( At Top Left below of Project Name Android,change to Project)
    2. Copy opencsv.jar file and paste in libs folder.
    3. Right click opencsv.jar file and hit Add as library.

    Add permission to Menifest.xml( If device API is 23 or greater Check RunTime Permission)

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    Open build.gradle (Module:app) and check it added :

    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:26.+'
        compile 'com.google.code.gson:gson:2.2.4'
        compile 'com.android.support:recyclerview-v7:26.+'
        testCompile 'junit:junit:4.12'
        implementation files('libs/opencsv-4.1.jar') // Here is opencsv library added to project when using .jar
    }
    

    Now coding part : Creating csv file and inserting data into it.

     String csv = (Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCsvFile.csv"); // Here csv file name is MyCsvFile.csv
    
    
     //by Hiting button csv will create inside phone storage.
     buttonAdd.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                CSVWriter writer = null;
                    try {
                        writer = new CSVWriter(new FileWriter(csv));
    
                        List<String[]> data = new ArrayList<String[]>();
                        data.add(new String[]{"Country", "Capital"});
                        data.add(new String[]{"India", "New Delhi"});
                        data.add(new String[]{"United States", "Washington D.C"});
                        data.add(new String[]{"Germany", "Berlin"});
    
                        writer.writeAll(data); // data is adding to csv 
    
                        writer.close();
                        callRead();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
    

    Now if you want to view your csv file inside the android follow below steps:

    1. Go to File Manager/ My Files to your phone.
    2. Go to internal storage/ Local , just scroll you will get your csv file.
    3. If csv file is not opening in your device install Csv Viewer from Play Store.

    Now, If you want to attach this csv file to your app with attachment

    Here is the code for attachment of csv file in mail :

    button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent emailIntent = new Intent(Intent.ACTION_SEND);
                    emailIntent.setType("text/plain");
                    emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"email@example.com"});
                    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject here");
                    emailIntent.putExtra(Intent.EXTRA_TEXT, "body text");
    
                    File file = new File(csv);
                    Uri uri = Uri.fromFile(file);
                    emailIntent.putExtra(Intent.EXTRA_STREAM, uri);
                    startActivity(Intent.createChooser(emailIntent, "Pick an Email provider"));
                }
            });
    
    0 讨论(0)
提交回复
热议问题