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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> excel файлы на сайт, конвертирование чтоли!!! 
V
    Опции темы
ежик
  Дата 6.11.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 19.9.2005
Где: Южно-Сахалинск

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



Задача такая:

на сай надо выложить данные которые хранятся в MS excel 
эти данные выкладываются автоматически

пробовал написать сценарий:
Код

#!/usr/bin/perl

use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;
my $oExcel = new Spreadsheet::ParseExcel;
my $oFmtR = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map => "CP1251");
my $oBook = $oExcel->Parse('Excel/dokladn.xls',$oFmtR);
my($iR, $iC, $oWkS, $oWkC);
for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
  $oWkS = $oBook->{Worksheet}[$iSheet];
  $merged_r = [];
  $merged_c = [];
  $not_print = [];
  foreach my $line (@{$oWkS->{'MergedArea'}}) {
   $r_s=$line->[0];
   $c_s=$line->[1];
   $r_e=$line->[2];
   $c_e=$line->[3];
   $i=1;
   foreach (1..100) {
   if($r_e > $r_s){
    if ($r_s+$i > $r_e) {
    last;
    }
   }
   if ($c_e > $c_s) {
    if ($c_s+$i > $c_e) {
    last;
    }
   }
   $row_plus= $r_e > $r_s ? $r_s+$i : $r_s;
   $col_plus= $c_e > $c_s ? $c_s+$i : $c_s;
   push(@$not_print,[$row_plus,$col_plus]);
   undef($row_plus);
   undef($col_plus);
   $i++;
   }
   if ($r_e > $r_s) {
   push(@$merged_r,[$r_s,$c_s,($r_e-$r_s+1)]);
   }
   if ($c_e > $c_s) {
   push(@$merged_c,[$r_s,$c_s,($c_e-$c_s+1)]);
   }

  }

  $text .= qq~<table cellspacing="0" cellpadding="0" border="0">\n~;
  for(my $iR = $oWkS->{MinRow}; defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
   $text .= qq~<tr>\n~;
   for(my $iC = $oWkS->{MinCol}; defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {

    foreach my $retr (@$merged_r) {
     $rowspan = ' rowspan="'.$retr->[2].'"' if ($iR == $retr->[0] && $iC == $retr->[1]);
    }
    foreach my $retc (@$merged_c) {
     $colspan = ' colspan="'.$retc->[2].'"' if ($iR == $retc->[0] && $iC == $retc->[1]);
    }
    foreach my $retn (@$not_print) {
     $nou = 1 if ($iR == $retn->[0] && $iC == $retn->[1]);
    }
    unless (defined($nou)){
     $oWkC = $oWkS->{Cells}[$iR][$iC];

     if(defined($oWkC)){
     my $oFont = $oWkC->{Format}->{Font};
     $text .= qq~<td class="exel~.$iSheet.$iR.$iC.qq~"~.(defined($rowspan) ? $rowspan : '').(defined($colspan) ? $colspan : '').qq~>\n~;
     $css .= '.exel'.$iSheet.$iR.$iC.qq~{\n
text-align: ~.($oWkC->{Format}->{AlignH} == 0 ? 'Left': $oWkC->{Format}->{AlignH} == 1 ? 'Left': $oWkC->{Format}->{AlignH} == 2 ? 'Center': $oWkC->{Format}->{AlignH} == 3 ? 'right':'left').qq~;
vertical-align: ~.($oWkC->{Format}->{AlignV} == 0 ? 'top': $oWkC->{Format}->{AlignV} == 1 ? 'middle': $oWkC->{Format}->{AlignV} == 2 ? 'bottom': $oWkC->{Format}->{AlignV} == 3 ? 'bottom':'bottom').qq~;
font-size: ~.$oFont->{Height}.qq~pt;
~.($oFont->{Italic} == 1 ? "font-style: italic;\n": '').($oFont->{Bold} == 1 ? "font-weight: bold;\n": '').qq~
color: #~.Spreadsheet::ParseExcel->ColorIdxToRGB($oFont->{Color}).qq~;
background-color: #~.Spreadsheet::ParseExcel->ColorIdxToRGB($oWkC->{Format}->{Fill}->[1]).qq~;
border-top: ~.$oWkC->{Format}->{BdrStyle}->[0].qq~px solid #000;
border-right: ~.$oWkC->{Format}->{BdrStyle}->[1].qq~px solid #000;
border-bottom: ~.$oWkC->{Format}->{BdrStyle}->[2].qq~px solid #000;
border-left: ~.$oWkC->{Format}->{BdrStyle}->[3].qq~px solid #000;
~.($oWkC->{Format}->{Hidden} == 1 ? "display: none;\n": '').qq~}\n~;
     $text .= "".(defined($oWkC->Value)? $oWkC->Value: '')."\n"; # Formatted Value
     $text .= qq~</td>\n~;
     }
     else {
     $text .= qq~<td>\n</td>\n~;
     }
    }
    undef($nou);
    undef($colspan);
    undef($rowspan);
   }
   $text .= qq~</tr>\n~;
  }
  $text .= qq~</table>\n~;

 }
open (my $OUT,">big.thml");
print $OUT qq~<style media="screen" type="text/css">\n~.$css."</style>\n";
print $OUT $text;
close($OUT);


получается но конечные файлы получаются большие

может ктонить подскажет в какой формат перегнать файлы чтобы можнобыло выкладывать на сайт
просто выкладывать на сайт сами excel файлы немогу
--------------------
Прежде чем задать вопрос прочитай инфу!!!
PM MAIL ICQ   Вверх
Grig
Дата 7.11.2006, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробуй в формат CSV. Там разделитель - точка с запятой.
А потом перегоняй файл в массив..


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 19.9.2005
Где: Южно-Сахалинск

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



а как по поводу Русских букв
--------------------
Прежде чем задать вопрос прочитай инфу!!!
PM MAIL ICQ   Вверх
Grig
Дата 9.11.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А с русскими буквами - порядок.
У тебя какой оффис стоит?


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 19.9.2005
Где: Южно-Сахалинск

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



где делают 2000 exel
а у меня 2003
--------------------
Прежде чем задать вопрос прочитай инфу!!!
PM MAIL ICQ   Вверх
Usya
Дата 9.11.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Попробуй в формат CSV. Там разделитель - точка с запятой.

Не все так просто. Grig, а как ты поступишь с объединенными ячейками?
Цитата

может ктонить подскажет в какой формат перегнать файлы чтобы можнобыло выкладывать на сайт

Формат можешь сам придумать на базе CSV (идея, которую предложил, Grig неплохая), но ты сам реши, что стоит и как оставлять данные в файлах, а что можно и не учитывать при конвертировании...
Цитата

а как по поводу Русских букв 

ежик, с русскими буквами при конвертировании, если установлены соответствующие модули (в твоем коде они учтены), я проблем не встречал (по крайней мере сейчас не помню). Может быть другая проблема - с форматированными данными...

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


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

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


 




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


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

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