最近的一个项目需要将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的,显然下载的是没有,只要改动将其包含进去就可以了。接下来就可以直接使用了,看代码

         $Import_TmpFile = $_FILES['file']['tmp_name'];
require_once '../utils/reader.php'; //引入刚才的reader.php
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('UTF-8');
$data->read($Import_TmpFile);
//$data是对象数据,将其遍历成数组
$array =array();
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
$array[$i][$j] = $data->sheets[0]['cells'][$i][$j];
}
} //这一步就是讲xls文件的内容遍历出来了,是一个数组的形式,下面的就是如何插入数据库了。
//将数据写入trade交易数据表中
$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)";
$stmt = $pdo->prepare($sql);
for($i=1;$i<=count($array);$i++){
$stmt->bindParam(':trade_time', $array[$i]['2']);
$stmt->bindParam(':institution', $array[$i]['3']);
$stmt->bindParam(':mediacy', $array[$i]['4']);
$stmt->bindParam(':trade_account', $array[$i]['5']);
$stmt->bindParam(':user_name', $array[$i]['6']);
$stmt->bindParam(':goods_type', $array[$i]['7']);
$stmt->bindParam(':trade_number', $array[$i]['8']);
$stmt->bindParam(':trade_pay', $array[$i]['9']);
$stmt->bindParam(':level_benefit', $array[$i]['10']);
$stmt->bindParam(':hold_benefit', $array[$i]['11']);
$stmt->bindParam(':benefit_total', $array[$i]['12']);
$stmt->bindParam(':exchange_poundage', $array[$i]['13']);
$stmt->bindParam(':membership_poundage', $array[$i]['14']);
$stmt->bindParam(':user_poundage', $array[$i]['15']);
$tag = $stmt->execute();
}

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

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

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

 function xlsBOF() {
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
}
function xlsEOF() {
echo pack("ss", 0x0A, 0x00);
}
function xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
echo pack("d", $Value);
}
function xlsWriteLabel($Row, $Col, $Value) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
}
// prepare headers information
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=\"export_".date("Y-m-d").".xls\"");
header("Content-Transfer-Encoding: binary");
header("Pragma: no-cache");
header("Expires: 0");
// start exporting
xlsBOF();
// first row
xlsWriteLabel(0, 0, "id");
xlsWriteLabel(0, 1, "name");
xlsWriteLabel(0, 2, "email");
// second row
xlsWriteNumber(1, 0, 230);
xlsWriteLabel(1, 1, "John");
xlsWriteLabel(1, 2, "john@yahoo.com");
// third row
xlsWriteNumber(2, 0, 350);
xlsWriteLabel(2, 1, "Mark");
xlsWriteLabel(2, 2, "mark@yahoo.com");
// end exporting
xlsEOF();

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

数据库MySQL与xls文件的互导的更多相关文章

  1. flask使用pymysql连接MySQL,生成xls文件并下载到本地

    版本一:将MySQL数据写入到excel(xsl)文件并下载到默认文件夹(一般问电脑的下载文件夹里面),并显示特效到前端页面. flask框架连接MySQL,我们使用pymsql这个工具,如下操作: ...

  2. MySQL 数据库出现导入xls数据出现1062主从错误错误问题解决方案

    今天把xls数据表导入MySQL数据库时发现出现1062错误    ,并且有20-700条数据一直导入不了所以开始找解决方案. 解决方案1:   数据库表设计问题导致相同字段的重复数据不能导入   解 ...

  3. atitit.sql server2008导出导入数据库大的表格文件... oracle mysql

    atitit.sql server2008导出导入数据库大的表格文件... 1. 超过80M的文件是不能在查询分析器中执行的 1 2. Oracle ,mysql大的文件导入 1 2.1. 使用sql ...

  4. Mysql 数据库日志与数据文件分开

    参考:https://blog.csdn.net/jiao_fuyou/article/details/78366621 myql默认配置情况下,二进制日志文件是保存在默认的数据目录 data 下,如 ...

  5. python json及mysql——读取json文件存sql、数据库日期类型转换、终端操纵mysql及python codecs读取大文件问题

    preface: 近期帮师兄处理json文件,须要读到数据库里面,以备其兴许从数据库读取数据.数据是关于yelp站点里面的: https://github.com/Yelp/dataset-examp ...

  6. mysql数据库导入导出文件sql文件

    window下 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u dbuser -p dbname > dbname.sql ...

  7. php中使用PHPExcel操作excel(xls)文件

    读取中文的xls.csv文件会有问题,网上找了下资料,发现PHPExcel类库好用,官网地址:http://phpexcel.codeplex.com/ 1.读取xls文件内容  代码如下 复制代码 ...

  8. PHP - PHPExcel操作xls文件

    读取中文的xls.csv文件会有问题,网上找了下资料,发现PHPExcel类库好用,官网地址:http://phpexcel.codeplex.com/ 1.读取xls文件内容 <?php // ...

  9. 数据库-mysql命令

    1.项目过程:概要设计阶段 —— 架构师 任务:技术选型(网络/语言/框架).项目结构(子系统/模块).数据结构(数据特点/内容) 项目中存储数据的方式: (1)服务器内存:存取速度快:非永久存储.容 ...

随机推荐

  1. 最火的Android开源项目(一)

    GitHub在中国 的火爆程度无需多言,越来越多的开源项目迁移到GitHub平台上.更何况,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项 目很是必要.利用这些项目,有时能够 ...

  2. Angular和jQuery的ajax请求的差别

    近期项目中使用angular,结果发现后台没法获取參数,所以,略微研究了一下两者在发送ajax时的差别. 注意angular和jquery的ajax请求是不同的. 在jquery中,官方文档解释con ...

  3. NSUInteger和NSInteger和int

    int和NSInteger其实是差不多的,但更推荐使用NSInteger,因为使用NSInteger,这样就不用考虑设备是32位还是64位了. NSUInteger是无符号的,即没有负数,NSInte ...

  4. Android官方技术文档翻译——ApplicationId 与 PackageName

    本文译自androd官方技术文档<ApplicationId versus PackageName>,原文地址:http://tools.android.com/tech-docs/new ...

  5. mysql优化之索引优化

    Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 索引优化 索引优化涉及到几个方面,包括了索引 ...

  6. Java基础知识强化之IO流笔记58:内存操作流

    1. 内存操作流: 用来操作处理临时存储的信息的. (1)操作字节数组: ByteArrayInputStream ByteArrayOutputStream 代码示例: package cn.itc ...

  7. 安卓蓝牙技术Bluetooth使用流程(Bluetooth详解)

    一:蓝牙设备之间的通讯首要包含了四个进程 设置蓝牙设备 寻觅局域网内也许或许匹配的设备 衔接设备 设备之间的数据传输 二:详细编程完结 1. 发动蓝牙功用 首要经过调用静态办法getDefaultAd ...

  8. 通过配置tomcat虚拟路径配置站点的静态资源

    我们常常站点中会提供给用户上传文件.图片.视频或者诸如为了提高性能生成的静态文件等存储在站点应用中.但如果静态资源文件和项目文件在同一个目录下,当我们重新部署文件时,war重新解压会导致静态资源文件的 ...

  9. HDU-1052(贪心策略)

    Tian Ji -- The Horse Racing Problem Description Here is a famous story in Chinese history. "Tha ...

  10. 面试相关的技术问题---java基础

    最近在准备秋季校招,将一些常见的技术问题做一个总结!希望对大家有所帮助! 1.面向对象和面向过程的区别是什么? 面向对象是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描 ...