2014-01-30 28 views
13

我正在开发Android应用程序,其中SQLite作为一个database.I想了一定的成绩从数据库中导出到编程excel文件格式,要存储擅长于本地设备路径 我所遇到以下链接如何实现导出sqlite要在android中的excel/csv文件?

那么实现导出到Excel应用程序的Excel的确切过程是什么?这里

+1

按我的意见,你应该第一个链接去。最好的方法之一 –

+0

@MD thnks,但会给我一些链接,这给了一种tuto –

+0

同意MD @Aditi K –

回答

10

家伙是答案,我已经成功地实施

//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); 
      } 
     } 
    } 
} 
+1

它允许你从数据库中导出任何特定的表吗? – silverFoxA

4

这就是我的回答:这作品! 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("[email protected]"); 
      //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卡中创建。

+0

这是否在没有sqlite数据库的情况下工作? – fullMoon

2

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

} 
相关问题