以下是我的代码摘录,显示excel条目并存储到数组中。
首先是逻辑,检测哪个条目无效,将其标记为低,然后进行其他有效条目,检查是否重复,如果是,则将其标记为。
最后,再次扫描整个工作表,检索不在该两个列表中的所有条目。 (重复或无效)
问题是:
1)当我显示表格时,虽然它可以显示,但它警告我“ 数据表警告:从第0行“
的数据源请求未知参数”0“2)当我存储到数组中时,它只能存储第一行
所以,我想知道我的循环逻辑有什么错误吗?我是否使用PHPEXCEL以正确的方式阅读电子表格?谢谢。
$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);
foreach ($invaild as $c)
{echo $c;}
echo "<br>";
foreach ($duplicate as $d)
{echo $d;}
?>
<div id="stylized" class="view">
<h1><?echo $file.' Result';?></h1>
<p>Import from spreadsheet files</p>
<div id="container">
<table cellpadding="0" cellspacing="0" border="0" 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> Unname coloum $head </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>
I work on this these day but still get this display error thank you
![enter image description here][1]
答案 0 :(得分:2)
这是我尝试使用ur逻辑的代码..我已经通过了excel文件。(test.xlsx)
<?php
/** PHPExcel */
include_once('PHPExcel.php');
/** PHPExcel_Writer_Excel2007 */
include_once('PHPExcel/Writer/Excel2007.php');
include_once('PHPExcel/Reader/Excel2007.php');
//$objPHPExcel = new PHPExcel();
$file = 'test.xlsx';
$readerType = 'Excel2007';
$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);
/*foreach ($invaild as $c)
{echo $c;}
echo "<br>";
foreach ($duplicate as $d)
{echo $d;}*/
?>
<div id="stylized" class="view">
<h1><?php echo $file.' Result';?></h1>
<p>Import from spreadsheet files</p>
<div id="container">
<table cellpadding="0" cellspacing="0" border="0" class="display" id="viewImport">
<thead>
<tr>
<?php
for ($head = 0; $head < $highestColumn; $head++){
if ($head==$mailColumn)
echo "<th field='col' $head> Email address </th>";
else
echo "<th field='col' $head> Unname coloum $head </th>";
}
?>
</tr>
</thead>
<?php
for ($row = 1; $row <= $highestRow; $row++) {
//Here I have added condition
if (!in_array($row,$duplicate) && !in_array($row,$invaild)){
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>";}
}
//Here I have added condition
if (!in_array($row,$duplicate) && !in_array($row,$invaild)){
echo "</tr>";
}
}
?>
</table>
</div>
这是输出的来源。
<div id="stylized" class="view">
<h1>test.xlsx Result</h1>
<p>Import from spreadsheet files</p>
<div id="container">
<table cellpadding="0" cellspacing="0" border="0" class="display" id="viewImport">
<thead>
<tr>
<th field='col' 0> Unname coloum 0 </th><th field='col' 1> Unname coloum 1 </th><th field='col' 2> Unname coloum 2 </th><th field='col' 3> Unname coloum 3 </th><th field='col' 4> Unname coloum 4 </th><th field='col' 5> Unname coloum 5 </th><th field='col' 6> Email address </th> </tr>
</thead>
<tr><td>1</td><td>REP_10072011_1</td><td>Project </td><td>N/A</td><td>Me</td><td>TEST1</td><td>kamal.joshi@mail.com</td></tr><tr><td>2</td><td>TEST</td><td>Test</td><td>Te</td><td>TEE</td><td>TEST</td><td>joshi.kamal@mail.com</td></tr>
</table>
</div>
好吧,我已经尝试过dataTable jQuery插件,它的工作完美... 请查看链接http://datatables.net/forums/discussion/1283/warning-unexpected-number-of-td-elements./p1
我的建议:请通过你的jquery dataTables插件集成。确保在excel表的输出页面中包含所需的jquery,其中包含匹配的类或id选择器,如
$(document).ready(function() {
$('#viewImport').dataTable();
} );
编辑:检查一下......
<?php
/** PHPExcel */
include_once('PHPExcel.php');
/** PHPExcel_Writer_Excel2007 */
include_once('PHPExcel/Writer/Excel2007.php');
include_once('PHPExcel/Reader/Excel2007.php');
//$objPHPExcel = new PHPExcel();
$file = 'test.xlsx';
$readerType = 'Excel2007';
$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);
/*foreach ($invaild as $c)
{echo $c;}
echo "<br>";
foreach ($duplicate as $d)
{echo $d;}*/
?>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.dataTables.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#viewImport').dataTable();
} );
</script>
<div id="stylized" class="view">
<h1><?php echo $file.' Result';?></h1>
<p>Import from spreadsheet files</p>
<div id="container">
<table cellpadding="0" cellspacing="0" border="0" class="display" id="viewImport">
<thead>
<tr>
<?php
for ($head = 0; $head < $highestColumn; $head++){
if ($head==$mailColumn)
echo "<th field='col' $head> Email address </th>";
else
echo "<th field='col' $head> Unname coloum $head </th>";
}
?>
</tr>
</thead>
<?php
for ($row = 1; $row <= $highestRow; $row++) {
if (!in_array($row,$duplicate) && !in_array($row,$invaild)){
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>";}
}
if (!in_array($row,$duplicate) && !in_array($row,$invaild)){
echo "</tr>";
}
}
?>
</table>
</div>