Прочитайте лист Excel, содержащий объединенные ячейки, используя PHPExcel

Я хочу полностью прочитать лист Excel и с помощью AJAX отправлять каждую строку на другую страницу для обработки. Поэтому я использовал следующий код для преобразования данных таблицы Excel в массив JSON (справочный пример PHPExcel, представленный в библиотеке):

<?php
error_reporting(E_ALL);
set_time_limit(0);

date_default_timezone_set('Asia/Kolkata');
set_include_path(get_include_path() . PATH_SEPARATOR . 'PHPExcel-1.8/Classes/');
require_once 'PHPExcel/IOFactory.php';

$inputFileType = PHPExcel_IOFactory::identify($fileLocation);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setLoadSheetsOnly("SHEETNAME");
$objPHPExcel = $objReader->load($fileLocation);

$data = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
?>

Вот $filelocation является местоположением загруженного файла, который должен быть прочитан для индивидуальной отправки строк с помощью AJAX на другую страницу.
я использую $data в JavaScript как

DataToBeUploaded=<?php echo json_encode($data);?>;

Но лист Excel содержит несколько объединенных ячеек, поэтому PHPExcel не может прочитать значения в этих объединенных ячейках. Следовательно, значения в этих ячейках читаются как NULL.

Можно ли использовать верхнее левое значение ячейки для всех последующих ячеек? (На самом деле в моем случае ячейки объединяются только по вертикали)

Например.
У меня есть (Предположим, строки пронумерованы от 1 и столбцы от A)

Пример листа слитых ячеек

Здесь PHPExcel читает это как:

data[1][A]='abc'
$data[1][B]='123'

$data[2][A]=''
$data[2][B]='456'

$data[3][A]=''
$data[3][B]='789'

Я хочу, чтобы фрагмент привел к этим значениям:

data[1][A]='abc'
$data[1][B]='123'

$data[2][A]='abc'
$data[2][B]='456'

$data[3][A]='abc'
$data[3][B]='789'

1

Решение

Ссылаясь на https://github.com/PHPOffice/PHPExcel/issues/643

Я написал следующий фрагмент:

$referenceRow=array();
for ( $row = 2; $row <= $noOfBooks; $row++ ){
for ( $col = 0; $col < 7; $col++ ){
if (!$objPHPExcel->getActiveSheet()->getCellByColumnAndRow( $col, $row )->isInMergeRange() || $objPHPExcel->getActiveSheet()->getCellByColumnAndRow( $col, $row )->isMergeRangeValueCell()) {
// Cell is not merged cell
$data[$row][$col] = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow( $col, $row )->getCalculatedValue();

$referenceRow[$col]=$data[$row][$col];
//This will store the value of cell in $referenceRow so that if the next row is merged then it will use this value for the attribute
} else {
// Cell is part of a merge-range
$data[$row][$col]=$referenceRow[$col];
//The value stored for this column in $referenceRow in one of the previous iterations is the value of the merged cell
}

}
}

Это даст результат точно так, как требуется

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector