我正在使用
PHPExcel库来生成基于mysql数据库的excel数据. MySql查询结果为1,34,000行. Excel在一个工作表上支持65,536行.所以制作逻辑就像
foreach($result as $value) { $val = array_values($value); if($rowscounter < 65000) { $objPHPExcel->addRow($val,$rowscounter); } else { $active_sheet++; $objPHPExcel->createSheet(); $objPHPExcel->setActiveSheetIndex($active_sheet); $rowscounter = 1; } $rowscounter++; } // deliver header header("Content-Type: $mtype; charset=" . $objPHPExcel->sEncoding); header("Content-Type:application/octet-stream"); header("Content-Disposition: inline; filename=\"" . $filename . ".$ext\""); // Save it as an excel 2003 file $objWriter = IOFactory::createWriter($objPHPExcel,$objPHPExcel->sFileFormat); //echo "Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB";exit; $objWriter->save('php://output');
在为一个woeksheet达到65000条记录后创建新的工作表.
但它不起作用;没有给出任何输出或错误.最初我认为它是因为内存限制.但是当它回显时它显示峰值内存为1400.5 MB并且我使用ini_set(‘memory_limit’,’3500M’)将内存限制设置为3500MB;
你能建议一些或其他选择吗?
最佳答案 您可能超过65,000限制,您将$rowscounter初始值设置为什么? 1还是0(零)?我之所以要求数组结果从索引0(零)开始,你要添加行然后在添加后递增计数器.因此,如果您在0(零)处启动计数器,那么您可能拥有更多的行数.此外,您在else语句中缺少一行,您循环一个值但不将其添加到工作表中
试试这个
$rowscounter = 1;
foreach($result as $value)
{
$val = array_values($value);
if($rowscounter < 65000)
{
$objPHPExcel->addRow($val,$rowscounter);
}
else
{
$active_sheet++;
$objPHPExcel->createSheet();
$objPHPExcel->setActiveSheetIndex($active_sheet);
$rowscounter = 1;
// add missing row
$objPHPExcel->addRow($val,$rowscounter);
}
$rowscounter++;
}
// deliver header
header("Content-Type: $mtype; charset=" . $objPHPExcel->sEncoding);
header("Content-Type:application/octet-stream");
header("Content-Disposition: inline; filename=\"" . $filename . ".$ext\"");
// Save it as an excel 2003 file
$objWriter = IOFactory::createWriter($objPHPExcel,$objPHPExcel->sFileFormat);
//echo "Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB";exit;
$objWriter->save('php://output');
我正在尝试解释的一个简单示例,如果$i设置为0(零),则不满足else条件.所以你的结果会有一个额外的行.如果$i设置为1,则满足else条件
$count = array(1,2,3,4,5,6,7,8,9,10);
$i=1; // set this to 0 (zero) and test, set to 1 and test
foreach($count as $cnt) {
if($i < 10) {
echo "If condition - Count value: ".$cnt." i value:".$i."<br />";
} else {
echo "Else condition - Count value: ".$cnt." i value:".$i."<br />";
}
$i++;
}