2016-05-05 2 views
0

Je travaille sur la conversion d'Excel en CSV. Et j'ai actuellement face à un problème que la conversion du fichier Excel avec 15k dossiers et il faut en moyenne 45 à 50 secondes pour compter les lignes et les colonnes du fichier.Convertir les enregistrements en vrac d'Excel en CSV en utilisant PHPExcel

Et si je travaille avec des enregistrements 50k alors le système se bloque. Ici, je ne fais pas de travail de conversion csv et oui ici je ne fais que des lignes et des colonnes comptent. Y at-il une issue ou une alternative qui résoudra le problème? Vos suggestions sont très appréciées.

require_once('../PHPExcel/Classes/PHPExcel.php'); 

$start = time(); 

$infile = 'IMPORT_DATA_15000.xlsx'; 
$outfile = 'csv/15000.csv'; 

ini_set('memory_limit', -1); 

//Usage: 
convertExcel2CSV($infile); 

echo 'Time: ' . (time() - $start); 
die; 

function convertExcel2CSV($infile) 
{ 
    // Read your Excel workbook 
    try 
    { 
     $inputFileType = PHPExcel_IOFactory::identify($infile); 
     $objReader = PHPExcel_IOFactory::createReader($inputFileType); 
     $objPHPExcel = $objReader->load($infile); 
    } catch (Exception $e) 
    { 
     die('Error loading file "' . pathinfo($infile, PATHINFO_BASENAME) . '": ' . $e->getMessage()); 
    } 

    // Get worksheet dimensions 
    $sheet = $objPHPExcel->getSheet(0); 
    $highestRow = $sheet->getHighestRow(); 
    $highestColumn = $sheet->getHighestColumn(); 

    echo $highestColumn; 
    echo "===="; 
    echo $highestRow; 
} 

SORTIE:

AMK 
==== 
15000 
+1

Que voulez-vous dire par panne de système? Y a-t-il des messages d'erreur spécifiques que vous obtenez? – codedge

+0

Non, je ne peux pas recevoir de message car le fichier contient beaucoup d'enregistrements, donc le système tombe en panne et ne termine pas mon processus. –

+0

Comme Codedge a dit, que voulez-vous dire par le «système tombe en panne»? Est-ce qu'il s'arrête simplement avant de produire la production? Avez-vous vérifié vos journaux? Cela pourrait-il manquer de mémoire? –

Répondre

0

Si tout ce que vous avez besoin est de savoir combien de lignes et de colonnes, il y a dans chaque feuille de calcul, alors pourquoi ne pas utiliser simplement

$inputFileType = PHPExcel_IOFactory::identify($infile); 
$objReader = PHPExcel_IOFactory::createReader($inputFileType); 
$worksheetData = $objReader->listWorksheetInfo($inputFileName); 

var_dump($worksheetData); 

Il est incroyable combien vous pouvez apprendre simpy en lisant the documentation

Il existe également des méthodes qui vous permettent t o charger le fichier une feuille de calcul, ou une rage de cellules à la fois, et d'autres techniques merveilleuses qui y sont décrites .... et connaître les détails de la feuille de travail qui fournit listWorksheetInfo() vous permettra de travailler avec les fichiers en plus petits morceaux, ou Réduisez l'utilisation de la mémoire grâce à la mise en cache des cellules ou lisez uniquement les données plutôt que tous les styles de cellule.

+0

Cette solution résout mon problème de comptage mais comment convertir les données 15k en morceau 1k? J'ai suivi ce lien. http://stackoverflow.com/questions/25056030/phpexcel-how-can-i-read-the-excel-sheet-row-by-row –

+0

Et que s'est-il passé lorsque vous avez créé un filtre en lecture pour lire les données en morceaux? –

+0

Avez-vous essayé l'une des autres méthodes que j'ai mentionnées, comme la configuration du lecteur pour charger uniquement les données de la cellule plutôt que les données et les styles, ou pour utiliser la mise en cache des cellules? –