【问题标题】:PHPExcel memory errorPHPExcel内存错误
【发布时间】:2017-06-06 09:28:40
【问题描述】:

我使用 PHPExcel Reader 功能将 excel 文件转换为 HTML 表格。

我收到此错误:致命错误:内存不足(已分配 1827405824)(尝试分配 106 个字节)

我已在 php.ini 文件中将 memory_limit 更改为 2048M..

还是报错..

那么我怎样才能只加载我的 Excel 文件的第一页,它也许可以解决我的问题?

$excel = glob(''.$test.'\\'.$client.'.{xlsx,xls,xlsm,xlsm.ink}',GLOB_BRACE);
$filterSubset = new \PHPExcel_Reader_DefaultReadFilter('A','N');
$objReader = \PHPExcel_IOFactory::createReaderForFile($excel[0]);
$objReader->setReadFilter($filterSubset);

$objPHPExcel = $objReader->load($excel[0]);

## THIS DOESNT WORK ?! ##
$objPHPExcel->setActiveSheetIndex(1);

    $links = $objPHPExcel->getActiveSheet()->getHyperlinkCollection();
    var_dump($links);

    foreach ($links as $link){
        $url = $link->getUrl();
        $url = str_replace('file','mnt', $url);
        $link->setUrl($url);
    }

$writer = \PHPExcel_IOFactory::createWriter($objPHPExcel, "HTML");
$writer->generateStyles();
$writer->generateSheetData();

编辑:

我就是这样做的:

    public function showClientAction($client)
{
    $excel = glob(''.$path'.{xlsx,xls,xlsm,xlsm.ink}', GLOB_BRACE);
    $filterSubset = new \PHPExcel_Reader_DefaultReadFilter('A','N');
    $objReader = \PHPExcel_IOFactory::createReaderForFile($excel[0]);
    $objReader->setReadFilter($filterSubset);

    $worksheetList = $objReader->listWorksheetNames($excel[0]);
    $sheetname = $worksheetList[0];

    /**  Advise the Reader of which WorkSheets we want to load  **/

    $objReader->setLoadSheetsOnly($sheetname);

    $objPHPExcel = $objReader->load($excel[0]);

    var_dump($sheetname);

    $writer = \PHPExcel_IOFactory::createWriter($objPHPExcel, "HTML");
    $writer->generateStyles();
    $writer->generateSheetData();

    return $this->render('MonextPerfclientBundle:Default:testexcel.html.twig', array(
        'excelHtml'=>$writer,
        'stylesExcel'=>$writer,
    ));
}

var_dump($sheetname); 输出很好,效果很好!

但是我怎么能确定只加载第一张纸呢?

加载速度似乎并不快.. *scuze my English..

【问题讨论】:

    标签: memory phpexcel


    【解决方案1】:

    那么我怎样才能只加载我的 Excel 文件的第一页,它也许可以解决我的问题?

    直接来自PHPExcel Documentation

    $inputFileType = 'Excel5'; 
    $inputFileName = './sampleData/example1.xls'; 
    $sheetname = 'Data Sheet #2'; 
    
    /**  Create a new Reader of the type defined in $inputFileType  **/ 
    $objReader = PHPExcel_IOFactory::createReader($inputFileType); 
    /**  Advise the Reader of which WorkSheets we want to load  **/ 
    $objReader->setLoadSheetsOnly($sheetname); 
    /**  Load $inputFileName to a PHPExcel Object  **/ 
    $objPHPExcel = $objReader->load($inputFileName); 
    

    如果您不知道第一个工作表的名称,那么 PHPExcel 提供了一个helper method 来获取工作表名称的列表,而无需加载整个文件。

    【讨论】:

    • 是否可以加载和显示我的 Excel 文件中的过滤器,并使用下拉按钮将其转换为 HTML 表格?
    猜你喜欢
    • 1970-01-01
    • 2017-06-19
    • 2015-09-18
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    相关资源
    最近更新 更多