誰かが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){
}
非常に良い質問です。私もこれについて頭を悩ませていました。私はFelixの提案を選択して作成しました。HTML本文に次の行を追加して、完成させます。
<form method="post" action="csvExport.php">
<input type="hidden" name="csvBuffer" id="csvBuffer" value="" />
</form>
私が抱えている唯一の問題は、エクスポートされたExcelファイルにjqgridの列名が含まれていないことです。また、Excelファイルにエクスポートするときに特定の列または複数の列を除外する方法はありますか?
ありがとう〜
素晴らしい機能!
変更を加えました。
function exportExcel($ id){ var keys = []、ii = 0、rows = ""; var ids = $ id.getDataIDs(); //すべてのIDを取得 var row = $ id.getRowData(ids [0]); //最初の行を取得してラベルを取得します for(var k in row){ keys [ii ++] = k; //列名をキャプチャします rows = rows + k + "\ t"; //各列をタブ区切りとして出力します } rows = rows + "\ 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"; //各行をタブ区切りとして出力します rows = rows + "\ n"; //各行を行末で出力します } rows = rows + "\ 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(form); OpenWindow。 document.close(); } function gridcsvexport(id){ $( '#' + id).jqGrid( 'navButtonAdd'、 '# '+ id +' _ pager '、{ caption:' '、 title:' export '、 buttonicon:' ui-icon-newwin '、 position : 'last'、 onClickButton:function(){ exportExcel($(this)); } }); }
jqGrid
スクリプトを呼び出さずにphp
データをExcelシートとして保存する賢い解決策は次のとおりです(この関数は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
で呼び出され、ファイルがダウンロードされます。
あなたはいくつかのExcelMIMEタイプを見ることができます: MIMEタイプリスト
私はあなたの問題を解決しました。そして今、列名でデータ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"
それをきちんと逃れるために。