read - cómo usar phpexcel para leer datos e insertarlos en la base de datos?
phpexcel documentation (6)
Aquí hay una respuesta muy reciente a esta pregunta del archivo: 07reader.php
<?php
error_reporting(E_ALL);
ini_set(''display_errors'', TRUE);
ini_set(''display_startup_errors'', TRUE);
define(''EOL'',(PHP_SAPI == ''cli'') ? PHP_EOL : ''<br />'');
date_default_timezone_set(''Europe/London'');
/** Include PHPExcel_IOFactory */
require_once ''../Classes/PHPExcel/IOFactory.php'';
if (!file_exists("05featuredemo.xlsx")) {
exit("Please run 05featuredemo.php first." . EOL);
}
echo date(''H:i:s'') , " Load from Excel2007 file" , EOL;
$callStartTime = microtime(true);
$objPHPExcel = PHPExcel_IOFactory::load("05featuredemo.xlsx");
$callEndTime = microtime(true);
$callTime = $callEndTime - $callStartTime;
echo ''Call time to read Workbook was '' , sprintf(''%.4f'',$callTime) , " seconds" , EOL;
// Echo memory usage
echo date(''H:i:s'') , '' Current memory usage: '' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
echo date(''H:i:s'') , " Write to Excel2007 format" , EOL;
$callStartTime = microtime(true);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ''Excel2007'');
$objWriter->save(str_replace(''.php'', ''.xlsx'', __FILE__));
$callEndTime = microtime(true);
$callTime = $callEndTime - $callStartTime;
echo date(''H:i:s'') , " File written to " , str_replace(''.php'', ''.xlsx'', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
echo ''Call time to write Workbook was '' , sprintf(''%.4f'',$callTime) , " seconds" , EOL;
// Echo memory usage
echo date(''H:i:s'') , '' Current memory usage: '' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
// Echo memory peak usage
echo date(''H:i:s'') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
// Echo done
echo date(''H:i:s'') , " Done writing file" , EOL;
echo ''File has been created in '' , getcwd() , EOL;
Tengo una aplicación php
en la que deseo leer datos de excel, Insertar en la base de datos y luego generar informes en PDF para usuarios específicos. Busqué mucho en internet, pero no se especifica nada sobre ambas cosas. si alguien pudiera proporcionar un tutorial o algo así, sería una verdadera ayuda.
Para leer los datos de microsoft excel 2007 por codeigniter simplemente cree una función auxiliar excel_helper.php y agregue lo siguiente en:
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 settings
PHPExcel_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
----------- import in 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>'';
}
else if($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");
Usando la biblioteca PHPExcel , el siguiente código funcionará.
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++;
}
Usar la biblioteca de PHPExcel para leer un archivo de Excel y transferir los datos a una base de datos
// Include PHPExcel_IOFactory
include ''PHPExcel/IOFactory.php'';
$inputFileName = ''./sampleData/example1.xls'';
// Read your Excel workbook
try {
$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 turn
for ($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
}
Cualquier cosa más se vuelve muy dependiente de su base de datos, y cómo quiere que los datos estén estructurados en ella
if($query)
{
// try to export to excel the whole data ---
//initialize php excel first
ob_end_clean();
//--- create php excel object ---
$objPHPExcel = new PHPExcel();
//define cachemethod
ini_set(''memory_limit'', ''3500M'');
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array(''memoryCacheSize'' => ''800MB'');
//set php excel settings
PHPExcel_Settings::setCacheStorageMethod(
$cacheMethod,$cacheSettings
);
$objPHPExcel->getProperties()->setTitle("export")->setDescription("none");
$objPHPExcel->setActiveSheetIndex(0);
// Field names in the first row
$fields = $query->list_fields();
$col = 0;
foreach ($fields as $field)
{
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, 1, $field);
$col++;
}
// Fetching the table data
$row = 2;
foreach($query->result() as $data)
{
$col = 0;
foreach ($fields as $field)
{
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $data->$field);
$col++;
}
$row++;
}
$objPHPExcel->setActiveSheetIndex(0);
//redirect to cleint browser
header(''Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');
header(''Content-Disposition: attachment;filename=Provinces.xlsx'');
header(''Cache-Control: max-age=0'');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ''Excel2007'');
$objWriter->save(''php://output'');
}
if($this->mng_auth->get_language()==''en'')
{
$excel->getActiveSheet()->setRightToLeft(false);
}
else
{
$excel->getActiveSheet()->setRightToLeft(true);
}
$styleArray = array(
''borders'' => array(
''allborders'' => array(
''style'' => PHPExcel_Style_Border::BORDER_THIN,
''color'' => array(''argb'' => ''00000000''),
),
),
);
//SET property
$objPHPExcel->getActiveSheet()->getStyle(''A1:M10001'')->applyFromArray($styleArray);
$objPHPExcel->getActiveSheet()->getStyle(''A1:M10001'')->getAlignment()->setWrapText(true);
$objPHPExcel->getActiveSheet()->getStyle(''A1:''.chr(65+count($fields)-1).$query->num_rows())->applyFromArray($styleArray);
$objPHPExcel->getActiveSheet()->getStyle(''A1:''.chr(65+count($fields)-1).$query->num_rows())->getAlignment()->setWrapText(true);