2012-02-07 67 views
0

我正在編寫一個將在Webkit瀏覽器中運行的應用程序。我需要它將本地存儲在設備上的數據以.csv格式導出。這可能使用JavaScript?它必須在瀏覽器中完成。 Php不是一個選項。謝謝如何將Web SQL導出到.CSV文件

+0

您是指Web SQL數據庫? 'window.openDatabase()'? – 2012-02-07 19:56:12

+0

是的,這就是我的意思。 http://www.w3.org/TR/webdatabase/ – Tim 2012-02-07 20:02:24

回答

0

假設sqlite文件位於服務器上(我們不是在談論本地存儲,對嗎?),你仍然需要訪問文件服務器端。

+0

我正在談論瀏覽器中的sql存儲。這是一個鏈接。 http://www.w3.org/TR/webdatabase/ – Tim 2012-02-07 20:01:59

1

您可以這樣做,但您需要手動將您的JavaScript序列化爲csv。您還需要決定使用哪種CSV方言。

下面是一個(未經測試的)可能性,顯示您必須使用的一般模式。

function csvQuoteCell(cell, quotechar, sepchar) { 
    // quote cells containing sepchar and double quote chars 
    // this is an excel dialect 
    var quoted = cell; 
    if (cell.indexOf(sepchar)!==-1) { 
     if (cell.indexOf(quotechar)!==-1 { 
      quoted = quoted.replace(quotechar, quotechar+quotechar); 
     } 
     quoted = quotechar+quoted+quotechar; 
    } 
    return quoted; 
} 
function array2csv(ar, quotechar, sepchar) { 
    var quoted = []; 
    for (var i=0;i<ar.length;i++) { 
     quoted.push(csvQuoteCell(ar[i], quotechar, sepchar); 
    } 
    return quoted.join(sepchar); 
} 

var db = openDatabase('mydb','1.0','thedatabase',1024*1024); 
db.readTransaction(function(tx){ 
    tx.executeSql('SELECT col1, col2, col3 FROM thetable', [], function(tx, results){ 
     var quotechar = '"'; 
     var sepchar = ','; 
     var row, rowarray, csvstring; 
     var csvs = []; 
     var fieldnames = ['col1','col2','col3']; 
     // this is the header row 
     csvs.append(array2csv(fieldnames, quotechar, sepchar)); 
     for (var i=0; i<results.rows.length; i++) { 
      row = results.rows.item(i); 
      // you need to make sure you have an explicit order for the csv 
      // row is an object with unordered keys! 
      rowarray = []; 
      for (var j=0;j<fieldnames.length;j++) { 
       rowarray.push(row[fieldnames[j]]); 
      } 
      csvs.push(array2csv(rowarray, quotechar, sepchar)); 
     } 
     csvstring = csvs.join('\r\n'); 
     // csvstring should now contain a multirow csv string 
    }); 
}); 

但是,它可能無法從JavaScript到「下載」該文件到本地文件系統,只把它上傳到服務器。根據您確切的瀏覽器環境,您可以使用草稿FileWriter api,某種閃存或Java小程序填充,或者您的設備提供的某種專有API。

+0

你可以創建該文件,然後通過FTP發送它? – Tim 2012-02-07 21:04:17

+0

除非你的瀏覽器環境有一些ftp擴展,否則很可能不是。但是,您可以使用HTTP POST或使用'XMLHttpRequest'輕鬆地執行它。 – 2012-02-07 21:17:39