初投稿になります。
下記の事を実現するのに、色々調査しましたが、どうしても解決できません。ご教授いただければ幸いです。
###前提・実現したいこと
現在、下記を使用しシステムを作成しています。
・Apache
・PHP(サーバ)
・PHPEXCEL(エクセル操作)
・javascript(クライアント)
・json-rpc(通信規格)
・Postgres
クライアントとサーバ通信は「json-rpc」の規格を使用しており、
json形式のやり取りにてデータの取得や表示を行っております。
今回実現したい事は、
画面のあるエクセル出力のボタンを押下すると、
クライアントから「json-rpc」でサーバのメソッドを呼び出し
PHP側でDB接続を行って情報を取得し、その情報をPHPEXCELで
エクセルに書き込みを行って、そのエクセルを画面側でダウンロード
させる
という機能になります。
この時、サーバからクライアントにエクセルデータを渡すやり方がわからず
困っております。
PHPEXCELでエクセルデータを文字列にしてクライアント側に渡して、その文字列で何とかファイルを出力できないかとも考えたのですが、PHEXCELでエクセルデータを文字列にする方法がわからず。。。
PHPEXCELで作成したファイルオブジェクトを渡してもクライアント側では
取得出来ず。
もしくは、PHPEXCELでファイルをどこかのパスに保存して、そのパスをクライアント側に返却し、クライアント側でそのパスからファイルを読み込んでダウンロードさせるという事も出来るのかとも考えましたが、そのやり方も不明で行き詰っております。
似たような構成でシステムを組まれた方、「json-rpc」と「PHP」でエクセル出力したご経験がある方など、どうか、ご協力いただければ幸いです。
宜しくお願いいたします。
###該当のソースコード
jsファイル(抜粋しています)
var jsonURI = XXXX;;
var rpc = new jsonrpcphp(jsonURI, function() {
rpc.DoSearch.excel(httpQuery, function(jsonObj) {
var excel = jsonObj.result['excel']; var fileName = 'export.xlsx'; var blob = new Blob([excel], { type: "Content-Type: application/vnd.ms-excel" }); if (window.navigator.msSaveOrOpenBlob) { //IEの場合 navigator.msSaveBlob(blob, fileName); } else { //IE以外(Chrome, Firefox) var downloadLink = $('<a></a>'); downloadLink.attr('href', window.URL.createObjectURL(blob)); downloadLink.attr('download', fileName); downloadLink.attr('target', '_blank'); $('body').append(downloadLink); downloadLink[0].click(); downloadLink.remove(); } return jsonObj; });
});
PHP側
public function excel($query) {
// DB取得処理は記載していません。
//またライブラリ読み込み処理などもはしょっています。
//エクセルデータをクライアント側に返却することに注力しております
$file = "../template/XXXXX.xlsx";
$excel = PHPExcel_IOFactory::createReader('Excel2007');
$book = $excel->load($file);
//シートを設定する $book->setActiveSheetIndex(0);//一番最初のシートを選択 $sheet = $book->getActiveSheet();//選択シートにアクセスを開始 //セルにデータをセット $sheet->setCellValue('A4' , 'テスト'); //A4セルに「テスト」と書き込む $sheet->setCellValue('B4' , 'テスト2');//B4セルに「テスト2」と書き込む //Excel2007形式で出力する準備 header('Content-Type: application/octet-stream');
// //ダウンロードするファイル名を設定
header('Content-Disposition: attachment;filename="download_test.xlsx"');
$writer=PHPExcel_IOFactory::createWriter($excel,'Excel5');
//出力バッファへの書き込む
//$writer->save('php://output'); ⇒これを行うと、※1のエラーが発生したため、コメントアウト
// 多分上記の出力バッファなどやheaderの設定は、
//「json-rpc」の規格では関係ないかなと思っております。
//あくまで「json」でやり取りを行う規格だと思うので。。。
$response['excel'] = $book; return $response;
}
※1
"<br />
<b>Fatal error</b>: 'break' not in the 'loop' or 'switch' context in <b>PHPExcel\Calculation\Functions.php</b> on line <b>581</b><br />
"
他に必要な情報があれば、ご教授いただければと思います。
宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/26 18:28