Php 如何将一份包含240000+;排?
现在我上传一个包含240000行的xlsx工作表时出错 问题是代码无法正确读取文件。这是我从php代码的结果中得到的Php 如何将一份包含240000+;排?,php,excel,Php,Excel,现在我上传一个包含240000行的xlsx工作表时出错 问题是代码无法正确读取文件。这是我从php代码的结果中得到的 Warning: simplexml_load_string(): Memory allocation failed : building attribute in C:\xampp\htdocs\excelamysql\Classes\PHPExcel\Reader\Excel2007.php on line 625 Warning: simplexml_load_strin
Warning: simplexml_load_string(): Memory allocation failed : building attribute
in C:\xampp\htdocs\excelamysql\Classes\PHPExcel\Reader\Excel2007.php on line 625
Warning: simplexml_load_string(): Memory allocation failed in C:\xampp\htdocs\ex
celamysql\Classes\PHPExcel\Reader\Excel2007.php on line 625
Warning: simplexml_load_string(): Entity: line 2: parser error : Memory allocati
on failed : xmlSAX2AttributeNs in C:\xampp\htdocs\excelamysql\Classes\PHPExcel\R
eader\Excel2007.php on line 625
Warning: simplexml_load_string(): >48161</v></c><c r="B27695" s="10" t="s"><v>49
</v></c><c r="C27695" s="11" t="s" in C:\xampp\htdocs\excelamysql\Classes\PHPExc
el\Reader\Excel2007.php on line 625
Warning: simplexml_load_string():
^ in C:\xampp\htdocs\excelamysql\Classes\PHPExc
el\Reader\Excel2007.php on line 625
Warning: simplexml_load_string(): Entity: line 2: parser error : Extra content a
t the end of the document in C:\xampp\htdocs\excelamysql\Classes\PHPExcel\Reader
\Excel2007.php on line 625
Warning: simplexml_load_string(): >48161</v></c><c r="B27695" s="10" t="s"><v>49
</v></c><c r="C27695" s="11" t="s" in C:\xampp\htdocs\excelamysql\Classes\PHPExc
el\Reader\Excel2007.php on line 625
Warning: simplexml_load_string():
^ in C:\xampp\htdocs\excelamysql\Classes\PHPExc
el\Reader\Excel2007.php on line 625
警告:simplexml\u load\u string():内存分配失败:生成属性
在第625行的C:\xampp\htdocs\excelamysql\Classes\PHPExcel\Reader\Excel2007.php中
警告:simplexml\u load\u string():C:\xampp\htdocs\ex中的内存分配失败
第625行的celamysql\Classes\PHPExcel\Reader\Excel2007.php
警告:simplexml_load_string():实体:第2行:解析器错误:内存分配
on失败:C:\xampp\htdocs\excelamysql\Classes\PHPExcel\R\n中的XMLSAX2属性
第625行的eader\Excel2007.php
警告:simplexml_load_string():>4816149
4816149
setLoadSheetsOnly($sheetname);
$objPHPExcel=$objReader->load('C:\xampp\htdocs\excelamysql\Maestra.xlsx');
$worksheet=$objPHPExcel->setActiveSheetIndex(0);
foreach($worksheet->getRowIterator()作为$row)
{
$cellIterator=$row->getCellIterator();
$cellIterator->setiterateonleyexistingcells(TRUE);
foreach($cellIterator作为$cell)
{
$val=$cell->getValue();
$dataType=phpexcell\u Cell\u dataType::dataTypeForValue($val);
}
}
对于($row=2;$row getCellByColumnRow(12,$row));
$val[]=$cell->getValue();
$sql=“将ignore插入Estado(Id_est,nom_est)值(“'auto.”,“$val[0]”);
$link=mysql(“pago_coberturas”,$sql);
$sql2=“ALTER TABLE Estado AUTO_INCREMENT=1”;
$link2=mysql(“pago_coberturas”,$sql2);
不要费心取消内存限制
,除非您希望整个工作表在其中结束两次:作为字符串和simplexml表示形式。PHPExcel非常适合于较小的工作表,但默认情况下,它在处理大数据集时很糟糕(主要关注的是它的速度慢,其次是它消耗了大量内存,正如您已经注意到的那样)
您有几个选择:
XLS
文件另存为CSV
,并使用内置功能-它的速度非常快,并且只消耗一行所能占用的内存xlsx
,那么,嘿,这只是一个zip存档。你可以用class解压它,然后用class读取工作表的数据CSV方式将是最稳健的方式正如Adam所说,PHPExcel不是为处理大型工作表而设计的。他们实施了不同的缓存策略以及一些选项来优化使用的内存量,但这严重影响了性能 如果你必须坚持使用XLSX,那就去看看吧。这是一个开源的库,可以读写XLSX文件,并针对规模进行了优化
读取240000多行大约需要1-2分钟,所需内存少于10MB!在PHP.ini中配置PHP以允许更多内存使用。可能的重复您是否尝试过使用SQLYG并将XLSX直接从本地文件导入表中?您是否尝试过启用PHPExcel的单元缓存以减少内存使用?您是否尝试过ied在“块”中加载文件?
$objReader->setLoadSheetsOnly($sheetname);
$objPHPExcel = $objReader->load('C:\xampp\htdocs\excelamysql\Maestra.xlsx');
$worksheet = $objPHPExcel->setActiveSheetIndex(0);
foreach($worksheet->getRowIterator() as $row)
{
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(TRUE);
foreach($cellIterator as $cell)
{
$val = $cell->getValue();
$dataType = PHPExcel_Cell_DataType::dataTypeForValue($val);
}
}
for ($row = 2; $row <= $highestRow; ++ $row)
{
$val=array();
$cell = $worksheet->getCellByColumnAndRow(12, $row);
$val[] = $cell->getValue();
$sql="insert ignore into Estado (Id_est,nom_est )values('".'auto'."','" . $val[0] . "')";
$link= mysql("pago_coberturas", $sql);
$sql2="ALTER TABLE Estado AUTO_INCREMENT = 1";
$link2= mysql("pago_coberturas",$sql2);