目录
php 基于phpexcel制作的导出excel类,phpexcelexcel
想用PHP导出excel表格,但是php环境是51*的,没办法用PHPExcel开源类,有啥办法?
PHPExcel生成Excel不可以读取
首页 php教程 php手册 php 基于phpexcel制作的导出excel类,phpexcelexcel

php 基于phpexcel制作的导出excel类,phpexcelexcel

Jun 13, 2016 am 09:24 AM
excel表格

php 基于phpexcel制作的导出excel类,phpexcelexcel

最近要写个项目,由于项目中导出excel太多,因此写个类便于使用。

<?php
/*
*@使用方法。
*引入类库。
* $excel = news excelC();
*$excel->fileName = '文件名称';//设置文件名称,默认为时间戳
*$excel->format = '2007';//文件类型,默认为2007,其他为excel5
*$record = array(
	'delKey'=>array('id','addTime','status'),//如果数据$data中有不需要显示的列,可以在此说明。删除不需要导出的键值
	'sort'			=>array(
					'keyName'=>array('subjectName','flag'),//按keyName列排序,如果不存在则不排序。
					//'reorder'=>'DESC',//排序方式,DESC为倒序,ASC为正序。如果keyName存在则排序keyName,如果不存在则按数组的键名排序,如果reorder不存在则不排序
				),//排序   如果sort存在则排序,否则不排序,如果keyName存在则按设置排序,如果不存在则按字符排序,如果reorder不存在或为空或为DES则正序,等于DESC为倒序。
	'excelStyle'	=>array(
						'setName'=>'Arial',//字体样式
						'setSize'=>'12',//字体大小
					),//表格全局样式
	'title'			=>array('tableName'=>'学科列表','center'=>true,'direction'=>'right','merge'=>'2','setSize'=>'30'),//标题,center垂直,direction为合并方向。right,left,up,down。 merge为合并几个单元格,setSize为字体大小
	'data'			=>array(
						array('tableName'=>'科目名称','width'=>'30','setName'=>'宋体','setSize'=>'20','background'=>'red','textColor'=>'white','bold'=>true,'underline'=>true,'borderColor'=>'cyan','center'=>true,),
						array('tableName'=>'学科','width'=>'50','center'=>true),//颜色表是:black,white,red,green,blue,yellow,magenta,cyan
					),//表名称 tableName为名称,width为表格宽度,setName为字体样式,background为背景颜色,textColor为字体颜色,bold为加粗,underline为下划线,borderColor为边框颜色.
	'merge'			=>array(
						//'flag'=>array('keyword'=>'初','direction'=>'right','merge'=>'2'),merge的键值为需要处理数据数组的键值,keyword为如果存在此关键字才执行其他样式操作,如果keyword不存在则执行所有键值为flag的单元格。
						'all'=>array('width'=>'30','setName'=>'宋体','setSize'=>'20','background'=>'red','textColor'=>'white','bold'=>true,'underline'=>true,'borderColor'=>'cyan','center'=>true,),
					),//
);//导出配置


*$excel->export($record,$data);//$record为导出配置,$data为数据库的数据,$data可以为数组,也可以为对象。
*
*
*
*/
$address = dirname(dirname(__FILE__)).'/PHPExcel';
include $address.'/PHPExcel.class.php';
include $address.'/PHPExcel/Writer/Excel2007.php';
include $address.'/PHPExcel/Writer/Excel5.php';
include $address.'/PHPExcel/IOFactory.php';

/****************************
*生成excel文档。
*/

class excelC {
	
	public $format = '2007';//转换格式,默认为2007版本,其他版本,请输入不是2007的数字
	
	public $fileName;//文件名称默认为时间戳。
	
	
	private $objExcel;
	
	private $letters;
	
	public function __construct()
    {
		$this->fileName = time();
		
		$this->fileTitle = '导出数据';
		
		$this->objExcel = new PHPExcel();
		$this->letters = $this->letter();
	}
	
	
	//导出excel的属性
	private function attribute(){
		
		
		$this->objExcel->getProperties()->setCreator("力达行有限公司");//创建人
		
		$this->objExcel->getProperties()->setLastModifiedBy("力达行有限公司");//最后修改人
		
		$this->objExcel->getProperties()->setTitle("导出数据");//标题
		
		$this->objExcel->getProperties()->setSubject("导出数据");//题目
		
		$this->objExcel->getProperties()->setDescription("数据导出");//描述
		
		$this->objExcel->getProperties()->setKeywords("office 导出");//关键字
		
		$this->objExcel->getProperties()->setCategory("excel");//种类
	}
	
	
	
	//设置表(如果只有一个sheet可以忽略该函数,将默认创建。)
	private function sheet(){
		
		$this->objExcel->setActiveSheetIndex(0);//设置当前的表
		
		$this->objExcel->getActiveSheet()->setTitle('excel');//设置表名称。
	}
	
	
	/***************************
	*导出excel
	*@attr $record为表头及样式设置
	*@attr $data为需要导出的数据
	*/
	public function export($record=array(),$data=array()){
		if(!$data)return false;
		if(!is_array($record))return false;//表样式及其他设置
		
		//处理获取到的数据
		$data = $this->maniData($record,$data);
		
		//获取整体样式。
		$this->excelData($record,$data);
		
		
		//$this->objExcel->getActiveSheet()->setCellValue('A1', '季度'); 
		
		$this->down();//导出下载
	}
	
	
	/*
	*处理表格
	*/
	private function excelData(&$record,&$data){
		$this->attribute();//设置属性
		$this->sheet();//设置表
		$this->whole($record);//设置整体样式
		$this->tableHeader($record);//设置表格头。
		$this->tableContent($record,$data);//设置表格
		$this->excelTitle($record,2);//设置标题
	}
	
	/*
	*设置表格整体样式
	*/
	private function whole(&$record){
		if(!array_key_exists('excelStyle',$record))return false;
		
		$excelStyle = $record['excelStyle'];
		
		$default = $this->objExcel->getDefaultStyle();
		
		if(array_key_exists('setName',$excelStyle))
			$default->getFont()->setName($excelStyle['setName']);//设置字体样式
			
		if(array_key_exists('setSize',$excelStyle))
			$default->getFont()->setSize($excelStyle['setSize']);//设置字体大小
	}
	
	/*
	*设置标题
	*/
	private function excelTitle($record,$num){
		$titleL = $this->letters[0];
		if(!array_key_exists('title',$record))return false;
		$this->appOintStyle($titleL ,1,$record['title']);
		
	}
	
	/*
	*设置表格头。
	*/
	private function tableHeader($record){
		if(!array_key_exists('data',$record))return false;
		$objExcel = $this->objExcel;
		$letters = $this->letters;
		
		if(!is_array($record['data']))return false;
		
		$i = 0;
		$hang = 2;
		foreach($record['data'] as $k=>$v){
		
			$this->appOintStyle($letters[$i],$hang,$v);
				
			$i++;
		}
		
	}
	
	private function setCellValue($letter,$data){
	
		if(@$data)
			$this->objExcel->getActiveSheet()->setCellValue($letter, $data);//填充值
		
		return $this;
	}
	
	private function getColumnDimension($letter,$data){
	
		if(@$data)
			$this->objExcel->getActiveSheet()->getColumnDimension($letter)->setWidth($data);//设置宽度 
			
		return $this;
	}
	
	private function setName($letter,$data){
	
		if(@$data)
			$this->objExcel->getActiveSheet()->getStyle($letter)->getFont()->setName($data);//设置字体
			
		return $this;
	}
	
	private function setSize($letter,$data){
	
		if(@$data)
			 $this->objExcel->getActiveSheet()->getStyle($letter)->getFont()->setSize($data);//设置字体大小
			
		return $this;
	}
	
	private function background($letter,$data){
	
		if(@$data){
			$this->objExcel->getActiveSheet()->getStyle($letter)->getFill()->getStartColor()->setARGB($this->backColor($data));
			$this->objExcel->getActiveSheet()->getStyle($letter)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);//设置背景色样式,无样式将不显示背景色。
		}
			
		return $this;
	}
	
	private function textColor($letter,$data){
	
		if(@$data){
			$this->objExcel->getActiveSheet()->getStyle($letter)->getFont()->getColor()->setARGB($data);//字体颜色
		}
			
		return $this;
	}
	
	private function setBold($letter,$data){
	
		if(@$data){
			$this->objExcel->getActiveSheet()->getStyle($letter)->getFont()->setBold(true);//加粗
		}
			
		return $this;
	}
	
	private function setUnderline($letter,$data){
	
		if(@$data){
			$this->objExcel->getActiveSheet()->getStyle($letter)->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);//下划线
		}
			
		return $this;
	}
	
	private function border($letter,$data){
	
		if(@$data){
			$styleThinBlackBorderOutline = array(
						   'borders' => array (
								 'outline' => array (
									   'style' => PHPExcel_Style_Border::BORDER_THIN, //设置border样式
									   'color' => array ('argb' => $data),          //设置border颜色
								),
						  ),
					);
			$this->objExcel->getActiveSheet()->getStyle($letter)->applyFromArray($styleThinBlackBorderOutline);
		}
			
		return $this;
	}
	
	/*
	*合并
	*/
	private function mergeCells($letters,$hang,$direction,$merge){
		
		$merge = $merge-1;
		
		if($merge > 0 && $direction){
		
			//print_r($this->letters);
			$l = array_flip($this->letters);
			$ln = $l[$letters];
			
			switch ($direction)
			{
				case 'left':
					$signal = $this->letters[($ln-$merge)].$hang.':'.$letters.$hang;
				break;
				case 'right':
					$signal = $letters.$hang.':'.$this->letters[($ln+$merge)].$hang;
				break;
				case 'up':
					$signal = $letters.($hang-$merge).':'.$letters.$hang;
				break;
				case 'down':
					$signal = $letters.$hang.':'.$letters.($hang+$merge);
				break;
				default:
					$signal = '';
			}
			
			if($signal){
				$this->objExcel->getActiveSheet()->mergeCells($signal);
			}
			
		}
		
		return $this;
	}
	
	/*
	*垂直居中
	*/
	private function setVertical($letter,$data){
		
		if($data){
			$this->objExcel->getActiveSheet()->getStyle($letter)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
			$this->objExcel->getActiveSheet()->getStyle($letter)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
		}
		return $this;
		
	}
	
	
	
	
	
	
	
	
	
	/*
	*设置颜色
	*/
	private function backColor($color){
		
		$array = array(
			'black'	=> 'FF000000',	//	System Colour #1 - Black
			'white'	=> 'FFFFFFFF',	//	System Colour #2 - White
			'red'	=> 'FFFF0000',	//	System Colour #3 - Red
			'green'	=> 'FF00FF00',	//	System Colour #4 - Green
			'blue'	=> 'FF0000FF',	//	System Colour #5 - Blue
			'yellow'	=> 'FFFFFF00',	//	System Colour #6 - Yellow
			'magenta'	=> 'FFFF00FF',	//	System Colour #7- Magenta
			'cyan'	=> 'FF00FFFF',	//	System Colour #8- Cyan
		);
		if(array_key_exists($color,$array)){
			return $array[$color];
		} else {
			return false;
		}
					
	}
	/*
	*设置表
	*/
	private function tableContent(&$record,&$data){
		$objExcel = $this->objExcel;
		$letters = $this->letters;
		
		if(array_key_exists('merge',$record))
			$merge = $record['merge'];
		else
			$merge = '';
					
		$hang = 2;
		foreach($data as $k=>$v){
			$i=0;
			$hang++;
			
			foreach($v as $kk=>$vv){
				$this->setCellValue($letters[$i].$hang, $vv);//设置内容
				$this->Appoint($kk,$vv,$letters[$i],$hang,$merge);
				$i++;
			}
			
		}
	}
	
	/*
	*设置表指定样式
	*/
	private function Appoint($kk,$vv,$letters,$hang,$merge){
		if(!$merge)return false;
		if(array_key_exists($kk,$merge)){
			$v = $merge[$kk];
			if(array_key_exists('keyword',$v)){
			
				if(strpos($vv,$v['keyword']) > -1){
					$this->appOintStyle($letters,$hang,$v);
				}
				
			} else {
				$this->appOintStyle($letters,$hang,$v);
			}
		} else if(array_key_exists('all',$merge)){
			$v = $merge['all'];
			if(array_key_exists('keyword',$v)){
			
				if(strpos($vv,$v['keyword']) > -1){
					$this->appOintStyle($letters,$hang,$v);
				}
				
			} else {
				$this->appOintStyle($letters,$hang,$v);
			}
		}
	}
	
	/*
	*终极样式
	*/
	private function appOintStyle($letters,$hang,$v){
	
		$this
				->setCellValue($letters.$hang,@$v['tableName'])
				->getColumnDimension($letters,@$v['width'])
				->setName($letters.$hang,@$v['setName'])
				->setSize($letters.$hang,@$v['setSize'])
				->background($letters.$hang,@$v['background'])
				->textColor($letters.$hang,$this->backColor(@$v['textColor']))
				->setBold($letters.$hang,@$v['bold'])
				->setUnderline($letters.$hang,@$v['underline'])
				->border($letters.$hang,$this->backColor(@$v['borderColor']))
				->mergeCells($letters,$hang,@$v['direction'],@$v['merge'])
				->setVertical($letters.$hang,@$v['center']);
	}
	
	/*
	*应为字母列表
	*/
	public function letter(){
		return array('A','B','C','D','F','G','H','I','G','K','L','M','N','O','P','Q','R','S','T','U','V','W','H','Y','Z');
	}
	
	/****************************
	*处理数据,排序及删除字段
	*/
	private function maniData($record,$data){
		if(!$data)return false;
		if(!is_array($record))return false;//表样式及其他设置
	
		$data = $this->objectToArray($data);//对象转数组
		
		$delKey = (array_key_exists('delKey',$record))?$record['delKey']:'';//是否删除关键字
		$sort = (array_key_exists('sort',$record))?$record['sort']:'';//是否排序
		$data = $this->delSort($data,$delKey,$sort);
		return $data;
	}
	
	/****************************
	*对象转数组
	*/
	private function objectToArray($data){
		if(!$data)return false;
		$data = (array)$data;
		
		foreach($data as $k=>$v){
			if(is_object($v) || is_array($v)){
				$data[$k] = (array)$this->objectToArray($v);
			}
		}
		return $data;
	}
	
	/****************************
	*删除键值,并排序
	*/
	private function delSort($data,$delKey='',$sort=''){
	
		if(!$data)return false;
		
		$array = array();
		foreach($data as $k=>$v){
		
			//删除数据中的某个键值
			$delData = $this->delData($v,$delKey);
			//按设定键值排序
			$sortData = $this->sortData($delData,$sort);
			$array[$k] = $sortData;
		}
		
		return $array;
		
	}
	
	/****************************
	*删除键值
	*/
	public function delData($data,&$delKey){
		if($delKey){
			foreach($delKey as $delVal){
				if(array_key_exists($delVal,$data))//判断键值是否存在
					unset($data[$delVal]);//清除键名。
			}
		}
		return $data;
	}
	
	/****************************
	*键值排序
	*/
	public function sortData($data,&$sort){
		$array = array();
		if($sort){
			if(array_key_exists('keyName',$sort)){
				$keyName = $sort['keyName'];
				if(array_key_exists('reorder',$sort)){
					if($sort['reorder'] == 'DESC'){
						krsort($keyName);
					} else if($sort['reorder'] == 'ASC'){
						ksort($keyName);
					}
				}
				foreach($keyName as $vn){
					$array[$vn] = (array_key_exists($vn,$data))?$data[$vn]:'';
				}
			} else {
				if(array_key_exists('reorder',$sort)){
					if($sort['reorder'] == 'DESC'){
						krsort($data);
					} else if($sort['reorder'] == 'ASC'){
						ksort($data);
					}
					$array = $data;
				}
			}
			
		}
		return $array;
	}
	
	
	
	//导出下载
	private function down(){
		
		if($this->format == '2007'):
			header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
			$excel = 'Excel2007';
		else:
			header('Content-Type: application/vnd.ms-excel'); 
			$excel = 'Excel5';
		endif;
		
	 	header("Content-Disposition: attachment; filename=\"$this->fileName\"");
	 	header('Cache-Control: max-age=0');
		
		$objWriter = PHPExcel_IOFactory::createWriter($this->objExcel, $excel);

		$objWriter->save('php://output');
		
	}
}
登录后复制

 

想用PHP导出excel表格,但是php环境是51*的,没办法用PHPExcel开源类,有啥办法?

你好,其实非常简单的问题,就是将要打印的页面的头设置为!

header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=php100.xls");

这样,浏览器就直接下载该文件。将文件里面的









内容


就直接放在Excel的表格里面了!

详情,请参考php100的教程。php100对这个问题有一个视频教程。

下载地址: www.php100.com/...0.html
 

PHPExcel生成Excel不可以读取

总结 php导出Excel php导入Excel PhpExcel使用说明 PhpExcel使用手册2009/03/06 上午 02:37方法一:特点,简单,省心,

header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=test_data.xls");

$tx='表头';
echo $tx."\n\n";
//输出内容如下:
echo "姓名"."\t";
echo "年龄"."\t";
echo "学历"."\t";
echo "\n";
echo "张三"."\t";
echo "25"."\t";
echo "本科"."\t";
?>

方法二: 引用google code中推荐的小类库(大体同方法一,比较复杂点)

code.google.com/p/php-excel/downloads/list

方法三: PHPEXCEL 类库,功能强大,支持win Excel2003 ,Win Excel2007.

www.codeplex.com/PHPExcel

//设置PHPExcel类库的include path
set_include_path('.'. PATH_SEPARATOR .
'D:\Zeal\PHP_LIBS' . PATH_SEPARATOR .
get_include_path());

/**
* 以下是使用示例,对于以 //// 开头的行是不同的可选方式,请根据实际需要
* 打开对应行的注释。
* 如果使用 Excel5 ,输出的内容应该是GBK编码。
*/
require_once 'PHPExcel.php';

// uncomment
////require_once 'PHPExcel/Writer/Excel5.ph......余下全文>>
 

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Excel表格中明明有数据但筛选空白怎么办? Excel表格中明明有数据但筛选空白怎么办? Mar 13, 2024 pm 06:38 PM

  Excel表格是一款是很经常使用的办公软件,很多用户都会在表格中记录下各种数据,但是表格明明有数据单筛选是空白,关于这个问题,很多用户都不知道要怎么解决,没有关系,本期软件教程内容就来为广大用户们进行解答,有需要的用户欢迎来查看解决方法吧。  Excel表格中明明有数据但筛选空白怎么办?  第一种原因,表格中含有空行  我们要筛选所有姓“李”的人,但可以看到并没有筛选出正确的结果,因为表格中含有空行,这种情况如何处理呢?  解决方法:  步骤一:选中所有的内容再进行筛选  按c

deepseek怎么转换pdf deepseek怎么转换pdf Feb 19, 2025 pm 05:24 PM

DeepSeek 无法直接将文件转换为 PDF。根据文件类型,可以使用不同方法:常见文档(Word、Excel、PowerPoint):使用微软 Office、LibreOffice 等软件导出为 PDF。图片:使用图片查看器或图像处理软件保存为 PDF。网页:使用浏览器“打印成 PDF”功能或专用的网页转 PDF 工具。不常见格式:找到合适的转换器,将其转换为 PDF。选择合适的工具并根据实际情况制定方案至关重要。

Excel表格怎么求平均值 Excel表格怎么求平均值 Aug 07, 2023 am 11:16 AM

Excel表格求平均值的方法:1、使用AVERAGE函数,选中一个空白单元格输入函数“=AVERAGE”,按下回车键即可;2、使用SUM函数和COUNT函数,选中一个空白单元格输入函数“=SUM/COUNT”,按下回车键即可;3、使用IF函数和AVERAGE函数,选中一个空白单元格输入函数“=AVERAGE,按下Ctrl+Shift+Enter组合键即可。

Excel表格不能筛选的解决办法 Excel表格不能筛选的解决办法 Mar 14, 2024 am 10:20 AM

  在日常生活,发现Excel表格无法筛选了,怎么办?Excel是最常用的数据处理工具之一,帮助用户简单快速的完成数据录入和整理,为了让用户能够顺利使用Excel,下面就来看看Excel表格筛选不了的解决办法。  1、首先打开Excel文档,点击菜单中的【视图】选项。  2、点击工具栏中的【冻结窗口】选项。  3、然后在打开的选项中,将冻结设置取消。  4、取消后即可重新进行筛选。

excel表格打印不全一部分打印不出来怎么处理 excel表格打印不全一部分打印不出来怎么处理 Mar 20, 2024 pm 10:26 PM

在工作中,我们经常会把制作的表格和文档打印成纸质版,由于表格内容过多过长,有时候不能全部打印出来,这该怎么办呢,接下来大家就一起学习:excel表格打印不全一部分打印不出来怎么处理。方法/步骤1:首先,我们需要准备要打印的表格,并对其进行调整。在保持比例的基础上,尽量缩短横向长度,就像图中展示的那样。  2、之后我们点击界面左上角的”文件“按钮,如图所示。  3、之后我们在弹出来的选项中,点击”打印“,如图所示。  4、之后即可弹出打印的预览窗口,我们在里面点击”打印预览“,如图所示。  5、之

两个excel表格怎么同时显示在屏幕上 两个excel表格怎么同时显示在屏幕上 Mar 20, 2024 pm 01:40 PM

在数据运用的时候可能会涉及多个表格,几个表格的数据要来回进行使用,而一个表格一个窗口很不方便,这就要不断的进行表格切换,如果需要的数据表格可以同时显示在一个屏幕上,那就大量的节省了重复切换表格的时间。我们今天就以两个表格为例,看看小编怎么让他们神奇的在一个屏幕上显示出来,课程马上开始了!为了实现两个表格同时显示的功能,可以新建两个Excel表格,一个命名为TEST1,另一个命名为TEST2。打开这两个表格,并在其中填写一些内容,如下图所示。  2、任意打开一个表格,点击上方工具栏中的“视图”按钮

excel表格忘记密码了怎么解锁 excel表格忘记密码了怎么解锁 Mar 20, 2024 am 10:19 AM

随着现代生活节奏的加快,在设置密码多的情况下,很难把各个密码都记住,比如忘记自己设置的Excel表格的密码,那遇到这种情况该怎么办呢?要重做太麻烦了!接下来就给大家提供一种解决方法,快来试试吧。首先,找到被保护密码的工作表Excel文件,然后将文件名后缀从.xlsx更改为.rar,此举不会对文件造成重大影响,如有提示可忽略。  2、用压缩文件打开忘记密码的Excel文件,然后按以下步骤进行操作:xl——worksheets——sheet1.xml(这里是将sheet1工作表设置了保护密码,可根据

deepseek怎么用来算账 deepseek怎么用来算账 Feb 19, 2025 pm 04:36 PM

问题:DeepSeek是否可用于会计?回答:不是,它是一个数据挖掘和分析工具,可用于分析财务数据,但本身不具备会计软件的账目记录和报表生成功能。使用DeepSeek分析财务数据需要:编写代码来处理数据具备对数据结构、算法和DeepSeek API的了解考虑潜在的问题(例如,编程知识、学习曲线、数据质量)

See all articles