2012-03-15 2 views
1

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

+1

[А] (http://shadow.cat/blog/matt-s-trout/but-i-cant -use-cpan /) [вы] (http://www.perlmonks.org/?node=693828) [обязательно] (http://twiki.org/cgi-bin/view/TWiki/HowToInstallCpanModules#Setting_up_a_private_CPAN_librar) [ вы] (http://twiki.org/cgi-bin/view/TWiki/HowToInstallCpanModules#Installing_CPAN_modules_manually) [не может] (http://linuxgazette.net/139/okopnik.html) [использовать] (http://www.thegeekstuff.com/2008/09/how-to-install-perl-modules-manually-and-using-cpan-command/) [CPAN] (http://www.activestate.com/blog/2010/ 10/как установить-CPAN-модули-ActivePerl)? – mob

+0

полностью уверен ... не был назначен полномочный пользователь и запрос – isJustMe

+4

Вы можете использовать модули, не устанавливая их как root. –

ответ

5

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

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

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

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

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

* Me частично.

+0

Г-н Макнамара, я большой поклонник вашей работы, я возьму ваш совет и продолжайте установку модулей. – isJustMe

2

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

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

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

+0

спасибо за предложение, а не за ответ, который я искал. – isJustMe

+0

Извините, я думал, что видел, что экспорт в CSV был вариантом в предыдущих комментариях. Я вижу, теперь я ошибся. –

0

Экспортируйте таблицу в файл csv и проанализируйте его с или без Text::CSV.

+0

Спасибо за предложение, это на самом деле то, что я хочу сделать. Прочитайте файл и экспортируйте его как CSV через perl. Мне нужно это делать программно. – isJustMe

+0

Можете ли вы скачать [XLS2CSV] (http://download.cnet.com/XLS2CSV/3000-2079_4-10718456.html)? – mob

+0

Да, я могу, но зачем это использовать? Можно также нажать файл сохранить как csv на excel. – isJustMe

0

Я опишу ответ выше из @mob относительно текста :: 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

Спасибо, дело в том, что мне приходится разбирать файл XLS, а не CSV – isJustMe

Смежные вопросы