2016-05-24 3 views
0

このコードのヘルプが必要です。 xlsxファイルをインポートすると、マージされたセルは2行として扱われます。 どのように私はそれを変更することができますcolを選択する方法は、結合されたセルが分割され、単一の列として扱われる(例:A + B + C 'some info' - > colA 'some info'、colB with '空/空'、colCは '空/空')。phpexcelですべての列を選択してxlsxをmysqlにインポート

コード:

<?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']) . "'"); 
}          

?> 

答えて

0

任意の個々のセルが使用してマージ範囲の一部であるかどうか確認することができ:

セルがAの一部であるか否かを識別するブール値を返す
$cell->isInMergeRange(); 

をマージ範囲かどうか。

のみマージ範囲の一番左上のセルには値が含まれ、マージ範囲内のセルだからセルはの一部であるかどうかを確認

$cell->isMergeRangeValueCell(); 

を使用して、その値セルである場合は、識別することができます範囲をマージし、そうでなければその値を求めます。そうであれば、マージ範囲値のセルをチェックし、そうであればその値を捨てます。それ以外の場合は破棄します。

+0

こんにちはマーク、あなたの答えに感謝します。ちょっとした助けを...私のコードでは、あなたの例と説明でどこを変えるべきですか?ありがとうございました。 –

関連する問題