Я хочу полностью прочитать лист 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'
Ссылаясь на 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
}
}
}
Это даст результат точно так, как требуется
Других решений пока нет …