Bari
Bari

Reputation: 88

PHPExcel fails to read .xlsx

So, i have a form which able to read excel files and save to database by uploading an excel file. It is fine when i upload .xls file, but not with the .xlsx. Here is the code:

echo ' File berhasil diupload => '.$dok['file_name']; //success to echo uploaded .xlsx file

//EXCEL READING, load library
$this->load->library('excel');
//Identify the type of $inputFileName
$inputFileType = PHPExcel_IOFactory::identify(FCPATH."/asset/files/uploads/".$dok['file_name']);
//Create a new Reader of the type that has been identified
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
//Failed to echo (if i upload .xlsx file)
echo 'input file type => '.$inputFileType; 
//begin to read excel file
$this->excel = $objReader->load(FCPATH."/asset/files/uploads/".$dok['file_name']);
  $objWorksheet=$this->excel->getActiveSheet();
  $highestRow=$objWorksheet->getHighestRow();
  $highestColumm = $objWorksheet->getHighestColumn();
  $highestColumm++;

//jika option timpa, maka delete semua data
  if($timpa == 'y')
  {
    $this->_model->del_table_mcactivity();
  }

//read per row and save to database
foreach($this->excel->getWorksheetIterator() as $worksheet){
$worksheetTitle =   $worksheet->getTitle();
$highestRow = $worksheet->getHighestRow();
$highestColumn = $worksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$nrColumns= ord($highestColumn) - 64;

for ($row = 2; $row <= $highestRow; ++ $row) {
    $kodemak = $objWorksheet->getCell("A$row")->getValue();
    $tahun = $objWorksheet->getCell("B$row")->getValue();
    $unitkerja = $objWorksheet->getCell("C$row")->getValue();
    $nomorkegiatan = $objWorksheet->getCell("D$row")->getValue();
    $kegiatan = $objWorksheet->getCell("E$row")->getValue();
    $noskkegiatan = $objWorksheet->getCell("F$row")->getValue();
    $jenis = $objWorksheet->getCell("G$row")->getValue();
    $pagu = $objWorksheet->getCell("H$row")->getValue();

    //get for refworkingunit id
    $idrefworkingunit = $this->_model->get_workingunit_by_name($unitkerja);
    //filtering for budget
    $budget = $this->filter_budget($pagu);
    //grouping variable to save in database
    $activity_data = array('year'=>$tahun, 'idrefworkingunit'=>$idrefworkingunit, 'activitynumber'=>$nomorkegiatan, 'activityname'=>$kegiatan, 'activityreference'=>$noskkegiatan, 'accountnumber'=>$kodemak, 'traveltype'=>$jenis, 'budget'=> $budget);
    //insert to database
    $this->db->insert('mcactivity', $activity_data);
                    }   
                }

I use PHPExcel_IOFactory::identify() to identify the reader should be used. But i think it's failed.

I've read this question , then i replace

$objReader = PHPExcel_IOFactory::createReader($inputFileType);

with:

$objReader = PHPExcel_IOFactory::createReader('Excel2007');

but it still doesn't work. Can somebody help me, please ?

Upvotes: 0

Views: 4278

Answers (2)

Nick
Nick

Reputation: 41

There are multiple lines where the reference to "Excel2007" and "Excel5" might occur.

Do a search on 'Excel' and not over-look any possibility.

e.g. $objReader = new PHPExcel_Reader_Excel2007(); //was Excel5

Change to _Excel2007 did allow me to read a .xlsx file, but did not break a script that read a .xls file. So there might be backwards compatibility.

Upvotes: 0

JCastell
JCastell

Reputation: 1145

XLS and XLSX are two different files types.

XLS

$this->load->library('Excel5');

XLSX

$this->load->library('Excel2007');

Consult the documentation "PHPExcel User Documentation - Reading Spreadsheet Files.doc" that comes with PHPExcel. Page 1 explains the formats, and Page 4 explains different ways of telling PHPExcel what file type to handle.

Upvotes: 1

Related Questions