【问题标题】:Read .xlsx and .xls data in codeigniter在 codeigniter 中读取 .xlsx 和 .xls 数据
【发布时间】:2015-08-31 06:49:42
【问题描述】:

我想在 codeigniter 中读取 .xlsx 或 .xls 文件的数据。我已经阅读了与之相关的其他问题,但没有任何效果。我使用了 phpexcel,阅读器,但没有运气。在我的项目中,我提供了上传 excel 文件的选项,然后我想读取数据并将其插入数据库中。

现在我正在使用我写过的 phpExcel 库:

    $this->load->library('excel');
    $reader= PHPExcel_IOFactory::createReader('Excel2007');
    $reader->setReadDataOnly(true);
    $path=(FCPATH.'uploads/productfile/'.$_FILES['upload_file']['name']);
    $excel=$reader->load($path);
    $sheet=$excel->setActiveSheetIndex(0);
    for($i=0;$i<=1000;$i++)
    {
      $col1= $sheet->getCellByColumnAndRow(0,$i)->getValue();
      $col2= $sheet->getCellByColumnAndRow(1,$i)->getValue();
      $col3= $sheet->getCellByColumnAndRow(2,$i)->getValue();
      var_dump($col1);
    }

但它显示:

未捕获的异常 'PHPExcel_Exception' 带有消息'你试图设置 由越界索引激活的工作表:0。实际数量 床单是 0 请给我一些示例代码。

错误 请给我一些示例代码:

【问题讨论】:

  • 到目前为止你做了什么?发布您的代码和结果,您将有更大的机会获得问题的良好答案。
  • 我做了很多我用过 phpexcel 的事情,但是我无法上传 xlsx 文件并且出现了很多错误。然后我使用了 phpreaded 但同样没有完成。所以都删除了。现在我想按照给定的想法从头开始。
  • 您添加的错误是因为您提供的路径无效。您尝试打开的文件不在根文件夹的该路径中。将我在回答中建议的路径调整为您拥有的真实路径
  • 这个库已经灭绝了。新版本名为 PHPSpreadsheet:github.com/PHPOffice/PhpSpreadsheet

标签: php codeigniter import-from-excel


【解决方案1】:

试试这个:

 $sheet = $excel->getActiveSheet()->toArray(null,true,true,true);

这将为您返回当前活动工作表的数组。希望这会有所帮助。

【讨论】:

  • 我应该在哪里添加这一行?
  • 替换 $sheet=$excel->setActiveSheetIndex(0); $sheet = $excel->getActiveSheet()->toArray(null,true,true,true);你还需要编辑你的 FOR 循环,因为这将返回一个数组而不是一个对象
【解决方案2】:

这个错误是由我猜想的 PHPexcel 阅读器功能的错误初始化引起的。 我通常会做这样的事情来从 excel 中获取数据:

require_once '../Classes/PHPExcel/IOFactory.php';
$filename = '../uploads/product/abc.xls';
$objPHPExcel = PHPExcel_IOFactory::load($filename);

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
    $worksheetTitle     = $worksheet->getTitle();
    $highestRow         = $worksheet->getHighestRow(); // e.g. 10
    $highestColumn      = $worksheet->getHighestColumn(); // e.g 'F'
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    $nrColumns = ord($highestColumn) - 64;
    $total_rows = $highestRow-1;

    for ($row = 2; $row <= $highestRow; ++ $row) {
    //id
        $cell = $worksheet->getCellByColumnAndRow(0,$row);
        $id = $cell->getValue();
        if(is_null($id)){$id = '#';}
    }

【讨论】:

  • 您好,我已经尝试过您的代码,但我收到了类似未捕获异常 'PHPExcel_Reader_Exception' 之类的错误,并显示消息“无法打开 abc.xls 进行阅读!文件不存在
  • 您遇到什么错误?无论如何请注意,您必须使我的示例适应您的环境!
  • 我收到错误消息:---“未捕获的异常 'PHPExcel_Reader_Exception' 带有消息'无法打开 abc.xls 进行阅读!”---
  • 那么您的文件有问题。文件在哪里? apache 用户是否有权读取该文件夹?文件是否来自表单?请说得更具体一些
  • 是的,我已将文件上传到 uploads/product 文件夹中。我提供了上传文件的选项,所有文件都保存在 uploads/product 目录中
【解决方案3】:

感谢大家的建议: 我找到了解决方案:

$file_data = $this->upload->data();
$file_path =  './uploads/productfile/'.$file_data['file_name'];
include 'Classes/PHPExcel/IOFactory.php';
$inputFileName = $file_path; 
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
$allDataInSheet = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
$arrayCount = count($allDataInSheet);  // Here get total count of row in that Excel sheet
for($i=2;$i<=$arrayCount;$i++)
{                   
    'product'=$allDataInSheet[$i]["C"],
    'brand'=$allDataInSheet[$i]["I"],
    'standard'=$allDataInSheet[$i]["J"],
}

【讨论】:

  • 请接受您从哪里得到这个想法的答案。看起来你从@KSP 的回答中得到了最多,所以你应该相信他。
【解决方案4】:

PHPExcel_IOFactory 的此扩展存在 ™ 商标、版权、学位等符号的问题。

如果特定块包含此类特殊字符,您将无法读取它。

【讨论】:

  • 请解释这如何触发错误You tried to set a sheet active by the out of bounds index: 0.
  • 不可以,只是把商标符号或版权符号放在CSV格式文件中,并尝试用PHPExcel_IOFactory读取它不会读取符号
  • 很高兴知道,但它没有回答我之前的评论。
【解决方案5】:

这段代码对我有用,

        $this->load->library('excel');
        $reader= PHPExcel_IOFactory::createReader('Excel2007');
        $reader->setReadDataOnly(true);
        $path= "./media/customer_exports/data-1558003506.xlsx";
        $excel=$reader->load($path);

        $sheet = $excel->getActiveSheet()->toArray(null,true,true,true);
        $arrayCount = count($sheet); 
        for($i=2;$i<=$arrayCount;$i++)
        {                   
            echo $sheet[$i]["A"].$sheet[$i]["B"].$sheet[$i]["C"];
        }

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 1970-01-01
    • 2020-02-06
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多