How to implement Export sqlite To excel/csv file in android?
Guys here is answer that I have implemented successfully
//new async task for file export to csvprivate class ExportDatabaseCSVTask extends AsyncTask<String, String, Boolean> { private final ProgressDialog dialog = new ProgressDialog(SearchResultActivity.this); boolean memoryErr = false; // to show Loading dialog box @Override protected void onPreExecute() { this.dialog.setMessage("Exporting database..."); this.dialog.show(); } // to write process protected Boolean doInBackground(final String... args) { boolean success = false; String currentDateString = new SimpleDateFormat(Constants.SimpleDtFrmt_ddMMyyyy).format(new Date()); File dbFile = getDatabasePath("HLPL_FRETE.db"); Log.v(TAG, "Db path is: " + dbFile); // get the path of db File exportDir = new File(Environment.getExternalStorageDirectory() + File.separator + Constants.FileNm.FILE_DIR_NM, ""); long freeBytesInternal = new File(getApplicationContext().getFilesDir().getAbsoluteFile().toString()).getFreeSpace(); long megAvailable = freeBytesInternal / 1048576; if (megAvailable < 0.1) { System.out.println("Please check"+megAvailable); memoryErr = true; }else { exportDirStr = exportDir.toString();// to show in dialogbox Log.v(TAG, "exportDir path::" + exportDir); if (!exportDir.exists()) { exportDir.mkdirs(); } try { List<SalesActivity> listdata = salesLst; SalesActivity sa = null; String lob = null; for (int index = 0; index < listdata.size();) { sa = listdata.get(index); lob = sa.getLob(); break; } if (Constants.Common.OCEAN_LOB.equals(lob)) { file = new File(exportDir, Constants.FileNm.FILE_OFS + currentDateString + ".csv"); } else { file = new File(exportDir, Constants.FileNm.FILE_AFS + currentDateString + ".csv"); } file.createNewFile(); CSVWriter csvWrite = new CSVWriter(new FileWriter(file)); // this is the Column of the table and same for Header of CSV // file if (Constants.Common.OCEAN_LOB.equals(lob)) { csvWrite.writeNext(Constants.FileNm.CSV_O_HEADER); }else{ csvWrite.writeNext(Constants.FileNm.CSV_A_HEADER); } String arrStr1[] = { "SR.No", "CUTSOMER NAME", "PROSPECT", "PORT OF LOAD", "PORT OF DISCHARGE" }; csvWrite.writeNext(arrStr1); if (listdata.size() > 0) { for (int index = 0; index < listdata.size(); index++) { sa = listdata.get(index); String pol; String pod; if (Constants.Common.OCEAN_LOB.equals(sa.getLob())) { pol = sa.getPortOfLoadingOENm(); pod = sa.getPortOfDischargeOENm(); } else { pol = sa.getAirportOfLoadNm(); pod = sa.getAirportOfDischargeNm(); } int srNo = index; String arrStr[] = { String.valueOf(srNo + 1), sa.getCustomerNm(), sa.getProspectNm(), pol, pod }; csvWrite.writeNext(arrStr); } success = true; } csvWrite.close(); } catch (IOException e) { Log.e("SearchResultActivity", e.getMessage(), e); return success; } } return success; } // close dialog and give msg protected void onPostExecute(Boolean success) { if (this.dialog.isShowing()) { this.dialog.dismiss(); } if (success) { dialogBox(Constants.Flag.FLAG_EXPRT_S); } else { if (memoryErr==true) { dialogBox(Constants.Flag.FLAG_MEMORY_ERR); } else { dialogBox(Constants.Flag.FLAG_EXPRT_F); } } }}
this is my answer: And this works !Excel file is the same as a .csv file.Step 1: download this jar file https://code.google.com/p/opencsv/downloads/detail?name=opencsv-2.4.jar&can=2&q=
Step 2:
private class ExportDatabaseCSVTask extends AsyncTask<String ,String, String>{ private final ProgressDialog dialog = new ProgressDialog(MainActivity.this); @Override protected void onPreExecute() { this.dialog.setMessage("Exporting database..."); this.dialog.show(); } protected String doInBackground(final String... args){ File exportDir = new File(Environment.getExternalStorageDirectory(), ""); if (!exportDir.exists()) { exportDir.mkdirs(); } File file = new File(exportDir, "ExcelFile.csv"); try { file.createNewFile(); CSVWriter csvWrite = new CSVWriter(new FileWriter(file)); //data ArrayList<String> listdata= new ArrayList<String>(); listdata.add("Aniket"); listdata.add("Shinde"); listdata.add("pune"); listdata.add("anything@anything"); //Headers String arrStr1[] ={"First Name", "Last Name", "Address", "Email"}; csvWrite.writeNext(arrStr1); String arrStr[] ={listdata.get(0), listdata.get(1), listdata.get(2), listdata.get(3)}; csvWrite.writeNext(arrStr); csvWrite.close(); return ""; } catch (IOException e){ Log.e("MainActivity", e.getMessage(), e); return ""; } } @SuppressLint("NewApi") @Override protected void onPostExecute(final String success) { if (this.dialog.isShowing()){ this.dialog.dismiss(); } if (success.isEmpty()){ Toast.makeText(MainActivity.this, "Export successful!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "Export failed!", Toast.LENGTH_SHORT).show(); } }}
Write Async
task in your .java file
Step3: Add call this task
ExportDatabaseCSVTask task=new ExportDatabaseCSVTask();task.execute();
ExcelFile.csv
file will be created in your sdcard.
ExportDatabaseCSVTask:
public class ExportDatabaseCSVTask extends AsyncTask<String, Void, Boolean> { private final ProgressDialog dialog = new ProgressDialog(MainActivity.this); @Override protected void onPreExecute() { this.dialog.setMessage("Exporting database..."); this.dialog.show(); } protected Boolean doInBackground(final String... args) { String currentDBPath = "/data/"+ "your Package name" +"/databases/abc.db"; File dbFile = getDatabasePath(""+currentDBPath); System.out.println(dbFile); // displays the data base path in your logcat File exportDir = new File(Environment.getExternalStorageDirectory(), "/your Folder Name/"); if (!exportDir.exists()) { exportDir.mkdirs(); } File file = new File(exportDir, "myfile.csv"); try { file.createNewFile(); CSVWriter csvWrite = new CSVWriter(new FileWriter(file)); Cursor curCSV = simpledb.rawQuery("select * from " + tablename,null); csvWrite.writeNext(curCSV.getColumnNames()); while(curCSV.moveToNext()) { String arrStr[]=null; String[] mySecondStringArray = new String[curCSV.getColumnNames().length]; for(int i=0;i<curCSV.getColumnNames().length;i++) { mySecondStringArray[i] =curCSV.getString(i); } csvWrite.writeNext(mySecondStringArray); } csvWrite.close(); curCSV.close(); return true; } catch (IOException e) { Log.e("MainActivity", e.getMessage(), e); return false; } } protected void onPostExecute(final Boolean success) { if (this.dialog.isShowing()) { this.dialog.dismiss(); } if (success) { Toast.makeText(MainActivity.this, "Export successful!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "Export failed", Toast.LENGTH_SHORT).show(); } } }
CSVWriter:
public class CSVWriter {private PrintWriter pw;private char separator;private char quotechar;private char escapechar;private String lineEnd;/** The character used for escaping quotes. */public static final char DEFAULT_ESCAPE_CHARACTER = '"';/** The default separator to use if none is supplied to the constructor. */public static final char DEFAULT_SEPARATOR = ',';/** * The default quote character to use if none is supplied to the * constructor. */public static final char DEFAULT_QUOTE_CHARACTER = '"';/** The quote constant to use when you wish to suppress all quoting. */public static final char NO_QUOTE_CHARACTER = '\u0000';/** The escape constant to use when you wish to suppress all escaping. */public static final char NO_ESCAPE_CHARACTER = '\u0000';/** Default line terminator uses platform encoding. */public static final String DEFAULT_LINE_END = "\n";/** * Constructs CSVWriter using a comma for the separator. * * @param writer * the writer to an underlying CSV source. */public CSVWriter(Writer writer) { this(writer, DEFAULT_SEPARATOR, DEFAULT_QUOTE_CHARACTER, DEFAULT_ESCAPE_CHARACTER, DEFAULT_LINE_END);}/** * Constructs CSVWriter with supplied separator, quote char, escape char and line ending. * * @param writer * the writer to an underlying CSV source. * @param separator * the delimiter to use for separating entries * @param quotechar * the character to use for quoted elements * @param escapechar * the character to use for escaping quotechars or escapechars * @param lineEnd * the line feed terminator to use */public CSVWriter(Writer writer, char separator, char quotechar, char escapechar, String lineEnd) { this.pw = new PrintWriter(writer); this.separator = separator; this.quotechar = quotechar; this.escapechar = escapechar; this.lineEnd = lineEnd;}/** * Writes the next line to the file. * * @param nextLine * a string array with each comma-separated element as a separate * entry. */public void writeNext(String[] nextLine) { if (nextLine == null) return; StringBuffer sb = new StringBuffer(); for (int i = 0; i < nextLine.length; i++) { if (i != 0) { sb.append(separator); } String nextElement = nextLine[i]; if (nextElement == null) continue; if (quotechar != NO_QUOTE_CHARACTER) sb.append(quotechar); for (int j = 0; j < nextElement.length(); j++) { char nextChar = nextElement.charAt(j); if (escapechar != NO_ESCAPE_CHARACTER && nextChar == quotechar) { sb.append(escapechar).append(nextChar); } else if (escapechar != NO_ESCAPE_CHARACTER && nextChar == escapechar) { sb.append(escapechar).append(nextChar); } else { sb.append(nextChar); } } if (quotechar != NO_QUOTE_CHARACTER) sb.append(quotechar); } sb.append(lineEnd); pw.write(sb.toString());}/** * Flush underlying stream to writer. * * @throws IOException if bad things happen */public void flush() throws IOException { pw.flush();}/** * Close the underlying stream writer flushing any buffered content. * * @throws IOException if bad things happen * */public void close() throws IOException { pw.flush(); pw.close();} }