プロジェクトでは、テーブル内のデータをエクスポートする必要があります。オンラインで検索したところ、phpexcel が非常に使いやすいことがわかりましたので、共有したいと思います。
PHPEXCEL
- if(!define('BASEPATH')) exit('直接スクリプトアクセスは許可されていません');
- //マテリアル発行オーダーの詳細
- class Read_write{
- /**
- * $name: 選択されたタイプ (CSV、EXCEL2003、2007)
- * $titles: タイトル配列
- * $querys: クエリによって返される配列 $query->result_array();
- * $filename: 保存されたファイル名
- * /
- function write_Factory($titles,$querys,$filename,$name="EXCEL2003"){
-
- $CI = &get_instance();
- $filename=mb_convert_encoding($filename, "GBK","UTF-8" ) ;
-
- switch ($name) {
- case "CSV":
- $CI->excel->write_CSV($titles,$querys,$filename);
- Break;
- case "EXCEL2003":
- $CI - >excel->write_EXCEL2003($titles,$querys,$filename);
- Break;
- case "EXCEL2007":
- $CI->excel->write_EXCEL2007($titles,$querys,$filename);
- Break;
- }
- }
-
- /**
- * $name:
- */
- function read_Facotry($filePath,$sql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol= " B"){
- $CI = &get_instance();
- $name=$this->gt;_file_extend($filePath);
- switch ($name) {
- case "csv":
- $CI->excel-> ; read_CSV($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
- break;
- case "xls":
- $CI->excel->read_2003Excel($filePath,$sql) ,$sheet,$curRow,$riqi,$merge,$mergeCol);
- Break;
- case "xlsx":
- $CI->excel->read_EXCEL2007($filePath,$sql,$sheet,$curRow , $riqi,$merge,$mergeCol);
- Break;
- }
- $CI->mytool->import_info("filePath=$filePath,sql=$sql");
- }
- /**
- * 2012-1-14 ワークブック名 (シート名) を読み取ります
- * /
- function read_sheetNames($filePath){
- $CI = &get_instance();
- $name=$this->_file_extend($filePath);
- $sheetnames;
- switch ($name) {
- case "csv":
- $sheetnames=$CI->excel->read_CSV_Sheet($filePath);
- ブレーク;
- case "xls":
- $sheetnames=$CI->excel->read_2003Excel_Sheet($filePath);
- ブレーク
- case "xlsx":
- $sheetnames=$CI->excel->read_EXCEL2007_Sheets($filePath);
- Break;
- }
- return $sheetnames
- }
- // ファイルのサフィックス名を読み取ります
- function _file_extend($ file_name) {
- $extend =explode("." , $file_name);
- $last=count($extend)-1;
- return $extend[$last];
- }
- //------ --- -------------------------------------予約準備中
- //2011-12-21 CVS 追加エクスポート関数
- パブリック関数 export_csv($filename,$title,$datas, $delim = ",", $newline = "n", $enclosure = '"'){
- $CI = &get_instance();
- $cvs= $this->csv_from_result($title,$datas,$delim,$newline,$enclosure);
- $CI->load->helper('download');
- $name=mb_convert_encoding($ filename, " GBK","UTF-8");
- force_download($name, $cvs);
- }
- /**
- * @param $titles: タイトル
- * @param $datas: データ
- */
- function _csv_from_result($titles,$datas, $delim = "," , $newline = "n", $enclosure = '"'){
- $out = '';
- // まずテーブルの列名から見出しを生成します
- foreach ($titles as $name){
- $name=mb_convert_encoding ($name) , "GBK","UTF-8");
- $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $name).$enclosure.$delim;
- }
-
- $out = rtrim( $out);
- $out .= $newline;
- // 次に結果の配列を調べて行を構築します
- foreach ($datas as $row)
- {
- foreach ($row as $item)
- {
- $ item=mb_convert_encoding($item, "GBK","UTF-8");
- $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure.$delim
- }
- ; $out = rtrim($out);
- $out .= $newline;
- }
-
- return $out;
- }
-
- }
-
コードをコピー PHPEXCEL ~ 13KB ダウンロード(28)
/**- * PHPExcel
- *
- * Copyright (C) 2006 - 2010 PHPExcel
- *
- * このライブラリはフリー ソフトウェアです。再配布したり、
- * GNU Lesser General Public の規約に基づいて変更したりすることができます
- * Free Software Foundation によって発行されたライセンス。
- * ライセンスのバージョン 2.1、または (オプションで) それ以降のバージョンのいずれかです。
- *
- * このライブラリは、役に立つことを願って配布されています
- * ただし、いかなる保証もありません。
- * 商品性または特定目的への適合性についての暗黙の保証もありません。 詳細については、GNU
- * Lesser General Public License を参照してください。
- *
- * このライブラリと一緒に GNU Lesser General Public License
- * ライセンスのコピーを受け取っている必要があります。そうでない場合は、フリー ソフトウェアに連絡してください
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version 1.7.4, 2010-08-26
- */
- /**エラー報告*/
- error_reporting(E_ALL);
- date_default_timezone_set ('アジア/上海');
- /**PHPエクセル*/
- require_once 'Classes/PHPExcel.php';
- require_once 'Classes/PHPExcel/IOFactory.php';
- /**
- * ページ上のEXCELに出力
- */
- /**
- * CI_Excel
- *
- * @package ci
- * @author admin
- * @copyright 2011
- * @version $Id$
- * @access public
- */
- class CI_Excel
- {
- / /列表,Excel列上の标识
- private $cellArray = array(
- 1=>'A', 2=>'B', 3=>'C', 4=>'D', 5=>「E」、
- 6=>「F」、7=>「G」、8=>「H」、9=>「I」、10=>「J」、
- 11=>'K',12=>'L',13=>'M',14=>'N',15=>'O',
- 16=>'P',17 =>'Q',18=>'R',19=>'S',20=>'T',
- 21=>'U',22=>'V',23= >'W',24=>'X',25=>'Y',
- 26=>'Z',
- 27=>'AA', 28=>'AB', 29= >'AC'、30=>'AD'、31=>'AE'、
- 32=>'AF'、33=>'AG'、34=>'AH'、35=> ;'AI',36=>'AJ',
- 37=>'AK',38=>'AL',39=>'AM',40=>'AN',41=> 'AO',
- 42=>'AP',43=>'AQ',44=>'AR',45=>'AS',46=>'AT',
- 47=> 'AU',48=>'AV',49=>'AW',50=>'AX',51=>'AY',
- 52=>'AZ', 53=>' BA'、54=>'BB'、55=>'BC'、56=>'BD'、57=>'BE'、
- 58=>'BF'、59=>'BG ', 60=>'BH', 61=>'BI', 62=>'BJ', 63=>'BK', 64=>'BL');
- プライベート $E2003 = 'E2003 ';
- プライベート $E2007 = 'E2007';
- プライベート $ECSV = 'ECSV';
- プライベート $tempName; //当读取合文件時,二行目空であれば第一行目の名前
- /***********************************データのエクスポート開始************** **** ***********************************/
- /**
- * Excel2007ファイルを生成します
- */
- function write_EXCEL2007($title='', $data='',$name='')
- {
- $objPHPExcel=$this->_excelComm($title,$data,$name);
- // 出力をクライアントの Web ブラウザ (Excel2007) にリダイレクトします
- ヘッダー('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8');
- header("Content-Disposition:attachment;filename=$name.xlsx");
- header('Cache -Control: max-age=0');
-
- $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
- $objWriter->save('php://output'); //output は、出力マシンに入力データを書き込むことを許可します。print() の方法は echo() と同じです。
- exit;
- }
- /**
- * Excel2003ファイルを生成します
- */
- function write_EXCEL2003($title='',$data='',$name=''){
-
- $objPHPExcel=$this->_excelComm($ title,$data,$name);
- //出力をクライアントの Web ブラウザ (Excel5) にリダイレクトします
- header('Content-Type: application/vnd.ms-excel;charset=UTF-8');
- header(" Content-Disposition:attachment;filename=$name.xls");
- header('Cache-Control:max-age=0');
-
- $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
- $objWriter->save('php://output');
-
- }
- /**
- * CSVファイルを生成します
- */
- function write_CSV($title='',$data='',$name='') {
- $objPHPExcel=$this->_excelComm($title,$data,$name);
-
- header("Content-Type: text/csv;charset=UTF-8");
- header("Content-Disposition:attachment; filename=$name.csv");
- header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
- header('有効期限:0');
- header('Pragma:public');
- $objWriter = new PHPExcel_Writer_CSV($objPHPExcel,'CSV');
- $objWriter->save("php://output");
- exit;
- }
-
- function _excelComm($title,$data,$name) ){
- // 新しい PHPExcel オブジェクトを作成します
- $objPHPExcel = new PHPExcel();
- $objPHPExcel=$this->gt;_writeTitle($title,$objPHPExcel);
- $objPHPExcel=$this->_writeDatas($data, $objPHPExcel);
- $objPHPExcel=$this->_write_comm($name,$objPHPExcel);
- return $objPHPExcel;
- }
-
- //出标题
- function _writeTitle($title,$objPHPExcel){
- //表头循環(标题)
- foreach ($title as $tkey => $tvalue){
- $tkey = $tkey+ 1;
- $cell = $this->cellArray[$tkey].'1'; //第$tkey列の第1行,列の标识符(a..z)
- // データを追加 //表头
- // $tvalue=mb_convert_encoding($tvalue, "UTF-8","GBK ");
- $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cell, $tvalue); //設定第$row列の值(标题)
- }
- return $objPHPExcel;
- }
- //コンテンツ出力
- function _writeDatas($data,$objPHPExcel){
- //コンテンツ循環(データベース库查询の戻り値)
- foreach($data as $key =>$value) {
- $i = 1;
- foreach ($value as $mkey =>$mvalue){ // 返される種類はarray([0]=>array) ());, したがって、ここで循環する値、つまりここの配列です
-
- $rows = $key+2; //始まりは二行目
- $mrow = $this->cellArray[$i].$rows; //第$i列の第$row行
- // $mvalue=mb_convert_encoding($mvalue, "GBK","UTF-8");
- // print_r($mrow."--->>".$ mvalue);
-
- $objPHPExcel->setActiveSheetIndex(0)->setCellValueExplicit($mrow, $mvalue);
- $i++;
- }
- }
- return $objPHPExcel;
- }
- function _write_comm($name,$objPHPExcel){
- // シートの名前を変更します(左下角の标题)
- //$objPHPExcel->getActiveSheet()->setTitle($ name);
- // アクティブ シート インデックスを最初のシートに設定すると、Excel はこれを最初のシートとして開きます
- $objPHPExcel->setActiveSheetIndex(0); //默认显示
- return $objPHPExcel;
- }
- /***********************************データエクスポート終了************* ***** ***********************************/
-
- /***********************************データ読み込み開始************* **** ************************************/
-
- /**
- * 使用法、$insertSql:insert xx (x1,x2,x3,x4) 値 (
- )*/
- // function _comm_insert($objReader,$filePath,$insertSql,$sheet=2,$ curRow=2,$riqi=TRUE){
- function _comm_insert($objPHPExcel,$insertSql,$curRow,$merge=FALSE,$mergeCol='B'){
- $CI = &get_instance();
- $currentSheet = $objPHPExcel ->getSheet();//指定された激活を獲得
- /**合計で列が何個あるかを取得する*/
- $allColumn = $currentSheet->getHighestColumn();
- /**総行数を取得する*/
- $allRow = $currentSheet->getHighestRow();
- $size=strlen($allColumn);//如果超出Z,则出现不执行下去
- $esql="";
-
- for($currentRow = $curRow;$currentRow<=$allRow;$currentRow++){
- $sql=$insertSql;
- if($size==2){
- $i=1;
- $currentColumn='A';
- while ($i <= 26) {
- $address = $currentColumn.$currentRow ;
- $temp=$currentSheet->getCell($address)->getTotalValue();
- $sql.='"'.$temp.'"'.",";
- $currentColumn++;
- $i++;
- }
- for($currentColumn='AA';$currentColumn $address = $currentColumn.$currentRow;
- $sql.='"'.$currentSheet->getCell($ address)->getPracticalValue().'"'.",";
- }
-
- }else{
- for($currentColumn='A';$currentColumn if($merge )//結合された値の場合は判断し、この行の値が NULL の場合は、前の tempName 値を $temp;
- if($currentColumn==$mergeCol){//ここで指定しますB 列の名前は、完了した値の取得を開始します。その後、さまざまな再調整が行われます。
- $temp=$currentSheet->getCell($mergeCol.$currentRow)->getTotalValue();
- if(empty($temp)){
- $temp=$this->tempName;
- }else{
- $this->tempName=$temp;
- }
- }else{
- $address = $currentColumn.$currentRow;//getValue()
- $temp=$currentSheet->getCell($address)->getTotalValue( );
- }
- }else{
- $address = $currentColumn.$currentRow;//getValue()
- $temp=$currentSheet->getCell($address)->getTotalValue();
- }
- $sql=$sql.'"'.$temp.'"'.",";
- }
- }
- $esql=rtrim($sql,",").')';
- //echo ($esql);
- //return;
- $CI->db->simple_query($esql);
- }
- }
- /**
- * $filePath: ファイルを読み取るパス
- * $insertSql: スペル付き SQL
- */
- function read_EXCEL2007($filePath,$insertSql,$ Sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
- $objs=$this->_get_PHPExcel($this->E2007,$filePath,$sheet ,$insertSql,$riqi);
- $this->_comm_insert($objs["EXCEL"],$objs["SQL"],$curRow,$merge,$mergeCol);
- }
- /**
- * 2003Excelを読んでください
- */
- function read_2003Excel($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
- $objs=$this->_get_PHPExcel($this->E2003,$filePath,$sheet,$insertSql,$riqi);
- $this->_comm_insert($objs["EXCEL"],$objs[" SQL"],$curRow,$merge,$mergeCol);
- }
- /**
- * CSVを読む
- */
- 関数 read_CSV($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
- $objs=$this->_get_PHPExcel($this->ECSV,$filePath,$sheet,$insertSql,$riqi,$mergeCol);
- $this->_comm_insert($objs["EXCEL"],$ objs["SQL"],$curRow,$merge);
- }
- //--------------------------------读取工作薄信开始
- /**
- * Excel2007 ワークブック名を読み取ります
- */
- function read_EXCEL2007_Sheets($filePath){
- return $this->_get_sheetnames($this->E2007,$filePath);
- }
-
- /**
- * 2003 Excel ワークブック名を読み取ります
- */
- function read_2003Excel_Sheet($filePath){
- return $this->gt;_get_sheetnames($this->E2003,$filePath);
- }
- /**
- * CSV ワークブック名の読み取り
- */
- function read_CSV_Sheet($filePath){
- return $this->gt;_get_sheetnames($this ->ECSV,$filePath);
- }
- //--------------------------------读取工作薄情報结束
- /**
- * 2012-1-14 ------------------------
- */
- //读取Reader流
- function _get_Reader($name){
- $reader=null;
- switch ($name) {
- case $this->E2003:
- $ Reader = new PHPExcel_Reader_Excel5();
- ブレーク;
- case $this->E2007:
- $reader = new PHPExcel_Reader_Excel2007();
- ブレーク;
- case $this->ECSV:
- $reader = new PHPExcel_Reader_CSV();
- Break;
- }
- return $reader;
- }
- //$objPHPExcel文件对象を取得
- function _get_PHPExcel($name,$filePath,$sheet,$insertSql,$riqi){
- $reader=$this->_get_Reader( $name);
- $PHPExcel= $this->_init_Excel($reader,$filePath,$sheet);
- if($riqi){ //如果不必要日期,则忽略.
- $insertSql=$insertSql.' "'.$reader->getSheetTitle().'"'.",";//第一字段固定は日期2012-1-9
- }
- return array("EXCEL"=>$PHPExcel," SQL"=>$insertSql);
- }
-
- //工作薄名を取得
- function _get_sheetnames($name,$filePath){
- $reader=$this->gt;_get_Reader($name);
- $this-> ;_init_Excel($reader,$filePath);
- return $reader->getAllSheets();
- }
- //追加文書
- function _init_Excel($objReader,$filePath,$sheet=''){
- $objReader-> ;setReadDataOnly(true);
- if(!empty($sheet)){
- $objReader->setSheetIndex($sheet);//第二シートを取得します。
- }
- return $objReader->load("$filePath");
- }
- //---------------------------- ---2012-1-14
- }
- /***********************************データ読み取り終了************* ** ************************************/
コードをコピー
[PHP] コード
- -------------------------------------インポート操作---------------------- --------- ----
- /**
- * $sql="「.mymsg::WY_MMB.」に挿入します。" (dizhi,xingming) 値 (";
- )*/
- //まずアップロードしてからファイルを読み取ります
- function upByFile($sql, $url, $curRow = 2, $RIQI = true,$merge = FALSE,$mergeCol= 'B')
- {
-
- $CI = &get_instance();
- $config['allowed_types'] = '*' //すべてのファイルを許可します
- $config['upload_path'; ] = IMPORT; // ファイルのみ パス
- $CI->load->library('upload', $config);
-
- if ($CI->upload->do_upload()) { //デフォルトの名前は次のとおりです: userfile
- $data = $CI->upload->data();
-
- $full_name = $data['full_path'] //保存されたパスを取得します
- $full_name = mb_convert_encoding($full_name) , "GBK", "UTF- 8");
- $sheet = $CI->input->post("sheet") // x 番目の縦棒グラフを読み取ります
- if (empty($sheet)) {
- $sheet = 0;
- }
-
- $CI->read_write->read_Facotry($full_name, $sql, $sheet, $curRow, $RIQI,$merge,$mergeCol) //挿入コマンドを実行します
-
- }
-
- $this->alert_msg(mymsg::IMPORT_SUCCESS, site_url($url));
- }
-
- ---------------------- --------エクスポート操作 ----------------------------------
- //指定されたテーブルフィールド
- public function show_export(){
- //-----データベースフィールド
- $field=implode(",",$this->input->post("listCheckBox_show"));//データベースfield
- //表示名
- $titleArray=$ this->input->post("listCheckBox_field");//表示されるフィールド名 (field Comment アノテーション名、いくつかの空の配列が渡されるため、フィルターする必要があります) )
- $title=array();
- foreach ( $titleArray as $key => $value) {
- if (!empty($value)) {
- $title[]=$value;
- }
- }
- / /---データベーステーブル名
- $table=$ this->input->post("tableName");
- //--データベーステーブル名(コメント)
- $show_name=$this->input-> ;post("tableComment");
- // -- エクスポートの種類
- $type=$this->input->post("type");
-
- //-- 年と月の場合
- $y_month=$ this->input->post("year_month ");
- if(!empty($y_month)){
- $where["riqi"]=$y_month;
- $datas=$this->mcom_model-> ;queryByWhereReField($field,$where,$table) ;
- }else{
- //--書き込まれたデータ
- $datas=$this->mcom_model->queryByField($field,$table); //---エクスポートを開始します
- $this ->read_write->write_Factory($title,$datas,$show_name,$type);
- }
-
-
- コードをコピー
|
php、PHPEXcel