2016-12-04 3 views
1

Я хочу полностью прочитать лист excel и использовать AJAX для отправки каждой строки на другую страницу для обработки. Таким образом, я использовал следующий код для преобразования данных листов Excel в JSON массив (Reference PHPExcel пример содержится в библиотеке):Прочитайте листы excel, содержащие объединенные ячейки, используя 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 и колонны из А)

merged cells excel sheet example

Здесь 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' 

ответ

3

Ссылаясь на 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 
      } 

     } 
} 

Это даст результат в точности в соответствии с требованиями