【问题标题】:PHPExcel fails to read .xlsxPHPExcel 无法读取 .xlsx
【发布时间】:2018-05-17 21:03:51
【问题描述】:

所以,我有一个表单,它能够读取 excel 文件并通过上传 excel 文件保存到数据库。当我上传 .xls 文件时很好,但不是 .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');

但它仍然不起作用。有人可以帮帮我吗?

【问题讨论】:

  • 您是否将任何内容写入错误日志?
  • 不,我在浏览器中没有收到任何错误
  • 还有网络服务器错误日志?
  • 我在网络服务器错误日志中找不到关于 PHPExcel 的任何奇怪之处
  • 如果没有任何类型的诊断,几乎不可能提供帮助:剩下的唯一选择是,您是否可以将导致此问题的文件的副本(必要时经过清理)发送到 PHPExcel codeplex 站点测试

标签: phpexcel


【解决方案1】:

XLS 和 XLSX 是两种不同的文件类型。

XLS

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

XLSX

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

请查阅 PHPExcel 附带的文档“PHPExcel 用户文档 - 阅读电子表格文件.doc”。第 1 页解释了格式,第 4 页解释了告诉 PHPExcel 要处理什么文件类型的不同方法。

【讨论】:

    【解决方案2】:

    在多行中可能会出现对“Excel2007”和“Excel5”的引用。

    在“Excel”上进行搜索,不要忽略任何可能性。

    例如$objReader = new PHPExcel_Reader_Excel2007(); //是Excel5

    更改为 _Excel2007 确实允许我读取 .xlsx 文件,但没有破坏读取 .xls 文件的脚本。因此可能存在向后兼容性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2017-10-06
      • 2011-05-09
      • 1970-01-01
      相关资源
      最近更新 更多