最近因项目需求,要实现将excel文件通过php页面导入mysql数据库中。在网上搜了很多这方面的资料,发现都是将excel文件另存为csv文件,然后从csv文件导入。这里介绍一个直接将excel文件导入mysql的例子。我花了一晚上的时间测试,无论导入简繁体都不会出现乱码,非常好用。
整理:leo 2007.12.21 凌晨
PHP-ExcelReader,下载地址: http://sourceforge.net/projects/phpexcelreader
说明:
测试环境:MYSQL数据库采用utf8编码.导入EXCEL文档是xls格式,经过测试,xlsx 格式[excel 2007]也OK.
文中红色标注为需要注意的地方,请替换成你配置好的数据,如数据库配置等。运行http://localost/test.php实现导入。
以下是我贴出的详细代码,其中test.php为我写的测试文件,read.php和oleread.inc文件是从上面提供的网址中下载的。
1.
<?php
require_once 'reader.php';
// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();
// Set output Encoding.
$data->setOutputEncoding('gbk');
//”data.xls”是指要导入到mysql中的excel文件
$data->read('data.xls');
@ $db = mysql_connect('localhost', 'root', '123456') or
mysql_query("set names 'gbk'");//输出中文
mysql_select_db('mydb');
error_reporting(E_ALL ^ E_NOTICE);
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
//以下注释的for循环打印excel表数据
//以下代码是将excel表数据【3个字段】插入到mysql中,根据你的excel表字段的多少,改写以下代码吧!
}
?>
2.reader.php
<?php
//require_once 'PEAR.php';
require_once 'oleread.inc';
//require_once 'OLE.php';
define('SPREADSHEET_EXCEL_READER_BIFF8',
define('SPREADSHEET_EXCEL_READER_BIFF7',
define('SPREADSHEET_EXCEL_READER_WORKBOOKGLOBALS',
define('SPREADSHEET_EXCEL_READER_WORKSHEET',
define('SPREADSHEET_EXCEL_READER_TYPE_BOF',
define('SPREADSHEET_EXCEL_READER_TYPE_EOF',
define('SPREADSHEET_EXCEL_READER_TYPE_BOUNDSHEET',
define('SPREADSHEET_EXCEL_READER_TYPE_DIMENSION',
define('SPREADSHEET_EXCEL_READER_TYPE_ROW',
define('SPREADSHEET_EXCEL_READER_TYPE_DBCELL',
define('SPREADSHEET_EXCEL_READER_TYPE_FILEPASS',
define('SPREADSHEET_EXCEL_READER_TYPE_NOTE',
define('SPREADSHEET_EXCEL_READER_TYPE_TXO',
define('SPREADSHEET_EXCEL_READER_TYPE_RK',
define('SPREADSHEET_EXCEL_READER_TYPE_RK2',
define('SPREADSHEET_EXCEL_READER_TYPE_MULRK',
define('SPREADSHEET_EXCEL_READER_TYPE_MULBLANK',
define('SPREADSHEET_EXCEL_READER_TYPE_INDEX',
define('SPREADSHEET_EXCEL_READER_TYPE_SST',
define('SPREADSHEET_EXCEL_READER_TYPE_EXTSST',
define('SPREADSHEET_EXCEL_READER_TYPE_CONTINUE',
define('SPREADSHEET_EXCEL_READER_TYPE_LABEL',
define('SPREADSHEET_EXCEL_READER_TYPE_LABELSST',
define('SPREADSHEET_EXCEL_READER_TYPE_NUMBER',
define('SPREADSHEET_EXCEL_READER_TYPE_NAME',
define('SPREADSHEET_EXCEL_READER_TYPE_ARRAY',
define('SPREADSHEET_EXCEL_READER_TYPE_STRING',
define('SPREADSHEET_EXCEL_READER_TYPE_FORMULA',
define('SPREADSHEET_EXCEL_READER_TYPE_FORMULA2',
define('SPREADSHEET_EXCEL_READER_TYPE_FORMAT',
define('SPREADSHEET_EXCEL_READER_TYPE_XF',
define('SPREADSHEET_EXCEL_READER_TYPE_BOOLERR',
define('SPREADSHEET_EXCEL_READER_TYPE_UNKNOWN',
define('SPREADSHEET_EXCEL_READER_TYPE_NINETEENFOUR', 0x22);
define('SPREADSHEET_EXCEL_READER_TYPE_MERGEDCELLS', 0xE5);
define('SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS' ,
define('SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS1904', 24107);
define('SPREADSHEET_EXCEL_READER_MSINADAY',
//define('SPREADSHEET_EXCEL_READER_MSINADAY', 24 * 60 * 60);
//define('SPREADSHEET_EXCEL_READER_DEF_NUM_FORMAT', "%.2f");
define('SPREADSHEET_EXCEL_READER_DEF_NUM_FORMAT',
class Spreadsheet_Excel_Reader
{