2014-03-11 6 views
0

Итак, у меня есть форма, которая умеет читать файлы excel и сохранять в базу данных, загружая файл excel. Это нормально, когда я загружаю файл .xls, но не с .xlsx. Вот код:PHPExcel не читается .xlsx

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); 
        } 
       } 

Я использую PHPExcel_IOFactory::identify() для идентификации читателя следует использовать. Но я думаю, что это провалилось.

Я прочитал это question, то я заменить

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

с:

$objReader = PHPExcel_IOFactory::createReader('Excel2007');, но он по-прежнему не работает. Может, кто-нибудь мне поможет, пожалуйста?

+0

Вы получаете что-нибудь написанное в журналах ошибок? –

+0

нет, я не получил ошибок в браузере – Bari

+0

И журналы ошибок в веб-сервере? –

ответ

1

XLS и XLSX - это два разных типа файлов.

XLS

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

XLSX

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

Обратитесь к документации "PHPExcel Документация пользователя - Чтение электронных таблиц Files.doc", который поставляется с PHPExcel. Страница 1 объясняет форматы, и объясняет разные способы указания PHPExcel, какой тип файла обрабатывать.

0

Существует несколько строк, в которых может содержаться ссылка на «Excel2007» и «Excel5».

Проведите поиск по «Excel» и не просмотрите любую возможность.

например. $ objReader = new PHPExcel_Reader_Excel2007(); // был Excel5

Изменение на _Excel2007 позволило мне прочитать файл .xlsx, но не сломал скрипт, который читал .xls-файл. Таким образом, может быть обратная совместимость.

Смежные вопросы