Как прочитать файл Excel с Perl? - PullRequest
1 голос
/ 15 марта 2012

Spreadsheet :: ParseExcel отлично работает, однако мне нужен метод для чтения файла без него, скажем, с помощью Perl "из коробки", так как я не могу установить любой PM или модуль CPAN. У кого-нибудь есть предложение, чтобы начать меня?

Ответы [ 4 ]

5 голосов
/ 15 марта 2012

Что является относительно простой задачей с использованием модулей CPAN, на самом деле очень сложно без них.

Для начала двоичные данные Excel (BIFF) хранятся в другом двоичном формате файла, который называется составным документом OLE. Это похоже на файловую систему в файле, и данные BIFF могут не сохраняться последовательно. Так что для начала вам нужно написать парсер, чтобы получить данные.

После извлечения необработанных данных BIFF вам необходимо проанализировать их, чтобы найти данные ячейки. Это немного проще, но все еще содержит трудности, такие как строки, хранящиеся в хэш-таблице вдали от данных ячейки. И даты, которые неотличимы от простых чисел. И данные в объединенных ячейках. И все еще в двоичном формате, и битовые маски контролируют значение структур данных.

К счастью, все эти головные боли были перенесены кем-то другим * и заключены в модуль , поэтому никто другой не должен их терпеть.

Итак, даже если ваши администраторы не будут устанавливать модули для вас, есть множество способов установить модули или даже установить perl локально, чтобы вам не пришлось беспокоиться их. В конце концов, это, вероятно, будет более простым решением.

* Я частично.

2 голосов
/ 15 марта 2012

OpenDocument является стандартом ISO , поэтому вы можете прочитать спецификацию и написать свой собственный синтаксический анализатор для нее.

Модули CPAN существуют, потому что есть вещи, которые многовещи (некоторые простые, некоторые сложные), которые люди хотят делать, которые не являются частью основного языка.Разбор электронных таблиц Excel - один из них (один из самых сложных).

Вам следует устранить любой барьер, мешающий вам установить модуль, чтобы помочь вам.Это может быть управленческий (в этом случае вам нужно лоббировать, чтобы изменить политику), это может быть техническим (в этом случае вам просто нужно узнать о local::lib.

0 голосов
/ 17 марта 2012

Я буду основываться на ответе от @mob выше относительно Text :: CSV. Некоторое время назад я нашел Text: CSV :: Slurp на CPAN и был мгновенно преобразован. Он берет CSV-файл со строками заголовка и возвращает arrayref из hashrefs, где ключами являются имена из строк заголовка. Очевидно, что это не будет работать во всех случаях, но если это так, ваш код прост:

my $slurp = Text::CSV::Slurp->new;
my $data = $slurp->load(file => $filename);
for my $record (@$data) {
    ...
}
0 голосов
/ 15 марта 2012

Экспорт электронной таблицы в CSV-файл и анализ ее с или без Text::CSV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...