PHP导入excel数据到MYSQL

这里介绍一个直接将excel文件导入mysql的例子。我花了一晚上的时间测试,无论导入简繁体都不会出现乱码,非常好用。PHP-ExcelReader,下载地址:http://sourceforge.

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

这里介绍一个直接将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"; 
*/ /* 何问起 hovertree.com */
//以下代码是将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)); 
//echo 'ROOT_START_BLOCK_POS = '.ROOT_START_BLOCK_POS."\n"; 
//echo bin2hex($data[ROOT_START_BLOCK_POS])."\n"; 
//echo "a="; 
//echo $data[ROOT_START_BLOCK_POS]; 
//function log 
function GetInt4d($data, $pos) 
{ 
$value = ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | (ord($data[$pos+3]) << 24); 
if ($value>=4294967294) 
{ 
$value=-2; 
} 
return $value; 
} 
class OLERead { 
var $data = ''; 
function OLERead(){ 
} 
function read($sFileName){ 
// check if file exist and is readable (Darko Miljanovic) 
if(!is_readable($sFileName)) { 
$this->error = 1; 
return false; 
} 
$this->data = @file_get_contents($sFileName); 
if (!$this->data) { 
$this->error = 1; 
return false; 
} 
//echo IDENTIFIER_OLE; 
//echo 'start'; 
if (substr($this->data, 0, 8) != IDENTIFIER_OLE) { 
$this->error = 1; 
return false; 
} 
$this->numBigBlockDepotBlocks = GetInt4d($this->data, NUM_BIG_BLOCK_DEPOT_BLOCKS_POS); 
$this->sbdStartBlock = GetInt4d($this->data, SMALL_BLOCK_DEPOT_BLOCK_POS); 
$this->rootStartBlock = GetInt4d($this->data, ROOT_START_BLOCK_POS); 
$this->extensionBlock = GetInt4d($this->data, EXTENSION_BLOCK_POS); 
$this->numExtensionBlocks = GetInt4d($this->data, NUM_EXTENSION_BLOCK_POS); 
/* 
echo $this->numBigBlockDepotBlocks." "; 
echo $this->sbdStartBlock." "; 
echo $this->rootStartBlock." "; 
echo $this->extensionBlock." "; 
echo $this->numExtensionBlocks." "; 
*/ 
//echo "sbdStartBlock = $this->sbdStartBlock\n"; 
$bigBlockDepotBlocks = array(); 
$pos = BIG_BLOCK_DEPOT_BLOCKS_POS; 
// echo "pos = $pos"; 
$bbdBlocks = $this->numBigBlockDepotBlocks; 
if ($this->numExtensionBlocks != 0) { 
$bbdBlocks = (BIG_BLOCK_SIZE - BIG_BLOCK_DEPOT_BLOCKS_POS)/4; 
} 
for ($i = 0; $i < $bbdBlocks; $i++) { 
$bigBlockDepotBlocks[$i] = GetInt4d($this->data, $pos); 
$pos += 4; 
} 
for ($j = 0; $j < $this->numExtensionBlocks; $j++) { 
$pos = ($this->extensionBlock + 1) * BIG_BLOCK_SIZE; 
$blocksToRead = min($this->numBigBlockDepotBlocks - $bbdBlocks, BIG_BLOCK_SIZE / 4 - 1); 
for ($i = $bbdBlocks; $i < $bbdBlocks + $blocksToRead; $i++) { 
$bigBlockDepotBlocks[$i] = GetInt4d($this->data, $pos); 
$pos += 4; 
} 
$bbdBlocks += $blocksToRead; 
if ($bbdBlocks < $this->numBigBlockDepotBlocks) { 
$this->extensionBlock = GetInt4d($this->data, $pos); 
} 
} /* 何问起 hovertree.com */
// var_dump($bigBlockDepotBlocks); 
// readBigBlockDepot 
$pos = 0; 
$index = 0; 
$this->bigBlockChain = array(); 
for ($i = 0; $i < $this->numBigBlockDepotBlocks; $i++) { 
$pos = ($bigBlockDepotBlocks[$i] + 1) * BIG_BLOCK_SIZE; 
//echo "pos = $pos"; 
for ($j = 0 ; $j < BIG_BLOCK_SIZE / 4; $j++) { 
$this->bigBlockChain[$index] = GetInt4d($this->data, $pos); 
$pos += 4 ; 
$index++; 
} 
} 
//var_dump($this->bigBlockChain); 
//echo '=====2'; 
// readSmallBlockDepot(); 
$pos = 0; 
$index = 0; 
$sbdBlock = $this->sbdStartBlock; 
$this->smallBlockChain = array(); 
while ($sbdBlock != -2) { 
$pos = ($sbdBlock + 1) * BIG_BLOCK_SIZE; 
for ($j = 0; $j < BIG_BLOCK_SIZE / 4; $j++) { 
$this->smallBlockChain[$index] = GetInt4d($this->data, $pos); 
$pos += 4; 
$index++; 
} 
$sbdBlock = $this->bigBlockChain[$sbdBlock]; 
} 
// readData(rootStartBlock) 
$block = $this->rootStartBlock; 
$pos = 0; 
$this->entry = $this->__readData($block); 
/* 
while ($block != -2) { 
$pos = ($block + 1) * BIG_BLOCK_SIZE; 
$this->entry = $this->entry.substr($this->data, $pos, BIG_BLOCK_SIZE); 
$block = $this->bigBlockChain[$block]; 
} 
*/ 
//echo '==='.$this->entry."==="; 
$this->__readPropertySets(); 
} 
function __readData($bl) { 
$block = $bl; 
$pos = 0; 
$data = ''; 
while ($block != -2) { 
$pos = ($block + 1) * BIG_BLOCK_SIZE; 
$data = $data.substr($this->data, $pos, BIG_BLOCK_SIZE); 
//echo "pos = $pos data=$data\n"; 
$block = $this->bigBlockChain[$block]; 
} 
return $data; 
} 
function __readPropertySets(){ 
$offset = 0; 
//var_dump($this->entry); 
while ($offset < strlen($this->entry)) { 
$d = substr($this->entry, $offset, PROPERTY_STORAGE_BLOCK_SIZE); 
$nameSize = ord($d[SIZE_OF_NAME_POS]) | (ord($d[SIZE_OF_NAME_POS+1]) << 8); 
$type = ord($d[TYPE_POS]); 
//$maxBlock = strlen($d) / BIG_BLOCK_SIZE - 1; 
$startBlock = GetInt4d($d, START_BLOCK_POS); 
$size = GetInt4d($d, SIZE_POS); 
$name = ''; 
for ($i = 0; $i < $nameSize ; $i++) { 
$name .= $d[$i]; 
} 
$name = str_replace("\x00", "", $name); 
$this->props[] = array ( 
'name' => $name, 
'type' => $type, 
'startBlock' => $startBlock, 
'size' => $size); 
if (($name == "Workbook") || ($name == "Book")) { 
$this->wrkbook = count($this->props) - 1; 
} 
if ($name == "Root Entry") { 
$this->rootentry = count($this->props) - 1; 
} 
//echo "name ==$name=\n"; 
$offset += PROPERTY_STORAGE_BLOCK_SIZE; 
} 
} 
function getWorkBook(){ 
if ($this->props[$this->wrkbook]['size'] < SMALL_BLOCK_THRESHOLD){ 
// getSmallBlockStream(PropertyStorage ps) 
$rootdata = $this->__readData($this->props[$this->rootentry]['startBlock']); 
$streamData = ''; 
$block = $this->props[$this->wrkbook]['startBlock']; 
//$count = 0; 
$pos = 0; 
while ($block != -2) { 
$pos = $block * SMALL_BLOCK_SIZE; 
$streamData .= substr($rootdata, $pos, SMALL_BLOCK_SIZE); 
$block = $this->smallBlockChain[$block]; 
} 
return $streamData; 
}else{ 
$numBlocks = $this->props[$this->wrkbook]['size'] / BIG_BLOCK_SIZE; 
if ($this->props[$this->wrkbook]['size'] % BIG_BLOCK_SIZE != 0) { 
$numBlocks++; 
} 
if ($numBlocks == 0) return ''; 
//echo "numBlocks = $numBlocks\n"; 
//byte[] streamData = new byte[numBlocks * BIG_BLOCK_SIZE]; 
//print_r($this->wrkbook); 
$streamData = ''; 
$block = $this->props[$this->wrkbook]['startBlock']; 
//$count = 0; 
$pos = 0; 
//echo "block = $block"; 
while ($block != -2) { 
$pos = ($block + 1) * BIG_BLOCK_SIZE; 
$streamData .= substr($this->data, $pos, BIG_BLOCK_SIZE); 
$block = $this->bigBlockChain[$block]; 
} 
//echo 'stream'.$streamData; 
return $streamData; 
} 
} 
} 
?>

参考:http://hovertree.com/h/bjaf/to3l3tjm.htm

http://www.cnblogs.com/roucheng/p/phpmysql.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120535.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vscode设置字体大小和字体(vscode窗口字体大小设置)

    VScode如何设置字体大小第一步:首先打开vscode,在vscode的左下角有一个设置按钮,单机打开,选择settings选项第二步:在设置中查找font(字体)选项,并打开第三步:在font选项内,选择fontsize,就可以设置字体的大小了还有一些其他的关于字体的设置也可以进行修改…

    2022年4月18日
    4.0K
  • 中石化项目都是些什么工程_中海油石化工程待遇

    中石化项目都是些什么工程_中海油石化工程待遇石化项目是什么?石化项目是什么工程?下面就让中策大数据为你解答。石油化工工程就是涵盖整个石油化工系统的工程。石化项目工程内容可以划分为以下几种:1、石油化工总的区分包括化工工程、石油工程、油气工程、储运工程等;2、按照行业划分包括石油开采工程、石油加工工程、化工化纤工程、石油化工后加工工程等;3、按照建设装置的工程区分,包括常减压装置工程、催化裂化装置工程、气体分馏装置工程、加氢裂化装置工程、加氢精制装置工程、脱硫制硫装置工程、重整装置工程、芳烃装置工程、乙烯工程、等等。4、按照

    2022年10月16日
    2
  • android之List<T>的空指针问题_List的初始化

    在使用list做东西的时候出现空指针,查了半天资料本来是这样的 List model; LunchListAdapter adapter;//这是我重写的适配器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC

    2022年3月10日
    248
  • 推荐系统中传统模型——LightGBM + FFM融合

    推荐系统中传统模型——LightGBM + FFM融合之前比较相关的文章:推荐系统中传统模型——LightGBM+LR融合python-机器学习lightgbm相关实践1深入FFM原理与实践来自美团技术团队的,深入FFM原理与实践FM和FFM模型是最近几年提出的模型,凭借其在数据量比较大并且特征稀疏的情况下,仍然能够得到优秀的性能和效果的特性,屡次在各大公司举办的CTR预估比赛中获得不错的战绩。美团技术团队在搭建DSP的过程中,探索并使用了FM和FFM模型进行CTR和CVR预估,并且取得了不错的效果。经过One-Hot编码之后,大部分

    2022年5月27日
    38
  • 新东方四六级写作_新东方四六级老师

    新东方四六级写作_新东方四六级老师必读的新东方优秀范文      欢迎下载>01 The Language of MusicA painter hangs his or her finished picture on a wall, and everyone can see it. A composer writes a work, but no one can hear it until i

    2022年8月24日
    6
  • 实战:springboot整合rabbitMQ「建议收藏」

    实战:springboot整合rabbitMQ「建议收藏」一、RabbitMQ简述与其docker安装这里主要讲解实战整合rabbitMQ,了解RabbitMQ简述与其docker安装请点击:传送门二、springboot整合rabbitMQ1.新建springboot项目2.pom:主要添加以下两个依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-

    2022年5月14日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号