Потом полез ручками и оказалось, что оптимальное решение проблемы - это в файле Classes/PHPExcel/Reader/Excel5.php выставить нужную кодировку:
$this->_codepage = 'CP1251';
Вот и все.
$this->_codepage = 'CP1251';
require_once 'path/to/PHPExcel/IOFactory.php';
class chunkReadFilter implements PHPExcel_Reader_IReadFilter
{
private $_startRow = 0;
private $_endRow = 0;
public function setRows($startRow, $chunkSize) {
$this->_startRow = $startRow;
$this->_endRow = $startRow + $chunkSize;
}
public function readCell($column, $row, $worksheetName = '') {
// Only read the heading row, and the rows that are configured in $this->_startRow and $this->_endRow
if (($row == 1) || ($row >= $this->_startRow && $row < $this->_endRow)) {
return true;
}
return false;
}
}
session_start();
if ($_SESSION['startRow']) $startRow = $_SESSION['startRow'];
else $startRow = 13;
$fileName = "file.xls";
$inputFileType = 'Excel5';
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$chunkSize = 20;
$chunkFilter = new chunkReadFilter();
while ($startRow <= 65000) {
$chunkFilter->setRows($startRow,$chunkSize);
$objReader->setReadFilter($chunkFilter);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($fileName);
//Что-то с этими строками делаем
$startRow += $chunkSize;
$_SESSION['startRow'] = $startRow;
unset($objReader);
unset($objPHPExcel);
}
echo "The End";
unset($_SESSION['startRow']);
<html>
<head>
<title>Импорт прайс-листа</title>
<script src="/media/js/jquery.js" type="text/javascript"></script>
<script src="/media/js/import-xls.js" type="text/javascript"></script>
</head>
<body>
<h1>Импорт прайс-листа</h1>
Подождите завершения импорта, не закрывайте данную страницу!
<div id="progress-bar">
</div>
<div id="content">
</div>
</body>
</html>
function repeat_import() {
$.get("import_xls.php", function(data){
$("#progress-bar").append("I");
if (data == "The End") {
$("#content").html("<h2>Импорт завершен!</h2>");
}
else {
$("#content").html(data);
repeat_import();
}
});
}
$(function (){
/*$(document).ajaxError(function (e, jqxhr, settings, exception) {
error_message = jqxhr.status;
alert(error_message);
});*/
repeat_import();
});
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;Можно еще поиграться с методами кеширования. Поддерживается
$cacheSettings = array( 'memoryCacheSize ' => '256MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache; $cacheSettings = array( 'memcacheServer' => 'localhost', 'memcachePort' => 11211, 'cacheTime' => 600 );