Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсим xls, Какой модуль использовать 
:(
    Опции темы
WERT
Дата 26.6.2007, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.6.2007

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
dimes
Дата 26.6.2007, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: нет
Всего: 14



Насчет проще не уверен
но я использовал Spreadsheet::ParseExcel
Поищи на search.cpan.org там много разных парсеров, по примерам кодов сам решишь какой самый простой  smile

PM ICQ   Вверх
nitr
Дата 26.6.2007, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



dimes, минус этого модуля - медленно.
WERT, но это самый оптимальный из многих. Можно (если Win OS) потестировать с OLE...


--------------------
PM   Вверх
dimes
Дата 26.6.2007, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 249
Регистрация: 20.7.2004
Где: то около СПБ

Репутация: нет
Всего: 14



Цитата(nitr @  26.6.2007,  10:33 Найти цитируемый пост)
dimes, минус этого модуля - медленно.

Ну, спорить не буду, на скорость я его не тестил.
PM ICQ   Вверх
WERT
Дата 26.6.2007, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.6.2007

Репутация: нет
Всего: нет




ОК, спасиб, попробую с этим поковыряться smile 
PM MAIL   Вверх
nitr
Дата 26.6.2007, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



WERT, ковыртся не надо. В комплекте с модулем есть примеры - ОЧЕНЬ много smile Думаю ковырятся много не придётся. Если что - то не спешите создавать новую тему - НА ФОРУМЕ есть поиск ;)


--------------------
PM   Вверх
TTT
Дата 26.6.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 13.3.2007

Репутация: нет
Всего: 1



Поделюсь сабом.
С использованием OLE:
Код

use Win32::OLE;
use Win32::OLE::Variant;
use Win32::OLE::Const 'Microsoft Excel';

sub ParseExcel{
    my $ex_file = shift;
    my $self_excel = {}; my @sheets = ();
    my ($book, $LastRow, $LastCol, $last_cell);
    $book = Win32::OLE->GetObject($ex_file);
    for (my $i=1; $i <= $book->Sheets->{Count}; $i++ ) {
        my $self = {};
        my $sheet = $book->Worksheets($i);
        
        $LastRow = $sheet->UsedRange->Find({What=>"*",
            SearchDirection=>xlPrevious,
            SearchOrder=>xlByRows})->{Row};
        $LastCol = $sheet->UsedRange->Find({What=>"*",
            SearchDirection=>xlPrevious,
            SearchOrder=>xlByColumns})->{Column};
        $last_cell = $sheet->Range("A1")->EntireColumn->SpecialCells(11)->{Address};
        my ($MaxCol, $MaxRow) = $last_cell =~ /\$(\w+)\$(\d+)/;
        $sheet->Columns("A:$MaxCol")->{NumberFormat} = "VT_EMPTY";
        my $array = $sheet->Range("A1:$last_cell")->{Value};
        
        $self->{Name} = $sheet->{Name};
        $self->{MaxRow} = $LastRow;
        $self->{MaxCol} = $LastCol;
        $self->{Cells} = $array;
        
        push @sheets, $self;
    }
    $self_excel->{Worksheet} = \@sheets;
    return $self_excel;
}

Пример вызова
my $excel = ParseExcel("$open_dir.$file_name");

строка 22
($sheet->Columns("A:$MaxCol")->{NumberFormat} = "VT_EMPTY";)
нужна для правильного чтения ячейки в формате даты (подбирал параметр методом тыка).

Поначалу использовал модуль Spreadsheet::ParseExcel, но некоторые файлы он отказывался обрабатывать.
Если на виндозной машине все работать будет, лучше через OLE однозначно.

Надеюсь поможет  smile 

Это сообщение отредактировал(а) TTT - 26.6.2007, 12:50
PM MAIL   Вверх
WERT
Дата 27.6.2007, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.6.2007

Репутация: нет
Всего: нет



Ок, спасибо. Можно считать вопрос исчерпанным. smile 
PM MAIL   Вверх
Nandy
Дата 18.10.2007, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.5.2007

Репутация: нет
Всего: нет



А вот у меня возник такой вопрос: почему значения массива ячеек заносятся в скалярную переменную?

$array = $sheet->Range("A1:$last_cell")->{Value};

Как же теперь обращаться к отдельным значениям ячеек?
Разве нельзя значения массива ячеек занести в массив, типа 

@array = $sheet->Range("A1:$last_cell")->{Value};

чтобы потом по отдельности обращаться?
Подскажите, пожалуйста.

PM MAIL   Вверх
nitr
Дата 18.10.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 2
Всего: 84



Nandy, вы в курсе - "что есть и будет ссылки" smile ?

$array->[0] - первое знач. в массиве smile и т.п.


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0900 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.