Чтение пустых ячеек как ячеек данных

Я читаю файл Excel, где иногда PHPExcel codeplex считает пустую ячейку ячейкой значения. Например:

Если в моем Excel 128 столбцов, максимальное значение - DV. Иногда это будет зависеть от Excel и требований пользователей. Максимум 126 столбцов. Минимум 8 столбцов. А также максимальный ряд 250.

----------------------
A | B | ..... |DU |DV|
----------------------

Я использовал следующий код для загрузки Excel:

   set_include_path(get_include_path() . PATH_SEPARATOR . 'Classes/');
   include 'PHPExcel/IOFactory.php';    

   $inputFileName = $target_file; 
    try {
            $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
            $objReader = PHPExcel_IOFactory::createReader($inputFileType);
            $objPHPExcel = $objReader->load($inputFileName);
    } catch(Exception $e) {
        die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
    }

Теперь проблема в том, что PHPExcel показывает неправильный максимальный столбец и строки, максимальный столбец - 126 (DV), а максимальная строка - 245.

Но когда я использовал этот следующий код, я получаю неправильные значения:

 $lastColumn =  $objPHPExcel->setActiveSheetIndex(0)->getHighestColumn();
 $lastRow    =  $objPHPExcel->setActiveSheetIndex(0)->getHighestRow();

вместо 126 я получаю 1800+ (AMK) в качестве максимального столбца и максимальной строки, отображаемой как 65536.

Как исправить эту проблему?

Иногда это происходит даже при очистке и создании нового Excel.

Как установить максимальное количество столбцов и строк перед чтением (загрузкой) Excel или как избежать пустых ячеек?


person Jonathan John    schedule 05.11.2015    source источник


Ответы (1)


Строки и столбцы считаются getHighestColumn() и getHighestRow(), если они содержат что-либо (включая информацию о стиле или печати), а не просто содержат контент. Эти значения также вычисляются при загрузке электронной таблицы, поэтому могут быть неточными, если вы впоследствии добавляете новые строки или столбцы на рабочий лист.

Вместо этого используйте методы getHighestDataColumn() и getHighestDataRow() для возврата самой высокой строки и столбца, которые фактически содержат значения данных в ячейках. Хотя они менее эффективны, они фактически вычисляют самую высокую ссылку на ячейку при вызове, что медленнее, но всегда точно.

Также обратите внимание, что ячейка, которая может показаться вам пустой, может по-прежнему содержать пустую или пустую строку. Это все еще значение данных.

person Mark Baker    schedule 05.11.2015
comment
Большое спасибо @Mark, теперь я могу получить только данные MaximumRows, содержащие ячейку, но столбец по-прежнему показывает неправильную ошибку. Прямо сейчас я сделал максимальный столбец DW статическим. Пожалуйста, в любом случае получить максимальный столбец - person Jonathan John; 05.11.2015
comment
Как я уже сказал, Note also that a cell which may appear empty to you may still contain a null or an empty string. This is still a data value. Вам может потребоваться написать некоторую собственную логику для идентификации ячеек, содержащих видимые данные. - person Mark Baker; 05.11.2015