php操作excel导出导入
- 格式:doc
- 大小:58.50 KB
- 文档页数:10
PHP导出Excel的类库—PHPExcel,支持附带图片PHP导出Excel的类库—PHPExcel,支持附带图片PHP导出Excel比较简单的办法有:一、直接通过PHP的header来导出Excel。
view sourceprint?01.header("Content-type:application/vnd.ms-excel");02.header("Content-Disposition:attachment;filename=excel_data.xls");03.04.$tx='HEADER';05.echo $tx."\n\n";06.//输出内容如下:07.echo "Name"."\t";08.echo "Age"."\t";09.echo "\n";10.echo "lilei"."\t";11.echo "25"."\t";二、采用Excel_XML类。
Excel_XML是一个简单的PHP导出XML格式Excel的类。
下载地址:/p/php-excel/downloads/list使用方法:view sourceprint?01.// load library02.require 'php-excel.class.php';03.04.// create a simple 2-dimensional array05.$data = array(06.1 => array ('Name', 'Surname'),07.array('Schwarz', 'Oliver'),08.array('Test', 'Peter')09.);10.11.// generate file (constructor parameters are optional)12.$xls = new Excel_XML('UTF-8', false, 'My Test Sheet');13.$xls->addArray($data);14.$xls->generateXML('my-test');以上两种是比较简单的导出Excel的方法,但功能不够强大,只能满足一般的需求。
基于php导出到Excel或CSV的详解(附utf8、gbk编码转换)php导⼊到excel乱码是因为utf8编码在xp系统不⽀持所有utf8编码转码⼀下就完美解决了Php代码复制代码代码如下:<?phpheader("Content-Type: application/vnd.ms-excel; charset=UTF-8");header("Pragma: public");header("Expires: 0");header("Cache-Control: must-revalidate, post-check=0, pre-check=0");header("Content-Type: application/force-download");header("Content-Type: application/octet-stream");header("Content-Type: application/download");header("Content-Disposition: attachment;filename=11.xls ");header("Content-Transfer-Encoding: binary ");>Php代码复制代码代码如下:<?$filename="php导⼊到excel-utf-8编码";$filename=iconv("utf-8", "gb2312", $filename);echo $filename;>Php代码复制代码代码如下:<?phpheader("Content-Type: application/vnd.ms-excel; charset=UTF-8");header("Pragma: public");header("Expires: 0");header("Cache-Control: must-revalidate, post-check=0, pre-check=0");header("Content-Type: application/force-download");header("Content-Type: application/octet-stream");header("Content-Type: application/download");header("Content-Disposition: attachment;filename=11.xls ");header("Content-Transfer-Encoding: binary ");>Php代码复制代码代码如下:0.<?0.$filename="php导⼊到excel-utf-8编码";0.echo $filename;0.?>访问⽹站的时候就下载到excel⾥⾯要弄单元格区别的话⽤table表格做⽹页的就可以了====================== 其他⽅法 =============================复制代码代码如下:0.<?php0.header("Content-type:application/vnd.ms-excel");0.header("Content-Disposition:filename=php2excel.xls");0.echo "A1/t B1/t C1/n";0.echo "A2/t B2/t C2/n";0.echo "A3/t B3/t C3/n";0.echo "A4/t B4/t C4/n";0.?>复制代码代码如下:<?php$action =$_GET['action'];if ($action=='make'){$fp = fopen("demo_csv.csv","a"); //打开csv⽂件,如果不存在则创建$title = array("First_Name","Last_Name","Contact_Email","Telephone"); //第⼀⾏数据$data_1 = array("42343","423432","4234","4234");$data_2 = array("4234","Last_Name","Contact_Email","Telephone");$title = implode(",",$title); //⽤ ' 分割成字符串$data_1 = implode(",",$data_1); // ⽤ ' 分割成字符串$data_2 = implode(",",$data_2); // ⽤ ' 分割成字符串$data_str =$title."/r/n".$data_1."/r/n".$data_2."/r/n"; //加⼊换⾏符fwrite($fp,$data_str); // 写⼊数据fclose($fp); //关闭⽂件句柄echo "⽣成成功";}echo "<br>";echo "<a href='?action=make'>⽣成csv⽂件</a>";>也可以做⼀个封闭函数:复制代码代码如下:function exportToCsv($csv_data, $filename = 'export.csv') {$csv_terminated = "/n";$csv_separator = ",";$csv_enclosed = '"';$csv_escaped = "//";// Gets the data from the database$schema_insert = '';$out = '';// Format the dataforeach ($csv_data as $row){$schema_insert = '';$fields_cnt = count($row);//printr($row);$tmp_str = '';foreach($row as $v){$tmp_str .= $csv_enclosed.str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $v).$csv_enclosed.$csv_separator;} // end for$tmp_str = substr($tmp_str, 0, -1);$schema_insert .= $tmp_str;$out .= $schema_insert;$out .= $csv_terminated;} // end whileheader("Cache-Control: must-revalidate, post-check=0, pre-check=0");header("Content-Length: " . strlen($out));header("Content-type: text/x-csv");header("Content-Disposition:filename=$filename");echo $out;/*$csv_data = array(array('Name', 'Address'));array_push($csv_data, array($row['name'],$row['address']));...exportToCsv($csv_data,'new_file.csv');*/复制代码代码如下:<?/*** Simple class to properly output CSV data to clients. PHP 5 has a built* in method to do the same for writing to files (fputcsv()), but many times* going right to the client is beneficial.** @author Jon Gales*/class CSV_Writer {public $data = array();public $deliminator;/*** Loads data and optionally a deliminator. Data is assumed to be an array* of associative arrays.** @param array $data* @param string $deliminator*/function __construct($data, $deliminator = ","){if (!is_array($data)){throw new Exception('CSV_Writer only accepts data as arrays');}$this->data = $data;$this->deliminator = $deliminator;}private function wrap_with_quotes($data){$data = preg_replace('/"(.+)"/', '""$1""', $data);return sprintf('"%s"', $data);}/*** Echos the escaped CSV file with chosen delimeter** @return void*/public function output(){foreach ($this->data as $row){$quoted_data = array_map(array('CSV_Writer', 'wrap_with_quotes'), $row); echo sprintf("%s/n", implode($this->deliminator, $quoted_data));}}/*** Sets proper Content-Type header and attachment for the CSV outpu** @param string $name* @return void*/public function headers($name)header('Content-Type: application/csv');header("Content-disposition: attachment; filename={$name}.csv");}}/*//$data = array(array("one","two","three"), array(4,5,6));$data[] = array("one","two","three");$data[] = array(4,5,6);$csv = new CSV_Writer($data);$csv->headers('test');$csv->output();*/复制代码代码如下:<?phprequire_once 'Spreadsheet/Writer.php';$workbook = new Spreadsheet_Excel_Writer();/* ⽣成 CSV$filename = date('YmdHis').'.csv';$workbook->send($filename); // 发送 Excel ⽂件名供下载*/// ⽣成 Excel$filename = date('YmdHis').'.xls';$workbook->send($filename); // 发送 Excel ⽂件名供下载$workbook->setVersion(8);$workbook->setBIFF8InputEncoding('UTF-8');$worksheet =& $workbook->addWorksheet("Sheet-1");$data[]= array('id','username','company','email','mob','daytime','intent');$data[] = array(1,'⽼梁','**⼯作室','','1363137966*',time(),'y');$total_row = count($data);$total_col = count($data[0]);for ($row = 0; $row < $total_row; $row ++) {for ($col = 0; $col < $total_col; $col ++) {$worksheet->writeString($row, $col, $data[$row][$col]); // 在 sheet-1 中写⼊数据 }}/*$worksheet =& $workbook->addWorksheet("Sheet-2");$data[]= array('id','username','company','email','mob','daytime','intent');$data[] = array(1,'⽼梁','**⼯作室','','1363137966*',time(),'y');$total_row = count($data);$total_col = count($data[0]);for ($row = 0; $row < $total_row; $row ++) {for ($col = 0; $col < $total_col; $col ++) {$worksheet->writeString($row, $col, $data[$row][$col]); // 在 sheet-2 中写⼊数据 }}*/$workbook->close(); // 完成下载>读取Excel⽂件function Read_Excel_File($ExcelFile,$Result)$ExcelFile Excel⽂件名$Result 返回的结果函数返回值正常返回0,否则返回错误信息返回的值数组$result[sheet名][⾏][列] 的值为相应Excel Cell的值function Create_Excel_File($ExcelFile,$Data) $ExcelFile Excel⽂件名$Data Excel表格数据请把函数写在PHP脚本的开头例1:复制代码代码如下:<?require "excel_class.php";Read_Excel_File("Book1.xls",$return);for ($i=0;$i<count($return[Sheet1]);$i++){for ($j=0;$j<count($return[Sheet1][$i]);$j++) {echo $return[Sheet1][$i][$j]."|";}echo "<br>";}>例2:复制代码代码如下:<?require "excel_class.php";Read_Excel_File("Book1.xls",$return); Create_Excel_File("ddd.xls",$return[Sheet1]); >。
PHP如何导入导出Excel1:利用smarty,生成符合Excel规范的XML或HTML文件支持格式,非常完美的导出方案。
不过导出来的的本质上还是XML文件,如果用来导入就需要另外处理了。
需要注意的是如果导出的表格行数不确定时,最好在模板中把”ss:ExpandedColumnCount=”5″ ss:ExpandedRowCount=”21″”之类的东西删掉。
2、利用pack函数打印出模拟Excel格式的断句符号,这种更接近于Excel标准格式,用office2003修改后保存,还不会弹出提示,推荐用这种方法。
缺点是无格式。
PHP代码<?php// Send Header header(”Pragma: public”); header(”Expires: 0″);header(”Cache-Control: must-revalidate, post-check=0, pre-check=0″);header(”Content-Type: application/force-download”);header(”Content-Type: application/octet-stream”);header(”Content-Type: application/download”);;header(”Content-Disposition:attachment;filename=test.xls “);header(”Content-Transfer-Encoding: binary “);// XLS Data Cell xlsBOF();xlsWriteLabel(1,0,”My excel line one”);xlsWriteLabel(2,0,”My excel line two : “);xlsWriteLabel(2,1,”Hello everybody”);xlsEOF(); function xlsBOF() { echo pack(”ssssss”, 0×809, 0×8, 0×0, 0×10, 0×0, 0×0); return; }function xlsEOF() { echo pack(”ss”, 0×0A, 0×00); return; }function xlsWriteNumber($Row, $Col, $Value) { echo pack(”sssss”, 0×203, 14, $Row, $Col, 0×0); echo pack(”d”, $Value); return; }function xlsWriteLabel($Row, $Col, $Value ) { $L = strlen($Value); echo pack(”ssssss”, 0×204, 8 + $L, $Row, $Col, 0×0, $L); echo $Value; return; } ?>不过在64位linux系统中使用时失败了,断句符号全部变成了乱码。
使⽤phpofficephpspreadsheet,导⼊导出数据1、composer安装:composer require phpoffice/phpspreadsheet2、导出类Export,放在服务层:<?phpnamespace app\backend\service;use \PhpOffice\PhpSpreadsheet\Spreadsheet;use \PhpOffice\PhpSpreadsheet\IOFactory;//use \PHPExcel_Style_NumberFormat; //设置列的格式==>>设置⽂本格式class Export{public function exportAdmin($startTime, $endTime){$adminList = db('admin')->where('create_time', 'between', [$startTime, $endTime])->order(['admin_id' => 'desc'])->select();//return $adminList;$newExcel = new Spreadsheet(); //创建⼀个新的excel⽂档$objSheet = $newExcel->getActiveSheet(); //获取当前操作sheet的对象$objSheet->setTitle('管理员表'); //设置当前sheet的标题//设置宽度为true,不然太窄了$newExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);$newExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);$newExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);$newExcel->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);//设置第⼀栏的标题$objSheet->setCellValue('A1', 'id')->setCellValue('B1', '⽤户名')->setCellValue('C1', '密码')->setCellValue('D1', '时间');//第⼆⾏起,每⼀⾏的值,setCellValueExplicit是⽤来导出⽂本格式的。
php利用PHPExcel类导出导入Excel用法PHPExcel类是php一个excel表格处理插件了,下面我来给大家介绍利用PHPExcel类来导入与导出excel表格的应用方法,有需要了解的朋友不防参考参考(PHPExcel自己百度下载这里不介绍了)。
导出Excel用法//设置环境变量(新增PHPExcel)代码如下复制代码set_include_path('.'. PATH_SEPARATOR . Yii::app()->basePath.'/lib/PHPExcel' .PATH_SEPARATOR .get_include_path());//注:在yii中,也可以直接Yii::import(“application.lib.PHPExcel.*”);//引入PHPExcel相关文件require_once "PHPExcel.php";require_once 'PHPExcel/IOFactory.php';require_once 'PHPExcel/Writer/Excel5.php';//把要导出的内容放到表格代码如下复制代码//新建$resultPHPExcel = new PHPExcel();//设置参数//设值$resultPHPExcel->getActiveSheet()->setCellValue('A1', '季度');$resultPHPExcel->getActiveSheet()->setCellValue('B1', '名称');$resultPHPExcel->getActiveSheet()->setCellValue('C1', '数量');$i = 2;foreach($data as $item){$resultPHPExcel->getActiveSheet()->setCellValue('A' . $i, $item['quarter']); $resultPHPExcel->getActiveSheet()->setCellValue('B' . $i, $item['name']); $resultPHPExcel->getActiveSheet()->setCellValue('C' . $i, $item['number']);$i ++;}设置导出参数代码如下复制代码//设置导出文件名$outputFileName = 'total.xls';$xlsWriter = new PHPExcel_Writer_Excel5($resultPHPExcel);//ob_start(); ob_flush();header("Content-Type: application/force-download");header("Content-Type: application/octet-stream");header("Content-Type: application/download");header('Content-Disposition:inline;filename="'.$outputFileName.'"');header("Content-Transfer-Encoding: binary");header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");header("Cache-Control: must-revalidate, post-check=0, pre-check=0");header("Pragma: no-cache");$xlsWriter->save( "php://output" );输出有错。
使用php导出excel时处理复杂表头的万能方法处理复杂表头时,使用PHP导出Excel表格的方法在使用PHP导出Excel表格时,当表头比较复杂时,可能会遇到一些困难。
然而,有一种简单而有效的方法可以处理这种情况。
首先,我们需要将表头信息保存在一个数组中。
该数组中的每个元素代表一个表头。
例如,我们可以使用以下代码定义一个包含复杂表头的数组:$tableHeaders = [['A1', 'B1', 'C1'],['A2', 'B2', 'C2'],['A3', 'B3', 'C3']];接下来,我们需要使用递归函数来合并和展开表头。
这样可以确保表头在导出Excel时正确格式化。
function mergeHeaders($headers, &$result, $startColumn = 0, $startRow = 0) {$maxRow = 1;foreach ($headers as $rowIndex => $headerRow) {foreach ($headerRow as $columnIndex => $headerCell) {$cell = $result->getActiveSheet()->getCellByColumnAndRow($columnIndex + $startColumn, $rowIndex + $startRow);$cell->setValue($headerCell);$maxRow = max($maxRow, $rowIndex + 1);}}$result->getActiveSheet()->mergeCellsByColumnAndRow($startColumn, $startRow, $startColumn + count($headers[0]) - 1, $startRow);if (count($headers) > 1) {mergeHeaders(array_slice($headers, 1), $result, $startColumn, $startRow + $maxRow);}}在上述代码中,mergeHeaders函数接受表头数组、Excel对象以及起始列和行作为参数。
PHP导出到Excel表格两种⽅法可将科学计数法改为⽂本格式导出⽅法⼀使⽤table输出导出1//导出代码2public function export(){3 set_time_limit(0);4 ini_set('memory_limit','1024M');//设置导出最⼤内存5 $ranking = self::getResult();//获得需要导出的数据6 //输出的表头7 $_pre = array(8 "listing" => "ListingID",9 "salesbefore" => "前⼗天销量",10 "salesafter" => "后⼗天销量",11 "saleschange" => "涨跌销量",12 "percentchange" => "涨跌幅度(%)",13 );14 $date = date("YmdHis");//⽇期作为输出⽂件后缀15 $content = getXLSFromList($_pre,$ranking);//获得输出的表格内容16 header("Content-type:application/vnd.ms-execl;charset=gb2312");//设置导出格式17 header("Content-Disposition:attactment;filename=销量变化排⾏榜".$date.".xls");//设置导出⽂件名18 header("Pragma: no-cache");19 header("Expires: 0");20 echo$content;21 exit;22 }1//此⽅法建议写⼊公共⽅法通过数组遍历得出导出报表类型结构2function getXLSFromList($pres,$lists){3// 内容太⼤建议搜索少量再导出4// if(count($lists)>=20000)5// {6// header("Content-Type:text/html;charset=utf-8");7// echo "<br/><h1 style='color:red'>Export data is too large, please narrow your search!</h1><br/>";8// exit;9// }10$keys=array_keys($pres);//获取表头的键名11$content="";12$content.="<table border='1'><tr>";13 //输出表头键值14foreach($pres as$_pre){15$content.="<td>$_pre</td>";16 }17$content.="</tr>";18foreach($lists as$_list){19$content.= "<tr>";20foreach($keys as$key){21$content.= "<td style='vnd.ms-excel.numberformat:@'>".$_list[$key]."</td>"; //style样式将导出的内容都设置为⽂本格式输出对应键名的键值即内容22 }23$content.="</tr>";24 }25$content.="</table>";26return$content;27 }导出⽅法⼆使⽤PHPExcel导出1public function export(){2 set_time_limit(0);3ini_set('memory_limit','1024M');4$ranking = self::getResult(); //获取需要导出的内容5include_once(EXTEND_PATH . 'Library/ORG/PHPExcel/PHPExcel.class.php'); //引⼊PHPExcel⽂件6$objPHPExcel = new PHPExcel();7 //设置⽂件的⼀些属性,在xls⽂件——>属性——>详细信息⾥可以看到这些值8$objPHPExcel->getProperties()->setCreator("ctos")9 ->setLastModifiedBy("ctos")10 ->setTitle("Office 2007 XLSX Test Document")11 ->setSubject("Office 2007 XLSX Test Document")12 ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")13 ->setKeywords("office 2007 openxml php")14 ->setCategory("Test result file");15//设置列宽16$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);17$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);18$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);19$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);20$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(20);21//设置⽔平居中显⽰22$objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);23$objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);24$objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);25$objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);26$objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);27$objPHPExcel->setActiveSheetIndex(0) // set table header content28 ->setCellValue('A1', 'Listing ID')29 ->setCellValue('B1', '前⼗天销量')30 ->setCellValue('C1', '后⼗天销量')31 ->setCellValue('D1', '涨跌销量')32 ->setCellValue('E1', '涨跌幅度(%)')33$a = 1; //设置默认值34foreach($ranking as$k){35$a++;36$objPHPExcel->setActiveSheetIndex(0)37 ->setCellValueExplicit('A'.$a, $k['listing'],PHPExcel_Cell_DataType::TYPE_STRING)//设置数字的科学计数法显⽰为⽂本38 ->setCellValue('B'.$a, $k['salesbefore'])39 ->setCellValue('C'.$a, $k['salesafter'])40 ->setCellValue('D'.$a, $k['saleschange'])41 ->setCellValue('E'.$a, $k['percentchange'])42//设置⾃动换⾏43$objPHPExcel->getActiveSheet()->getStyle("A$a")->getAlignment()->setWrapText(true);44$objPHPExcel->getActiveSheet()->getStyle("B$a")->getAlignment()->setWrapText(true);45 }46$objPHPExcel->getActiveSheet()->setTitle('销量变化排⾏榜');47$objPHPExcel->setActiveSheetIndex(0);48// excel头参数49header('Content-Type: application/vnd.ms-excel');50header('Content-Disposition: attachment;filename="销量变化排⾏榜('.date('YmdHis').').xls"'); //⽇期为⽂件名后缀51header('Cache-Control: max-age=0');52$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //excel5为xls格式,excel2007为xlsx格式53$objWriter->save('php://output');54 }。
PHP直播系统中,后台如何导出主播和观众的Excel数据表数据是当代互联网中重要的组成部分,每一个平台的背后都牵扯到各种数据,以目前较为火爆的直播系统,短视频程序为例,里面比较明显的数据大致分为两大类,一类是主播的数据组成,一类是观众的数据组成,后台是生产数据的机器,每一个平台都可以根据自己想要得到什么样的数据去做开发,数据也是衡量一个平台优劣势最好的证明,所以运营者都习惯去做数据的分析。
那PHP直播系统当中,如何利用工具导出自己先要的数据呢。
PHP导出文档,可以使用PHPExcel这个现成的第三方类库,使用这个类库可以轻松实现导出文档功能。
1、准备工作:(1).PHPExcel类库的下载2、具体操作:将下载下来的文件放到可以加载到的地方,里面有很多的文件,我们只需要加载里面的PHPExcel.php文件就可以了,这一个文件就可以帮助我们实现文件的导出功能。
它是一个多类的结合文件,我们需要用到PHPExcel类里面的多个方法。
$obj=new PHPExcel();$obj->setActiveSheetIndex($i);$obj->getActiveSheet($i)->setCellValue(‘A$a’,’xx’)->setCellValue(‘B$a’,’xx’);$obj->getActiveSheet()->setTitle(‘xxx’);date_default_timezone_set($b);header(‘pragma:public’);header(‘Content-type:application/vnd.ms-excel;charset=utf-8;name=$ c.xls’);header(“Content-Disposition:attachment;filename=$c.xls”);$objs= PHPExcel_IOFactory::createWriter($obj,’$e’);$objs->save(‘php://output’);(1)首先要实例化PHPExcel这个类(2)$i:这个参数表示选择导出的文件存放在Excel表格中第几页,如:$i=0,存放在第一页(3)$a:这个参数表示将导出的数据放在A列的第几行或者其他列的第几行(4)xx:这个参数表示这一列代表的数据名称(5)xxx:这个参数表示导出文件的sheet名称是什么(6)$b:这个参数表示编码方式(7)$c:这个参数表示文件的名字(8)$e:这个参数表示文件的格式3、示例public function explode_post(){vendor("PHPExcel.PHPExcel");$objPHPExcel = new \PHPExcel(); //创建PHPExcel实例$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', 'ID');$objPHPExcel->getActiveSheet(0)->setCellValue('A1', 'ID')->setCellValue('B1', 'name')->setCellValue('C1', 'number')->setCellValue('D1', 'status');$objPHPExcel->getActiveSheet()->setTitle('1'); //设置sheet的名称/*--------------下面是设置保存路径------------------*/date_default_timezone_set("Asia/Shanghai");$date = date("YmdHi");header('pragma:public');header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$date.'.xls"');header("Content-Disposition:attachment;filename=$date.xls");//attachment新窗口打印inline本窗口打印$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');//Excel5为xls格式,excel2007为xlsx格式$objWriter->save('php://output');//这句话必须要加,否侧会报错exit;}在直播系统开发的过程中,很多重要,并且需要分析的数据大部分都会做导出,以便于运营者来检查运营纪录数据,在直播系统中,主播的在线直播数据,以及类工会的分成,工会主播,观众充值等等这些数据都是平台运营者比较关注的,后台开发者可以根据平台的需要,做不同的Excel数据导出。
tp5使⽤PHPexcel扩展导出excel表1,使⽤composer安装phpexcel包:composer require phpoffice/phpexcel2,在控制器中创建⽅法:(1)使⽤PHPexcel扩展。
代码如下/*** 导出excel表格(默认格式)** @param array $columName 第⼀⾏的列名称* @param array $list ⼆维数组* @param string $setTitle sheet名称* @return* @author Tggui <tggui@>*/private function exportExcel1($columName, $list, $fileName='demo', $setTitle='Sheet1'){vendor('phpoffice.phpexcel.Classes.PHPexcel');vendor('phpoffice.phpexcel.Classes.PHPexcel.IOFactory');if ( empty($columName) || empty($list) ) {return '列名或者内容不能为空';}if ( count($list[0]) != count($columName) ) {return '列名跟数据的列不⼀致';}$fileName = iconv("utf-8", "gb2312", $fileName);//实例化PHPExcel类$PHPExcel = new \PHPExcel();//获得当前sheet对象$PHPSheet = $PHPExcel -> getActiveSheet();//定义sheet名称$PHPSheet -> setTitle($setTitle);//excel的列这么多够⽤了吧?不够⾃个加 AA AB AC ……$letter = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];//把列名写⼊第1⾏ A1 B1 C1 ...for ($i=0; $i < count($list[0]); $i++) {//$letter[$i]1 = A1 B1 C1 $letter[$i] = 列1 列2 列3$PHPSheet->setCellValue("$letter[$i]1","$columName[$i]");}//内容第2⾏开始foreach ($list as$key => $val) {//array_values 把⼀维数组的键转为0 1 2 3 ..foreach (array_values($val) as$key2 => $val2) {//$letter[$key2].($key+2) = A2 B2 C2 ……$PHPSheet->setCellValue($letter[$key2].($key+2),$val2);}}//⽣成2007版本的xlsx$PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel,'Excel2007');header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');header('Content-Disposition: attachment;filename='.$fileName.'.xlsx');header('Cache-Control: max-age=0');$PHPWriter->save("php://output");exit;}2),⾃定义函数,不使⽤PHPexcel扩展。
如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了$yourStr = mb_convert_encoding(”gb2312″, “UTF-8″, $yourStr);基本上导出的文件分为两种:1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已。
修改这种文件后再保存,通常会提示你是否要转换成Excel文件。
优点:简单。
缺点:难以生成格式,如果用来导入需要自己分别编写相应的程序。
2:Excel格式,与类Excel相对应,这种方法生成的文件更接近于真正的Excel格式。
如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312:$yourStr = mb_convert_encoding("gb2312", "UTF-8", $yourStr);一、PHP导入Excel1:还是用PHPExcel,官方网站:/PHPExcel。
2:使用PHP-ExcelReader,下载地址: /projects/phpexcelreader举例:<?phprequire_once 'Excel/reader.php';// ExcelFile($filename, $encoding);$data = new Spreadsheet_Excel_Reader();// Set output Encoding.$data->setOutputEncoding('utf8');$data->read(' jxlrwtest.xls');error_reporting(E_ALL ^ E_NOTICE);for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {echo """.$data->sheets[0]['cells'][$i][$j]."",";}echo "\n";}?>总结php导出Excel php导入Excel PhpExcel使用说明PhpExcel使用手册方法一:特点,简单,省心,制表符"\t"用户分割同一行中的列,换行符"\t\n"可以开启下一行,还能够自动识别日期格式,货币格式等!<?phpheader("Content-type:application/vnd.ms-excel");header("Content-Disposition:attachment;filename=test_data.xls");//输出内容如下:echo "姓名"."\t";echo "年龄"."\t";echo "学历"."\t";echo "\n";echo "张三"."\t";echo "25"."\t";echo "本科"."\t";?>动态版<?$sql = "SELECT * FROM " .$ecs->table('member'). " ";$classres = $db->Execute($sql);header("Content-type:application/vnd.ms-excel");header("Content-Disposition:attachment; filename=test_data.xls");echo 'ID'.chr(9);echo 'txtPEOClientCode'.chr(9);echo 'jcompany'.chr(9);echo 'fcompany'.chr(9);echo 'ecompany'.chr(9);echo 'rcompany'.chr(9);echo 'txtAddress'.chr(9);echo 'txtCompanyTel'.chr(9);echo 'txtFax'.chr(9);echo 'txtPostCode'.chr(9);echo chr(13);while ($classrow = $classres->FetchRow()){//输出到xlsecho $classrow['id'].chr(9);echo $classrow['txtPEOClientCode'].chr(9);echo $classrow['jcompany'].chr(9);echo $classrow['fcompany'].chr(9);echo $classrow['ecompany'].chr(9);echo $classrow['rcompany'].chr(9);echo $classrow['txtAddress'].chr(9);echo $classrow['txtCompanyTel'].chr(9);echo $classrow['txtFax'].chr(9);echo $classrow['txtPostCode'].chr(9);echo chr(13);}现在用的Php-excel(/p/php-excel/downloads/list),代码也很简单:require (dirname (__FILE__) . "./class-excel-xml.inc.php");$sql = "SELECT * FROM " .$ecs->table('member'). " ";$classres = $db->Execute($sql);while($classrow = $classres->FetchRow()){$doc[] = array ($classrow['txtPEOClientCode'], $classrow['jcompany'],$classrow['txtBillTo']);}$xls = new Excel_XML;$xls->addArray($doc);$xls->generateXML("mytest");我用的utf-8,结果有乱码问题,把class-excel-xml.inc.php utf8_encode($v) 替换成$v就没有乱码问题了。
1:第一推荐无比风骚的PHPExcel,官方网站:/PHPExcel导入导出都成,可以导出office2007格式,同时兼容2003。
下载下来的包中有文档和例子,大家可以自行研究。
抄段例子出来:/PHPExcel<?phpini_set("display_errors",1);//是否显示报错信息ini_set('include_path', ini_get('include_path').';D:\\PHP\\PHPExcel1.6.6\\Tests\\classes\\');//设置此页面包含路径include "classes/PHPExcel.php";include "classes/PHPExcel/Writer/Excel5.php";//创建一个excel$objPHPExcel = new PHPExcel();$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);$objWriter->save("xxx.xls");?>--------------------------------------------------------------------------------------<?//设置PHPExcel类库的include pathset_include_path('.'.PATH_SEPARATOR .'D:\workspace\biznaligy_eh\dev_src\includes\PHPExcel' . PATH_SEPARATOR . get_include_path());require_once 'PHPExcel.php';require_once 'PHPExcel/Writer/Excel5.php'; // 用于其他低版本xlsrequire_once 'PHPExcel/Writer/Excel2007.php'; // 用于excel-2007 格式// 创建一个处理对象实例$objExcel = new PHPExcel();// 创建文件格式写入对象实例, uncomment$objWriter = new PHPExcel_Writer_Excel5($objExcel); // 用于其他版本格式 //or//$objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用于2007 格式//$objWriter->setOffice2003Compatibility(true);//设置文档基本属性$objProps = $objExcel->getProperties();$objProps->setCreator("Zeal Li");$objProps->setLastModifiedBy("Zeal Li");$objProps->setTitle("Office XLS Test Document");$objProps->setSubject("Office XLS Test Document, Demo");$objProps->setDescription("Test document, generated by PHPExcel.");$objProps->setKeywords("office excel PHPExcel");$objProps->setCategory("Test");//设置当前的sheet索引,用于后续的内容操作。