2012-03-27 63 views
0

我想用phpExcel获取导入excel并插入数据库,但是,我遇到了错误。似乎正确的条目数组无法插入到数据库中。提取代码并在这里发布,确实很长,阅读起来很累,所以我会投票支持任何人都回答这个问题。PHPExcel无法将excel文件导入数据库

非常感谢您的帮助。

这部分是用于检查错误和重复,并获得有效的列表:

<body> 

<? 
session_start(); 

$file='../excelUpload/'.$_SESSION['username'].'/'.$_POST['excel']; 
include '../plugin/excel/Classes/PHPExcel/IOFactory.php'; 

$ext = pathinfo($file, PATHINFO_EXTENSION); 
if ($ext=='xlsx') 
$readerType='Excel2007'; 
elseif ($ext=='xls') 
$readerType='Excel5'; 
elseif ($ext=='csv') 
$readerType='CSV'; 

$reader = PHPExcel_IOFactory::createReader($readerType); 
$PHPExcel = $reader->load($file); 
$sheet = $PHPExcel->getSheet(0); 
$highestRow = $sheet->getHighestRow(); 
$highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()); 

$pattern="/^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$/"; 

for ($row = 1; $row <= $highestRow; $row++){ 
for ($head = 0; $head < $highestColumn; $head++){ 
$testMail = $sheet->getCellByColumnAndRow($head, $row)->getValue(); 
if (preg_match($pattern,$testMail)) 
$mailColumn=$head; 
}} 
if(!isset($mailColumn)) 
{die('No email column detected, please check your file and import again.');} 


$invaild[] = NULL ; 
$email[] = NULL ; 
$duplicate[] = NULL ; 

for ($row = 1; $row <= $highestRow; $row++) { 
    for ($y = 0; $y < $highestColumn; $y++) { 
    $val = $sheet->getCellByColumnAndRow($y, $row)->getValue(); 

    if ($y == $mailColumn && !preg_match($pattern,$val)) 
    {$invaild[]=$row;} 
    elseif ($y == $mailColumn && in_array($val,$email)) 
    {$duplicate[]=$val; 
    $duplicate[]=$row;} 
    //elseif (!in_array($row,$duplicate) && !in_array($row,$invaild)) 
    //{echo $val;} 

    if ($y == $mailColumn) 
    {$email[]=$val; 
    $email=array_unique($email);} 

    } 
} 
$invaild=array_unique($invaild); 
?> 

<!-- To Show mail import result --> 
<div id="stylized" class="view"> 
<h1><?echo $_POST['excel'].' Result';?></h1> 
<p>Import from spreadsheet files</p> 
    <div id="container"> 
<table cellpadding="0" cellspacing="0" border="2" class="display" id="viewImport"> 
<thead> 
<tr> 

<? 
for ($head = 0; $head < $highestColumn; $head++){ 
if ($head==$mailColumn) 
echo "<th field='col'$head> Email address </th>"; 
else 
echo "<th field='col'$head><input id='$head' name='$head' class='required' value='Input Header' size='1'/> </th>"; 
} 
?> 
</tr> 
</thead> 

<? 
for ($row = 1; $row <= $highestRow; $row++) { 
    echo "<tr>"; 
    for ($y = 0; $y < $highestColumn; $y++) { 
     if (!in_array($row,$duplicate) && !in_array($row,$invaild)){ 
      $val = $sheet->getCellByColumnAndRow($y, $row)->getValue(); 
      echo "<td>"; 
      if (!$val) 
      echo "-"; 
      else 
      echo $val; 
      echo "</td>";} 
     } 
    echo "</tr>"; 
    } 



?> 

</table> 
</div> 


<form id="insertResult" method="post" action="excelSQL.php" > 
<br><br><br> 
<input type="hidden" id="file" name="file" value="<?echo $file;?>" /> 
<label>Insert into list:</label> 
<input id="listName" name="listName"/> 
<div class="spacer"></div> 
<input class="submit" type="submit" name="submit" value="Insert into Database"/> 
</form> 
<div class="spacer"></div> 
</div> 
</body> 
</html> 

这部分是插入到数据库:

<body> 

<? 
session_start(); 
include("../connection/conn.php"); 
$file=$_POST['file']; 
include ("../plugin/excel/Classes/PHPExcel/IOFactory.php"); 

$ext = pathinfo($file, PATHINFO_EXTENSION); 
if ($ext=='xlsx') 
$readerType='Excel2007'; 
elseif ($ext=='xls') 
$readerType='Excel5'; 

$reader = PHPExcel_IOFactory::createReader($readerType); 
$PHPExcel = $reader->load($file); 
$sheet = $PHPExcel->getSheet(0); 
$highestRow = $sheet->getHighestRow(); 
$highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()); 

$pattern="/^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$/"; 

for ($row = 1; $row <= $highestRow; $row++){ 
for ($head = 0; $head < $highestColumn; $head++){ 
$testMail = $sheet->getCellByColumnAndRow($head, $row)->getValue(); 
if (preg_match($pattern,$testMail)) 
$mailColumn=$head; 
}} 
if(!isset($mailColumn)) 
{die('No email column detected, please check your file and import again.');} 


$invaild[] = NULL ; 
$email[] = NULL ; 
$duplicate[] = NULL ; 

for ($row = 1; $row <= $highestRow; $row++) { 
    for ($y = 0; $y < $highestColumn; $y++) { 
    $val = $sheet->getCellByColumnAndRow($y, $row)->getValue(); 

    if ($y == $mailColumn && !preg_match($pattern,$val)) 
    {$invaild[]=$row;} 
    elseif ($y == $mailColumn && in_array($val,$email)) 
    {$duplicate[]=$val; 
    $duplicate[]=$row;} 
    //elseif (!in_array($row,$duplicate) && !in_array($row,$invaild)) 
    //{echo $val;} 

    if ($y == $mailColumn) 
    {$email[]=$val; 
    $email=array_unique($email);} 

    } 
} 
$invaild=array_unique($invaild); 

for ($head = 0; $head < $highestColumn; $head++){ 
    if ($head != $mailColumn) 
    {echo $_POST[$head]; 
    $sql="INSERT INTO subatt (AttID,AttName) VALUES ('','$_POST[$head]')"; 
    if (!mysql_query($sql,$conn)) 
    { 
    die('Error: ' . mysql_error()); 
    }} 
    else 
    echo "email"; 
    } 
?> 


<div id="stylized" class="view"> 
<h1><?echo $file.' Result';?></h1> 
<p>Import from spreadsheet files</p> 


<? 

for ($row = 1; $row <= $highestRow; $row++) { 
    for ($y = 0; $y < $highestColumn; $y++) { 
     if (!in_array($row,$duplicate) && !in_array($row,$invaild)){ 
      $val = $sheet->getCellByColumnAndRow($y, $row)->getValue(); 
      if (!$val) 
      {$sql="INSERT INTO subdata (DataID,DataContent) VALUES ('','')";} 
      else 
      $sql="INSERT INTO subdata (DataID,DataContent) VALUES ('','$val')"; 
       if (!mysql_query($sql,$conn)) 
       { 
       die('Error: ' . mysql_error()); 
       } 
      $result = mysql_query("SELECT AttID FROM subatt WHERE AttName='$_POST[$y]'"); 
      if (!$result) 
      {die('Could not query:' . mysql_error());} 
      $attID = mysql_result($result, 0); 


      $sql="INSERT INTO subscriber (SubID,AttID,DataID) VALUES ('',$attID,'')"; 
       if (!mysql_query($sql,$conn)) 
       { 
       die('Error: ' . mysql_error()); 
       } 
       } 
     } 
    } 



?> 

<div class="spacer"></div> 
</div> 
</body> 
+2

'我遇到error'请写错误,是什么样的错误。它总是有助于解决问题 – safarov 2012-03-27 19:06:06

+0

您最好使用$ readerType = PHPExcel_IOFactory :: createReader($ file);而不是信任文件名的用户输入以识别文件类型和读者使用...还使用try/catch块:PHPExcel抛出异常,可以帮助识别问题 – 2012-03-27 19:50:17

回答

0

我可以看到你有一个数据ID您查询。为什么它总是空的?是否有任何独特/主要索引?

我想知道什么是真正的错误也请

相关问题