如何找出使用PHPExcel从Excel文件中读取的行数和列数?

Edw*_*uay 42 php phpexcel

使用以下代码,我可以使用PHPExcel从Excel文件中读取单元格.

我目前手动定义要读取的行数和列数.

有没有一种方法PHPExcel可以告诉我有多少行和列我必须读取以从工作表中获取所有数据,例如,即使某些行和列留空?

$file_name = htmlentities($_POST['file_name']);
$sheet_name = htmlentities($_POST['sheet_name']);
$number_of_columns = htmlentities($_POST['number_of_columns']);
$number_of_rows = htmlentities($_POST['number_of_rows']);

$objReader = PHPExcel_IOFactory::createReaderForFile("data/" . $file_name);
$objReader->setLoadSheetsOnly(array($sheet_name));
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("data/" . $file_name);

echo '<table border="1">';
for ($row = 1; $row < $number_of_rows; $row++) {
    echo '<tr>';
    for ($column = 0; $column < $number_of_columns; $column++) {
        $value = $objPHPExcel->setActiveSheetIndex(0)->getCellByColumnAndRow($column, $row)->getValue();
        echo '<td>';
        echo $value . '&nbsp;';
        echo '</td>';
    }
    echo '</tr>';
}
echo '</table>';
Run Code Online (Sandbox Code Playgroud)

解:

谢谢,Mark,这是这些功能的完整解决方案:

$file_name = htmlentities($_POST['file_name']);
$sheet_name = htmlentities($_POST['sheet_name']);
$number_of_columns = htmlentities($_POST['number_of_columns']);
$number_of_rows = htmlentities($_POST['number_of_rows']);

$objReader = PHPExcel_IOFactory::createReaderForFile("data/" . $file_name);
$objReader->setLoadSheetsOnly(array($sheet_name));
$objReader->setReadDataOnly(true);

$objPHPExcel = $objReader->load("data/" . $file_name);

$highestColumm = $objPHPExcel->setActiveSheetIndex(0)->getHighestColumn();
$highestRow = $objPHPExcel->setActiveSheetIndex(0)->getHighestRow();

echo 'getHighestColumn() =  [' . $highestColumm . ']<br/>';
echo 'getHighestRow() =  [' . $highestRow . ']<br/>';

echo '<table border="1">';
foreach ($objPHPExcel->setActiveSheetIndex(0)->getRowIterator() as $row) {
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(false);
    echo '<tr>';
    foreach ($cellIterator as $cell) {
        if (!is_null($cell)) {
            $value = $cell->getCalculatedValue();
            echo '<td>';
            echo $value . '&nbsp;';
            echo '</td>';
        }
    }
    echo '</tr>';
}
echo '</table>';
Run Code Online (Sandbox Code Playgroud)

替代文字

Mar*_*ker 69

$objPHPExcel->setActiveSheetIndex(0)->getHighestColumn();
Run Code Online (Sandbox Code Playgroud)

$objPHPExcel->setActiveSheetIndex(0)->getHighestRow();
Run Code Online (Sandbox Code Playgroud)

要么

$objPHPExcel->setActiveSheetIndex(0)->calculateWorksheetDimension();
Run Code Online (Sandbox Code Playgroud)

它返回一个范围作为字符串,如A1:AC2048

虽然尾随空白行和列包含在这些行中.

编辑

或者您可以使用迭代器循环遍历现有的行和列,以获取工作表使用范围内的每个单元格.有关示例,请参阅生产分发中的/Tests/28iterator.php.可以将迭代器设置为忽略空格.

  • 这很容易就是因为在第一百万行(打印设置,样式,命名范围等)中有一些东西,不一定是数据......这就是为什么PHPExcel还提供了一个基于实际单元格记录的getHighestDataRow()方法.而且仅仅因为一个单元格不包含可见数据,并不意味着它不会退出 (5认同)
  • 你知道如何摆脱尾随的空行和列吗? (4认同)

All*_*ell 9

从1.7.6及以下PHPExcel版本中,可以在不读取整个文件的情况下获取工作表信息:

$objReader     = PHPExcel_IOFactory::createReader("Excel2007"); 
$worksheetData = $objReader->listWorksheetInfo($uploadedfile);
$totalRows     = $worksheetData[0]['totalRows'];
$totalColumns  = $worksheetData[0]['totalColumns'];
Run Code Online (Sandbox Code Playgroud)