php - 使用 phpexcel 选择所有列将 xlsx 导入到 mysql

标签 php mysql phpexcel

需要一些有关此代码的帮助。 当我导入 xlsx 文件时,合并的单元格被视为 2 行。 如何将其更改为逐列选择,合并的单元格将被拆分并视为单列(例如:A+B+C 带有“一些信息”-> colA 带有“一些信息”,colB 带有“null/empty',colC 与 'null/empty')。

代码:

<?php
@session_start();   
//-->
$file = $_SESSION['file'];
$sheet = $_POST['sheet'];
//-->
//--> Include PHPExcel and MySQLi db */
require_once dirname(__FILE__) . '\Classes2\DB.php';
require_once dirname(__FILE__) . '\Classes2\PHPExcel.php';

//--> Create DB object
use DB\MySQLi;


//--> Create new PHPExcel object
$objPHPExcel = PHPExcel_IOFactory::load($file);
$objWorksheet = $objPHPExcel->getSheet($sheet);

$dataArr = array();

foreach ($objWorksheet->getRowIterator() as $row) {
   $rowIndex = $row->getRowIndex();
   $cellIterator = $row->getCellIterator();
   $cellIterator->setIterateOnlyExistingCells(True); 
   foreach ($cellIterator as $cell) {
      $colIndex = PHPExcel_Cell::columnIndexFromString($cell->getColumn());
      $val = $cell->getValue();
      $dataArr[$rowIndex][$colIndex] = $val;

   } 
}

unset($dataArr[1]); 

$hostname = 'localhost';
$username = 'user';
$password = '´pass';
$database = 'base';

$db = new MySQLi($hostname, $username, $password, $database);

foreach($dataArr as $val){
   $query = $db->query("INSERT INTO excel SET eid = '" . $db->escape($val['1']) . "',name = '" . $db->escape($val['2']) . "', email = '" . $db->escape($val['3']) . "', dob = '" . $db->escape($val['4']) . "'");
}                                       

?>

最佳答案

您可以使用以下方法检查任何单个单元格是否属于合并范围:

$cell->isInMergeRange();

它返回一个 bool 值,标识单元格是否属于合并范围。

只有合并范围中最左上角的单元格包含该值,您可以使用以下方法识别合并范围内的单元格是否是该值单元格

$cell->isMergeRangeValueCell();

因此,请检查该单元格是否属于合并范围的一部分,如果不是,那么您需要它的值;如果是,检查 f 它是合并范围值单元格,如果是,则您需要它的值,否则丢弃它

关于php - 使用 phpexcel 选择所有列将 xlsx 导入到 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37422747/

相关文章:

php - OpenShift 上的 WordPress 响应 "Lost connection to MySQL server at ' 读取初始通信数据包',系统错误 : 111"

php - ZipArchive::close():无法在 AWS EC2 Linux 中创建临时文件

php PHPExcel拆分Excel单元格坐标

php - 为什么在 Laravel 中使用 Guard?

php - 将类传递给set_error_handler

php - 发送 header 后关闭网页(php)

c# - 用于全文搜索的索引数据库,Lucene/iFiler/SQL FTS/..etc

mysql - 如何根据列选择有限行

Zend2 Controller 中的 PHPExcel

javascript - 实时计算进入下一步然后返回数字成为我最初设置的数字