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;
Другие вопросы по тегам