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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг exel, непонятная ошибка 
:(
    Опции темы
Digo
Дата 19.5.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Доброго времени суток!
Столкнулся с проблемой - есть скрипт который переводит таблицу exel в sql. Собственно выбираю данные из exel с помощью perl а далее обрабатываю все php.
Так вот проблема на первом этапе(привожу код) при обработке вылазиет ошибка
 Software error:
Can't call method "Value" on an undefined value at parser.pl line 30.  (строка  $cell = $oWkC->Value;  ) Причем это происходит только с новыми прайсами(сохраненными в exel 2002), старые xls 5.0 работают замечательно, я уже пытался сохранять в том же формате из под нового exel та же беда... Кто знает в чем может быть проблема?

сам код...

Код

use Spreadsheet::ParseExcel::FmtUnicode;
use File::Basename;

print "Content-type: text/html\n\n";

$dirname = $ENV{"DOCUMENT_ROOT"}."/data/newdata";

$oExcel = new Spreadsheet::ParseExcel;
$oFmtJ  = Spreadsheet::ParseExcel::FmtUnicode->new (Unicode_Map => 'CP1251');
$oBook  = $oExcel->Parse($dirname."/price.xls", $oFmtJ);

$oWkS = $oBook->{Worksheet}[0]; # объект первого листа

$iRmin = $oWkS->{MinRow};
$iRmax = $oWkS->{MaxRow};

$iCmin = $oWkS->{MinCol};
$iCmax = $oWkS->{MaxCol};

# цикл по строкам таблицы
for ($iR = $iRmin; $iR < $iRmax; $iR++) {
    for ($iC = $iCmin; $iC < $iCmax; $iC++) {
        $oWkC = $oWkS->{Cells}[$iR][$iC]; #выбираем ячейку
        $cell = $oWkC->Value;

          $cell =~ s/[\n,\r]*//g;
        print $cell." \n";
    }
    print "\n";
}
  
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс )
PM MAIL WWW ICQ   Вверх
Digo
Дата 19.5.2006, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Похду разобрался - в новом экселе  часть полей пустые и не определены что приводит к ошибке... кто знает как это обработать? не охота забивать все пустые поля чем-тоsmile??? 
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс )
PM MAIL WWW ICQ   Вверх
nitr
Дата 20.5.2006, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



просто if(defined(переменная))
пример:
Код

...
$cell = $oWkC->Value if defined $oWkC->Value;
...
 


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


Бывалый
*


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

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



Спасибо за ответ! Я только не пойму как к своему коду приспособить,
пробовал  вместо  $cell = $oWkC->Value; 
ставить
$cell = $oWkC->Value if defined $oWkC->Value;
не к какому эфекту так и не привело при обработке первого пустого поля выходит ошибка неопределенная переменная...
пробовал и так
if (defined $oWkC->Value){
           $cell = $oWkC->Value;
           $cell =~ s/[\n,\r]*//g;
           print $cell." \n";
       }
все так же не хочет отбрасывать пустые поля... Кто знает как решить проблему? 
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс )
PM MAIL WWW ICQ   Вверх
Usya
Дата 21.5.2006, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ошибка скорее всего в следующем - обращение идет к $oWkC->Value, без проверки $oWkC.

Попробуй так:
Код

if($oWkC) 
 {
   $cell = $oWkC->Value;
   $cell =~ s/[\n,\r]*//g;
   print $cell." \n";
 }

 smile 

Кстати, посмотри файлы с примерами.
Они и у тебя должны быть на компе (копируются при установке соответствующих модулей).
Там много интересных моментов. 
--------------------
Я не волшебник, я только учусь...
PM MAIL   Вверх
nitr
Дата 22.5.2006, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Digo @  19.5.2006,  23:06 Найти цитируемый пост)
$iRmin = $oWkS->{MinRow};
$iRmax = $oWkS->{MaxRow};
$iCmin = $oWkS->{MinCol};
$iCmax = $oWkS->{MaxCol};

на это тоже проверка нужна smile
как Usya сказала смотри sample/sample.pl smile 


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


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

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


 




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


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

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