URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9750
[ Назад ]

Исходное сообщение
"спарсить сложный excel"

Отправлено greenwar , 03-Окт-13 00:52 
сила опеннета, взываю к тебе!!1
есть некий .xls-файл
если его смотреть через эксель (openoffice), то там есть уровни вложения (слева цифры 12345), и если их открыть, то чётко видны отступы - где категории, где перечень товаров, итд - они лесенкой идут
но при парсинге его (пробовал: xls2csv, xlhtml, Spreadsheet::ParseExcel) эти отступы не сохраняются. уровни вложения не сохраняются
может модуль какой есть для такого дела или какое другое решение проблемы?

upd: вот есть некий Spreadsheet::ParseExcel::Format
и там есть $format->{Indent}
только не пойму, как его задействовать..


Содержание

Сообщения в этом обсуждении
"спарсить сложный excel"
Отправлено ACCA , 04-Окт-13 20:44 
> upd: вот есть некий Spreadsheet::ParseExcel::Format
> и там есть $format->{Indent}
> только не пойму, как его задействовать..


my ( $row_min, $row_max ) = $worksheet->row_range();
my ( $col_min, $col_max ) = $worksheet->col_range();
for (my $y=$row_min; $y<= $row_max; $y++) {
   for (my $x=$col_min; $x<= $col_max; $x++) {
       my $cell = $worksheet->get_cell($y, $x);
       my $format = $cell->get_format();
       print STDERR $format->{Indent},"\n";
   }
}

Как-нибудь вот так.


"спарсить сложный excel"
Отправлено greenwar , 04-Окт-13 20:47 
вот рабочий вариант:
#!/usr/bin/perl -w

use strict;
use Spreadsheet::ParseExcel;

my $parser   = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('Book1.xls');

if ( !defined $workbook ) {
    die $parser->error(), ".\n";
}

for my $worksheet ( $workbook->worksheets() ) {

    my ( $row_min, $row_max ) = $worksheet->row_range();
    my ( $col_min, $col_max ) = $worksheet->col_range();

    for my $row ( $row_min .. $row_max ) {
        for my $col ( $col_min .. $col_max ) {

            my $cell = $worksheet->get_cell( $row, $col );
            next unless $cell;

            my $format = $cell->get_format();

            print "Row, Col    = ($row, $col)\n";
            print "Value       = ", $cell->value(), "\n";
            print "Indent      = ", $format->{Indent}, "\n";

            print "\n";
        }
    }
}
__END__


"спарсить сложный excel"
Отправлено mustang92 , 18-Дек-13 19:06 
>[оверквотинг удален]
> print "Value       = ", $cell->value(),
> "\n";
>            
> print "Indent      = ", $format->{Indent}, "\n";
>            
> print "\n";
>         }
>     }
> }
> __END__

что-то не работает