Posted in PHP onDecember 11, 2012
关于phpexcel导出颜色的一些问题,用phpexcel做导出的excel的颜色怎么和网页中的颜色显示不一致呢?想要知道到底是怎么回事?应该如何来解决呢?PHP代码细节如下:
PHP code:
<?php require_once './PHPExcel.php'; require_once './Excel5.php'; require_once './get_excel_row.php'; require "../include/base.php"; require "../include/function/006/creatExcelDb.php"; define("COLOR1","#96B7F6"); //查 处理 数据===+++++++++++++++++++++++++++++++++++++++++++++ $q = $db->query("select * from oa_event_sales"); while($a = $db->fetch_array($q)){ $list[] = $a; } $ce = new creatExcelDb(); $re = $ce->_run($list,'served_time','client_status','oid'); $all_nums=0; $num=array(); foreach($re as $k=>$v){ $num[$k]=count($re[$k]); $all_nums+=count($re[$k]); } $jq = array(); $title1 = client_status; $title2 = fin_confirm; $title3 = oid; //去除数组中相同的值 foreach($re as $key => $val){ if(true){ foreach($val as $key2 => $val2){ if(!in_array($key2,$jq)){ $jq[] = $key2; } } } } $arr_keys=array(); foreach($re as $k=>$v){ foreach($v as $k2=>$v2){ $arr_keys[]=$k2; } } $c=array_count_values($arr_keys); //++===++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // 创建一个处理对象实例 $objExcel = new PHPExcel(); // 创建文件格式写入对象实例, uncomment $objWriter = new PHPExcel_Writer_Excel5($objExcel); //设置文档基本属性/**似乎一般情况下用不到**/ $objProps = $objExcel->getProperties(); $objProps->setCreator("杨本木"); $objProps->setLastModifiedBy("杨本木"); $objProps->setTitle("杨本木"); $objProps->setSubject("杨本木"); $objProps->setDescription("杨本木"); $objProps->setKeywords("杨本木"); $objProps->setCategory("杨本木"); //************************************* //设置当前的sheet索引,用于后续的内容操作。 //一般只有在使用多个sheet的时候才需要显示调用。 //缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0 $objExcel->setActiveSheetIndex(0); $objActSheet = $objExcel->getActiveSheet(); //设置当前活动sheet的名称 $objActSheet->setTitle('当前sheetname'); //设置宽度,这个值和EXCEL里的不同,不知道是什么单位,略小于EXCEL中的宽度 //$objActSheet->getColumnDimension('A')->setWidth(20); //$objActSheet->getRowDimension(1)->setRowHeight(30); //高度 //设置单元格的值 $objActSheet->setCellValue('A1', '总标题显示'); /* //设置样式 $objStyleA1 = $objActSheet->getStyle('A1'); $objStyleA1->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objFontA1 = $objStyleA1->getFont(); $objFontA1->setName('宋体'); $objFontA1->setSize(18); $objFontA1->setBold(true); //设置列居中对齐 $objActSheet->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); */ //============first=================================== $benmu=1; $objActSheet->setCellValue('A1', '行标签\列标签'); foreach($jq as $k=>$v){ $objActSheet->setCellValue(get_excel_row($benmu).'1', $v); $benmu+=1; } $objActSheet->setCellValue(get_excel_row($benmu).'1', '总计'); //设置宽度 for($i=0;$i<$benmu+1;$i++){ $objActSheet->getColumnDimension(get_excel_row($i))->setWidth(20); //宽度 $objActSheet->getStyle(get_excel_row($i)."1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objActSheet->getStyle(get_excel_row($i))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //颜色 $objActSheet->getStyle(get_excel_row($i)."1")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objActSheet->getStyle(get_excel_row($i)."1")->getFill()->getStartColor()->setARGB(COLOR1); } //==============content================= $y=2; foreach($re as $k1=>$v1){ //$k1全部放在A2。。。。后面,k1为电话号码、v1为person-》数字 $objActSheet->setCellValue('A'.$y, $k1); //颜色 $objActSheet->getStyle('A'.$y)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objActSheet->getStyle('A'.$y)->getFill()->getStartColor()->setARGB(COLOR1); foreach($jq as $k2=>$v2){ //k2是0,v2是person foreach($v1 as $k3=>$v3){ //$k3为person,$v3是要的值 if($k3==$v2){ //$objActSheet->setCellValue(get_excel_row("1"+$k2).$y,$v1[$k3]); $objActSheet->setCellValueExplicit(get_excel_row("1"+$k2).$y,$v1[$k3],PHPExcel_Cell_DataType::TYPE_STRING); } } } $objActSheet->setCellValue(get_excel_row("1"+count($jq)).$y, $num[$k1]); $y+=1; } //=================last========== $objActSheet->setCellValue("A".$y,"总计"); //颜色 $objActSheet->getStyle("A".$y)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objActSheet->getStyle("A".$y)->getFill()->getStartColor()->setARGB(COLOR1); foreach($jq as $k=>$v){ //k为person $objActSheet->setCellValue(get_excel_row("1"+$k).$y,$c[$v]); //颜色 $objActSheet->getStyle(get_excel_row("1"+$k).$y)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objActSheet->getStyle(get_excel_row("1"+$k).$y)->getFill()->getStartColor()->setARGB(COLOR1); } $objActSheet->setCellValue(get_excel_row("1"+count($jq)).$y,$all_nums); //颜色 $objActSheet->getStyle(get_excel_row("1"+count($jq)).$y)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objActSheet->getStyle(get_excel_row("1"+count($jq)).$y)->getFill()->getStartColor()->setARGB(COLOR1); //=============================== //输出内容 $outputFileName =time().".xls"; 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='.$outputFileName.''); header("Content-Transfer-Encoding:binary"); $objWriter->save('php://output'); ?>
上面的代码中,define中的颜色在导出的excel没有正确显示出本来应该的颜色?是什么原因?为什么呢?
开始定义了一个红色看显示是什么,如下:define(“COLOR1″,”#FF0000″);
但是结果显示的是,定义蓝色在excel中显示为类似于紫色的颜色,反正就不是页面显示的那种颜色,太令人费解了。。。。。
看这句代码:$objActSheet->getStyle(‘A'.$y)->getFill()->getStartColor()->setARGB(COLOR1);
有点觉得可能是ARGB原因,故试着把颜色前面加两位00,我不知道这样行不行,试试效果先,而且格式也有可能是这样的argb(128,255,0,0),可以先排除这个问题,因为a是透明度,后来试验了才知道,确实是增加了透明度的4位定色。
phpexcel导出excel的颜色和网页中的颜色显示不一致
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@