如何实现导出sqlite要在android中的excel / csv文件?

我正在开发Android应用程序,其中SQlite作为数据库。我想从DB导出某些结果以excel文件格式编程,想将该excel存储到本地设备path我遇到以下链接

  • SQlite数据库以编程方式转换为Android中的Excel文件格式

  • Android – 从表格值生成CSV文件

  • android导出到csv并作为电子邮件附件发送

那么,为android应用程序实现导出到Excel的确切过程是什么?

这里的人是我成功实施的答案

//new async task for file export to csv private 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); } } } } 

这是我的答案:这工作! Excel文件与.csv文件相同。 第1步:下载此jar文件https://code.google.com/p/opencsv/downloads/detail?name=opencsv-2.4.jar&can=2&q=

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

在您的.java文件中写入Async任务

第三步:添加电话这个任务

 ExportDatabaseCSVTask task=new ExportDatabaseCSVTask(); task.execute(); 

ExcelFile.csv文件将在您的SD卡中创build。

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