Comment utiliser phpexcel pour lire des données et les insérer dans la base de données?
108
J'ai une phpapplication où je veux lire les données d'Excel, insérer dans la base de données, puis générer des rapports PDF pour des utilisateurs spécifiques. J'ai beaucoup cherché mais rien de précis sur les deux choses.
Avez-vous pensé à exporter vos données Excel au format CSV? Y a-t-il quelque chose dans vos données qui élimine le CSV en option?
Telmo Marques
2
Avez-vous déjà consulté la bibliothèque PHPExcel?
Mark Baker
@MarkBaker Je n'ai pas encore vu la bibliothèque, bien que j'aie essayé de consulter le fichier de référence de la fonction, mais que j'étais trop gros pour l'examiner car je devais faire fonctionner cette chose dès que possible en plus d'autres parties du projet.
coder101
@TelmoMarques nous avons pensé à le faire via un csv, mais nous voulions utiliser PHPExcel sinon la dernière option de csv est toujours là.
Utilisation de la bibliothèque PHPExcel pour lire un fichier Excel et transférer les données dans une base de données
// Include PHPExcel_IOFactory
include 'PHPExcel/IOFactory.php';
$inputFileName ='./sampleData/example1.xls';// Read your Excel workbooktry{
$inputFileType =PHPExcel_IOFactory::identify($inputFileName);
$objReader =PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);}catch(Exception $e){die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());}// Get worksheet dimensions
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();// Loop through each row of the worksheet in turnfor($row =1; $row <= $highestRow; $row++){// Read a row of data into an array
$rowData = $sheet->rangeToArray('A'. $row .':'. $highestColumn . $row,
NULL,
TRUE,
FALSE);// Insert row data array into your database of choice here}
Tout ce qui dépend de plus de votre base de données et de la manière dont vous voulez que les données soient structurées
J'ai testé cela aujourd'hui avec la v 1.7.9, 2013-06-02 et cela n'a pas fonctionné. j'ai dû remplacer $highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());par simple $sheet->getHighestColumn(). vous pouvez avoir un bogue dans le code lorsque vous essayez d'obtenir l'index de la colonne à partir de la chaîne - MAIS essayez d'y accéder via $ la plus hauteColonne. $ ligne dans la boucle (ce qui donnerait juste un entier concaténé étrange si vous n'utilisez pas de character)
user151496
La colonne la plus élevée doit être une valeur de lettre (s) de colonne; donc vous avez raison - cela devrait simplement être le réglage $highestColumn = $sheet->getHighestColumn();plutôt que $highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());je ne suis pas infaillible `
getHighestColumn()renvoie 255 à chaque fois. Le remplacer pargetHighestDataColumn() résout le problème. Voici plus d'infos: stackoverflow.com/questions/15903471/…
Martin Dzhonov
@ coder101 Salut. Pourriez-vous me donner votre php Pg_Query pour insérer un tableau de données de ligne dans la base de données? Thankyou
Shieryn
12
Pour lire les données de Microsoft Excel 2007 par codeigniter, créez simplement une fonction d'assistance excel_helper.php et ajoutez ce qui suit dans:
require_once APPPATH.'libraries/phpexcel/PHPExcel.php';
require_once APPPATH.'libraries/phpexcel/PHPExcel/IOFactory.php';in controller add the following code to read spread sheet by active sheet
//initialize php excel first
ob_end_clean();//define cachemethod
$cacheMethod =PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array('memoryCacheSize'=>'20MB');//set php excel settingsPHPExcel_Settings::setCacheStorageMethod(
$cacheMethod,$cacheSettings
);
$arrayLabel = array("A","B","C","D","E");//=== set object reader
$objectReader =PHPExcel_IOFactory::createReader('Excel2007');
$objectReader->setReadDataOnly(true);
$objPHPExcel = $objectReader->load("./forms/test.xlsx");
$objWorksheet = $objPHPExcel->setActiveSheetIndexbyName('Sheet1');
$starting =1;
$end =3;for($i = $starting;$i<=$end; $i++){for($j=0;$j<count($arrayLabel);$j++){//== display each cell value
echo $objWorksheet->getCell($arrayLabel[$j].$i)->getValue();}}//or dump data
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
var_dump($sheetData);//see also the following link
http://blog.mayflower.de/561-Import-and-export-data-using-PHPExcel.html-----------importin another style around 5000 records ------
$this->benchmark->mark('code_start');//=== change php ini limits. =====
$cacheMethod =PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
$cacheSettings = array(' memoryCacheSize '=>'50MB');PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);//==== create excel object of reader
$objReader =PHPExcel_IOFactory::createReader('Excel2007');//$objReader->setReadDataOnly(true);//==== load forms tashkil where the file exists
$objPHPExcel = $objReader->load("./forms/5000records.xlsx");//==== set active sheet to read data
$worksheet = $objPHPExcel->setActiveSheetIndexbyName('Sheet1');
$highestRow = $worksheet->getHighestRow();// e.g. 10
$highestColumn = $worksheet->getHighestColumn();// e.g 'F'
$highestColumnIndex =PHPExcel_Cell::columnIndexFromString($highestColumn);
$nrColumns = ord($highestColumn)-64;
$worksheetTitle = $worksheet->getTitle();
echo "<br>The worksheet ".$worksheetTitle." has ";
echo $nrColumns .' columns (A-'. $highestColumn .') ';
echo ' and '. $highestRow .' row.';
echo '<br>Data: <table border="1"><tr>';//----- loop from all rows -----for($row =1; $row <= $highestRow;++ $row){
echo '<tr>';
echo "<td>".$row."</td>";//--- read each excel column for each row ----for($col =0; $col < $highestColumnIndex;++ $col){if($row ==1){// show column name with the title//----- get value ----
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val = $cell->getValue();//$dataType = PHPExcel_Cell_DataType::dataTypeForValue($val);
echo '<td>'. $val ."(".$row." X ".$col.")".'</td>';}else{if($col ==9){//----- get value ----
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val = $cell->getValue();//$dataType = PHPExcel_Cell_DataType::dataTypeForValue($val);
echo '<td>zone '. $val .'</td>';}elseif($col ==13){
$date =PHPExcel_Shared_Date::ExcelToPHPObject($worksheet->getCellByColumnAndRow($col, $row)->getValue())->format('Y-m-d');
echo '<td>'.dateprovider($date,'dr').'</td>';}else{//----- get value ----
$cell = $worksheet->getCellByColumnAndRow($col, $row);
$val = $cell->getValue();//$dataType = PHPExcel_Cell_DataType::dataTypeForValue($val);
echo '<td>'. $val .'</td>';}}}
echo '</tr>';}
echo '</table>';
$this->benchmark->mark('code_end');
echo "Total time:".$this->benchmark->elapsed_time('code_start','code_end');
$this->load->view("error");
En utilisant la bibliothèque PHPExcel , le code suivant fera l'affaire.
require_once dirname(__FILE__).'/../Classes/PHPExcel/IOFactory.php';
$objReader =PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);//optional
$objPHPExcel = $objReader->load(__DIR__.'/YourExcelFile.xlsx');
$objWorksheet = $objPHPExcel->getActiveSheet();
$i=1;foreach($objWorksheet->getRowIterator()as $row){
$column_A_Value = $objPHPExcel->getActiveSheet()->getCell("A$i")->getValue();//column A//you can add your own columns B, C, D etc.//inset $column_A_Value value in DB query here
$i++;}
Merci mec. En fait, j'ai posté ce problème il y a des mois et j'ai eu une solution de contournement cette fois-là. mais j'utiliserai certainement votre suggestion la prochaine fois que je travaillerai sur cette fonctionnalité. Merci encore.
Réponses:
Utilisation de la bibliothèque PHPExcel pour lire un fichier Excel et transférer les données dans une base de données
Tout ce qui dépend de plus de votre base de données et de la manière dont vous voulez que les données soient structurées
la source
$highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());
par simple$sheet->getHighestColumn()
. vous pouvez avoir un bogue dans le code lorsque vous essayez d'obtenir l'index de la colonne à partir de la chaîne - MAIS essayez d'y accéder via $ la plus hauteColonne. $ ligne dans la boucle (ce qui donnerait juste un entier concaténé étrange si vous n'utilisez pas de character)$highestColumn = $sheet->getHighestColumn();
plutôt que$highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());
je ne suis pas infaillible `getHighestColumn()
renvoie 255 à chaque fois. Le remplacer pargetHighestDataColumn()
résout le problème. Voici plus d'infos: stackoverflow.com/questions/15903471/…Pour lire les données de Microsoft Excel 2007 par codeigniter, créez simplement une fonction d'assistance excel_helper.php et ajoutez ce qui suit dans:
la source
En utilisant la bibliothèque PHPExcel , le code suivant fera l'affaire.
la source
la source
la source
Voici une réponse très récente à cette question tirée du fichier: 07reader.php
la source
Framework Inci que vous pouvez télécharger comme suit:
la source