Linux下将excel数据导入到mssql数据库中的方法


Posted in PHP onFebruary 08, 2010

先清理一下思路先,~~
首先:需要把文件上传到服务器上
然后:读取excel数据列显示出来
然后:让用户选择字段的对应关系
然后:提交数据,读取字段的对应关系
最后:批量导入数据,删除临时文件
一共是以上五步骤!我们一步步分析~~~
第一步:下载附件中的phpexcelparser4.rar ,这个文件是上传excel盗服务器上并以web形式展示出来的!这个一般没有问题的!问题是程序的做法是把表存为临时表而没有真正保存下来,所以首先要更改程序代码为

if (trim($_POST["cmd"])=="upload") 
{ $err_corr = "Unsupported format or file corrupted"; 
$excel_file_size; 
$excel_file = $_FILES['excel_file']; 
$uploadservername=$UploadAbsPath."tmpexcel/".$_FILES['excel_file']['name']; 
echo($uploadservername); 
if (!is_writeable($UploadAbsPath."tmpexcel/")) 
{ 
echo "目录不可写!"; exit; 
} 
else 
{ 
echo "目录可写!"; 
} 
if (move_uploaded_file($_FILES['excel_file']['tmp_name'], $uploadservername)) 
{ 
echo("上传成功"); 
} 
else 
{ 
echo("上传失败"); 
} 
$excel_file=$uploadservername; 
//if( $excel_file ) 
// $excel_file = $_FILES['excel_file']['tmp_name']; 
if( $excel_file == '' ) fatal("No file uploaded"); 
$exc = new ExcelFileParser("debug.log", ABC_NO_LOG);//ABC_NO_LOG ABC_VAR_DUMP); 
//echo($excel_file."|"); 
$style = $_POST['style']; 
if( $style == 'old' ) 
{ 
$fh = @fopen ($excel_file,'rb'); 
if( !$fh ) fatal("No file uploaded"); 
if( filesize($excel_file)==0 ) fatal("No file uploaded"); 
$fc = fread( $fh, filesize($excel_file) ); 
@fclose($fh); 
if( strlen($fc) < filesize($excel_file) ) 
fatal("Cannot read file"); 
$time_start = getmicrotime(); 
$res = $exc->ParseFromString($fc); 
$time_end = getmicrotime(); 
} 
elseif( $style == 'segment' ) 
{ 
$time_start = getmicrotime(); 
$res = $exc->ParseFromFile($excel_file); 
$time_end = getmicrotime(); 
} 
switch ($res) { 
case 0: break; 
case 1: fatal("Can't open file"); 
case 2: fatal("File too small to be an Excel file"); 
case 3: fatal("Error reading file header"); 
case 4: fatal("Error reading file"); 
case 5: fatal("This is not an Excel file or file stored in Excel < 5.0"); 
case 6: fatal("File corrupted"); 
case 7: fatal("No Excel data found in file"); 
case 8: fatal("Unsupported file version"); 
default: 
fatal("Unknown error"); 
} 
/* 
print '<pre>'; 
print_r( $exc ); 
print '</pre>'; 
exit; 
*/ 
show_time(); 
echo <<<LEG 
<b>Legend:</b><br><br> 
<form name='doform' action='' method='post'> 
<input type='hidden' name='action' value='do'> 
<input type='hidden' name='excel_file' value=$excel_file> 
<input type='hidden' name='style' value=$style> 
<table border=1 cellspacing=0 cellpadding=0> 
<tr><td>Data type</td><td>Description</td></tr> 
<tr><td class=empty> </td><td class=index>An empty cell</td></tr> 
<tr><td class=dt_string>ABCabc</td><td class=index>String</td></tr> 
<tr><td class=dt_int>12345</td><td class=index>Integer</td></tr> 
<tr><td class=dt_float>123.45</td><td class=index>Float</td></tr> 
<tr><td class=dt_date>123.45</td><td class=index>Date</td></tr> 
<table> 
<br><br> 
LEG; 
/* 
print "<pre>"; 
print_r ($exc->worksheet); 
print_r($exc->sst); 
print "</pre>"; 
*/ 
for( $ws_num=0; $ws_num<count($exc->worksheet['name']); $ws_num++ ) 
{ 
print "<b>Worksheet: \""; 
if( $exc->worksheet['unicode'][$ws_num] ) { 
print uc2html($exc->worksheet['name'][$ws_num]); 
} else 
print $exc->worksheet['name'][$ws_num]; 
print "\"</b>"; 
$ws = $exc->worksheet['data'][$ws_num]; 
if( is_array($ws) && 
isset($ws['max_row']) && isset($ws['max_col']) ) { 
echo "\n<br><br><table border=1 cellspacing=0 cellpadding=2>\n"; 
print "<tr><td> </td>\n"; 
for( $j=0; $j<=$ws['max_col']; $j++ ) { 
print "<td class=index> "; 
if( $j>25 ) print chr((int)($j/26)+64); 
//这里要显示一个下拉列表来显示数据 
//注意是循环数据<br /> 
echo("\n<select name='".$j."'>"); 
echo("\n<option value='0'>不选择</option>"); 
echo("\n<option value='fkhxm'>客户姓名</option>"); 
echo("\n<option value='fsfzh'>身份证号</option>"); 
echo("\n<option value='fyddh'>移动电话</option>"); 
echo("\n<option value='ftxdz'>通信地址</option>"); 
echo("\n<option value='femail'>Email</option>"); 
echo("\n<option value='flxdh'>联系电话</option>"); 
echo("\n<option value='fkhah'>客户爱好</option>"); 
echo("\n<option value='fbzxx'>备注信息</option>"); 
echo("</select>"); 
print "</td>"; 
} 
print "<tr><td> </td>\n"; 
for( $j=0; $j<=$ws['max_col']; $j++ ) { 
print "<td class=index> "; 
if( $j>25 ) print chr((int)($j/26)+64); 
print chr(($j % 26) + 65)." 列名</td>"; 
} 
//表头输出完毕 
if ($ws['max_row']>9) 
{ 
$shownum=9; 
} 
else 
{ 
$shownum=$ws['max_row'];//只输出前10条数据 
} 
for( $i=0; $i<=$shownum; $i++ ) { 
print "<tr><td class=index>".($i+1)."</td>\n"; 
if(isset($ws['cell'][$i]) && is_array($ws['cell'][$i]) ) { 
for( $j=0; $j<=$ws['max_col']; $j++ ) { 
if( ( is_array($ws['cell'][$i]) ) && 
( isset($ws['cell'][$i][$j]) ) 
){ 
// print cell data 
print "<td class=\""; 
$data = $ws['cell'][$i][$j]; 
$font = $ws['cell'][$i][$j]['font']; 
$style = " style ='".ExcelFont::ExcelToCSS($exc->fonts[$font])."'"; 
switch ($data['type']) { 
// string 
case 0: 
print "dt_string\"".$style.">"; 
$ind = $data['data']; 
if( $exc->sst['unicode'][$ind] ) { 
$s = uc2html($exc->sst['data'][$ind]); 
} else 
$s = $exc->sst['data'][$ind]; 
if( strlen(trim($s))==0 ) 
print " "; 
else 
print $s; 
break; 
// integer number 
case 1: 
print "dt_int\"".$style."> "; 
print $data['data']; 
break; 
// float number 
case 2: 
print "dt_float\"".$style."> "; 
echo $data['data']; 
break; 
// date 
case 3: 
print "dt_date\"".$style."> "; 
$ret = $data[data];//str_replace ( " 00:00:00", "", gmdate("d-m-Y H:i:s",$exc->xls2tstamp($data[data])) ); 
echo ( $ret ); 
break; 
default: 
print "dt_unknown\"".$style.">  "; 
break; 
} 
print "</td>\n"; 
} else { 
print "<td class=empty> </td>\n"; 
} 
} 
} else { 
// print an empty row 
for( $j=0; $j<=$ws['max_col']; $j++ ) 
print "<td class=empty> </td>"; 
print "\n"; 
} 
print "</tr>\n"; 
} 
echo "</table><br>\n"; 
} else { 
// emtpty worksheet 
print "<b> - empty</b><br>\n"; 
} 
print "<br>"; 
} 
echo("<input type='submit' name='Submit' value='转换' />"); 
echo("</form>"); 
/* print "Formats<br>"; 
foreach($exc->format as $value) { 
printf("( %x )",array_search($value,$exc->format)); 
print htmlentities($value,ENT_QUOTES); 
print "<br>"; 
} 
print "XFs<br>"; 
for( $i=0;$i<count($exc->xf['format']);$i++) { 
printf ("(%x)",$i); 
printf (" format (%x) font (%x)",$exc->xf['format'][$i],$exc->xf['font'][$i]); 
print "<br>"; 
} 
*/ 
}

运行效果如下:
 Linux下将excel数据导入到mssql数据库中的方法
第二步是要读取数据出来,代码如下:
if ($_POST["action"]=="do") 
{ 
//处理数据 
//先读取表头记录 
$excel_file=$_POST["excel_file"]; 
$fh = @fopen ($excel_file,'rb'); 
$fc = fread( $fh, filesize($excel_file) ); 
@fclose($fh); 
//echo("执行".$excel_file); 
$exc = new ExcelFileParser("debug.log", ABC_NO_LOG);//ABC_NO_LOG ABC_VAR_DUMP); 
//echo($excel_file."|"); 
$style = $_POST['style']; 
if( $style == 'old' ) 
{ 
$fh = @fopen ($excel_file,'rb'); 
if( !$fh ) fatal("No file uploaded"); 
if( filesize($excel_file)==0 ) fatal("No file uploaded"); 
$fc = fread( $fh, filesize($excel_file) ); 
@fclose($fh); 
if( strlen($fc) < filesize($excel_file) ) 
fatal("Cannot read file"); 
$time_start = getmicrotime(); 
$res = $exc->ParseFromString($fc); 
$time_end = getmicrotime(); 
} 
elseif( $style == 'segment' ) 
{ 
$time_start = getmicrotime(); 
$res = $exc->ParseFromFile($excel_file); 
$time_end = getmicrotime(); 
} switch ($res) { 
case 0: break; 
case 1: fatal("Can't open file"); 
case 2: fatal("File too small to be an Excel file"); 
case 3: fatal("Error reading file header"); 
case 4: fatal("Error reading file"); 
case 5: fatal("This is not an Excel file or file stored in Excel < 5.0"); 
case 6: fatal("File corrupted"); 
case 7: fatal("No Excel data found in file"); 
case 8: fatal("Unsupported file version"); 
default: 
fatal("Unknown error"); 
} 
//以及读取完毕,如果没有错误的话就可以循环往MSSQL中增加数据了! 
for( $ws_num=0; $ws_num<count($exc->worksheet['name']); $ws_num++ ) 
{ 
// print "<b>Worksheet: \""; 
// if( $exc->worksheet['unicode'][$ws_num] ) { 
// print uc2html($exc->worksheet['name'][$ws_num]); 
// } else 
// print $exc->worksheet['name'][$ws_num]; 
// 
// print "\"</b>"; 
$ws = $exc->worksheet['data'][$ws_num]; 
// 
// 
// print "<tr><td> </td>\n"; 
$fkhxmnum=0; 
$fsfzhnum=0; 
$fyddhnum=0; 
$ftxdznum=0; 
$femailnum=0; 
$flxdhnum=0; 
$fkhahnum=0; 
$fbzxxnum=0; 
for( $j=0; $j<=$ws['max_col']; $j++ ) { 
//print "<td class=index> "; 
//if( $j>25 ) print chr((int)($j/26)+64); 
//先读取列名 
$tmpcolum=trim($_POST["$j"]); 
//echo($tmpcolum."|"); 
if ($tmpcolum=="fkhxm") $fkhxmnum=$j; 
if ($tmpcolum=="fsfzh") $fsfzhnum=$j; 
if ($tmpcolum=="fyddh") $fyddhnum=$j; 
if ($tmpcolum=="ftxdz") $ftxdznum=$j; 
if ($tmpcolum=="femail") $femailnum=$j; 
if ($tmpcolum=="flxdh") $flxdhnum=$j; 
if ($tmpcolum=="fkhah") $fkhahnum=$j; 
if ($tmpcolum=="fbzxx") $fbzxxnum=$j; 
} 
for( $i=0; $i<=$ws['max_row']; $i++ ) { 
//$fkhxm= 
//echo($fkhxmnum.$fsfzhnum.$fyddhnum.$ftxdznum.$femailnum.$flxdhnum.$fkhahnum.$fbzxxnum); 
//print "<tr><td class=index>".($i+1)."</td>\n"; 
if(isset($ws['cell'][$i]) && is_array($ws['cell'][$i]) ) { 
if ($fkhxmnum!=0&&$ftxdznum!=0&&($fyddhnum!=0||$flxdhnum!=0))//请在这里指定必须的不为空的字段 
{ 
$sql="insert into k_qlkhxx(fkhxm,fsfzh,fyddh,ftxdz,femail,flxdh,$fkhah,fbzxx,fglry,fglryxm,fdjry,ffzdm) values('".uc2html($exc->sst['data'][$ws['cell'][$i][$fkhxmnum]['data']])."','".$exc->sst['data'][$ws['cell'][$i][$fsfzhnum]['data']]."','".$exc->sst['data'][$ws['cell'][$i][$fyddhnum]['data']]."','".uc2html($exc->sst['data'][$ws['cell'][$i][$ftxdznum]['data']])."','".uc2html($exc->sst['data'][$ws['cell'][$i][$femailnum]['data']])."','".$exc->sst['data'][$ws['cell'][$i][$flxdhnum]['data']]."','".uc2html($exc->sst['data'][$ws['cell'][$i][$fkhahnum]['data']])."','".uc2html($exc->sst['data'][$ws['cell'][$i][$fbzxxnum]['data']])."','".$_SESSION["uyhmc"]."','".$_SESSION["uyhxm"]."','".$_SESSION["uyhmc"]."','".$_SESSION["ubm"]."')"; 
echo($sql."<br>"); 
} 
//$conn->Query($sql); 
} 
} 
} 
//导入完成删除文件 
unlink($filename); 
}

你注意没有,我把执行的那一行注释掉的,只要去掉注释就可以正确执行了!
所用到的代码打包下载http://xiazai.3water.com/201002/yuanma/php_excel_mysql.rar
PHP 相关文章推荐
PHP Google的translate API代码
Dec 10 PHP
phpMyAdmin 安装及问题总结
May 28 PHP
深入PHP许愿墙模块功能分析
Jun 25 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
简单的php新闻发布系统教程
May 09 PHP
PHP模拟QQ登录的方法
Jul 29 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
php生成HTML文件的类方法
Oct 11 PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 PHP
PHPWind 发帖回帖Api PHP版打包下载
Feb 08 #PHP
php cli 方式 在crotab中运行解决
Feb 08 #PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 #PHP
Zend framework处理一个http请求的流程分析
Feb 08 #PHP
PHP函数常用用法小结
Feb 08 #PHP
在PHP中养成7个面向对象的好习惯
Jan 28 #PHP
php 正确解码javascript中通过escape编码后的字符
Jan 28 #PHP
You might like
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
2019/10/17 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
Jquery cookie操作代码
2010/03/14 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
Python深入学习之特殊方法与多范式
2014/08/31 Python
详解Django通用视图中的函数包装
2015/07/21 Python
Python递归函数定义与用法示例
2017/06/02 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
python语言中with as的用法使用详解
2018/02/23 Python
python批量修改文件编码格式的方法
2018/05/31 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
python线程信号量semaphore使用解析
2019/11/30 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
python如何查看安装了的模块
2020/06/23 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
写给女生的道歉信
2014/01/08 职场文书
鉴定评语大全
2014/05/05 职场文书
员工试用期自我评价
2014/09/18 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
工作后的感想
2015/08/07 职场文书