프로젝트에서 테이블의 데이터를 내보내야 하는데 온라인에서 검색해보니 phpexcel이 꽤 사용하기 쉽다는 것을 알게 되었어요
PHPEXCEL
- if(!definated('BASEPATH'))exit('직접 스크립트 액세스가 허용되지 않습니다.');
- //자료 배포 자재비 세부정보
- class Read_write{
- /**
- * $name: 선택한 유형(CSV, EXCEL2003, 2007)
- * $titles: 제목 배열
- * $querys: 쿼리 $query->result_array();
- * $querys: 쿼리에서 반환된 배열 filename : 저장된 파일명
- */
- function write_Factory($titles,$querys,$filename,$name="EXCEL2003"){
-
- $ CI = &get_instance();
- $filename=mb_convert_encoding($filename, "GBK","UTF-8");
-
- 스위치($name) {
- 대소문자 "CSV":
- $CI->excel->write_CSV($titles,$querys,$filename);
- break;
- 케이스 "EXCEL2003":
- $CI->excel->write_EXCEL2003($ titles,$querys,$filename);
- 중단;
- 사례 "EXCEL2007":
- $CI->excel->write_EXCEL2007($titles,$querys,$filename);
- 중단 ;
- }
- }
-
- /**
- * $이름:
- */
- 함수 read_Facotry($filePath,$sql,$sheet=0,$curRow=2,$riqi=TRUE, $merge=FALSE,$mergeCol="B"){
- $CI = &get_instance();
- $name=$this->_file_extend($filePath);
- 스위치($name) {
- 사례 "csv":
- $CI->excel->read_CSV($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
- break;
- 케이스 "xls":
- $CI->excel->read_2003Excel($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
- break;
- 케이스 "xlsx":
- $CI->excel->read_EXCEL2007($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
- break;
- }
- $CI->mytool->import_info("filePath=$filePath,sql=$sql");
- }
- /**
- * 2012-1-14 통합 문서 이름(시트 이름) 읽기
- */
- 함수 read_sheetNames($filePath ){
- $CI = &get_instance();
- $name=$this->_file_extend($filePath);
- $sheetnames;
- 스위치($name) {
- 케이스 "csv ":
- $sheetnames=$CI->excel->read_CSV_Sheet($filePath);
- break;
- 케이스 "xls":
- $sheetnames=$CI->excel-> ;read_2003Excel_Sheet($filePath);
- break;
- 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 내보내기 기능
- 공개 함수 내보내기_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($ 파일 이름, "GBK","UTF-8");
- force_download($name, $cvs)
- }
- /**
- * @param $titles:title
- * @param $datas:data
- */
- 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.$ 인클로저, $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
- *
- * 版權所有(C) 2006 - 2010 PHPExcel
- *
- * 該函式庫是免費軟體;您可以重新散佈它和/或
- * 根據GNU Lesser General Public 的條款修改它
- * 由自由軟體基金會發布的授權;
- * 授權的2.1 版,或(由您選擇)任何更高版本。
- *
- * 分發此程式庫的目的是希望它有用,
- * 但不提供任何保證;甚至沒有默示保證
- *適銷性或特定用途的適用性。 請參閱 GNU
- * 較小通用公共授權以了解更多詳細資訊。
- *
- * 您應該已收到GNU 小通用公共許可證
- * 與此庫一起的許可證;如果沒有,請寫信給自由軟體
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright 版權所有(c) 2006 - 2010 cel /www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl- 2.1.txt LGPL
- * @版本1.7.4, 2010-08 -26
- */
- /**錯誤報告*/
- error_reporting(E_ALL);
-
-
- date_default_timezone_set('預設/預設');
-
- /**PHPExcel*/
- require_once 'Classes/PHPExcel.php';
- require_once 'Classes/PHPExcel/IOy.';
- require_once 'Classes/PHPExcel/IOy.';
- require_once 'Classes/PHPExcel/IOy.';
- require_once 'Classes/PHPExcel/IOy.';
- require_once 'Classes/PHPExcel/IOy.'PExcel/IOphp;
- /**
- * 輸出到頁面上的EXCEL
- */
- /**
- * CI_Excel
- *
- * @package ci
- * @author admin
- * @copyright 2011
- * @version $Id$
- * @access public
- * @version $Id$
- * @access public
- * @version $Id$
- * @access public
- * @version $Id$
- * @access public
- * @version $Id$
- * @access public
- */
- class CI_Excel
- {
- //指定,ExcelOriginalSpecification
- 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',2 =>'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=>'啊', 35=>'AI',36=>'AJ',
- 37=>'AK',38=>'AL',39=>'AM',40= >'AN',41=>'AO',
- 42=>'AP',43=>'AQ',44=>'AR',45=>'AS',4 =>'AT',
- 47=>'AU',48=>'AV',49=>'是',50=>'AX',51=>'否',
- 52 => 'AZ', 53= >'BA', 54=>'BB', 55=>'BC', 56=>'BD', 57=>'BE',
- 58=>'BF', =>'BG', 60 =>'BH', 61=>'BI', 62=>'BJ', 63=>'BK', 64=>'BL'); E2003';
- private $E2007 = 'E2007';
- 私人$ECSV = 'ECSV';
- 私人$tempName; //指定特定類型,產生預設值,產生預設值
- /*********************************匯出資料開始**************** ************************************/
- /** * 產生Excel2007檔案*/ function write_EXCEL20 07( $title=' ',$data ='',$name='') { $objPHPExcel=$this->_excelComm($title,$data='',$name); //將Application基於網頁設計器(Excel 2007) header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'); 版面: Open;filename=$name.xlsx") ; header('Cache-Control: max-age=0'); ") ; $objWriter->save('php://output'); //output 是 print() 和 echo() 方法的預設值。
- 종료;
- }
- /**
- * Excel2003 파일 생성
- */
- 함수 write_EXCEL2003($title='',$data='',$name=''){
-
- $objPHPExcel=$this->_excelComm($title,$data,$name);
- //클라이언트의 웹 브라우저(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 파일 생성
- */
- 함수 write_CSV($title='',$data='',$name=''){
- $objPHPExcel=$this->_excelComm($title ,$data,$name);
-
- header("콘텐츠 유형: text/csv;charset=UTF-8");
- header("콘텐츠 처리: 첨부 파일; 파일 이름=$name.csv");
- header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
- header('만료:0');
- 헤더('Pragma:public');
- $objWriter = new PHPExcel_Writer_CSV($objPHPExcel,'CSV');
- $objWriter->save("php://output");
- 종료;
- }
-
- function _excelComm($title,$data,$name){
- // 새 PHPExcel 객체 생성
- $objPHPExcel = new PHPExcel();
- $objPHPExcel=$this->_writeTitle($title, $objPHPExcel);
- $objPHPExcel=$this->_writeDatas($data,$objPHPExcel);
- $objPHPExcel=$this->_write_comm($name,$objPHPExcel);
- $objPHPExcel 반환 ;
- }
-
- //输ude标题
- function _writeTitle($title,$objPHPExcel){
- //表头循环(标题)
- foreach ($title as $tkey => ; $t값){
- $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;
- }
- //输take内容
- function _writeDatas($data,$objPHPExcel){
- //内容循环(数据库查询的返回值)
- foreach($data as $key =>$value) {
- $i = 1;
- foreach ($value as $mkey =>$ mvalue){ //返回的类型是array([0]=>array());,所以此处要循环它的value,也就是里环它的value,也就是里环它的value
-
- $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) 값 (
- */
- // 함수 _comm_insert($objReader, $filePath,$insertSql,$sheet=2,$curRow=2,$riqi=TRUE){
- 함수 _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)->getCalculatedValue();
- $sql. ='"'.$temp.'"'.",";
- $currentColumn ;
- $i ;
- }
- for($currentColumn='AA';$currentColumn<=$allColumn ;$currentColumn ){
- $address = $currentColumn.$currentRow;
- $sql.='"'.$currentSheet->getCell($address)->getCalculatedValue().'"'." ,";
- }
-
- }else{
- for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn ){
- if($merge){//如果是读取同并的值,则判断,如果此行的值为NULL,则把face前的tempName赋值给$temp;
- if($currentColumn==$mergeCol){//这里先指定从B列당신의 이름은 서로 다릅니다.
- $temp=$currentSheet->getCell($mergeCol.$currentRow)->getCalculatedValue();
- if(empty($temp)){
- $temp=$this->tempName ;
- }else{
- $this->tempName=$temp;
- }
- }else{
- $address = $currentColumn.$currentRow;//getValue()
- $temp=$ currentSheet->getCell($address)->getCalculatedValue();
- }
- }else{
- $address = $currentColumn.$currentRow;//getValue()
- $temp=$currentSheet->getCell($address)->getCalculated();
- }
- $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,$merge= "B"){
- $objs=$this->_get_PHPExcel($this->E2003,$filePath,$sheet,$insertSql,$riqi);
- $this->_comm_insert($objs ["EXCEL "],$objs["SQL"],$curRow,$merge,$mergeCol);
- }
- /**
- * 讀取CSV
- */
- function read_CSV($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$merge= "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);
- }
- }
- < *
- * 讀取2003Excel工作薄名稱
- */
- function read_2003Excel_Sheet($filePath){
- return $this->_get_sheetnames($this->E2003,$filePath);
- }
- /**>🎝> /
- function read_CSV_Sheet($filePath){
- return $this->_get_sheetnames($this->ECSV,$filePath);
- }
- //---- ------ ----------------------讀取工作薄資訊結束
- /**
- * 讀取CSV工作薄名稱
- */
- //讀取Reader流
- function _get_Reader($name){
- $reader=null;
- switch ($name) {
- case $this->E2003:
- $reader = new PHPExcel_Reader_Excel5 ();< ;
- 案例$this->E2007:
- $reader = new PHPExcel_Reader_Excel2007();
- 中斷;
- 案例$this->ECSV:
- $ reader = new🎜> 案例$this->ECSV:
- $ reader = new PHPcm. > 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){ //如果不需要日期,則忽略。
- }
- return array("EXCEL"=>$PHPExcel,"SQL"=>$insertSql);
- }
- //取得工作薄名稱
- function _get_sheetnames($名稱,$filePath){
- $reader=$this->_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);//讀取第幾個Sheet。
- }
- return $objReader->load("$filePath");
- }
- //-------------------- ----------2012-1-14
- }
- /************************************데이터 읽기 종료**************** ***************************************/
코드 복사
[PHP] 코드
- ------------가져오기 작업------------ --------- ------------
- /**
- * $sql="INSERT INTO ".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"));//데이터베이스 필드
- //표시 이름
- $titleArray=$this->input->post("listCheckBox_field");// 표시되는 필드 이름(필드 주석 주석 이름, 일부 빈 배열이 전달되므로 필터링해야 함)
- $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);
- }
코드 복사
|