PHPExcelについて質問する

WBOY
リリース: 2016-06-23 13:55:23
オリジナル
1084 人が閲覧しました

最近プロジェクトに取り組んでいますが、ページテーブルのデータはデータベースから直接クエリされるのではなく、計算やその他の処理を通じて取得されるため、クエリ処理後のテーブルデータをクライアントのExcelにエクスポートする必要があります。ページにはボタンがあり、onclick イベントは ajax を使用して必要なパラメーターをサーバーに渡します。exportexcel.php ファイルはパラメーターを受け取り、データベースにクエリを実行して処理し、最後に phpexcel を使用して Excel ファイルにエクスポートします。
そこで問題が発生します。テスト後、ajax が実行されたことがわかりましたが、ブラウザーはエクスポートされた Excel ファイルをダウンロードするためのウィンドウをポップアップせず、まったく応答しません。 ajax を使用してパラメータをexportexcel.phpに渡し、ダウンロードおよび保存ウィンドウをポップアップ表示するにはどうすればよいですか?
ajax コード
関数 Excel(url1,params)
{
atch(trymicrosoft){試してみてください
}catch(othermicrosoft){
var xhr = false; }
}
}
var url=url1+"? "+"&r ="+Math.random();
xhr.open("POST",url,true); //readyState=1
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded") );
xhr.send(params); If(xhr.readyState== 4 &&
どうすればよいか専門家のアドバイスをください。数日間悩んでいますが、解決策が見つかりません




ディスカッションへの返信(解決策)

ファイルストリームはajaxで受信されたため、当然ダウンロードは行われません。ダウンロードが表示されます
ajaxリクエストを受信した後、サーバーでExcelファイルを生成し、ajaxによって渡される接続のみをAまたはIFRAMEに返してマークを付けることができますダウンロード

まだ理解できません、Excelはサーバー上で生成されます、どのようなリンクが返されますか、Ajax タグを使用してダウンロードするにはどうすればよいですか?

ajax を使用せず、接続を使用してパラメーターを渡す場合、これは機能しますか?

関数 execl の機能は、?? を結合して url1 に送信することです。
get???? に変更して頂ければダウンロード可能です

function excel(url1,params){   	window.location = url1+"?"+ url1+"?"+"&r="+Math.random() + params;}
ログイン後にコピー


またはモデレータが提供する方法を使用してください。 Excel が ? より大きい場合、Excel が生成されるまでダウンロードする前に待つ必要があります。ファイル ストリームを使用すると、ファイル ストリームを 1 つずつ生成できます。
視聴機器が必要ですか?

訂正、????。

すごいです


Excel がサーバー上で生成されるのか、どのようなリンクが返されるのか、そして ajax はどのようにタグを使用してダウンロードするのかがまだわかりません。



例如?求后,需要返回一?execl
phpexecl有?savetofile的方法的,用??,然後?生成一?execl文件。

之後把??文件的路?,例如http://www.example.com/excel/a.xls 返回?js,js 再用window.location ?用下?就可以。

3楼 楼主的回复:
如果你不用 ajax,而用连接传递参数,这样会做吗?


不会做,还有就是,我运行环境是IE9下,get方法行不通,ie9使用get方法没反应,post方法就能成功运行,这是我测试发现的。

6楼 fdipzone的回复:
例如?求后,需要返回一?execl
phpexecl有?savetofile的方法的,用??,然後?生成一?execl文件。


我试了,phpexcel没有savetofile方法,我的是最新版phpexcel从官网下载的。另外是先试试你在 5楼 说的方法,多谢指导!

function excel(url1,params){        window.location = url1+"?"+"&r="+Math.random() + "&" + params; }
ログイン後にコピー

再问个问题,修改excel函数后,在php咋接收参数啊,这样就不使用ajax了吧,那我在php还能post得到参数吗?

是没有 savetofile 方法
但是有 save 方法

function excel(url1,params){                window.location = url1+"?"+params+"&r="+Math.random() ; } 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

改用这个方法的确能弹出下载窗口了,但为什么在php使用$_GET['bbsty']接收不到url传递的参数?谁能帮帮我,在线等。。。

function excel(url1,params){                window.location = url1+"?"+params+"&r="+Math.random() ; } 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

改用这个方法的确能弹出下载窗口了,但为什么在php使用$_GET['bbsty']接收不到url传递的参数?谁能帮帮我,在线等。。。



function excel(url1,params){                window.location = url1+"?"+params+"&r="+Math.random() ; } 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

改用这个方法的确能弹出下载窗口了,但为什么在php使用$_GET['bbsty']接收不到url传递的参数?谁能帮帮我,在线等。。。




你??的??有bbsty??如果其他??可以,??不行,估?是??名?了。

alert(url1+"?"+params+"&r="+Math.random()); 看看有什?。

有的,我在function excel里alert(url1+"?"+params+"&r="+Math.random()); 查看是正常的,

print_r($_REQUEST);输出什么?

有的,我在function excel里alert(url1+"?"+params+"&r="+Math.random()); 查看是正常的,


txtdate 和 dev 用$_GET都能拿到? 只有bbsty不行? ??奇怪

txtdate 、dev 、bbsty用$_GET都不能接收到,print_r($_REQUEST);什么也没有,是很奇怪,就是get接收不到,一个参数都收不到

贴出 ExportToExcel.php 可省去数据库操作和excel生成部分的代码

你的 ajax 是 post 方式发送数据的,显然这个程序不会有读取 get 方式数据的代码

改用这个函数后,就不使用ajax了,button的onclick事件就是function excel(url1,params)

<td width="18%" align="left"><input type="button" name="export" id="export" value="导出" style="cursor:hand" onClick="exportExcel()">          <script language="javascript">             function exportExcel()		    {				var txtdate= document.getElementById("txtdate").value;				var bbsty= document.getElementById("bbsty").value;				var dev= document.getElementById("dev").value;				//定义url				var url="ExportToExcel.php";        				//定义参数        				var params="txtdate="+txtdate+"&bbsty="+bbsty+"&dev="+dev;       				//调用ajax 进行交互				//excel(url,params); 				//alert(url+"?"+params+"&r="+Math.random());				window.location = url+"?"+params+"&r="+Math.random();			}          </script>          </td>
ログイン後にコピー

ExportToExcel.php关键接收代码就几行,剩下代码是操作数据库并处理结果,和生成excel的
$bbsty= $_GET['bbsty'];	$dev= $_GET['dev'];	$days= (int)date('t',strtotime($_GET['txtdate']));  //获取查询月份的总天数	/*echo "<script>alert("+$dev+")</script>";exit;*/
ログイン後にコピー

可能我的运行环境有关,get方法使用不了。多谢二位的指导,让我学到很多东西,不过我分不多,见谅了

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート