PHPExcelを使い始めたばかりです。私の非常に大きなスプレッドシートは、メモリ全体にロードできません(メモリ障害)。ワークシートの必要な部分だけをロードするために、ドキュメントで提供されているMyReadFilterコードを使用しようとしていますが、コードは少し上にあり、誰かがそれを理解するのを手伝ってくれることを願っています。
PHPExcelのドキュメントから、関数は次のようになります。
class ReadFilter implements PHPExcel_Reader_IReadFilter
{
private $_startRow = 0;
private $_endRow = 0;
private $_columns = array();
/** Get the list of rows and columns to read */
public function __construct($startRow, $endRow, $columns) {
$this->_startRow = $startRow;
$this->_endRow = $endRow;
$this->_columns = $columns;
}
public function readCell($column, $row, $worksheetName = '') {
// Only read the rows and columns that were configured
if ($row >= $this->_startRow && $row <= $this->_endRow) {
if (in_array($column,$this->_columns)) {
return true;
}
}
return false;
}
}
次の行を使用してPHPExcelを呼び出しています
// Get the selected Excel file, passed from form
$testFile = $_FILES['upload_test']['tmp_name'];
// Identify the file type of the selected file
$inputFileType = PHPExcel_IOFactory::identify($testFile);
// Create a reader object of the correct file type
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
// Instantiate the filter class and apply it to the reader object
$filterSubset = new ReadFilter(1,1000,range('A','Z'));
$objReader->setReadFilter($filterSubset);
// Load the selected file into the reader
$objWorkbook = $objReader->load($testFile);
次の構文を使用して、結果のワークシートオブジェクトからデータを取得しています。
$someValue= $objWorkbook->getSheet($idx)->getCell('B11')->getCalculatedValue();
他にも質問があると思いますが、最初の質問は関数の呼び出しに関するものです。上記の行を次のように変更した場合:
$filterSubset = new ReadFilter(1,1000,range('A','Z'));
に:
$filterSubset = new ReadFilter(1,1000,range('A','AA')); //Last column changed
読み取り全体が失敗します。実際には、列Bから計算された値のみが必要ですが、その列には列ASまでの参照があるため、それらも読み取る必要があります。この関数を使用して過去の列Zを読み取る方法、または列を変更する方法を教えてもらえますか?理想的には、BからASに広がる約12列の内容を読むだけですが、それもわかりません。
助けてくれてありがとう。