Perl - электронная таблица CPAN::ParseExcel и gnumeric
У меня проблемы с получением ParseExcel для разбора электронной таблицы.xls, сгенерированной gnumeric, и я думаю, что проблема в gnumeric. Метод row_range() в PsrseExcel возвращает (0, 500), когда используется только 285 строк.
Я попытался выделить ячейки A1 - I285 и выбрать " Файл"> "Область печати"> "Установить область печати" перед сохранением и обработкой файла.xls с помощью сценария Perl, но безрезультатно.
Файл фактически содержит две таблицы. Один правильно вычисляет количество строк, а другой нет. Я создал оба листа, но не знаю, что я мог бы сделать по-другому.
2 ответа
Метод row_range() ParseExcel возвращает (0, 500), когда используется только 285 строк.
Электронная таблица::ParseExcel читает row_range()
данные из двоичной записи в файле Excel, в которой хранятся максимальные и минимальные значения строк и столбцов. Он не выполняет итерацию по рабочему листу для вычисления этих значений.
Следовательно, если row_range()
сообщает (0, 500) как диапазон используемых строк, то это значения, которые хранятся в этой записи.
Источником различия могут быть строки, содержащие форматирование, но без данных. Excel различает пустую и пустую ячейки. Пустая ячейка - это ячейка, которая не содержит данных, а пустая ячейка - это ячейка, которая не содержит данных, но содержит форматирование. Excel хранит пустые ячейки, но игнорирует пустые ячейки.
Я попытался выделить ячейки A1 - I285 и выбрать "Файл"> "Область печати"> "Установить область печати" перед сохранением и обработкой файла.xls с помощью сценария Perl, но безрезультатно.
Область печати не влияет на диапазон, о котором сообщает row_range()
,
Если вы действительно хотите уменьшить файл до 285 данных, содержащих строки, выберите строки из 286-501, удалите их и сохраните файл.
В качестве альтернативы, настройте вашу программу так, чтобы она игнорировала строки, содержащие только ячейки с пустыми данными.
Я подозреваю, что это подсчет строк с непечатными символами, но я не могу сказать наверняка, если вы не отправите свой код.
Если это непечатаемые символы, попробуйте вставить этого плохого парня в любой цикл, вызывающий проблему:
next unless $cell;