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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spreadsheet::ParseExcel::SaveParser, на винде работает на линухе нет 
:(
    Опции темы
des00
Дата 22.9.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Простой до офигивания пример.
Открываю экселевский файл пишу новый текст в произвольную ячейку, сохраняю под другим именем.

На винде этот код работает без проблем (немного валит в консоль шлака)
Use of uninitialized value in division (/) at C:/usr/site/lib/Spreadsheet/ParseE
xcel/SaveParser.pm line 148.
Use of uninitialized value in division (/) at C:/usr/site/lib/Spreadsheet/ParseE
xcel/SaveParser.pm line 149.
Use of uninitialized value in division (/) at C:/usr/site/lib/Spreadsheet/ParseE
xcel/SaveParser.pm line 150.
Use of uninitialized value in division (/) at C:/usr/site/lib/Spreadsheet/ParseE
xcel/SaveParser.pm line 151.

но с этим я потом разберусь.. главное что файл создает и текст вставляет..
на линухе же нифига.. говорит что типа забыл я модуль определить и пр.. умничает чёто кроче smile

Can't locate object method "Parse" via package "Spreadsheet::ParseExcel::SaveParser::Workbook" (perhaps you forgot to load "Spreadsheet::ParseExcel::SaveParser::Workbook"?) at /tmp/excel.pl line 7.




Код

#!/usr/bin/perl -w

use strict;
use Spreadsheet::ParseExcel::SaveParser;
use Encode qw(decode);

my $oBook = Spreadsheet::ParseExcel::SaveParser::Workbook->Parse('d:/file.xls');

my $oWs = $oBook->{Worksheet}[0];

$oWs->AddCell(9, 2, decode('utf-8', 'New Cell НОВЫЙ ТЕКСТ'));
$oBook->SaveAs('d:/est.xls');



Подскажите, что не так?
PM MAIL   Вверх
nitr
Дата 23.9.2008, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Это вам поможет:
Код

use Spreadsheet::ParseExcel::SaveParser;
use Spreadsheet::ParseExcel::SaveParser::Workbook;
use Spreadsheet::ParseExcel::SaveParser::Worksheet;


Как бы странно это не звучало smile но модуль реально так себя ведет, есть подозрения на некие кривости в нём ;)
Я думаю многие знают ответ ;)


--------------------
PM   Вверх
des00
Дата 23.9.2008, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Блин))) реально...

я прежде чем задать вопрос попрбовал вот так
Код

use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::SaveParser;
use Spreadsheet::ParseExcel::SaveParser::Workbook;


но потом одумался, ибо бред.. и пошел на форум.. а оставалось лишь одну строку дописать smile
PM MAIL   Вверх
des00
Дата 23.9.2008, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а как в S:PE объеденить ячейки?

я пытался так..

Код

my $oBook = Spreadsheet::ParseExcel::SaveParser::Workbook->Parse($xls.'docs.xls');
my $oWs = $oBook->{Worksheet}[0];
$oWs->{MergedArea} = [6,0,6,25];

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


Эксперт
****


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

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



des00, ну это уже читать доку ;)
а вот бредом является, то что эти модули используются в SaveParser.pm, но нигде там "не подгружаются" smile

Добавлено через 1 минуту и 8 секунд
А может эта задумка такая? Кто сможет объяснить? smile


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


Новичок



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

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



да читал я доку.. день уже читаю)) дока то какаято неподробная.. 
PM MAIL   Вверх
nitr
Дата 23.9.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



des00, дам подсказку - объединение это свойство ячейки/ячеек.

Добавлено через 29 секунд
А потому что проект - alpha


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


Новичок



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

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



Код

my $oBook = Spreadsheet::ParseExcel::SaveParser::Workbook->Parse($xls.'docs.xls');
my $oWs = $oBook->{Worksheet}[0];
$oWS->{Cells}[$iR][$iC] ->{Merged} = 1


оно?

А в каком видел задается  [$iR][$iC] ?

Судя по всему это нето.. вот в WriteExcel есть метод merge_range, там все ясно.. а тут нифига блин

дай примерчик,а ? ))

Это сообщение отредактировал(а) des00 - 23.9.2008, 13:45
PM MAIL   Вверх
nitr
Дата 23.9.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



des00, я не нашел у него нормального описания методов smile да и сами методы...
Модуль явно не дописан, или они должны документировать методы (ну и написать их)

Вот вам поможет...
Код

sub MergeArea {
    my $oWs = shift;
    my ($sR, $sC, $eR, $eC) = (@_);
    
    for(my $i = $sR-1; $i<=$eR-1; $i++) {
        for(my $j = $sC-1; $j<=$eC-1; $j++) {
            $oWs->{Cells}[$i][$j]->{Merged} = 1 if $oWs->{Cells}[$i][$j];
        }
    }
}

Только доработайте smile

Использовать как
Код

my $oBook = Spreadsheet::ParseExcel::SaveParser::Workbook->Parse($xls.'docs.xls');
my $oWs = $oBook->{Worksheet}[0];
MergeArea($oWs, 6, 1, 6, 25);

Т.е. в Экселе это строка №6 столбец №1 по строку №6 по строку №25.

ну и конечно протестировать стоит smile

Это сообщение отредактировал(а) nitr - 23.9.2008, 14:17


--------------------
PM   Вверх
des00
Дата 23.9.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, завтра обязательно испытаю..
Ежели пойдет что не так, ждите снова в той же теме в тот же час  smile 
PM MAIL   Вверх
des00
Дата 24.9.2008, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



эксперименты ни к чему не привели :(

Код

my $oBook = Spreadsheet::ParseExcel::SaveParser::Workbook->Parse($xls.'docs.xls');
my $oWs = $oBook->{Worksheet}[0];
MergeArea($oWs, 6, 1, 6, 25);

Undefined subroutine &main::MergeArea 

Код

my $oBook = Spreadsheet::ParseExcel::SaveParser::Workbook->Parse($xls.'docs.xls');
my $oWs = $oBook->{Worksheet}[0];
$oBook->{Worksheet}[0]->MergeArea($oWs, 6, 1, 6, 25);

Can't locate object method "MergeArea" via package "Spreadsheet::ParseExcel::SaveParser::Worksheet"

Код

my $oBook = Spreadsheet::ParseExcel::SaveParser::Workbook->Parse($xls.'docs.xls');
my $oWs = $oBook->{Worksheet}[0];
$oWs->MergeArea($oWs, 6, 1, 6, 25);

Can't locate object method "MergeArea" via package "Spreadsheet::ParseExcel::SaveParser::Worksheet"

Код

my $oBook = Spreadsheet::ParseExcel::SaveParser::Workbook->Parse($xls.'docs.xls');
my $oWs = $oBook->{Worksheet}[0];
$oWs->{Cells}->MergeArea($oWs, 6, 1, 6, 25);

Can't call method "MergeArea" on unblessed reference


p.s. попробовал вариации с MergeArea и MergedArea

Это сообщение отредактировал(а) des00 - 24.9.2008, 06:51
PM MAIL   Вверх
des00
Дата 24.9.2008, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот нашел, что модуль оказывается использует какойто древний метод объединения вместо нужного..

http://www.perlmonks.org/index.pl?node_id=666704

Теперь, прошу помощи, как это решение применить к моему случаю.
PM MAIL   Вверх
shamber
Дата 24.9.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

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



des00, а вы в main добавляли 
Код

my $oBook = Spreadsheet::ParseExcel::SaveParser::Workbook->Parse($xls.'docs.xls');
my $oWs = $oBook->{Worksheet}[0];
MergeArea($oWs, 6, 1, 6, 25);

sub MergeArea {
    my $oWs = shift;
    my ($sR, $sC, $eR, $eC) = (@_);
    
    for(my $i = $sR-1; $i<=$eR-1; $i++) {
        for(my $j = $sC-1; $j<=$eC-1; $j++) {
            $oWs->{Cells}[$i][$j]->{Merged} = 1 if $oWs->{Cells}[$i][$j];
        }
    }
}


PM MAIL Jabber   Вверх
des00
Дата 24.9.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Теперь все добавил, ошибок нет, но и объединения не происходит.
PM MAIL   Вверх
nitr
Дата 24.9.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



des00, тогда приведите (лучше вложите) вывод вот дампа...

Код

...
use Data::Dumper 'Dumper'

...
MergeArea...;
print Dumper($oWs);

запустите примерно так perl script.pl > log.txt. Потом выложите сюда этот log.txt.

У меня всё сработало и нормально объединило. Что вам ещё посоветовать: так это самому написать "обложку" для Spreadsheet::ParseExcel и Spreadsheet::WriteExcel.

P.S.: Лично я бы не использовал модуль Spreadsheet::ParseExcel::SaveParser. Можно взять за основу некоторые его "моменты" для своего модуля.

Это сообщение отредактировал(а) nitr - 24.9.2008, 14:35


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


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

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


 




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


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

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