PHP使用ExcelReader读取数据并导入MySQL
"PHP从Excel中读取数据并导入MySQL数据库" 在PHP开发中,有时我们需要处理Excel文件中的数据并将它们导入到MySQL数据库中。这个过程通常涉及到读取Excel文件、解析其中的数据,然后将这些数据按照合适的格式存入数据库。在给定的描述和标签中,我们看到使用了`Spreadsheet_Excel_Reader`库来实现这个功能。下面将详细解释这个过程。 1. **使用PHPExcelReader库** PHPExcelReader是PHP的一个开源库,用于读取Excel文件(包括xls和xlsx格式)。通过这个库,我们可以方便地访问Excel工作表中的单元格数据。在代码中,首先引入`reader.php`文件,然后创建一个`Spreadsheet_Excel_Reader`对象,并设置输出编码为GBK,以便处理包含中文字符的文件。 2. **读取Excel文件** 使用`$data->read('date.xls');`这行代码,我们指定要读取的Excel文件(在这个例子中是`date.xls`),库会自动解析文件内容,并存储在`$data`对象中。`$data->sheets`数组包含了所有工作表的信息,而`$data->sheets[0]`则代表第一个工作表。`$data->sheets[0]['numRows']`和`$data->sheets[0]['numCols']`分别表示该工作表的行数和列数。 3. **连接MySQL数据库** 要将Excel数据导入MySQL,首先需要建立数据库连接。通过`mysql_connect()`函数连接到本地的MySQL服务器,指定用户名(root)、密码(1234)和数据库名(wenhuaedu)。连接成功后,使用`mysql_select_db()`选择要操作的数据库。注意,这里使用了`setnames 'gbk'`来设置数据库的字符集,确保与Excel文件编码相匹配。 4. **数据导入** 使用`for`循环遍历Excel文件中的每一行,提取需要的列(在这个例子中,使用了列1、列2和列3)。然后构造一个SQL的`INSERT INTO`语句,将这些值插入到名为`test`的数据库表中。每个单元格的数据可以通过`$data->sheets[0]['cells'][$i][$j]`获取,其中`$i`是行索引,`$j`是列索引。 5. **执行SQL语句** 通过`mysql_query()`执行SQL插入语句。在实际操作中,应确保处理可能出现的错误,例如数据类型不匹配、字段过多或过少、空值处理等。在代码示例中,错误处理相对简单,仅使用了`or die()`来捕获无法连接数据库的情况。 6. **编码问题** 编码问题在整个过程中非常重要。由于Excel文件可能是GBK编码,数据库可能是UTF-8编码,因此在读取和写入数据时,需要确保编码的一致性,避免出现乱码。在本例中,设置了`setOutputEncoding('gbk')`来处理读取的Excel文件,而在数据库操作中,使用了`setnames 'gbk'`来设置字符集。 总结,通过使用PHPExcelReader库,我们可以高效地读取Excel文件并将其数据导入到MySQL数据库。这个过程涉及到文件读取、数据解析、数据库连接、SQL语句构造和执行等多个步骤。在实际项目中,根据需求的不同,可能还需要进行数据清洗、验证、异常处理等额外工作。
2010年06月29日 星期二 下午 4:14
这里介绍一个直接将excel文件导入mysql的例子。我花了一晚上的时间测试,无论导入简繁体都不会出现乱码,非常好用。
PHP-ExcelReader,下载地址: http://sourceforge.net/projects/phpexcelreader
说明:
测试环境:MYSQL数据库采用utf8编码.导入EXCEL文档是xls格式,经过测试,xlsx 格式[excel 2007]也OK.
文中红色标注为需要注意的地方,请替换成你配置好的数据,如数据库配置等。运行http://localost/test.php实现导入。
以下是我贴出的详细代码,其中test.php为我写的测试文件,reader.php和oleread.inc文件是从上面提供的网址中下载的。
1. test.php
代码如下:
<?php
require_once './includes/reader.php';
// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();
// Set output Encoding.
$data->setOutputEncoding('gbk');
//”data.xls”是指要导入到mysql中的excel文件
$data->read('date.xls');
@ $db = mysql_connect('localhost', 'root', '1234') or
die("Could not connect to database.");//连接数据库
mysql_query("set names 'gbk'");//输出中文
mysql_select_db('wenhuaedu'); //选择数据库
error_reporting(E_ALL ^ E_NOTICE);
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
//以下注释的for循环打印excel表数据
/*
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo """.$data->sheets[0]['cells'][$i][$j]."",";
echo "n";
*/
//以下代码是将excel表数据【3个字段】插入到mysql中,根据你的excel表字段的多少,改写以下代码吧!
$sql = "INSERT INTO test VALUES('".
$data->sheets[0]['cells'][$i][1]."','".
$data->sheets[0]['cells'][$i][2]."','".
$data->sheets[0]['cells'][$i][3]."')";
echo $sql.'<br />';
$res = mysql_query($sql);
?>
包含的文件
OLERead.php <?php
define('NUM_BIG_BLOCK_DEPOT_BLOCKS_POS', 0x2c);
define('SMALL_BLOCK_DEPOT_BLOCK_POS', 0x3c);
define('ROOT_START_BLOCK_POS', 0x30);
define('BIG_BLOCK_SIZE', 0x200);
define('SMALL_BLOCK_SIZE', 0x40);
define('EXTENSION_BLOCK_POS', 0x44);
define('NUM_EXTENSION_BLOCK_POS', 0x48);
define('PROPERTY_STORAGE_BLOCK_SIZE', 0x80);
define('BIG_BLOCK_DEPOT_BLOCKS_POS', 0x4c);
define('SMALL_BLOCK_THRESHOLD', 0x1000);
// property storage offsets
define('SIZE_OF_NAME_POS', 0x40);
define('TYPE_POS', 0x42);
define('START_BLOCK_POS', 0x74);
define('SIZE_POS', 0x78);
define('IDENTIFIER_OLE', pack("CCCCCCCC",0xd0,0xcf,0x11,0xe0,0xa1,0xb1,0x1a,0xe1));
剩余8页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦