YII使用PHPExcel导入Excel文件的方法
2015-08-21 13:39
633 查看
1、下载phpexcel,将压缩包中的classes复制到protected/extensions下并修改为PHPExcel。
2、修改YII配置文件config/main.php
[php] view plaincopy
'import'=>array(
'application.extensions.PHPExcel.PHPExcel',
),
(以下处理PHPExcel autoload和YII autoload相冲突的方法任选其一,推荐第4种,最符合YII标准)
3.1、修改PHPExcel中的Autoloader.php
[php] view plaincopy
PHPExcel_Autoloader::Register();
PHPExcel_Shared_ZipStreamWrapper::register();
修改为
[php] view plaincopy
Yii::registerAutoloader(array('PHPExcel_Autoloader','Register'),true);
3.2、按照下面的代码修改PHPExcel代码目录里的Autoloader.php文件
[php] view plaincopy
public static function Register() {
/*
if (function_exists('__autoload')) {
//Register any existing autoloader function with SPL, so we don't get any clashes
spl_autoload_register('__autoload');
}
//Register ourselves with SPL
return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'));
*/
$functions = spl_autoload_functions();
foreach ( $functions as $function)
spl_autoload_unregister($function);
$functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions);
foreach ( $functions as $function)
$x = spl_autoload_register($function);
return $x;
} // function Register()
3.3、在需要使用PHPExcel时使用以下代码
[php] view plaincopy
$filePath = '/home/public_html/sqt/protected/data/queueSql/company.xls';
spl_autoload_unregister(array('YiiBase', 'autoload'));
$phpExcelPath = Yii::getPathOfAlias('application.extensions.PHPExcel.PHPExcel');
include($phpExcelPath . DIRECTORY_SEPARATOR . 'IOFactory.php');
spl_autoload_register(array('YiiBase', 'autoload'));
$PHPExcel = PHPExcel_IOFactory::load( $filePath);
3.4、只要设置Yii::$enableIncludePath为false,第三方类库就有了执行自己的autoload方法的机会,并且不需要配置config/main.php,非常方便灵活
[php] view plaincopy
Yii::$enableIncludePath = false;
Yii::import('application.extensions.PHPExcel.PHPExcel', 1);
-------------------------------------------------------------------------------
导入Excel文件方法
[php] view plaincopy
public function actionLoad() {
if(isset($_POST['submit'])) {
$file = CUploadedFile::getInstanceByName('file');//获取上传的文件实例
if($file->getType() == 'application/vnd.ms-excel') {
$excelFile = $file->getTempName();//获取文件名
//这里就是导入PHPExcel包了,要用的时候就加这么两句,方便吧
Yii::$enableIncludePath = false;
Yii::import('application.extensions.PHPExcel.PHPExcel', 1);
$phpexcel = new PHPExcel;
$excelReader = PHPExcel_IOFactory::createReader('Excel5');
$phpexcel = $excelReader->load($excelFile)->getSheet(0);//载入文件并获取第一个sheet
$total_line = $phpexcel->getHighestRow();
$total_column = $phpexcel->getHighestColumn();
for ($row = 2; $row <= $total_line; $row++) {
$data = array();
for ($column = 'A'; $column <= $total_column; $column++) {
$data[] = trim($phpexcel->getCell($column.$row) -> getValue());
}
}
}
}
参考:http://blog.csdn.net/tinico/article/details/18033575
2、修改YII配置文件config/main.php
[php] view plaincopy
'import'=>array(
'application.extensions.PHPExcel.PHPExcel',
),
(以下处理PHPExcel autoload和YII autoload相冲突的方法任选其一,推荐第4种,最符合YII标准)
3.1、修改PHPExcel中的Autoloader.php
[php] view plaincopy
PHPExcel_Autoloader::Register();
PHPExcel_Shared_ZipStreamWrapper::register();
修改为
[php] view plaincopy
Yii::registerAutoloader(array('PHPExcel_Autoloader','Register'),true);
3.2、按照下面的代码修改PHPExcel代码目录里的Autoloader.php文件
[php] view plaincopy
public static function Register() {
/*
if (function_exists('__autoload')) {
//Register any existing autoloader function with SPL, so we don't get any clashes
spl_autoload_register('__autoload');
}
//Register ourselves with SPL
return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'));
*/
$functions = spl_autoload_functions();
foreach ( $functions as $function)
spl_autoload_unregister($function);
$functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions);
foreach ( $functions as $function)
$x = spl_autoload_register($function);
return $x;
} // function Register()
3.3、在需要使用PHPExcel时使用以下代码
[php] view plaincopy
$filePath = '/home/public_html/sqt/protected/data/queueSql/company.xls';
spl_autoload_unregister(array('YiiBase', 'autoload'));
$phpExcelPath = Yii::getPathOfAlias('application.extensions.PHPExcel.PHPExcel');
include($phpExcelPath . DIRECTORY_SEPARATOR . 'IOFactory.php');
spl_autoload_register(array('YiiBase', 'autoload'));
$PHPExcel = PHPExcel_IOFactory::load( $filePath);
3.4、只要设置Yii::$enableIncludePath为false,第三方类库就有了执行自己的autoload方法的机会,并且不需要配置config/main.php,非常方便灵活
[php] view plaincopy
Yii::$enableIncludePath = false;
Yii::import('application.extensions.PHPExcel.PHPExcel', 1);
-------------------------------------------------------------------------------
导入Excel文件方法
[php] view plaincopy
public function actionLoad() {
if(isset($_POST['submit'])) {
$file = CUploadedFile::getInstanceByName('file');//获取上传的文件实例
if($file->getType() == 'application/vnd.ms-excel') {
$excelFile = $file->getTempName();//获取文件名
//这里就是导入PHPExcel包了,要用的时候就加这么两句,方便吧
Yii::$enableIncludePath = false;
Yii::import('application.extensions.PHPExcel.PHPExcel', 1);
$phpexcel = new PHPExcel;
$excelReader = PHPExcel_IOFactory::createReader('Excel5');
$phpexcel = $excelReader->load($excelFile)->getSheet(0);//载入文件并获取第一个sheet
$total_line = $phpexcel->getHighestRow();
$total_column = $phpexcel->getHighestColumn();
for ($row = 2; $row <= $total_line; $row++) {
$data = array();
for ($column = 'A'; $column <= $total_column; $column++) {
$data[] = trim($phpexcel->getCell($column.$row) -> getValue());
}
}
}
}
参考:http://blog.csdn.net/tinico/article/details/18033575
相关文章推荐
- Yii: 扩展CGridView增加导出CSV功能
- thinkphp3.2 删除Runtime目录里的缓存文件,标记一下,以下好找。
- thinkphp3.2 删除Runtime目录里的缓存文件,标记一下,以下好找。
- php进行多个数组合并zip
- PHP的Yii框架的基本使用示例
- 大约laravel错误的解决方案
- 解决php中截取字符串的中文乱码问题
- php配置项-安全模式
- (一)PagerAdapter、FragmentPagerAdapter、FragmentStatePagerAdapter的区别
- PHP的serialize序列化数据与JSON格式化数据
- 8个与php相关的函数
- YII中使用SOAP一定要注意的一些东西
- php抓取远程数据排序
- 方便的格式化OutputDebugString输出函数
- thinkphp开发技巧经验分享
- 禁止FTP用户登录ssh,但是能正常登录FTP 或者 允许ftp用户ssh登录
- sphinx全文搜索Php方面的简单处理
- Yii框架数据库多数据库、主从、读写分离
- [php扩展的安装]sphinx扩展的安装
- PHP修改后无法立即生效