2

何かを追加する必要があることを除いて、このjquery関数は機能します。テーブルに列を非表示にするフィルターを設定しています。列を非表示にして[エクスポート]をクリックすると、関係なくすべてのフィールドが使用されます。非表示になっていないテーブル列のみをエクスポートするにはどうすればよいですか?

var write_to_excel = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
        template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>',
        base64 = function(s) {
            return window.btoa(unescape(encodeURIComponent(s)))
        },
        format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
        return function(table, name) {
            if (!table.nodeType) table = document.getElementById(table) var ctx = {
                worksheet: name || 'Worksheet',
                table: table.innerHTML
            }
            window.location.href = uri + base64(format(template, ctx))
        }
})()​

のようなものが必要だと思います。

if($(table).display.style!="none")

前もって感謝します。

4

3 に答える 3

2

最も簡単な方法は、テーブルを format 関数に渡す前にテーブルから列を削除することです。とにかくデータ URI に移動するためにページを破棄しているので、非表示の列を保持することは重要ではありません。

非表示の列を削除する方法は、最初に列を非表示にする方法によって異なります。非表示の TD に display:none を適用するだけの場合は、コードにこの変更を加えることで実行できます。

    return function(table, name) {
        if (!table.nodeType)
            table = document.getElementById(table);

        $(table).find(':not(:visible)').remove();

        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML
        };

        window.location.href = uri + base64(format(template, ctx));
    };
于 2012-07-02T22:35:25.160 に答える
1

または、単純な jQuery を使用して、window.open()メソッドを使用してテーブルのコンテンツを Excel 形式にエクスポートすることもできます。これにより、display:noneの問題もより簡単な方法で解決されます:)

window.open(MIMEtype,replace);

MIME タイプ: オプション。書き込み先のドキュメントのタイプ。デフォルト値は「text/html」です。

replace : オプション。設定されている場合、新しいドキュメントの履歴エントリは、このドキュメントを開いたドキュメントから履歴エントリを継承します。

以下の jQuery コードは、テーブル データを Excel にエクスポートします。

$("#btnExport").click(function(e) {
    window.open('data:application/vnd.ms-excel,' + $('#dvData').html());
    e.preventDefault();
});

テーブル HTML に特殊文字が含まれている場合は、html を Excel に送信する前にエンコードする必要があります。

$("#btnExport").click(function(e) {
    window.open('data:application/vnd.ms-excel,' + encodeURIComponent($('#dvData').html()));
    e.preventDefault();
});​

jsFiddle の例 - http://jsfiddle.net/jquerybyexample/xhYcD/

于 2013-03-01T16:47:19.507 に答える
0
$("#btnExport").click(function(e) {

  window.open('data:application/vnd.ms-excel,' + encodeURIComponent($('#export').html()));

});
于 2013-05-10T07:20:34.293 に答える