数据库

数据库MySQL与xls文件的互导

我爱IT资讯库   2021/02/25

      最近的一个项目需要将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.php

 3         $data = new Spreadsheet_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 function xlsBOF() {

 2     echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);

 3 }

 4 function xlsEOF() {

 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进行转码就可以了。

 




热门内容

Head-of-Line Blocking (线头阻塞)

Head of Line (HOL) Blocking 产生的原因: 概念:队列的首个packet由于它的目的... ...

Python set的高效利用

python set的应用   ... ...

CollectionFrameWork

collectionframework如下: collection ├list │├linkedlist │├array ...

JAVA访问修饰符构造函数的问题(转)

java访问修饰符 构造函数的问题 java访问修饰符-限定符总结(类比c#) java访问修饰符--------- ...

PAT甲1004CountingLeaves【dfs】

1004counting leaves(30 分) a family hierarchy is usually p ...

171.[LeetCode]Excel Sheet Column Number

题目: Related to question Excel Sheet Column Title ... ...

在.NET中获取一台电脑名,IP地址及当前用户名

在.NET中获取一台电脑名,IP地址及当前用户名是非常简单,以下是我常用的几种方法,如果大家还有其他好的方法,可以回复一... ...
sun directory server

sun directory server

Sun One Directory Server(LDAP)安装和调整指南   ... ...
黑客讲故事:攻下隔壁女生路由器后,我都做了些什么

黑客讲故事:攻下隔壁女生路由器后,我都做了些什么

路由器被蹭网后,我有被黑的风险吗? Evi1m0,来自知道创宇,邪红色信息安全组织创始人 其实这个问题可以... ...

oracle 10g for redhat5

解压文件 解压文件命令: unzip 10201_database_linux32.zip ... ...

什么是I2C协议?

I2C协议是单片机与其它芯片常用的通讯协议,由于只需要两根线,所以很好使用。 一. I2C协议技术性能:&nb... ...

[USACO15DEC]最大流MaxFlow

题目:洛谷p3128。 题目大意:一棵n个点的树,每次将两个节点最短路径所覆盖的所有节点的流量加1。问你最后流量最大的节 ...

kde4.1 alpha1

KDE Project Ships First Alpha of KDE 4.1 KDE Commun... ...

oracle 函数 和 优化

sql语句中,如果where条件里面含有not, !=, <> ,null ,则即使该字段建有索引,也... ...
09年中国互联网企业市值排名

09年中国互联网企业市值排名

这是一个最坏的时代,也是一个最好的时代。自07年底美国次贷危机以来,全球经济发生了巨大的变化。股票市场也随之跌荡起... ...

用于发送UDP消息的SQL Server 扩展存储过程

下载源文件 13.1 kb介绍我希望能够发布 sql server 表更新,因此修改了微软的示例扩展存储过程 xp_he ...

Cache与Fetch(二)

这两天一直百思不得其解的问题终于解决了,这个问题如下: 通过HQL:“select distinct forumGr... ...

[转]小规模低性能低流量网站设计原则

作者: Fenng 网址: http://www.dbanotes.net/arch/small_site... ...

divcss圆角

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit... ...

Kindle Paperwhite 越狱/加字体/支持PDF、EPUB、DjVu、FB2、CHM和DOC文档

0. 升级 官网固件升级:http://www.amazon.com/gp/help/customer/displ... ...
购物网第二阶段总结笔记3:用户注册模块

购物网第二阶段总结笔记3:用户注册模块

事先工作: 【1】建立用户表:  分析静态页面的用户信息,可以得出用户表所需的字段,建立用户表S... ...

pythonbottleweb框架简介

bottle 是一个快速,简单,轻量级的 python wsgi web 框架。单一文件,只依赖 python 标准库 ...

Android Log介绍

android.util.Log常用的方法有以下5个:Log.v() ,Log.d() ,Log.i() ,Log.w(... ...

target action版简化命令设计模式原理分析

我们知道在Cocoa程序中, 如果你想处理一个窗口的事件或者应用程序的事件, 你可以使用Delegate的方法来实现响应... ...

AHP层次分析法计算权重

一. AHP层次分析法介绍     层次分析法(Analytic Hierarchy... ...

AddingGravitytoyourUIComponents

problem you want your ui components to have gravity, so that ...

我的tmux配置

# General Setting set-option -g prefix C-a ... ...

Android适配器之---SimpleCursorAdapter

结构 继承关系 public class SimpleCusrorAdapter extends Reso... ...

008.不要在该奋斗的年纪选择去偷懒

转载地址:不要在该奋斗的年纪选择去偷懒 不要在该奋斗的年纪选择去偷懒,只有度过了一段连自己都被感动了的... ...

不能读取记录;在MSysObjects上没有读取数据权限-80040E09

当我读取ACCESS里的系统表MSysObjects时,出现:不能读取记录;在 MSysObjects 上没有读取... ...