Как использовать phpexcel для чтения данных и вставки в базу данных?
108
У меня есть phpприложение, в котором я хочу читать данные из excel, вставлять в базу данных, а затем создавать отчеты в формате PDF для конкретных пользователей. Я много искал, но ничего конкретного об обоих вещах не дал.
Вы думали об экспорте данных Excel в CSV? Есть ли в ваших данных что-то, что исключает возможность использования CSV в качестве опции?
Тельмо Маркес,
2
Вы уже смотрели библиотеку PHPExcel?
Марк Бейкер
@MarkBaker Я еще не видел библиотеку, хотя я попытался проверить файл справки по функциям, но он был слишком большим, чтобы изучить его, так как мне пришлось заставить эту вещь работать как можно скорее в дополнение к другим частям проекта.
coder101
@TelmoMarques, мы думали сделать это через csv, но хотели сделать это с помощью PHPExcel, иначе последний вариант csv всегда присутствует.
Использование библиотеки PHPExcel для чтения файла Excel и передачи данных в базу данных
// 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}
Все остальное очень сильно зависит от вашей базы данных и от того, как вы хотите структурировать данные в ней.
Я тестировал это сегодня с v 1.7.9, 2013-06-02, и это не сработало. мне пришлось заменить $highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());на простой $sheet->getHighestColumn(). у вас может быть ошибка в коде, когда вы пытаетесь получить индекс столбца из строки - НО попытайтесь получить к нему доступ через $ highColumn. $ row в цикле (который просто дал бы странное сцепленное целое число, если бы вы не использовали персонаж)
user151496
Самый высокий столбец должен быть значением букв столбца; так что вы правы - это просто должно быть постановка, $highestColumn = $sheet->getHighestColumn();а не $highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());я не непогрешимый '
getHighestColumn()возвращает 255 каждый раз. Замена на getHighestDataColumn()устраняет проблему. Дополнительная информация: stackoverflow.com/questions/15903471/…
Мартин Джонов
@ coder101 Привет. Не могли бы вы дать мне свой php Pg_Query для вставки массива данных строки в базу данных? Спасибо
Ширин
12
Чтобы читать данные из microsoft excel 2007 с помощью codeigniter, просто создайте вспомогательную функцию excel_helper.php и добавьте в нее следующее:
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");
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++;}
Спасибо чувак. На самом деле я опубликовал эту проблему несколько месяцев назад, и тогда у меня было решение. но я обязательно воспользуюсь вашим предложением в следующий раз, когда буду работать над этой функцией. Спасибо еще раз.
Ответы:
Использование библиотеки PHPExcel для чтения файла Excel и передачи данных в базу данных
Все остальное очень сильно зависит от вашей базы данных и от того, как вы хотите структурировать данные в ней.
источник
$highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());
на простой$sheet->getHighestColumn()
. у вас может быть ошибка в коде, когда вы пытаетесь получить индекс столбца из строки - НО попытайтесь получить к нему доступ через $ highColumn. $ row в цикле (который просто дал бы странное сцепленное целое число, если бы вы не использовали персонаж)$highestColumn = $sheet->getHighestColumn();
а не$highestColumn = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());
я не непогрешимый 'getHighestColumn()
возвращает 255 каждый раз. Замена наgetHighestDataColumn()
устраняет проблему. Дополнительная информация: stackoverflow.com/questions/15903471/…Чтобы читать данные из microsoft excel 2007 с помощью codeigniter, просто создайте вспомогательную функцию excel_helper.php и добавьте в нее следующее:
источник
Используя библиотеку PHPExcel , подойдет следующий код.
источник
источник
источник
Вот самый свежий ответ на этот вопрос из файла: 07reader.php
источник
Inci framework вы можете скачать так:
источник