Excel formula 使用phpExcel读取某些单元格
我试图使用过滤器读取一些工作表,但问题是当这些单元格使用单元格时,我无法获取单元格值Excel formula 使用phpExcel读取某些单元格,excel-formula,phpexcel,Excel Formula,Phpexcel,我试图使用过滤器读取一些工作表,但问题是当这些单元格使用单元格时,我无法获取单元格值 $objReader = PHPExcel_IOFactory::createReader('Excel5'); $objReader->setLoadSheetsOnly('Data Sheet #1'); $myFilter = new CellReadFilter(1, 7, range('A', 'F')); $objReader->setReadDataOnly(true
$objReader = PHPExcel_IOFactory::createReader('Excel5');
$objReader->setLoadSheetsOnly('Data Sheet #1');
$myFilter = new CellReadFilter(1, 7, range('A', 'F'));
$objReader->setReadDataOnly(true);
$objReader->setReadFilter($myFilter);
$objPHPExcel = $objReader->load('sampleData/example1.xls');
$loadedSheetNames = $objPHPExcel->getSheetNames();
foreach ($loadedSheetNames as $sheetIndex => $loadedSheetName) {
echo $sheetIndex, ' => ', $loadedSheetName, '<br />';
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
var_dump($sheetData);
}
我的cell filter类如文档示例中所示:
class CellReadFilter implements PHPExcel_Reader_IReadFilter {
private $_startRow = 0;
private $_endRow = 0;
private $_column = array();
public function __construct($startRow, $endRow, $column) {
$this->_startRow = $startRow;
$this->_endRow = $endRow;
$this->_column = array_merge($column, array('AA'));
}
public function readCell($column, $row, $worksheetName = '') {
if ($row >= $this->_startRow && $row <= $this->_endRow) {
if (in_array($column, $this->_column)) { return true; }
}
return false;
}
}
类CellReadFilter实现PHPExcel\u Reader\u IReadFilter{
私有$_startRow=0;
私有$_endRow=0;
私有$_列=数组();
公共函数构造($startRow、$endRow、$column){
$this->_startRow=$startRow;
$this->_endRow=$endRow;
$this->_column=array_merge($column,array('AA'));
}
公共函数readCell($column,$row,$worksheetName=''){
如果($row>=$this->\u startRow&&$row\u endRow){
if(在_数组($column,$this->_column)中){return true;}
}
返回false;
}
}
验证对于读取筛选器,修改readCell以测试应用的标准,并确定哪些单元格符合标准以及接受/拒绝的原因:
public function readCell($column, $row, $worksheetName = '') {
echo 'Testing worksheet ', $worksheetName, 'row ', $row, ' column ', $column, PHP_EOL;
if ($row >= $this->_startRow && $row <= $this->_endRow) {
'Cell is within row range',PHP_EOL;
if (in_array($column, $this->_column)) {
'VALID: Cell is within column range',PHP_EOL;
return true;
}
'INVALID: Cell is outside column range',PHP_EOL;
} else {
'INVALID: Cell is outside row range',PHP_EOL;
}
return false;
}
公共函数readCell($column、$row、$worksheetName=''){
echo“测试工作表”、$worksheetName、“行”、$row、“列”、$column、PHP_EOL;
如果($row>=$this->\u startRow&&$row\u endRow){
“单元格在行范围内”,PHP_EOL;
如果(在_数组($column,$this->_column)中){
“有效:单元格在列范围内”,PHP_EOL;
返回true;
}
“无效:单元格超出列范围”,PHP_EOL;
}否则{
“无效:单元格超出行范围”,PHP_EOL;
}
返回false;
}
如果没有读取过滤器,它能正常工作吗?@MarkBaker你说得对。如果我不使用过滤器,则输出为预期输出(公式结果值且不为null)。请尝试通过在readCell方法中放置一些回音来验证读取过滤器,以在测试时显示每个单元格引用,以及测试和结果在CellReadFilter类的readCell()方法中放置一些回音语句。。。您确实可以访问它,因为它不是PHPExcel的标准部分,您已经在这里发布了代码。当您不使用readfilter时,PHPExcel正在工作,因此问题在于readfilter筛选器根本不访问单元格,仅访问每个单元格的工作表、行和列引用。。。。并根据是否应过滤该单元格返回true或false
public function readCell($column, $row, $worksheetName = '') {
echo 'Testing worksheet ', $worksheetName, 'row ', $row, ' column ', $column, PHP_EOL;
if ($row >= $this->_startRow && $row <= $this->_endRow) {
'Cell is within row range',PHP_EOL;
if (in_array($column, $this->_column)) {
'VALID: Cell is within column range',PHP_EOL;
return true;
}
'INVALID: Cell is outside column range',PHP_EOL;
} else {
'INVALID: Cell is outside row range',PHP_EOL;
}
return false;
}