19

誰かが jqgrid から Excel にデータをエクスポートする方法を知っていますか?

このjqgridを使って、いいなと思ったレポートをしたいと思います。しかし、情報を保持する必要があるため、このレポートを何らかの方法で保存または印刷する必要があります。どなたか分かる方いますか??

4

6 に答える 6

11

これが私のアプローチです。このコードをjs/htmlファイルに追加するだけです。

$("#list").jqGrid('navGrid', '#pager',{view:true, del:false, add:false, edit:false, excel:true})
                .navButtonAdd('#pager',{
                                caption:"Export to Excel", 
                                buttonicon:"ui-icon-save", 
                                onClickButton: function(){ 
                                  exportExcel();
                                }, 
                                position:"last"
                            });

        function exportExcel()
        {
            var mya=new Array();
            mya=$("#list").getDataIDs();  // Get All IDs
            var data=$("#list").getRowData(mya[0]);     // Get First row to get the labels
            var colNames=new Array(); 
            var ii=0;
            for (var i in data){colNames[ii++]=i;}    // capture col names
            var html="";
            for(i=0;i<mya.length;i++)
                {
                data=$("#list").getRowData(mya[i]); // get each row
                for(j=0;j<colNames.length;j++)
                    {
                    html=html+data[colNames[j]]+"\t"; // output each column as tab delimited
                    }
                html=html+"\n";  // output each row with end of line

                }
            html=html+"\n";  // end of line at the end
            document.forms[0].csvBuffer.value=html;
            document.forms[0].method='POST';
            document.forms[0].action='csvExport.php';  // send it to server which will open this contents in excel file
            document.forms[0].target='_blank';
            document.forms[0].submit();
        }

PHPスクリプト

header('Content-type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=file.xls");
header("Pragma: no-cache");

$buffer = $_POST['csvBuffer'];

try{
    echo $buffer;
}catch(Exception $e){

}
于 2010-08-26T09:33:16.020 に答える
3

非常に良い質問です。私もこれについて頭を悩ませていました。私はフェリックスの提案を選んでそれを作りました、あなたのhtml本文に次の行を追加することによってそれを完成させましょう。

<form method="post" action="csvExport.php">
    <input type="hidden" name="csvBuffer" id="csvBuffer" value="" />
</form>

私が抱えている唯一の問題は、エクスポートされたExcelファイルにjqgridの列名が含まれていないことです。また、Excelファイルにエクスポートするときに特定の列または複数の列を除外する方法はありますか?

ありがとう〜

于 2010-11-18T07:57:17.753 に答える
2

jqGridスクリプトを呼び出さずにデータを Excel シートとして保存するための賢い解決策を次に示しphpます (この関数をGridIDオプションで呼び出すだけですFilename) 。

var createExcelFromGrid = function(gridID,filename) {
    var grid = $('#' + gridID);
    var rowIDList = grid.getDataIDs();
    var row = grid.getRowData(rowIDList[0]); 
    var colNames = [];
    var i = 0;
    for(var cName in row) {
        colNames[i++] = cName; // Capture Column Names
    }
    var html = "";
    for(var j=0;j<rowIDList.length;j++) {
        row = grid.getRowData(rowIDList[j]); // Get Each Row
        for(var i = 0 ; i<colNames.length ; i++ ) {
            html += row[colNames[i]] + ';'; // Create a CSV delimited with ;
        }
        html += '\n';
    }
    html += '\n';

    var a         = document.createElement('a');
    a.id = 'ExcelDL';
    a.href        = 'data:application/vnd.ms-excel,' + html;
    a.download    = filename ? filename + ".xls" : 'DataList.xls';
    document.body.appendChild(a);
    a.click(); // Downloads the excel document
    document.getElementById('ExcelDL').remove();
}

CSV最初に で区切られた文字列を作成します;。次に、anchor特定の属性を持つタグが作成されます。最後に、ファイルをダウンロードするようclickに求められます。a

いくつかの Excel の MIME タイプを確認できます: MIME タイプ リスト

于 2015-11-16T10:46:56.880 に答える
2

素晴らしい機能!
変更を加えました。

関数 exportExcel($id){
  var keys=[], ii=0, 行="";
  var ids=$id.getDataIDs(); // すべての ID を取得
  var row=$id.getRowData(ids[0]); // 最初の行を取得してラベルを取得します
  for (var k in row) {
    キー[ii++]=k; // 列名をキャプチャ
    行=行+k+"\t"; // 各列をタブ区切りで出力
  }
  行=行+"\n"; // 行末付きの出力ヘッダー
  for(i=0;i<ids.length;i++) {
    row=$id.getRowData(ids[i]); // 各行を取得
    for(j=0;j<keys.length;j++) rows=rows+row[keys[j]]+"\t"; // 各行をタブ区切りで出力
    行=行+"\n"; // 各行を行末とともに出力
  }
  行=行+"\n"; // 最後に行末
  var form = "<form name='csvexportform' action='"+php_path+"csvexport.php' method='post'>";
  form = form + "<input type='hidden' name='csvBuffer' value='"+rows+"'>";
  form = form + "</form><script>document.csvexportform.submit();</sc"+"ript>";
  OpenWindow=window.open('', '');
  OpenWindow.document.write(フォーム);
  OpenWindow.document.close();
}

関数 gridcsvexport(id) {
  $('#'+id).jqGrid('navButtonAdd','#'+id+'_pager',{
    キャプション:''、
    タイトル:'エクスポート',
    buttonicon:'ui-icon-newwin',
    位置:「最後」、
    onClickButton:関数 (){
      exportExcel($(this));
    }
  });
}
于 2011-06-25T16:22:15.587 に答える
1

私はあなたの問題を解決しました.そして今、私は列名でExcelのデータをエクスポートすることができます.私のコードを参照してください.

function exportExcel()
    {
        var mya=new Array();
        mya=$("#tblnoupdate").getDataIDs();  // Get All IDs
        var data=$("#tblnoupdate").getRowData(mya[0]);     // Get First row to get the labels
        var colNames=new Array(); 
        var ii=0;
        for (var i in data){colNames[ii++]=i;}    // capture col names
        var html="";
            for(k=0;k<colNames.length;k++)
            {
            html=html+colNames[k]+"\t";     // output each Column as tab delimited
            }
            html=html+"\n";                    // Output header with end of line
        for(i=0;i<mya.length;i++)
            {
            data=$("#tblnoupdate").getRowData(mya[i]); // get each row
            for(j=0;j<colNames.length;j++)
                {
             html=html+data[colNames[j]]+"\t"; // output each Row as tab delimited
                }
            html=html+"\n";  // output each row with end of line

            }
        html=html+"\n";  // end of line at the end
        document.forms[0].csvBuffer.value=html;
        document.forms[0].method='POST';
        document.forms[0].action='<?php echo $baseurl;?>csvexport.php';  // send it to server which will open this contents in excel file
        document.forms[0].target='_blank';
        document.forms[0].submit();
    }

問題が発生した場合はお知らせください。

于 2011-01-19T07:39:18.533 に答える
0

「csvBuffer」という名前のフォームと隠し要素を作成します。この要素は、関数によって設定されます。行を変更する必要がありました

html = html+"\n"

html = html+"\\n"

うまく逃げるために。

于 2010-11-03T21:18:23.833 に答える