【转】利用PHP-ExcelReader实现PHP…

端木权
2023-12-01

最近因项目需求,要实现将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.    test.php

<?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

       die("Could not connect to database.");//连接数据库

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表字段的多少,改写以下代码吧!

    $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);

}

?>

2.reader.php

<?php

//require_once 'PEAR.php';

require_once 'oleread.inc';

//require_once 'OLE.php';

define('SPREADSHEET_EXCEL_READER_BIFF8',             0x600);

define('SPREADSHEET_EXCEL_READER_BIFF7',             0x500);

define('SPREADSHEET_EXCEL_READER_WORKBOOKGLOBALS',   0x5);

define('SPREADSHEET_EXCEL_READER_WORKSHEET',         0x10);

define('SPREADSHEET_EXCEL_READER_TYPE_BOF',          0x809);

define('SPREADSHEET_EXCEL_READER_TYPE_EOF',          0x0a);

define('SPREADSHEET_EXCEL_READER_TYPE_BOUNDSHEET',   0x85);

define('SPREADSHEET_EXCEL_READER_TYPE_DIMENSION',    0x200);

define('SPREADSHEET_EXCEL_READER_TYPE_ROW',          0x208);

define('SPREADSHEET_EXCEL_READER_TYPE_DBCELL',       0xd7);

define('SPREADSHEET_EXCEL_READER_TYPE_FILEPASS',     0x2f);

define('SPREADSHEET_EXCEL_READER_TYPE_NOTE',         0x1c);

define('SPREADSHEET_EXCEL_READER_TYPE_TXO',          0x1b6);

define('SPREADSHEET_EXCEL_READER_TYPE_RK',           0x7e);

define('SPREADSHEET_EXCEL_READER_TYPE_RK2',          0x27e);

define('SPREADSHEET_EXCEL_READER_TYPE_MULRK',        0xbd);

define('SPREADSHEET_EXCEL_READER_TYPE_MULBLANK',     0xbe);

define('SPREADSHEET_EXCEL_READER_TYPE_INDEX',        0x20b);

define('SPREADSHEET_EXCEL_READER_TYPE_SST',          0xfc);

define('SPREADSHEET_EXCEL_READER_TYPE_EXTSST',       0xff);

define('SPREADSHEET_EXCEL_READER_TYPE_CONTINUE',     0x3c);

define('SPREADSHEET_EXCEL_READER_TYPE_LABEL',        0x204);

define('SPREADSHEET_EXCEL_READER_TYPE_LABELSST',     0xfd);

define('SPREADSHEET_EXCEL_READER_TYPE_NUMBER',       0x203);

define('SPREADSHEET_EXCEL_READER_TYPE_NAME',         0x18);

define('SPREADSHEET_EXCEL_READER_TYPE_ARRAY',        0x221);

define('SPREADSHEET_EXCEL_READER_TYPE_STRING',       0x207);

define('SPREADSHEET_EXCEL_READER_TYPE_FORMULA',      0x406);

define('SPREADSHEET_EXCEL_READER_TYPE_FORMULA2',     0x6);

define('SPREADSHEET_EXCEL_READER_TYPE_FORMAT',       0x41e);

define('SPREADSHEET_EXCEL_READER_TYPE_XF',           0xe0);

define('SPREADSHEET_EXCEL_READER_TYPE_BOOLERR',      0x205);

define('SPREADSHEET_EXCEL_READER_TYPE_UNKNOWN',      0xffff);

define('SPREADSHEET_EXCEL_READER_TYPE_NINETEENFOUR', 0x22);

define('SPREADSHEET_EXCEL_READER_TYPE_MERGEDCELLS', 0xE5);

define('SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS' ,    25569);

define('SPREADSHEET_EXCEL_READER_UTCOFFSETDAYS1904', 24107);

define('SPREADSHEET_EXCEL_READER_MSINADAY',          86400);

//define('SPREADSHEET_EXCEL_READER_MSINADAY', 24 * 60 * 60);

//define('SPREADSHEET_EXCEL_READER_DEF_NUM_FORMAT', "%.2f");

define('SPREADSHEET_EXCEL_READER_DEF_NUM_FORMAT',    "%s");

class Spreadsheet_Excel_Reader

{

   

    var $boundsheets = array();

   

    var $formatRecords = array();

   

    var $sst = array();

   

    var $sheets = array();

   

    var $data;

   

    var $_ole;

   

    var $_defaultEncoding;

   

    var $_defaultFormat = SPREADSHEET_EXCEL_READER_DEF_NUM_FORMAT;

   

    var $_columnsFormat = array();

   

    var $_rowoffset = 1;

   

    var $_coloffset = 1;

   

    var $dateFormats = array (

        0xe => "d/m/Y",

        0xf => "d-M-Y",

        0x10 => "d-M",

        0x11 => "M-Y",

        0x12 => "h:i a",

        0x13 => "h:i:s a",

        0x14 => "H:i",

        0x15 => "H:i:s",

        0x16 => "d/m/Y H:i",

        0x2d => "i:s",

        0x2e => "H:i:s",

        0x2f => "i:s.S");

   

    var $numberFormats = array(

        0x1 => "%1.0f",     // "0"

        0x2 => "%1.2f",     // "0.00",

        0x3 => "%1.0f",     //"#,##0",

        0x4 => "%1.2f",     //"#,##0.00",

        0x5 => "%1.0f",    

        0x6 => '$%1.0f',   

        0x7 => '$%1.2f',    //"$#,##0.00;($#,##0.00)",

        0x8 => '$%1.2f',    //"$#,##0.00;($#,##0.00)",

        0x9 => '%1.0f%%',   // "0%"

        0xa => '%1.2f%%',   // "0.00%"

        0xb => '%1.2f',     // 0.00E00",

        0x25 => '%1.0f',    // "#,##0;(#,##0)",

        0x26 => '%1.0f',    //"#,##0;(#,##0)",

        0x27 => '%1.2f',    //"#,##0.00;(#,##0.00)",

        0x28 => '%1.2f',    //"#,##0.00;(#,##0.00)",

        0x29 => '%1.0f',    //"#,##0;(#,##0)",

        0x2a => '$%1.0f',   //"$#,##0;($#,##0)",

        0x2b => '%1.2f',    //"#,##0.00;(#,##0.00)",

        0x2c => '$%1.2f',   //"$#,##0.00;($#,##0.00)",

        0x30 => '%1.0f');   //"##0.0E0";

    // }}}

    // {{{ Spreadsheet_Excel_Reader()

   

    function Spreadsheet_Excel_Reader()

    {

        $this->_ole =& new OLERead();

        $this->setUTFEncoder('iconv');

    }

    // }}}

    // {{{ setOutputEncoding()

   

    function setOutputEncoding($encoding)

    {

        $this->_defaultEncoding = $encoding;

    }

    // }}}

    // {{{ setUTFEncoder()

   

    function setUTFEncoder($encoder = 'iconv')

    {

        $this->_encoderFunction = '';

        if ($encoder == 'iconv') {

            $this->_encoderFunction = function_exists('iconv') ? 'iconv' : '';

        } elseif ($encoder == 'mb') {

            $this->_encoderFunction = function_exists('mb_convert_encoding') ?

                                      'mb_convert_encoding' :

                                      '';

        }

    }

    // }}}

    // {{{ setRowColOffset()

   

    function setRowColOffset($iOffset)

    {

        $this->_rowoffset = $iOffset;

        $this->_coloffset = $iOffset;

    }

    // }}}

    // {{{ setDefaultFormat()

   

    function setDefaultFormat($sFormat)

    {

        $this->_defaultFormat = $sFormat;

    }

    // }}}

    // {{{ setColumnFormat()

   

    function setColumnFormat($column, $sFormat)

    {

        $this->_columnsFormat[$column] = $sFormat;

    }

 类似资料: