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导入导出示例相关推荐

  1. toad导入数据_利用TOAD实现EXCEL数据在oracle的导入导出

    利用TOAD实现EXCEL数据在oracle的导入导出 1.从ORACLE数据库导出成为EXCEL文件 利用TOAD连接上数据库,访问某个表,我本机是选中表"OA_USER" 右键 ...

  2. Excel与Sql Server互通导入导出跨语言

    目录 Excel与Sql Server互通导入导出跨语言 1.目标Excel缺少表的列标题字段 1.1.问题的提出从这里开始 1.2.参数的正确写法 1.3.附带说一下Jet 4.0 1.4.附带说一 ...

  3. Excel与DataBase之间的导入导出

    目录 Excel与DataBase之间的导入导出 前段代码 Body部分 导包部分 Script部分 后端代码 Util工具层 ExcelUtil工具类 读取工具类 写入工具类 自定义注解类 Enti ...

  4. csv和excel php 解析_PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数

    CSV,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件. 一.CSV数据导入函数fgetcsv() fgetcsv() 函数从文件指针中读入一行并解析 CSV ...

  5. SQL Server 与 Excel,Access 数据表的导入导出(注:参照博园.NET大观)

    我们知道在Sql Server 中 集成了数据的导入导出这么一个工具,那用Sql 脚本怎么轻松操作 Access 和 Excel 中的数据呢,接下来我们看一看: 一. SQL SERVER 和EXCE ...

  6. 轻松实现SQL Server与Access、Excel数据表间的导入导出

    在SQL SERVER 2000/2005中除了使用DTS进行数据的导入导出,我们也可以使用Transact-SQL语句进行导入导出操作.在Transact-SQL语句中,我们主要使用OpenData ...

  7. 如何在 MySQL / MariaDB 中导入导出数据,导入导出数据库文件、Excel、CSV

    文章目录 本教程将详细讲解 1. MySQL / MariaDB 数据库数据「导出」 2. MySQL / MariaDB 数据库数据「导入」 3. 使用「卡拉云」一键导入导出 MySQL / Mar ...

  8. PHP博客导入导出,Thinkphp5.0导入导出详解

    Thinkphp扩展类一般都放在extend下 写导入导出的公共方法,方便再控制器中调用 导入excel文件/** * 导入excel文件 * @param  string $file excel文件 ...

  9. 谷歌浏览器导入导出书签,导入导出密码

    导出导入书签 1.打开书签管理器 一般书签上面右键就能看到书签管理器 2.打开导入导出菜单 进入书签管理器后,右上角,三个竖着的小点,如下 点开如下图 3.导出导入书签 上图,选择导出书签,导出的是一 ...

  10. mysql导出包_mysql导入导出包括函数或者存储过程

    mysql导入导出包括函数或者存储过程 1.mysql导出整个数据库 mysqldump -h hostname -u username -p  databasename > backupfil ...

最新文章

  1. socket 995 错误 boost
  2. windows程序设计 c语言,【教程】基于C语言的Windows编程入门
  3. Spring Cloud 2020.0.5 发布
  4. UVA - 12083 Guardian of Decency (二分匹配)
  5. 解释spring,struts,hibernate优缺点
  6. [转载] 【C/C++】Vector的创建与初始化方法
  7. layui的tree如何实现动态加载_layui tree动态加载 利用CAReplicatorLayer实现的加载动画 - 电脑常识 - 服务器之家...
  8. com.alibaba.fastjson.JSONObject;的使用
  9. 机器学习、⼈⼯智能、深度学习是什么关系?
  10. Linux Keepalived 高可用虚拟IP安装与配置
  11. 街舞元年的角逐:“热血街舞团”和“这就是街舞”谁能胜出?
  12. e4a和php教程,2019开源影视APP优化运营版+对接苹果cms10+全套类库E4A资源+开发文档+搭建教程源码...
  13. 订餐系统c语言代码大全,C语言订餐系统
  14. 用css伪元素制作箭头图标
  15. 【元胞自动机】基于元胞自动机模拟大型商场人流疏散含Matlab源码
  16. 温莎大学的计算机科学,温莎大学荣誉计算机CP科学专业本科.pdf
  17. 计算机的二三事——软件篇
  18. java 完全解耦_java-完全解耦
  19. 深度学习基础知识每日更 upupup
  20. HTML中的 a标签

热门文章

  1. 1151服务器芯片组,Intel LGA1151平台的芯片组都包含哪些?
  2. 搭建MQTT服务器及客户端
  3. Matlab FERUM可靠性,边坡稳定性可靠度分析的随机有限元法-修改
  4. 新手怎么开始学习3Dmax?学习MAX的七个建议,不再迷茫!
  5. 融云 imkit 解析
  6. progress的使用
  7. 主流的知乎口碑营销方式有哪些
  8. eclipse调试基于freertos的嵌入式工程
  9. 光耦继电器工作原理及优点概述
  10. ION基本概念介绍和原理分析