2012-02-07 11 views
0

Webkitブラウザで実行するアプリケーションを作成しています。デバイスにローカルに保存されているデータを取り出し、.csv形式でエクスポートする必要があります。これはjavascriptを使って可能ですか?それはブラウザで行う必要があります。 PHPはオプションではありません。ありがとうWeb SQLを.CSVファイルにエクスポートする方法

+0

Web SQLデータベースを意味しますか? 'window.openDatabase()'? –

+0

はい、それは私が意味したことです。 http://www.w3.org/TR/webdatabase/ – Tim

答えて

0

sqliteファイルがサーバー上にあるとします(私たちはローカルストレージについては言及していませんが、それでもサーバー側のファイルにアクセスする必要があります)。

+0

私はブラウザでSQLストレージについて話しています。ここにリンクがあります。 http://www.w3.org/TR/webdatabase/ – Tim

1

これは可能ですが、javascriptを手作業でcsvにシリアル化する必要があります。また、使用するCSV方言を決定する必要があります。

以下は、使用する必要がある一般的なパターンを示す(テストされていない)可能性の1つです。

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

+0

ご使用のブラウザ環境にftp拡張機能が含まれていない場合は、ほとんどの場合そうではありません。しかし、HTTP POSTやPUTは、 'XMLHttpRequest'を使って簡単に行うことができます。 –

関連する問題