誰かが jqgrid から Excel にデータをエクスポートする方法を知っていますか?
このjqgridを使って、いいなと思ったレポートをしたいと思います。しかし、情報を保持する必要があるため、このレポートを何らかの方法で保存または印刷する必要があります。どなたか分かる方いますか??
誰かが jqgrid から Excel にデータをエクスポートする方法を知っていますか?
このjqgridを使って、いいなと思ったレポートをしたいと思います。しかし、情報を保持する必要があるため、このレポートを何らかの方法で保存または印刷する必要があります。どなたか分かる方いますか??
これが私のアプローチです。このコードを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){
}
非常に良い質問です。私もこれについて頭を悩ませていました。私はフェリックスの提案を選んでそれを作りました、あなたのhtml本文に次の行を追加することによってそれを完成させましょう。
<form method="post" action="csvExport.php">
<input type="hidden" name="csvBuffer" id="csvBuffer" value="" />
</form>
私が抱えている唯一の問題は、エクスポートされたExcelファイルにjqgridの列名が含まれていないことです。また、Excelファイルにエクスポートするときに特定の列または複数の列を除外する方法はありますか?
ありがとう〜
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 タイプ リスト
素晴らしい機能!
変更を加えました。
関数 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)); } }); }
私はあなたの問題を解決しました.そして今、私は列名で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();
}
問題が発生した場合はお知らせください。
「csvBuffer」という名前のフォームと隠し要素を作成します。この要素は、関数によって設定されます。行を変更する必要がありました
html = html+"\n"
に
html = html+"\\n"
うまく逃げるために。