2011-11-07 16 views
6

Estoy intentando utilizar un script php para leer un archivo xlsx, y pasar la información a partir de las células fuera en MySQLPHPExcel - Lectura de las células y su transmisión en MySQL

aquí es mi código, yo soy PHPExcel utilizando la versión 1.7.6 y PHP 5.3.5

require_once 'PHPExcel.php'; 
$inputFileType = 'Excel2007'; 
$inputFileName = $upload_path . $filename; 

/** Define a Read Filter class implementing PHPExcel_Reader_IReadFilter */ 
class chunkReadFilter implements PHPExcel_Reader_IReadFilter 
{ 
    private $_startRow = 0; 
    private $_endRow = 0; 

    /** Set the list of rows that we want to read */ 
    public function setRows($startRow, $chunkSize) { 
     $this->_startRow = $startRow; 
     $this->_endRow = $startRow + $chunkSize; 
    } 

    public function readCell($column, $row, $worksheetName = '') { 
     // Only read the heading row, and the configured rows 
     if (($row == 1) || 
      ($row >= $this->_startRow && $row < $this->_endRow)) { 
      return true; 
     } 
     return false; 
    } 
} 


/** Create a new Reader of the type defined in $inputFileType **/ 
$objReader = PHPExcel_IOFactory::createReader($inputFileType); 


/** Define how many rows we want to read for each "chunk" **/ 
$chunkSize = 2048; 
/** Create a new Instance of our Read Filter **/ 
$chunkFilter = new chunkReadFilter(); 

/** Tell the Reader that we want to use the Read Filter **/ 
$objReader->setReadFilter($chunkFilter); 

/** Loop to read our worksheet in "chunk size" blocks **/ 
for ($startRow = 2; $startRow <= 65536; $startRow += $chunkSize) { 
    /** Tell the Read Filter which rows we want this iteration **/ 
    $chunkFilter->setRows($startRow,$chunkSize); 
    /** Load only the rows that match our filter **/ 
    $objPHPExcel = $objReader->load($inputFileName); 

// Need to pass the cell values into the variables 

Aquí es donde tengo que usar algo como esto

for ($x = 2; $x < = count($data->sheets[0]["cells"]); $x++) { 
    $item_number = $data->sheets[0]["cells"][$x][1]; 
    $qty_sold = $data->sheets[0]["cells"][$x][2]; 
    $cost_home = $data->sheets[0]["cells"][$x][3]; 

que trabajaría para phpexcelreader, pero simplemente no saben qué funciones harían lo mismo para PHPExcel

//here is where I would pass those values into MYSQL 

$sql = "INSERT INTO sales_report (`item_number`,`qty_sold`, `cost_home`) 
     VALUES ('$item_number',$qty_sold,'$cost_home')"; 
     echo $sql."\n"; 
    mysql_query($sql); 
} 
?> 

Estoy en una pérdida total como la forma de obtener los datos de la hoja de cálculo en MySQL

EDIT:

He conseguido obtener los datos impresos mediante el uso de las siguientes matrices

foreach ($objWorksheet->getRowIterator() as $row) { 
    $j = 1; 

    $cellIterator = $row->getCellIterator(); 
    $cellIterator->setIterateOnlyExistingCells(false); 

    foreach ($cellIterator as $cell) { 
     $data->sheets[0]['cells'][$i][$j] = $cell->getValue(); 

     $j++; 
    } // end cell getter 

    $i++; 

} // end row getter 

Pero parece que no puedo conseguir que se inserte en mi mesa. He intentado usar la función de implosión también, pero no pasa nada.

+0

alternativa: http://dev.mysql.com/doc/refman/5.1/en /load-data.html –

+0

Ya le pregunté, vea esto: http://stackoverflow.com/questions/7156228/reading-a-xlsx-sheet-to-feed-a-mysql-table-using-phpexcel/7286159 # 7286159 –

+0

Ya lo intenté antes de hacer la pregunta. No funcionó para mí. – Fahad

Respuesta

2

La manera más fácil de hacerlo es convertir el archivo xlsx a csv sobre la marcha, y usar el análisis CSV normal. Sólo una instancia CSVWriter y guardar en una ubicación temporal (que puede proporcionar código de ejemplo para mañana)

Ejemplo de código:

$objReader = PHPExcel_IOFactory::load ($file_path); 
    $writer = PHPExcel_IOFactory::createWriter ($objReader, 'CSV'); 
    $writer->save ($csv_path);  
    if (($handle = fopen ($csv_path, "r")) !== false) { 

    while (($data = fgetcsv ($handle)) !== false) { 
     print_r($data); 
    } 
    } 
+0

gracias Darhazer si pudieras ayudarme con esto, ya que me está conduciendo por la pared. He pasado una semana buscando una manera de hacer esto, pero nada aún jajaja. Gracias de nuevo – Fahad

+0

@Fahad actualizado con código de ejemplo. –

+0

gracias por el código, que funciona bien. Pero quiero poder usar algunas de las funciones de excel2007 (en el futuro). ¿No convertirlo a CSV me haría perder cosas como mis fórmulas y tal? Creo que una vez que descubra cómo insertar los datos directamente, también debería poder extraer las fórmulas en las células. – Fahad

Cuestiones relacionadas