【发布时间】:2013-04-06 14:00:18
【问题描述】:
我正在尝试读取大约 20mb 的大 excel 文件以导入 mysql。
我已经在互联网上搜索并找到了“块阅读”解决方案,但是它不起作用......或者对我来说太慢了,我不知道为什么。
这就是我正在做的事情:
// .....
// into MyReadFilter class.. this is the most important function:
public function readCell($column, $row, $worksheetName = '') {
// Only read the rows and columns that were configured
if (($row == 1) || ($row >= $this->_startRow && $row < $this->_endRow)) {
if (in_array($column,$this->_columns)) {
return true;
}
}
return false;
}
// .....
$filter = new MyReadFilter(1, 22000);
$chunkSize = 10;
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setReadFilter($filter);
$objReader->setReadDataOnly(false); //not sure if this should be true
for ($startRow = 2; $startRow <= 65536; $startRow += $chunkSize) {
echo "Reading";
$filterSubset->setRows($startRow, $chunkSize);
$objPHPExcel = $objReader->load($inputFileName); // this line takes like 40 seconds... for 10 rows?
echo "chunk done! ";
}
但是,在 for 内部,$objReader->load() 大约需要 40 秒,事实上,在 2 次循环之后,我遇到了内存错误。
如果我在 for 中取消设置 $objReader,我可以让它在 for 中运行大约 20 次...(虽然需要大约 10 分钟)并且...内存错误。
我想知道如果我使用过滤器,为什么加载函数似乎读取了所有文件,过滤器策略似乎解析所有行并为所有不需要的行返回 false...不可能中止阅读还是真的只阅读所需的内容?
我尝试了几个 FilterClass 和代码 sn-ps 但得到了相同的结果...
【问题讨论】:
标签: phpexcel