我正在使用PHPExcel从 Excel 表中读取数据并存储在 mysql 表中,直到现在我能够上传 .xls 以及 .xlsx 文件,并且在上传 xls 后,我得到了下面的数据表结构
name start_date end_date city
one 11/25/2011 3:30:00 PM 11/29/2011 4:40:00 AM Jaipur
two 10/22/2011 5:30:00 PM 10/25/2011 6:30:00 AM Kota
three 3/10/2011 2:30:00 PM 3/11/2011 12:30:00 AM Bikaner
chandigarh
现在我有一些问题,请建议我优化方法
- 我们如何获得工作表名称(一个 excel 中的 bcoz 有 7 个工作表)
现在我如何将这些数据存储到数据库中,下面是代码片段
$inputFileName = "test.xls"; $inputFileType = PHPExcel_IOFactory::identify($inputFileName); $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objReader->setReadDataOnly(true); /** Load $inputFileName to a PHPExcel Object **/ $objPHPExcel = $objReader->load($inputFileName); $total_sheets=$objPHPExcel->getSheetCount(); // here 4 $allSheetName=$objPHPExcel->getSheetNames(); // array ([0]=>'student',[1]=>'teacher',[2]=>'school',[3]=>'college') $objWorksheet = $objPHPExcel->setActiveSheetIndex(0); // first sheet $highestRow = $objWorksheet->getHighestRow(); // here 5 $highestColumn = $objWorksheet->getHighestColumn(); // here 'E' $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); // here 5 for ($row = 1; $row <= $highestRow; ++$row) { for ($col = 0; $col <= $highestColumnIndex; ++$col) { $value=$objWorksheet->getCellByColumnAndRow($col, $row)->getValue(); if(is_array($arr_data) ) { $arr_data[$row-1][$col]=$value; } } } print_r($arr_data);
这会返回
Array
(
[0] => Array
(
[0] => name
[1] => start_date
[2] => end_date
[3] => city
[4] =>
)
[1] => Array
(
[0] => one
[1] => 40568.645833333
[2] => 40570.5
[3] => Jaipur
[4] =>
)
[2] => Array
(
[0] => two
[1] => 40568.645833333
[2] => 40570.5
[3] => Kota
[4] =>
)
[3] => Array
(
[0] => three
[1] => 40568.645833333
[2] => 40570.5
[3] => Bikaner
[4] =>
)
[4] => Array
(
[0] =>
[1] =>
[2] =>
[3] => Chandigarh
[4] =>
)
)
我需要它
- 每个 excel 表的标题(即第一行)成为数组的键($arr_data)和
- rest 成为数组的值。
- 时间更改为某个整数值,应该与 excel 表中的相同
- 应截断所有行中数组的空白字段( ieblank 标题列)(此处 [4] )
- 如果 Excel 工作表的第一个字段(或某些字段的组合条件)未满足,则不应将该行添加到数组中
即所需的数组应该看起来像
Array
(
[0] => Array
(
[name] => one
[start_date] => 11/25/2011 3:30:00 PM
[end_date] => 11/29/2011 4:40:00 AM
[city] => Jaipur
)
[1] => Array
(
[name] => two
[start_date] => 10/22/2011 5:30:00 PM
[end_date] => 10/25/2011 6:30:00 AM
[city] => Kota
)
[2] => Array
(
[name] => three
[start_date] => 3/10/2011 2:30:00 PM
[end_date] => 3/11/2011 12:30:00 AM
[city] => Bikaner
)
)
然后我使用所需数组上的mysql操作将数据存储到我的数据库中。
- 是否有任何其他简短的方法可以将上述数据存储在数据库中
注意:请不要参考手册(这真的很糟糕)......告诉我方法名称......
更新
@Mark感谢您的解决方案,它对我有很大帮助,但仍然存在一些问题
- 如何处理excel sheet..bcoz中的空/空白单元格当任何单元格为空时,它会显示一条通知
注意:未定义的索引:C 中的 C:\xampp\htdocs\xls_reader\Tests\excel2007.php 第 60 行
注意:未定义的索引:D 在 C:\xampp\htdocs\xls_reader\Tests\excel2007.php 中的第 60 行
而第 60 行是
foreach($headingsArray as $columnKey => $columnHeading) {
$namedDataArray[$r][$columnHeading] = $dataRow[$row]$columnKey];
}
- 如何在检索完整数据数组之前设置条件,即如果我想要如果第一列和第二列在任何行中为空/空白,则不应将该行添加到我们所需的数组中
谢谢