phpexcel выбор листов и столбцов - PullRequest
1 голос
/ 20 июля 2011

В настоящее время я работаю над заданием, в котором мне нужно просмотреть большой файл Excel. Я использую phpexcel для этой работы.У меня есть две проблемы в этом проекте

  1. Проблема заключается в том, что при загрузке файла я получаю сообщение об ошибке переполнения памяти. Даже при использовании функции setActiveSheetIndex('') я пытаюсь прочитать кодовую таблицулист, но на данный момент я не могу.

  2. Мне нужно выбрать только выбранные столбцы, а не всю строку, я попытался реализовать пример, показанный в руководстве пользователя phpexcel, но имеюне удалось сделать, я должен реализовать это, чтобы сократить время обработки.

Вот код, который я использую

set_time_limit (6000);
require_once('classes/phpexcel.php');
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("2.xlsx");
$objWorksheet = $objPHPExcel->setActiveSheetIndex('0') ;
$i=0;$dum=false;$sum=0;
foreach ($objWorksheet->getRowIterator() as $row) 
{
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false); 
if($dum) //to ignore first cell 
{                                                  .
foreach ($cellIterator as $cell) 
{    if($i==2||$i==3||$i==4||$i==9)
    {
          if($i==2)
          {
          $value[$i]=$cell->getValue();
          $num1=$value[$i]; // get the starting date and time
          }
          if($i==3)
          {
          $value[$i]=$cell->getValue();
          $num2=$value[$i]; // get the ending date and time
          }
          if($i==4)
          { 
          $value[$i]=$cell->getValue(); 
          $asd=preg_split('#(?=\d)(?<=[a-z])#i',$value[$i] ); //convert strings as asd12321 to asd , 12321
          $value[$i]=$asd[1]; // to read only digit
          }
          if($i==9)
          {
          $value[$i]=$cell->getValue(); // read a string
          $value[$i+1]=$num2-$num1; //to take diff in minutes between the two 
          }

    }$i++;

}$i=0;

$con =  mysql_connect("localhost","root","");
if (!$con)
{$value[0]=$value[2];
 die('Could not connect: ' . mysql_error());
}mysql_select_db("mobilink", $con);
$sql="INSERT INTO my query ....";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
$sum++;


 mysql_close($con);
   }
 $dum=true;

}

Я должен читать только конкретныестолбцы, поскольку у меня есть всего 26 столбцов в файле, а мне нужно только 4.Помощь будет оценена

1 Ответ

0 голосов
/ 15 апреля 2013

В документации

http://phpexcel.codeplex.com/downloads/get/504328

В разделе 4.3 на стр. 7 описано, как вы можете выбрать определенные столбцы вместо всей электронной таблицы.

class MyReadFilter implements PHPExcel_Reader_IReadFilter {

 public function readCell($column, $row, $worksheetName = '') { 
// Read rows 1 to 7 and columns A to E only 
if ($row >= 1 && $row <= 7) {
 if (in_array($column,range('A','E'))) {
 return true; 
   }
 } 
  return false;
 } 
} 
/** Create an Instance of our Read Filter **/

 $filterSubset = new MyReadFilter();
 [...]

Надеюсь, это поможет.

...