php excel前台导出,ThinkPHP Excel导入导出示例
ThinkPHP官方的帖子感觉写的很含糊,还是借鉴了另外一篇博客http://home.51.com/love0221/diary/item/10053281.html,才跑成功了,其中出了一些小问题,也是通过各种百度才得以解决,分享如下:
一、前期准备
下载PHPExcel包,解压出PHPExcel文件夹和PHPExcel.php文件,放到/ThinkPHP/Extend/Vendor目录下
可以在ThinkPHP同目录下新建一个Public文件夹,在路径/Public/upfile/Excel下存放上传的excel文件
在你的数据库中建一张测试用的表,比如:think_kucun,假设有4个field分别为name1, name2, name3, name4。 二、导入
新建一个模版类,用于上传excel文件:
导入Excel表:
在Action的.class.php文件中实现导入的函数:
public function import(){
if (!empty ( $_FILES ['file_stu'] ['name'])){
$tmp_file = $_FILES ['file_stu'] ['tmp_name'];
$file_types = explode ( ".", $_FILES ['file_stu'] ['name'] );
$file_type = $file_types [count ( $file_types ) - 1];
/*判别是不是.xls文件,判别是不是excel文件*/
if (strtolower($file_type)!="xls" && strtolower($file_type)!="xlsx")
{
$this->error ( '不是Excel文件,重新上传' );
}
/*设置上传路径*/
$savePath = './Public/upfile/Excel/';
//echo $savePath;
/*以时间来命名上传的文件*/
$str = date ('Ymdhis');
$file_name = $str.".".$file_type;
/*是否上传成功*/
if (!copy ($tmp_file,$savePath.$file_name)) {
$this->error ('上传失败');
}
/*读取Excel内容,函数具体实现后文有说明*/
$res = readExcel($savePath.$file_name,"UTF-8",$file_type);
/*重要代码 解决Thinkphp M、D方法不能调用的问题
如果在thinkphp中遇到M 、D方法失效时就加入下面一句代码
*/
spl_autoload_register ( array ('Think', 'autoload' ) );
/*对生成的数组进行数据库的写入*/
foreach ( $res as $k => $v ) {
if ($k != 0) {
$data ['name1'] = $v[0];
$data ['name2'] = $v[1];
$data ['name3'] = $v[2];
$data ['name4'] = $v[3];
$result = M ('kucun')->add($data);
if ($result===false) {
$this->error ('导入数据库失败');
}
}
}
$this->success('导入成功','__URL__/read');
}
}
在工程目录的Common目录下新建common.php文件,实现readExcel()函数,不过实际上xlsx导入会出错,不知道和PHPExcel的版本是不是有关系,还希望解决此问题的网友前来讨论:
function readExcel($file_name,$encode,$file_type)
{
//引用PHPExcel相关类,放在vendor目录下即可如此引用
Vendor("PHPExcel");
Vendor("PHPExcel.IOFactory");
if(strtolower ($file_type)=='xls')//判断excel表类型为2003还是2007
{
Vendor("Excel.PHPExcel.Reader.Excel5");
$objReader = PHPExcel_IOFactory::createReader('Excel5');
}elseif(strtolower ($file_type)=='xlsx')
{
Vendor("Excel.PHPExcel.Reader.Excel2007");
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
}
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($file_name);
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$excelData = array();
for ($row = 1; $row <= $highestRow; $row++) {
for ($col = 0; $col < $highestColumnIndex; $col++) {
$excelData[$row][] =(string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
}
}
return $excelData;
}
导入完毕。
三、导出
在Action的.class.php文件中实现导出的函数:
public function export(){
spl_autoload_register(array('Think','autoload'));
$data= M('kucun')->select(); //查出数据
$name='Excelfile'; //生成的Excel文件文件名
pushExcel($data,$name);
}
在common.php里实现pushExcel():
function pushExcel($data,$name='Excel')
{
/* 导出excel函数*/
Vendor("PHPExcel");
Vendor("PHPExcel.IOFactory");
error_reporting(E_ALL);
date_default_timezone_set('Europe/London');
$xlsTitle = iconv('utf-8','gb2312',$name);//文件名称
$objPHPExcel = new PHPExcel();
/*以下是一些设置 ,什么作者 标题啊之类的*/
$objPHPExcel->getProperties()->setCreator("SEIEE")
->setLastModifiedBy("SEIEE")
->setTitle("Data export")
->setSubject("Data export")
->setDescription("Data Backup")
->setKeywords("excel")
->setCategory("result file");
/*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改,这里最好能够做成对$data的遍历*/
foreach($data as $k => $v){
$num=$k+1;
$objPHPExcel->setActiveSheetIndex(0)
//Excel的第A列,uid是你查出数组的键值,下面以此类推
->setCellValue('A'.$num, $v['name1'])
->setCellValue('B'.$num, $v['name2'])
->setCellValue('C'.$num, $v['name3']);
}
$objPHPExcel->getActiveSheet()->setTitle('Sheet1');
$objPHPExcel->setActiveSheetIndex(0);
ob_end_clean(); //清空缓存
header("Pragma: public"); //下面是一堆header的设置,测试的时候加了好多,现在不清楚哪个没用
header("Expires: 0");
header('Content-Type: application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition: attachment;filename="'.$name.'.xls"');
header('Cache-Control: max-age=0');
header("Content-Transfer-Encoding:binary");
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
这里注意一个很重要的问题,有些人可能在导出的时候网页出现乱码,是因为php文件有BOM头,所以用notepad++把php文件改成无BOM头编码就OK了,导出时候就会弹出一个对话框,保存即可。
php excel前台导出,ThinkPHP Excel导入导出示例相关推荐
- toad导入数据_利用TOAD实现EXCEL数据在oracle的导入导出
利用TOAD实现EXCEL数据在oracle的导入导出 1.从ORACLE数据库导出成为EXCEL文件 利用TOAD连接上数据库,访问某个表,我本机是选中表"OA_USER" 右键 ...
- Excel与Sql Server互通导入导出跨语言
目录 Excel与Sql Server互通导入导出跨语言 1.目标Excel缺少表的列标题字段 1.1.问题的提出从这里开始 1.2.参数的正确写法 1.3.附带说一下Jet 4.0 1.4.附带说一 ...
- Excel与DataBase之间的导入导出
目录 Excel与DataBase之间的导入导出 前段代码 Body部分 导包部分 Script部分 后端代码 Util工具层 ExcelUtil工具类 读取工具类 写入工具类 自定义注解类 Enti ...
- csv和excel php 解析_PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数
CSV,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件. 一.CSV数据导入函数fgetcsv() fgetcsv() 函数从文件指针中读入一行并解析 CSV ...
- SQL Server 与 Excel,Access 数据表的导入导出(注:参照博园.NET大观)
我们知道在Sql Server 中 集成了数据的导入导出这么一个工具,那用Sql 脚本怎么轻松操作 Access 和 Excel 中的数据呢,接下来我们看一看: 一. SQL SERVER 和EXCE ...
- 轻松实现SQL Server与Access、Excel数据表间的导入导出
在SQL SERVER 2000/2005中除了使用DTS进行数据的导入导出,我们也可以使用Transact-SQL语句进行导入导出操作.在Transact-SQL语句中,我们主要使用OpenData ...
- 如何在 MySQL / MariaDB 中导入导出数据,导入导出数据库文件、Excel、CSV
文章目录 本教程将详细讲解 1. MySQL / MariaDB 数据库数据「导出」 2. MySQL / MariaDB 数据库数据「导入」 3. 使用「卡拉云」一键导入导出 MySQL / Mar ...
- PHP博客导入导出,Thinkphp5.0导入导出详解
Thinkphp扩展类一般都放在extend下 写导入导出的公共方法,方便再控制器中调用 导入excel文件/** * 导入excel文件 * @param string $file excel文件 ...
- 谷歌浏览器导入导出书签,导入导出密码
导出导入书签 1.打开书签管理器 一般书签上面右键就能看到书签管理器 2.打开导入导出菜单 进入书签管理器后,右上角,三个竖着的小点,如下 点开如下图 3.导出导入书签 上图,选择导出书签,导出的是一 ...
- mysql导出包_mysql导入导出包括函数或者存储过程
mysql导入导出包括函数或者存储过程 1.mysql导出整个数据库 mysqldump -h hostname -u username -p databasename > backupfil ...
最新文章
- socket 995 错误 boost
- windows程序设计 c语言,【教程】基于C语言的Windows编程入门
- Spring Cloud 2020.0.5 发布
- UVA - 12083 Guardian of Decency (二分匹配)
- 解释spring,struts,hibernate优缺点
- [转载] 【C/C++】Vector的创建与初始化方法
- layui的tree如何实现动态加载_layui tree动态加载 利用CAReplicatorLayer实现的加载动画 - 电脑常识 - 服务器之家...
- com.alibaba.fastjson.JSONObject;的使用
- 机器学习、⼈⼯智能、深度学习是什么关系?
- Linux Keepalived 高可用虚拟IP安装与配置
- 街舞元年的角逐:“热血街舞团”和“这就是街舞”谁能胜出?
- e4a和php教程,2019开源影视APP优化运营版+对接苹果cms10+全套类库E4A资源+开发文档+搭建教程源码...
- 订餐系统c语言代码大全,C语言订餐系统
- 用css伪元素制作箭头图标
- 【元胞自动机】基于元胞自动机模拟大型商场人流疏散含Matlab源码
- 温莎大学的计算机科学,温莎大学荣誉计算机CP科学专业本科.pdf
- 计算机的二三事——软件篇
- java 完全解耦_java-完全解耦
- 深度学习基础知识每日更 upupup
- HTML中的 a标签