PHPExcel内存错误
PHPExcel memory error
我使用 PHPExcel Reader 函数将 excel 文件转换为 HTML table。
我收到此错误:致命错误:内存不足(已分配 1827405824)(已尝试分配 106 字节)
我在 php.ini 文件中将 memory_limit 更改为 2048M..
仍然收到错误..
那么我怎样才能只加载我的 Excel 文件的第一个 sheet,它也许可以解决我的问题?
$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);
输出很好,效果很好!
但是我怎样才能确保只加载第一个 sheet?
它似乎没有更快的加载.. *请注意我的英语..
So How can i only load the first sheet of my Excel file, it can maybe solve my issue ?
$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 来获取工作表名称列表而无需加载整个文件。
我使用 PHPExcel Reader 函数将 excel 文件转换为 HTML table。
我收到此错误:致命错误:内存不足(已分配 1827405824)(已尝试分配 106 字节)
我在 php.ini 文件中将 memory_limit 更改为 2048M..
仍然收到错误..
那么我怎样才能只加载我的 Excel 文件的第一个 sheet,它也许可以解决我的问题?
$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);
输出很好,效果很好!
但是我怎样才能确保只加载第一个 sheet?
它似乎没有更快的加载.. *请注意我的英语..
So How can i only load the first sheet of my Excel file, it can maybe solve my issue ?
$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 来获取工作表名称列表而无需加载整个文件。