≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > PHP笔记

Linux将excel数据导入到mssql数据库示例

人气:494 时间:2020-11-04

这篇文章主要为大家详细介绍了Linux将excel数据导入到mssql数据库示例,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编小韵来看看吧!

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

代码如下:

// 四海网网 www.q1010.com
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>&nbsp;</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>&nbsp;</td>\n"; 
for( $j=0; $j<=$ws['max_col']; $j++ ) { 
print "<td class=index>&nbsp;"; 
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>&nbsp;</td>\n"; 
for( $j=0; $j<=$ws['max_col']; $j++ ) { 
print "<td class=index>&nbsp;"; 
if( $j>25 ) print chr((int)($j/26)+64); 
print chr(($j % 26) + 65)."&nbsp;列名</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 "&nbsp;"; 
else 
print $s; 
break; 
// integer number 
case 1: 
print "dt_int\"".$style.">&nbsp;"; 
print $data['data']; 
break; 
// float number 
case 2: 
print "dt_float\"".$style.">&nbsp;"; 
echo $data['data']; 
break; 
// date 
case 3: 
print "dt_date\"".$style.">&nbsp;"; 

$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."> &nbsp;"; 
break; 
} 
print "</td>\n"; 
} else { 
print "<td class=empty>&nbsp;</td>\n"; 
} 
} 
} else { 
// print an empty row 
for( $j=0; $j<=$ws['max_col']; $j++ ) 
print "<td class=empty>&nbsp;</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>"; 
} 
*/ 
} 

运行效果如下:
 
第二步是要读取数据出来,代码如下:

代码如下:

 
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>&nbsp;</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>&nbsp;"; 
//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.q1010.com/201002/yuanma/php_excel_mysql.rar

本文来自:http://www.q1010.com/173/13868-0.html

注:关于Linux将excel数据导入到mssql数据库示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:

您可能感兴趣的文章

上一篇:php获取网页中的图片并保存到本地的简单示例
下一篇:PHP超级全局变量用法示例
热门文章
  • PHP 写入WRITE编码为UTF8的文件示例
  • PHP 中文字符串截取函数示例:支持gb2312,gbk,big
  • PHP 简单留言板的制作示例
  • 解决Fatal error: Call to undefined function mb_convert_encoding() in错误问题
  • PHP语言基础(标记、注释、变量、数组、常量、函数)示例
  • php 生成迅雷链接的简单示例
  • php 获取短网址的实现方法
  • PHP 通用分页类的简单示例
  • PHP 使用文件方式导入导出整个MYSQL数据库的实现方法
  • php 获取MYSQL错误的简单示例
  • 最新文章
    • 解决PHP使用redis实现统计缓存MySQL压力的问题
    • php 简单的上传进度条的简单示例
    • php 给html中引用的js和css路径打上版本号的实现方法
    • php 实现计算年龄精准到年月日的实例
    • php+ajax无刷新分页的简单示例
    • 解决php+ajax无刷新上传图片的问题
    • 解决PHP生成HTML静态页面的问题
    • 解决PHP使用uniqid函数生成唯一ID的问题
    • 解决PHP防刷票的一些问题
    • 微信access_token的获取开发的实现方法

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。