最近的一个项目需要将xls表导入到MySQL数据库中和将MySQL数据表导出到xls表中,在网上搜了很多资料,经过多次尝试终于实现了功能,废话不多说,在这粘贴出代码,希望可以帮到需要的朋友。

一、将.xls表导入到MySQL数据表中。

这里我用的是一个类库,下载地址:http://sourceforge.net/projects/phpexcelreader/  可以这个下载的不能直接使用,要做相应的修改(参照:http://www.cnblogs.com/phpzxh/archive/2009/09/16/1568133.html)。下载以后,我们需要的只是那个Excel文件夹,其他是自带的案例,因为不能运行所以可以删除不管。打开这个Excel文件夹,里面有两个文件,oleread.inc和reader.php,其中这个readre.php是应该包含oleread.inc的,显然下载的是没有,只要改动将其包含进去就可以了。接下来就可以直接使用了,看代码

1 $Import_TmpFile = $_FILES['file']['tmp_name'];2 require_once '../utils/reader.php'; //引入刚才的reader.php3 $data = newSpreadsheet_Excel_Reader();4 $data->setOutputEncoding('UTF-8');5 $data->read($Import_TmpFile);6 //$data是对象数据,将其遍历成数组

7 $array =array();8 for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {9 for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {10 $array[$i][$j] = $data->sheets[0]['cells'][$i][$j];11 }12 } //这一步就是讲xls文件的内容遍历出来了,是一个数组的形式,下面的就是如何插入数据库了。13 //将数据写入trade交易数据表中

14 $sql = "insert into dou_trade(trade_time,institution,mediacy,trade_account,user_name,goods_type,trade_number,trade_pay,level_benefit,hold_benefit,benefit_total,exchange_poundage,membership_poundage,user_poundage) values(:trade_time,:institution,:mediacy,:trade_account,:user_name,:goods_type,:trade_number,:trade_pay,:level_benefit,:hold_benefit,:benefit_total,:exchange_poundage,:membership_poundage,:user_poundage)";15 $stmt = $pdo->prepare($sql);16 for($i=1;$i<=count($array);$i++){17 $stmt->bindParam(':trade_time', $array[$i]['2']);18 $stmt->bindParam(':institution', $array[$i]['3']);19 $stmt->bindParam(':mediacy', $array[$i]['4']);20 $stmt->bindParam(':trade_account', $array[$i]['5']);21 $stmt->bindParam(':user_name', $array[$i]['6']);22 $stmt->bindParam(':goods_type', $array[$i]['7']);23 $stmt->bindParam(':trade_number', $array[$i]['8']);24 $stmt->bindParam(':trade_pay', $array[$i]['9']);25 $stmt->bindParam(':level_benefit', $array[$i]['10']);26 $stmt->bindParam(':hold_benefit', $array[$i]['11']);27 $stmt->bindParam(':benefit_total', $array[$i]['12']);28 $stmt->bindParam(':exchange_poundage', $array[$i]['13']);29 $stmt->bindParam(':membership_poundage', $array[$i]['14']);30 $stmt->bindParam(':user_poundage', $array[$i]['15']);31 $tag = $stmt->execute();32 }

这样就可以将xls文件的内容导入到数据表中了。

二、将MySQL数据表内容导出到xls表中。

这得益于一篇文章,地址:http://krasimirtsonev.com/blog/article/php-export-mysql-data-to-xls-file。其核心代码如下

1 functionxlsBOF() {2 echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);3 }4 functionxlsEOF() {5 echo pack("ss", 0x0A, 0x00);6 }7 function xlsWriteNumber($Row, $Col, $Value) {8 echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);9 echo pack("d", $Value);10 }11 function xlsWriteLabel($Row, $Col, $Value) {12 $L = strlen($Value);13 echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);14 echo $Value;15 }16 //prepare headers information

17 header("Content-Type: application/force-download");18 header("Content-Type: application/octet-stream");19 header("Content-Type: application/download");20 header("Content-Disposition: attachment; filename=\"export_".date("Y-m-d").".xls\"");21 header("Content-Transfer-Encoding: binary");22 header("Pragma: no-cache");23 header("Expires: 0");24 //start exporting

25 xlsBOF();26 //first row

27 xlsWriteLabel(0, 0, "id");28 xlsWriteLabel(0, 1, "name");29 xlsWriteLabel(0, 2, "email");30 //second row

31 xlsWriteNumber(1, 0, 230);32 xlsWriteLabel(1, 1, "John");33 xlsWriteLabel(1, 2, "john@yahoo.com");34 //third row

35 xlsWriteNumber(2, 0, 350);36 xlsWriteLabel(2, 1, "Mark");37 xlsWriteLabel(2, 2, "mark@yahoo.com");38 //end exporting

39 xlsEOF();

只要将其中的first row /second row等换成表的内容就可以了。其中注意的是是编码问题,数据库中的数utf-8,而xls中式gbk编码的,为防止出现乱码,最好的办法是在写入xls表之前用iconv进行转码就可以了。

mysql 与 xls 连接_数据库MySQL与xls文件的互导相关推荐

  1. mysql拒绝远程连接_解决Mysql数据库拒绝远程连接和忘记密码的问题

    解决数据库忘记密码的问题 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 编辑m ...

  2. mysql 分区指定路径_[数据库]MySQL 指定各分区路径

    [数据库]MySQL 指定各分区路径 0 2016-11-08 18:00:44 介绍 可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定数据路径,因为数据和索引是存储在 ...

  3. mysql表全连接_关于mysql 实现表连接(左,右,内,全连接)

    mysql 实现表连接(左,右,内,全连接) 查询中出现两个表的连接,下面通过实例来讲解一下各种连接查询的不同之处 表 a,和表b 如下图 a 表中 有 abcd b表中有 abcf 内连接:SELE ...

  4. 打开mysql的远程连接_开启mysql的远程访问权限

    基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root的远程访问权限.下面是基本的步骤: 1.登录到mysql中,为root进行远程访问的授权,执行下面的命令: mysql&g ...

  5. mysql权限层级体系_数据库mysql有哪些权限?层级有哪些?

    我们想要运行一个文件时,有时候会出现只有管理员才能打开这类软件,这就是权限对于用户的限制.那么在我们最近学习的数据库mysql中,也有这样的权限需要我们去注意吗?小编想说当然有,而且还不少!今天就数据 ...

  6. mysql中自动求和_数据库mysql如何进行字段的自动求和?

    数据库MySQL是如何进行字段的自动求和的呢?当我们需要对字段进行求和时,该怎么操作呢?具体的代码编程又是怎样的呢? 数据表qb_shop_content里有N篇文章,fid=1-N;篇里的jinbi ...

  7. mysql explain详解_数据库mysql(1)——B+TREE索引原理

    一.B+Tree索引详解 1.什么是索引? 索引:加速查询的数据结构. 2.索引常见数据结构: #1.顺序查找: 最基本的查询算法-复杂度O(n),大数据量此算法效率糟糕. #2.二叉树查找(bina ...

  8. mysql数据去重语句_数据库 mysql 语句

    LAMP: Linux系统 A阿帕奇服务器 Mysql数据库 Php语言 mysql:常用代码 create table CeShi1 ( Uid varchar(50) primary key, P ...

  9. mysql转储导入错误_数据库MYSQL导入SQL文件时错误的解决方法(2种)

    从服务器数据库用navicate导出的.sql文件后再用navicate导入到本地的数据库中会出现若干条记录的错误: [Err] 1064 – You have an error in your SQ ...

最新文章

  1. 用Access的iif代替SQL中的IsNull()
  2. windows api打开文件对话框
  3. oracle swap忽略可以吗,Oracle Swap居高不下处理
  4. on java 8学习笔记
  5. HDU1576(欧几里得算法)
  6. win7无法打开设备和打印机
  7. spring中文参考手册-核心技术_ioc
  8. 博途软件中多重背景块的建立_如何正确的理解西门子博途中的—单个实例和多重实例的区别...
  9. Scala class
  10. 混响消除插件-Acon Digital DeVerberate 2 v2.1.2 WiN-MAC
  11. LoadRunner教程(2)-LoadRunner性能测试利器
  12. (8)FPGA面试技能提升篇(LTE、CPRI/eCPRI接口、LDPC)
  13. Android 通过usb调用高拍仪进行拍照
  14. Zookeeper轻松上手
  15. 真实揭秘90后程序员婚恋现状,有点扎心!
  16. 数据挖掘的过程有哪些
  17. GIS自主创新十年路(一):缘起ActiveMap
  18. android sex games app,Beginning Android Games 2nd Edition
  19. android 使用iphone线控耳机,苹果耳机/earpods可以用线控控制安卓手机吗?
  20. java 1~20阶乘和 步骤详解

热门文章

  1. php时间调用最简单的,PHP调用时间通过引用不可避免?
  2. arduino 休眠 节能_Arduino低功耗掉电模式看门狗唤醒
  3. scala 环境变量_Scala变量的范围
  4. 2万字!66道并发面试题及答案
  5. LINQ能不能用系列(一)LINQ to Object 效率比对
  6. struts的开发模式
  7. Mapreduce的排序、全排序以及二次排序
  8. android surfaceview camera,android – 如何在SurfaceView上显示相机预览?
  9. redis启动没反应_Promethues如何针对Redis进行监控
  10. 放大缩小保证div对齐_NFS Write IO 不对齐深度分析