900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > js+PHP利用PHPExcel导出表格数据到excel

js+PHP利用PHPExcel导出表格数据到excel

时间:2021-05-02 18:06:50

相关推荐

js+PHP利用PHPExcel导出表格数据到excel

这里写自定义目录标题

前言通过js筛选出表格数据PHP利用PHPExcel导出表格数据到excel

前言

因为在开发平台的时候遇到了需要将表格数据导出到Excel的情况,通过百度找到了PHP插件PHPExcel有这功能,于是结合js就开始动手

通过js筛选出表格数据

首先我们需要先获取到前端页面表格内的数据,js方法可以对表格数据进行获取

首先可以先给页面表格添加id

<table id='mytable'>......</table>

然后再添加js脚本,通过id获取表格数据

function getTableData(){var mytable = document.getElementById('mytable');var data = [];for(var i=0,rows=mytable.rows.length; i<rows; i++){//行for(var j=0,cells=mytable.rows[i].cells.length; j<cells; j++){//列data[i][j] = mytable.rows[i].cells[j].innerText;}}}

当代码运行完成后将会获得一个二维数组的data数据。起初想通过ajax的方法直接向后台POST方法传输二维数组,但是后台使用PHPExcel时怎么也打印不了,检查了ajax的返回值始终时乱码,最后百度得到的解释说明为:html用了ajax,导致必须返回数据,与header输出浏览器冲突,导致无法输出excel,并且乱码,使用url方式直接访问即可。于是我就将取得到的data二维数组转换成json格式直接url到后台,再通过转换json格式的数据得到二维数组

var json = encodeArray2D(data);window.location.href='xxxxx?data='+json+'&&xxxx='+xxxx+'&&xxx='+xxx;//将二维数组转换成json字符形式function encodeArray2D(obj) {var array = [];for (var i = 0; i < obj.length; i++) {array[i] = '[' + obj[i].join(',') + ']';}return '[' + array.join(',') + ']';}

PHP利用PHPExcel导出表格数据到excel

当前台传输过来json数据后进行解码

$json = $_GET['json'];$list = json_decode($json);

之后我们将用到PHPExcel,这个插件要自己下,下载完后如图文件夹和文件放到控制器目录里。只用到这如图两个。下载链接::/PHPOffice/PHPExcel下载完后将class文件放到控制器目录

之后引入文件进行编写

public function contestRankXls(){require_once 'PHPExcel.php'; //引入require_once 'PHPExcel/Writer/Excel.php';$fileName = " ";//导出文件名$json = $_GET['json'];$list = json_decode($json);$indexKey = $list[0];//获取列表头$objPHPExcel = new \PHPExcel(); //声明一个类$startRow=2; //表头从第几行开始$xlsTitle = iconv('utf-8', 'gb2312', $fileName);//文件名称//列段编号$header_arr = array('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','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');if(empty($fileName)) $fileName = time();//如果文件名为空则为当前时间戳//设置保存版本格式 if($excel){$objWriter = new \PHPExcel_Writer_Excel($objPHPExcel); $fileName = $fileName.'.xlsx'; }else{$objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel); $fileName = $fileName.'.xls'; } //设置表$objActSheet = $objPHPExcel->getActiveSheet(); //设置表头样式$objPHPExcel->getActiveSheet()->mergeCells('A1:'.$header_arr[count($indexKey)-1].'1');//合并单元格(如果要拆分单元格是需要先合并再拆分的,否则程序会报错)$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1',$c_id.' '.$c_title); //设置表头名称$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true); //合并单元格加粗$objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(14); //所有单元格设置默认宽度$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(20);//设置行高度$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);//设置学号列宽度$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(30);//设置姓名列宽度$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);//设置昵称列宽度$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(7);//设置rank列宽度$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(7);//设置解题数列宽度$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(18); //设置字体大小$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置文字居左(HORIZONTAL_LEFT,默认值)中(HORIZONTAL_CENTER)右(HORIZONTAL_RIGHT)$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中foreach ($list as $row) {foreach ($indexKey as $key=>$value){//这里是设置单元格的内容 $objActSheet->setCellValue($header_arr[$key].$startRow,$row[$key]);$objPHPExcel->getActiveSheet()->getStyle($header_arr[$key].$startRow)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//文字居中if($startRow==2){//如果是表头字段则设置加粗$objPHPExcel->getActiveSheet()->getStyle($header_arr[$key].$startRow)->getFont()->setBold(true);//设置是否加粗} } $startRow++; //行加一} // 下载这个表格,在浏览器输出 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/vnd.ms-execl"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download");; header('Content-Disposition:attachment;filename='.$fileName.''); header("Content-Transfer-Encoding:binary"); $objWriter->save('php://output'); }

通过这种方法导出Excel文件时,我在浏览器控制台输出数据时就打印失败或者乱码,打印前必须删除了控制台输出在能够成功打印,不知道时我的其他header影响还是本就如此,有待求证。以上便是基本的代码了,有很多其他的部分被我删掉了,不太方便放出来,但是基本操作流程就是这样吧,对于PHPExecl百度有很多详解不必深究我的代码好坏,写一下给自己一个印象。有不对请指正

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。