phpexcel 的前端封装类

2024-03-24 18:48

本文主要是介绍phpexcel 的前端封装类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说到phpexcel,做php开发的童鞋可能都不陌生的,强大的excel表格导出类。它到底有多强大呢?可以导出xls,xlsx(唯一见到的可以导出excel2007的php类),html,pdf,csv等。还可以对xml模板进行编辑然后保存,还可以在excel里面设置图片,画表格,字体的大小,字体表格的颜色等,强大得你都想想不到。但phpexcel导出的pdf实在不敢让人恭维。最近研究了下,写了一个类可以同时导出xls,xlsx,csv,html。主要对其进行了前端的封装。现贴代码上来。



<?php
/*** 导出excel2003* @author tengzhaorong@gmail.com* 2011-10-25*/
//@todo cvs格式输出中文乱码 有没有必要同时生成html excel2003 excel2007 	
/** Error reporting */
error_reporting ( E_ALL );
header ( 'Content-Type:text/html;charset=gbk' );
date_default_timezone_set ( 'Asia/Shanghai' );/** PHPExcel */
require_once 'excel/PHPExcel.php';class Excel {private $_objPHPExcel; //excel 句柄private $_savePath = "attach"; //保存目录//private $_type = array ( "xls" ); //文件类型private $_suffix = array ( 'xls' , 'xlsx' , 'html' ,'htm','csv');private $letter = array ( 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'M' , 'N' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' );function __construct () {$this->_objPHPExcel = new PHPExcel ();}/*** Enter 设置头.** @param array $data*/function setMenu ( $data ) {if ( ! is_array ( $data ) ) {$data = ( array ) $data;}foreach ( $data as $k => $v ) {//$v=iconv("utf-8","gb2312",$v);$this->_objPHPExcel->setActiveSheetIndex ( 0 )->setCellValue ( $this->letter [$k] . "1", $v );}}/*** Enter 设置属性.** @param array $data*/function setProperties ( $data ) {if ( ! is_array ( $data ) ) {$data = ( array ) $data;}if ( in_array ( "creator", array_keys ( $data ) ) ) {$this->_objPHPExcel->getProperties ()->setCreator ( $data ['creator'] );}if ( in_array ( "lastModifiedBy", array_keys ( $data ) ) ) {$this->_objPHPExcel->getProperties ()->setLastModifiedBy ( $data ['lastModifiedBy'] );}if ( in_array ( "title", array_keys ( $data ) ) ) {$this->_objPHPExcel->getProperties ()->setTitle ( $data ['title'] );}if ( in_array ( "subject", array_keys ( $data ) ) ) {$this->_objPHPExcel->getProperties ()->setSubject ( $data ['subject'] );}if ( in_array ( "description", array_keys ( $data ) ) ) {$this->_objPHPExcel->getProperties ()->setDescription ( $data ['description'] );}if ( in_array ( "keywords", array_keys ( $data ) ) ) {$this->_objPHPExcel->getProperties ()->setKeywords ( $data ['keywords'] );}if ( in_array ( "category", array_keys ( $data ) ) ) {$this->_objPHPExcel->getProperties ()->setCategory ( $data ['category'] );}}/*** Enter 设置数据** @param array $data*/function setData ( $data ) {if ( ! is_array ( $data ) ) {$data = ( array ) $data;}foreach ( $data as $k => $v ) {foreach ( $v as $index => $value ) {//$value=iconv("utf-8","gb2312",$value);$this->_objPHPExcel->setActiveSheetIndex ( 0 )->setCellValue ( $this->letter [$index] . ($k + 2), $value );}}}/*** Enter 设置标题** @param string $title*/function setTitle ( $title ) {$this->_objPHPExcel->getActiveSheet ()->setTitle ( $title );}/*** Enter 保存文件** @param string $filename* @param array $type*/function save ( $type,$filename = "") {if ( ! $filename ) {$filename = time ();}if(!is_array($type)){$type=(array)$type;}foreach ( $type as $k => $v ) {if ( in_array ( $v,$this->_suffix ) ) {$suffix = $v;}else {continue;}$path = $this->_savePath . "/" . $filename . "." . $suffix;switch ($v) {case "htm":case "html" :$objWriter = PHPExcel_IOFactory::createWriter ( $this->_objPHPExcel, "HTML" );$objWriter->save ( $path );break;case "xls" :$objWriter = PHPExcel_IOFactory::createWriter ( $this->_objPHPExcel, "Excel5" );$objWriter->save ( $path );break;case "xlsx" :$objWriter = PHPExcel_IOFactory::createWriter ( $this->_objPHPExcel, "Excel2007" );$objWriter->save ( $path );break;case "csv" :$objWriter = PHPExcel_IOFactory::createWriter ( $this->_objPHPExcel, 'CSV' )->setDelimiter ( ',' )->setEnclosure ( '' )->setLineEnding ( "\r\n" )->setSheetIndex ( 0 );break;default :print( "sorry!".$v." not support" );}}}/*** Enter 浏览器输出** @param string $filename* @param string $type*/function output ($type="xls",$filename = "") {if ( ! $filename ) {$filename = time ();}if ( in_array ( $type, $this->_suffix  ) ) {$suffix = $type;}else {$suffix = "xls";}switch ($type) {case "xls" :header ( 'Content-Type: application/vnd.ms-excel' );header ( 'Content-Disposition: attachment;filename="' . $filename . '.' . $suffix . '"' );header ( 'Cache-Control: max-age=0' );$objWriter = PHPExcel_IOFactory::createWriter ( $this->_objPHPExcel, 'Excel5' );break;case "xlsx" :header ( 'Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' );header ( 'Content-Disposition: attachment;filename="' . $filename . '.' . $suffix . '"' );header ( 'Cache-Control: max-age=0' );$objWriter = PHPExcel_IOFactory::createWriter ( $this->_objPHPExcel, 'Excel2007' );break;case "html" :header ( "Content-Type:HTML text data" );header ( 'Content-Disposition: attachment;filename="' . $filename . '.' . $suffix . '"' );header ( 'Cache-Control: max-age=0' );$objWriter = PHPExcel_IOFactory::createWriter ( $this->_objPHPExcel, 'HTML' );break;case "csv" ://header ( "Content-type:text/csv" );Header('Content-Type: application/msexcel;charset=gbk');header ( 'Content-Disposition:attachment;filename="' . $filename . '.' . $suffix . '"' );//header ( 'Cache-Control:must-revalidate,post-check=0,pre-check=0' );//header ( 'Expires:0' );//header ( 'Pragma:public' );$objWriter = PHPExcel_IOFactory::createWriter ( $this->_objPHPExcel, 'CSV' );break;default :header ( "Content-Type:HTML text data" );header ( 'Content-Disposition: attachment;filename="' . $filename . '.' . $suffix . '"' );header ( 'Cache-Control: max-age=0' );$objWriter = PHPExcel_IOFactory::createWriter ( $this->_objPHPExcel, 'HTML' );break;}$objWriter->save ( 'php://output' );}/*** Enter 设置存储目录** @param string $path*/function setAttachDir ( $path ) {if ( ! is_dir ( $path ) ) {mkdir ( $path, 755 );}if(!is_writable($path)){chmod($path, 755);}$this->_savePath = $path;}
}

实现的功能不多,目前只可以简单的同时导出几种格式的文件。


下面为实例代码

$data [0] = array ( '什么' , '20' );$data [1] = array ( '小刚' , '20' );$data [2] = array ( '小开' , '20' );//数据$excel = new Waf_excel ();$excel->setProperties ( array ( "title" => '不神奇' ) );//设置属性 可设置的属性有 creator  lastModifiedBy title  subject  description  keywords  	category。$excel->setMenu ( array ( '乱码' , "年纪" ) );//设置菜单栏目$excel->setData ( $data );//设在数据$excel->setTitle ( "一个神奇的网站" );//设置显示的标题$excel->setAttachDir ( "backs" );//设置数据保存的目录 默认情况为 当前目录下的 attach$excel->output ("csv", "kk" );//直接下载导出 不生存文件 csv格式 文件名为kk$excel->save (array("csv"), "kk" )//直接保存到文件夹里,可以同时保存csv html xls xlsx 格式,第一个参数为保存的格式,可为数组也可为字符串,第二参数为文件名。
phpexcel 下载地址 http://phpexcel.codeplex.com/releases/view/45412

 

这篇关于phpexcel 的前端封装类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/842454

相关文章

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

css中的 vertical-align与line-height作用详解

《css中的vertical-align与line-height作用详解》:本文主要介绍了CSS中的`vertical-align`和`line-height`属性,包括它们的作用、适用元素、属性值、常见使用场景、常见问题及解决方案,详细内容请阅读本文,希望能对你有所帮助... 目录vertical-ali