お世話になります。
タイトル通りにExcelファイルをphpで取り込みCSVで出力したいのですが、まずはやりたいことを記載します。
1)phpでExcelファイルをドラッグ&ドロップなどで読み込み、配列に格納してから、CSVで出力する。
2)CSVファイルをJavaScriptで読み込み、配列の中から条件にあったものをweb上に表示する
現在作成中のコードを記載します
<?php // ファイル名の指定 $readFile = "sample.xlsx"; // 連想配列でデータ受け取り $data = null; $data = readXlsx($readFile); // 出力確認 /*print '<pre>'; var_dump($data); print '</pre>';*/ // ファイル名渡したら配列返すラッパー関数 function readXlsx($readFile) { // ライブラリファイルの読み込み (パス指定し直す) require_once dirname(__FILE__) . './../Classes/PHPExcel/IOFactory.php'; // ファイルの存在チェック if (!file_exists($readFile)) { exit($readFile. "が見つかりません。" . EOL); } // xlsxをPHPExcelに食わせる $objPExcel = PHPExcel_IOFactory::load($readFile); // 配列形式で返す return $objPExcel->getActiveSheet()->toArray(null,true,true,true); } -------------------------------------------- 上記のようにExcelファイルをphpで配列に格納する部分はできているのですが、ここにドラッグ&ドロップで渡されたExcelファイルを配列に格納し、CSVで出力するにはどうしたら良いのでしょうか? ドラッグ&ドロップでファイルをアップロードする機能は調べたところいろいろあるのはわかったのですが、どうしてもこの中に組み込むのができなくて困っています。 ご教授いただければ幸いです。 以上、宜しくお願い致します。 【追記】 ドラッグ&ドロップする機能の部分を記載します。 長くなりますがご了承ください。 簡単に言ってしまうとこの2つを上手く融合したいのですが、うまくいかないということです。 -------------------------------------- <!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> <style> #dragandrophandler { border:2px dotted #0B85A1; width:500px; height:300px; color:#92AAB0; text-align:center; vertical-align:middle; padding:10px 10px 10 10px; margin: 0 auto; font-size:200%; } .progressBar { width: 200px; height: 22px; border: 1px solid #ddd; border-radius: 5px; overflow: hidden; display:inline-block; margin:0px 10px 5px 5px; vertical-align:top; } .progressBar div { height: 100%; color: #fff; text-align: right; line-height: 22px; /* same as #progressBar height if we want text middle aligned */ width: 0; background-color: #0ba1b5; border-radius: 3px; } .statusbar { border-top:1px solid #A9CCD1; min-height:25px; width:700px; padding:10px 10px 0px 10px; vertical-align:top; } .statusbar:nth-child(odd){ background:#EBEFF0; } .filename { display:inline-block; vertical-align:top; width:250px; } .filesize { display:inline-block; vertical-align:top; color:#30693D; width:100px; margin-left:10px; margin-right:5px; } .abort{ background-color:#A8352F; -moz-border-radius:4px; -webkit-border-radius:4px; border-radius:4px;display:inline-block; color:#fff; font-family:arial;font-size:13px;font-weight:normal; padding:4px 15px; cursor:pointer; vertical-align:top } </style> </head> <body> <div id="dragandrophandler">ここにドロップしてください。</div> <br><br> <div id="status1"></div> <script> function sendFileToServer(formData,status) { var uploadURL ="http://hayageek.com/examples/jquery/drag-drop-file-upload/upload.php"; //Upload URL var extraData ={}; //Extra Data. var jqXHR=$.ajax({ xhr: function() { var xhrobj = $.ajaxSettings.xhr(); if (xhrobj.upload) { xhrobj.upload.addEventListener('progress', function(event) { var percent = 0; var position = event.loaded || event.position; var total = event.total; if (event.lengthComputable) { percent = Math.ceil(position / total * 100); } //Set progress status.setProgress(percent); }, false); } return xhrobj; }, url: uploadURL, type: "POST", contentType:false, processData: false, cache: false, data: formData, success: function(data){ status.setProgress(100); $("#status1").append("File upload Done<br>"); } }); status.setAbort(jqXHR); } var rowCount=0; function createStatusbar(obj) { rowCount++; var row="odd"; if(rowCount %2 ==0) row ="even"; this.statusbar = $("<div class='statusbar "+row+"'></div>"); this.filename = $("<div class='filename'></div>").appendTo(this.statusbar); this.size = $("<div class='filesize'></div>").appendTo(this.statusbar); this.progressBar = $("<div class='progressBar'><div></div></div>").appendTo(this.statusbar); this.abort = $("<div class='abort'>中断</div>").appendTo(this.statusbar); obj.after(this.statusbar); this.setFileNameSize = function(name,size) { var sizeStr=""; var sizeKB = size/1024; if(parseInt(sizeKB) > 1024) { var sizeMB = sizeKB/1024; sizeStr = sizeMB.toFixed(2)+" MB"; } else { sizeStr = sizeKB.toFixed(2)+" KB"; } this.filename.html(name); this.size.html(sizeStr); } this.setProgress = function(progress) { var progressBarWidth =progress*this.progressBar.width()/ 100; this.progressBar.find('div').animate({ width: progressBarWidth }, 10).html(progress + "% "); if(parseInt(progress) >= 100) { this.abort.hide(); } } this.setAbort = function(jqxhr) { var sb = this.statusbar; this.abort.click(function() { jqxhr.abort(); sb.hide(); }); } } function handleFileUpload(files,obj) { for (var i = 0; i < files.length; i++) { var fd = new FormData(); fd.append('file', files[i]); var status = new createStatusbar(obj); //Using this we can set progress. status.setFileNameSize(files[i].name,files[i].size); sendFileToServer(fd,status); } } $(document).ready(function() { var obj = $("#dragandrophandler"); obj.on('dragenter', function (e) { e.stopPropagation(); e.preventDefault(); $(this).css('border', '2px solid #0B85A1'); }); obj.on('dragover', function (e) { e.stopPropagation(); e.preventDefault(); }); obj.on('drop', function (e) { $(this).css('border', '2px dotted #0B85A1'); e.preventDefault(); var files = e.originalEvent.dataTransfer.files; //We need to send dropped files to Server handleFileUpload(files,obj); }); $(document).on('dragenter', function (e) { e.stopPropagation(); e.preventDefault(); }); $(document).on('dragover', function (e) { e.stopPropagation(); e.preventDefault(); obj.css('border', '2px dotted #0B85A1'); }); $(document).on('drop', function (e) { e.stopPropagation(); e.preventDefault(); }); }); </script> </body> </html> ------------------------------------------------
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/26 09:52
退会済みユーザー
2015/08/26 10:04
2015/08/26 11:45
退会済みユーザー
2015/08/26 11:49
2015/08/27 05:33
退会済みユーザー
2015/08/27 05:56 編集
2015/08/27 10:12
退会済みユーザー
2015/08/27 10:20
2015/08/27 12:13