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

Поиск:

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


Шустрый
*


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

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



И снова здравствуйте! smile
С помощью Win32::OLE сформировал *.xls файлик. Но он никак не отформатирован и соответственно пользователю не удобно с ним работать и приходится форматировать в ручную.
Можно ли средствами Win32::OLE изменить формат ячейки? Если да, то как?

Нужно:
- выделить текст жирным;
- построить табличку или обвести ячейку в рамку;
- объединить несколько ячеек в одну.

Читал про OLE, но либо я не внимательный, либо там действительно нет такого.

Ещё нашёл Spreadsheet::Wright, но там кажется только работа с текстом.

Подскажите, что можно использовать и по возможности синтаксис команд.



Это сообщение отредактировал(а) Grost - 3.2.2011, 15:11
PM MAIL ICQ   Вверх
Ramirez
Дата 3.2.2011, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

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



ищите описания Excel OLE. не важно на чем. на VBS например. все методы теже. 
еще проще: делате нужное действие в Excel записывая макрос VBA. Смотрим макрос, переписываем в перл.



Код

#perl

use strict;
use Win32::OLE;

my $file = 'c:\test.xls';
my $ex =  Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit');

$ex->Workbooks->Open($file) or die "oops\n";
my $sh = $ex->Worksheets(1);
$sh->Activate();       
$sh->Range("c3")->{Value} = localtime;

$sh->Range('c3')->Interior->{ColorIndex} = 27;
$sh->Range('c3')->Font->{FontStyle} = 'Bold';
$sh->Range('c3')->{HorizontalAlignment} = 'xlHAlignCenter';


$ex->SaveAs($file);

PM ICQ   Вверх
Grost
Дата 3.2.2011, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо, теперь есть где капать)
PM MAIL ICQ   Вверх
Grost
Дата 3.2.2011, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Так, чтобы тема зря не существовала, наполню её информацией smile
Звиняйте если где-то и что-то назову не корректно smile

Создаём объект, рабочую книгу:
Код

$ex = Win32::OLE->new('Excel.Application', 'Quit') or die "oops\n";
$book = $ex->Workbooks->Add; 
$sheet = $book->Worksheets(1);


Таким образом можно изменить ширину и высоту:
Код

$sheet->Columns(1)->{ColumnWidth} = 3.86; 
$sheet->Rows(1)->{RowHeight}=10;


Формат данных в ячейке:
Код

#числовой
$sheet->Range("F17:M17")->{NumberFormat} = '# ##0.00'; #ещё можно указать так-> '#,##0.00'


Работа со шрифтом:
Код

$sheet->Range("B16:M16")->Font->{FontStyle} = 'Bold';
$sheet->Range("B16:M16")->Font->{Size} = 9;
$sheet->Range("B16:M16")->Font->{Name} = 'Times New Roman';


Объединение ячеек:
Код

$sheet->Range("K10:M10")->{Merge};

Может получать 'true' и 'false':
Код

#В этом примере объединяются только строки
$sheet->Range("K10:M11")->{Merge}='True';
#В этом примере объединяются в одну большую ячейку
$sheet->Range("K10:M11")->{Merge}='False';


У меня проблема сейчас только с обводкой ячейки и с выравниванием текста. Выравнивание писал как указано выше, но его тупо не хавает.
Обводку ячейки пишу так:
Код

$sheet->Range("B16:M16")->BorderAround('xlContinuous','xlThick','xlColorIndexAutomatic');

Так тоже ничего не строит:
Код

$sheet->Range("B16:M16")->Borders->{LineStyle}='xlContinuous';
$sheet->Range("B16:M16")->Borders->{BorderWeight}='xlMedium';
$sheet->Range("B16:M16")->Borders->{ColorIndex}='xlColorIndexAutomatic';


У меня есть подозрение в приставке xl.. Есть у кого идеи на счёт этого? Или чего ещё посмотреть?
______________
О BorderAround на MDSN



Это сообщение отредактировал(а) Grost - 3.2.2011, 22:53
PM MAIL ICQ   Вверх
alezzz
Дата 3.2.2011, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



B2:C5 обводится толстой линией:

Код

my @edges = qw (xlEdgeBottom xlEdgeLeft xlEdgeRight xlEdgeTop); # xlInsideHorizontal xlInsideVertical - для обводки внутри диапазона
my $range = "b2:c5"; 

foreach my $edge (@edges){
  with (my $Borders = $Sheet->Range($range)->Borders(eval($edge)), 
        LineStyle =>xlContinuous,
        Weight => xlMedium ,
        ColorIndex => xlColorIndexAutomatic);
}


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

Выравнивание:
Код

$Sheet->Range($range)->{HorizontalAlignment} = xlHAlignCenter; # без кавычек


Это сообщение отредактировал(а) alezzz - 3.2.2011, 22:54
PM MAIL   Вверх
Grost
Дата 4.2.2011, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Что-то я туплю..

Код

#!/usr/bin/perl -w
use strict;
use Win32::OLE;

Код

Bareword "xlHAlignCenter" not allowed while "strict subs" in use at C:\.... line 151

строка 151:
Код

$sheet->Range("B16:M16")->{HorizontalAlignment} = xlHAlignCenter;

Если пишу в кавычках, то скрипт обрабатывается, но выравнивания нету.

И так же ругается на 
Код

foreach my $edge (@edges){
#следующая строка 153
  with (my $Borders = $sheet->Range("B16:M16")->Borders(eval($edge)), LineStyle => xlContinuous,Weight => xlMedium ,ColorIndex => xlColorIndexAutomatic);
}

Код

Bareword "xlContinuous" not allowed while "strict subs" in use at C:\... line 153
Bareword "xlMedium" not allowed while "strict subs" in use at C:\... line 153
Bareword "xlColorIndexAutomatic" not allowed while "strict subs" in use at C:\... line 153
Execution of C:\...\UAPO_v0.5.pl aborted due to compilation errors.


Это сообщение отредактировал(а) Grost - 4.2.2011, 13:20
PM MAIL ICQ   Вверх
alezzz
Дата 4.2.2011, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



Сорри, забыл это указать:
Код

use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';
use Win32::OLE::Variant;
use Win32::OLE::NLS qw(:LOCALE :DATE);


А вообще смотри тут
PM MAIL   Вверх
Grost
Дата 4.2.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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


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

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


 




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


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

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