Wie verwende ich phpexcel, um Daten zu lesen und in die Datenbank einzufügen?
108
Ich habe eine phpAnwendung, in der ich Daten aus Excel lesen, in eine Datenbank einfügen und dann PDF-Berichte für bestimmte Benutzer erstellen möchte. Ich habe viel gesucht, aber nichts Spezielles zu beiden Dingen.
Haben Sie schon einmal Ihre Excel-Daten in CSV exportiert? Gibt es etwas in Ihren Daten, das CSV als Option eliminiert?
Telmo Marques
2
Haben Sie sich schon die PHPExcel-Bibliothek angesehen?
Mark Baker
@MarkBaker Ich habe die Bibliothek noch nicht gesehen, obwohl ich versucht habe, die Funktionsreferenzdatei zu überprüfen, aber zu groß war, um sie zu untersuchen, da ich dieses Ding so schnell wie möglich zusätzlich zu anderen Teilen des Projekts zum Laufen bringen musste.
coder101
@ TelmoMarques Wir haben darüber nachgedacht, es über eine CSV zu machen, wollten es aber mit PHPExcel machen, sonst ist die letzte Option von CSV immer da.
Verwenden der PHPExcel-Bibliothek zum Lesen einer Excel-Datei und zum Übertragen der Daten in eine Datenbank
// 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}
Alles andere hängt stark von Ihrer Datenbank ab und davon, wie die Daten darin strukturiert sein sollen
Ich habe dies heute mit v 1.7.9, 2013-06-02 getestet und es hat nicht funktioniert. Ich musste durch $highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());einfache ersetzen $sheet->getHighestColumn(). Möglicherweise liegt ein Fehler im Code vor, wenn Sie versuchen, den Spaltenindex aus der Zeichenfolge abzurufen. ABER versuchen Sie, über die Zeile $ mostColumn. $ in der Schleife darauf zuzugreifen (was nur eine seltsame verkettete Ganzzahl ergeben würde, wenn Sie keine verwenden würden Zeichen)
Benutzer151496
Die höchste Spalte sollte ein Spaltenbuchstabe (n) sein. Sie haben also Recht - dies sollte einfach eingestellt werden, $highestColumn = $sheet->getHighestColumn();anstatt dass $highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());ich nicht unfehlbar bin.
getHighestColumn()gibt jedes Mal 255 zurück. Das Ersetzen durch getHighestDataColumn()behebt das Problem. Hier sind weitere Informationen: stackoverflow.com/questions/15903471/…
Martin Dzhonov
@ coder101 Hallo. Könnten Sie mir Ihre PHP Pg_Query geben, um Zeilendatenarray in Datenbank einzufügen? Thankyou
Shieryn
12
Um Daten von Microsoft Excel 2007 per Codeigniter zu lesen, erstellen Sie einfach eine Hilfsfunktion excel_helper.php und fügen Sie Folgendes hinzu:
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");
Bei Verwendung der PHPExcel- Bibliothek reicht der folgende Code aus.
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++;}
Danke, Mann. Eigentlich habe ich dieses Problem vor Monaten gepostet und hatte diesmal selbst eine Problemumgehung. Aber ich werde Ihren Vorschlag auf jeden Fall verwenden, wenn ich das nächste Mal an dieser Funktionalität arbeite. Danke noch einmal.
Antworten:
Verwenden der PHPExcel-Bibliothek zum Lesen einer Excel-Datei und zum Übertragen der Daten in eine Datenbank
Alles andere hängt stark von Ihrer Datenbank ab und davon, wie die Daten darin strukturiert sein sollen
quelle
$highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());
einfache ersetzen$sheet->getHighestColumn()
. Möglicherweise liegt ein Fehler im Code vor, wenn Sie versuchen, den Spaltenindex aus der Zeichenfolge abzurufen. ABER versuchen Sie, über die Zeile $ mostColumn. $ in der Schleife darauf zuzugreifen (was nur eine seltsame verkettete Ganzzahl ergeben würde, wenn Sie keine verwenden würden Zeichen)$highestColumn = $sheet->getHighestColumn();
anstatt dass$highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());
ich nicht unfehlbar bin.getHighestColumn()
gibt jedes Mal 255 zurück. Das Ersetzen durchgetHighestDataColumn()
behebt das Problem. Hier sind weitere Informationen: stackoverflow.com/questions/15903471/…Um Daten von Microsoft Excel 2007 per Codeigniter zu lesen, erstellen Sie einfach eine Hilfsfunktion excel_helper.php und fügen Sie Folgendes hinzu:
quelle
Bei Verwendung der PHPExcel- Bibliothek reicht der folgende Code aus.
quelle
quelle
quelle
Hier ist eine sehr aktuelle Antwort auf diese Frage aus der Datei: 07reader.php
quelle
Inci Framework können Sie wie folgt herunterladen:
quelle