【问题标题】:Database to csv file数据库到 csv 文件
【发布时间】:2014-01-02 17:02:52
【问题描述】:

我正在尝试在 chrome 中创建本地数据库(.db 文件)。我只是想创建一个按钮,允许用户只迁移或使用数据库中的数据创建一个 Excel 工作表。我正在尝试在 javascript 中执行此操作。

这是我尝试过的:

1) 我知道只能在 IE 中工作的 ActiveX 对象。但是,浏览器不支持数据库操作。因此,ActiveX 被排除在外。

2) 我可以使用 chrome 之类的浏览器,但是我不确定是否可以通过 javascript 轻松创建 csv 文件。我不想从 HTML 中导出表格。我想像 ActiveX 一样完全控制 csv 文件。

有什么提示吗?

【问题讨论】:

  • 小提琴是空白的。我错过了什么吗?
  • fiddle 从 javascript 中的给定数据创建一个 CSV 文件并触发该 CSV 文件的下载,除此之外没有输出?
  • 不幸的是,它没有创建。我在 chrome 中尝试这个。我什至尝试用一个新按钮来做到这一点。
  • 对我来说很好用

标签: javascript database csv


【解决方案1】:

如果您想导出 IndexedDB 中的任何特定表,请参考下面的代码(这是我如何将 db 数据导出到 csv 文件的示例)

var transactionsRecorder = {};
    transactionsRecorder.webdb = {};
    transactionsRecorder.webdb.db = null;

    transactionsRecorder.webdb.open = function () {
        var dbSize = 5 * 1024 * 1024; // 5MB
        transactionsRecorder.webdb.db = openDatabase("TransactionsRecorder", "1.0", "Transactions Recorder", dbSize);
    }

$(document).ready(function(){
    init();
});

function init() {
    transactionsRecorder.webdb.open();
    transactionsRecorder.webdb.createTable();
}

//Create Table Function
transactionsRecorder.webdb.createTable = function() {
    var db = transactionsRecorder.webdb.db;

    db.transaction(function(tx) {
        tx.executeSql("CREATE TABLE IF NOT EXISTS accounts (accNo INTEGER PRIMARY KEY ASC, accType INTEGER, accAlias TEXT, accAddedOn DATETIME, custId INTEGER, roi DECIMAL, principal DECIMAL, interest DECIMAL, accStatusId INTEGER, lastUpdatedInt DATETIME, lastUpdatedCust DATETIME)", []);
    });

    //Hardcode Insert Queries End

}


 $("#exportAccount").click(function(){
            var db = transactionsRecorder.webdb.db;
            db.readTransaction(function(tx){
                tx.executeSql('SELECT accNo, accAlias, accAddedOn, custId, roi, principal, interest, lastUpdatedInt FROM accounts', [], function(tx, results){
                    var quotechar = '"';
                    var sepchar = ',';
                    var row, rowarray, csvstring;
                    var csvs = [];
                    var fieldnames = ['accNo','accAlias','accAddedOn', 'custId', 'roi', 'principal', 'interest', 'lastUpdatedInt'];
                    // this is the header row
                    csvs.push(fieldnames.join(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(rowarray.join(sepchar));
                    }
                    csvstring = csvs.join('\r\n');
                    var blob = new Blob([csvstring], {type: "text/plain;charset=utf-8"});
                    var csvDate = new Date();
                    var csvDateStr = csvDate.getDate() + "_" + (csvDate.getMonth() + 1) + "_" + csvDate.getFullYear() +  "_" + csvDate.getTime() ;
                    saveAs(blob, "account_"+ csvDateStr +".csv");
                    // csvstring should now contain a multirow csv string;
                });
            });
        });

【讨论】:

  • Blob 有导入吗?我收到类似“未捕获类型错误:非法构造函数”的错误。
  • Blob 对象是 HTML5 的一部分!!!你能检查一下 chrome 浏览器及其控制台输出吗
  • 是的..我检查过..我实际上正在使用 chromeportable.. 它显示相同。在控制台中我尝试了 var b - new Blob();它仍然显示错误..
  • 请使用这个javascript库保存文件raw.github.com/eligrey/FileSaver.js/master/FileSaver.js这个项目的Github链接是:-github.com/eligrey/FileSaver.js如果我的回答是正确的,请投票并点击正确的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2012-06-19
  • 2011-02-09
  • 2013-09-10
  • 1970-01-01
相关资源
最近更新 更多